print args sys.path.append(args.parrots_path) from pyActionRecog.action_parrots import ParrotsNet def build_net(): global net net = ParrotsNet(args.parrots_session) build_net() # build neccessary information print args.dataset split_tp = parse_split_file(args.dataset) f_info = parse_directory(args.frame_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) eval_video_list = split_tp[args.split - 1][1] score_name = 'fc_action' def eval_video(video): global net label = video[1] vid = video[0] video_frame_path = f_info[0][vid] frame_cnt = f_info[1][vid]
parser.add_argument('--shuffle', action='store_true', default=False) args = parser.parse_args() dataset = args.dataset frame_path = args.frame_path rgb_p = args.rgb_prefix flow_x_p = args.flow_x_prefix flow_y_p = args.flow_y_prefix num_split = args.num_split out_path = args.out_list_path shuffle = args.shuffle # operation print 'processing dataset {}'.format(dataset) split_tp = parse_split_file(dataset) f_info = parse_directory(frame_path, rgb_p, flow_x_p, flow_y_p) print 'writing list files for training/testing' for i in xrange(max(num_split, len(split_tp))): lists = build_split_list(split_tp, f_info, i, shuffle) open( os.path.join(out_path, '{}_rgb_train_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[0][0]) open( os.path.join(out_path, '{}_rgb_val_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[0][1]) open( os.path.join(out_path,
parser.add_argument('--num_frame_per_video', type=int, default=25, help="prefix of y direction flow images") parser.add_argument('--save_scores', type=str, default=None, help='the filename to save the scores in') parser.add_argument('--num_worker', type=int, default=1) parser.add_argument("--caffe_path", type=str, default='./lib/caffe-action/', help='path to the caffe toolbox') parser.add_argument("--gpus", type=int, nargs='+', default=None, help='specify list of gpu to use') args = parser.parse_args() print args sys.path.append(os.path.join(args.caffe_path, 'python')) from pyActionRecog.action_caffe import CaffeNet # build neccessary information print args.dataset split_tp = parse_split_file(args.dataset) # __init__.py函数中 output:spare_ucf_splits f_info = parse_directory(args.frame_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) gpu_list = args.gpus eval_video_list = split_tp[args.split - 1][1] score_name = 'fc-action' def build_net(): global net my_id = multiprocessing.current_process()._identity[0] \ if args.num_worker > 1 else 1
parser.add_argument('--flow_x_prefix', type=str, help="prefix of x direction flow images", default='flow_x') parser.add_argument('--flow_y_prefix', type=str, help="prefix of y direction flow images", default='flow_y') parser.add_argument('--num_split', type=int, default=3) parser.add_argument('--out_list_path', type=str, default='data/') parser.add_argument('--shuffle', action='store_true', default=False) args = parser.parse_args() dataset = args.dataset frame_path = args.frame_path rgb_p = args.rgb_prefix flow_x_p = args.flow_x_prefix flow_y_p = args.flow_y_prefix num_split = args.num_split out_path = args.out_list_path shuffle = args.shuffle # operation print('processing dataset {}'.format(dataset)) split_tp = parse_split_file(dataset) f_info = parse_directory(frame_path, rgb_p, flow_x_p, flow_y_p) print('writing list files for training/testing') for i in xrange(max(num_split, len(split_tp))): lists = build_split_list(split_tp, f_info, i, shuffle) open(os.path.join(out_path, '{}_rgb_train_split_{}.txt'.format(dataset, i+1)), 'w').writelines(lists[0][0]) open(os.path.join(out_path, '{}_rgb_val_split_{}.txt'.format(dataset, i+1)), 'w').writelines(lists[0][1]) open(os.path.join(out_path, '{}_flow_train_split_{}.txt'.format(dataset, i+1)), 'w').writelines(lists[1][0]) open(os.path.join(out_path, '{}_flow_val_split_{}.txt'.format(dataset, i+1)), 'w').writelines(lists[1][1])
help="prefix of RGB frames", default='img_') parser.add_argument('--flow_x_prefix', type=str, help="prefix of x direction flow images", default='flow_x_') parser.add_argument('--flow_y_prefix', type=str, help="prefix of y direction flow images", default='flow_y_') args = parser.parse_args() # obtain video file path f_info = parse_directory(args.frame_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) video_list = parse_split_file(args.data_set)[split][1] video_path = [f_info[0][video[0]] for video in video_list] score_npz_files = [np.load(x) for x in args.score_files] if args.score_weights is None: score_weights = [1] * len(score_npz_files) else: score_weights = args.score_weights if len(score_weights) != len(score_npz_files): raise ValueError( "Only {} weight specifed for a total of {} score files".format( len(score_weights), len(score_npz_files))) score_list = [x['scores'][:, 0] for x in score_npz_files] label_list = [x['labels'] for x in score_npz_files]
num_worker = 1 num_scores = 1 gpus = [1] print "dataset: ", dataset, "split: ", split, "modality: ", modality, "gpu: ", num_id # save_scores = 'hmdb51_split_1_rgb_tpp_delete_dropout_lr_0.0001_iter_112_cart_wheel' save_scores = 'hmdb51_split_1_flow_tpp_delete_dropout_lr_0.0001_iter_672_cart_wheel' print save_scores from pyActionRecog.action_caffe import CaffeNet # build neccessary information print dataset split_tp = parse_split_file('newhmdb51') f_info = parse_directory(frame_path, rgb_prefix, flow_x_prefix, flow_y_prefix) gpu_list = gpus eval_video_list = split_tp[split - 1][1] score_name = 'pool_fusion' global ii ii = 0 def build_net(): global net my_id = multiprocessing.current_process()._identity[0] \ if num_worker > 1 else 1
parser.add_argument('--flow_y_prefix', type=str, help="prefix of y direction flow images", default='flow_y_') parser.add_argument('--num_frame_per_video', type=int, default=25, help="prefix of y direction flow images") parser.add_argument('--save_scores', type=str, default=None, help='the filename to save the scores in') parser.add_argument('--num_worker', type=int, default=1) parser.add_argument("--caffe_path", type=str, default='./lib/caffe-action/', help='path to the caffe toolbox') args = parser.parse_args() print args sys.path.append(os.path.join(args.caffe_path, 'python')) from pyActionRecog.action_caffe import CaffeNet # build neccessary information print args.dataset split_tp = parse_split_file(args.dataset) f_info = parse_directory(args.frame_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) eval_video_list = split_tp[args.split - 1][1] score_name = 'fc-action' def build_net(): global net my_id = multiprocessing.current_process()._identity[0] if args.num_worker > 1 else 1 net = CaffeNet(args.net_proto, args.net_weights, my_id-1)
import os import cv2 import numpy as np from sklearn.metrics import confusion_matrix from pyActionRecog import parse_directory from pyActionRecog import parse_split_file from pyActionRecog.utils.video_funcs import default_aggregation_func from pyActionRecog.action_caffe import CaffeNet net = CaffeNet( './models/ixmas_branch/mp_in5b_crf_1/split1/rgb_deploy.prototxt', './models/ixmas_branch/mp_in5b_crf_1/caffemodel/rgb_split1_iter_7000.caffemodel', 0) split_tp = parse_split_file('ixmas_branch') f_info = parse_directory('../data/IXMAS/img_flow', 'img_', 'flow_x_', 'flow_y_') eval_video_list = split_tp[0][1] video = eval_video_list[0] vid = video[0] video_frame_path = f_info[0][vid] tick = 5 name = '{}{:05d}.jpg'.format('img_', tick) frame = cv2.imread(os.path.join(video_frame_path, name), cv2.IMREAD_COLOR)
def main(argss): def build_net(): global net my_id = multiprocessing.current_process()._identity[0] \ if args.num_worker > 1 else 1 if gpu_list is None: net = CaffeNet(args.net_proto, args.net_weights, my_id - 1) else: net = CaffeNet(args.net_proto, args.net_weights, gpu_list[my_id - 1]) def eval_video(video): global net label = video[1] vid = video[0] video_frame_path = f_info[0][vid] if args.modality == 'rgb': cnt_indexer = 1 elif args.modality == 'flow': cnt_indexer = 2 else: raise ValueError(args.modality) frame_cnt = f_info[cnt_indexer][vid] stack_depth = 0 if args.modality == 'rgb': stack_depth = 1 elif args.modality == 'flow': stack_depth = 5 step = (frame_cnt - stack_depth) / (args.num_frame_per_video - 1) if step > 0: frame_ticks = range( 1, min((2 + step * (args.num_frame_per_video - 1)), frame_cnt + 1), step) else: frame_ticks = [1] * args.num_frame_per_video assert (len(frame_ticks) == args.num_frame_per_video) frame_scores = [] for tick in frame_ticks: if args.modality == 'rgb': name = '{}{:05d}.jpg'.format(args.rgb_prefix, tick) frame = cv2.imread(os.path.join(video_frame_path, name), cv2.IMREAD_COLOR) try: scores = net.predict_single_frame([ frame, ], score_name, frame_size=(340, 256)) except: print(os.path.join(video_frame_path, name)) Image(os.path.join(video_frame_path, name)) frame_scores.append(scores) if args.modality == 'flow': frame_idx = [ min(frame_cnt, tick + offset) for offset in xrange(stack_depth) ] flow_stack = [] for idx in frame_idx: x_name = '{}{:05d}.jpg'.format(args.flow_x_prefix, idx) y_name = '{}{:05d}.jpg'.format(args.flow_y_prefix, idx) flow_stack.append( cv2.imread(os.path.join(video_frame_path, x_name), cv2.IMREAD_GRAYSCALE)) flow_stack.append( cv2.imread(os.path.join(video_frame_path, y_name), cv2.IMREAD_GRAYSCALE)) scores = net.predict_single_flow_stack(flow_stack, score_name, frame_size=(340, 256)) frame_scores.append(scores) print('video {} done'.format(vid)) sys.stdin.flush() return np.array(frame_scores), label global args rospy.init_node('image_converter', anonymous=True) ic = image_converter() #####A LOT of those parameters will not be neccessary anymore, with the whole splitting into rgb and flow and with my decision to remove some of the multiprocessing stuff. anyway, so far will keep the mess... sys.argv = ['','hmdb51','1','rgb','/temporal-segment-networks/my_of/','models/hmdb51/tsn_bn_inception_rgb_deploy.prototxt',\ 'models/hmdb51_split_1_tsn_rgb_reference_bn_inception.caffemodel' , '--num_worker', '1', '--save_scores', 'myscores_fre.txt'] parser = argparse.ArgumentParser() parser.add_argument('dataset', type=str, choices=['ucf101', 'hmdb51']) parser.add_argument('split', type=int, choices=[1, 2, 3], help='on which split to test the network') parser.add_argument('modality', type=str, choices=['rgb', 'flow']) parser.add_argument('frame_path', type=str, help="root directory holding the frames") parser.add_argument('net_proto', type=str) parser.add_argument('net_weights', type=str) parser.add_argument('--rgb_prefix', type=str, help="prefix of RGB frames", default='img_') parser.add_argument('--flow_x_prefix', type=str, help="prefix of x direction flow images", default='flow_x_') parser.add_argument('--flow_y_prefix', type=str, help="prefix of y direction flow images", default='flow_y_') parser.add_argument('--num_frame_per_video', type=int, default=25, help="prefix of y direction flow images") parser.add_argument('--save_scores', type=str, default=None, help='the filename to save the scores in') parser.add_argument('--num_worker', type=int, default=1) parser.add_argument("--caffe_path", type=str, default='./lib/caffe-action/', help='path to the caffe toolbox') parser.add_argument("--gpus", type=int, nargs='+', default=None, help='specify list of gpu to use') args = parser.parse_args() print(args) sys.path.append(os.path.join(args.caffe_path, 'python')) from pyActionRecog import parse_directory from pyActionRecog import parse_split_file from pyActionRecog.utils.video_funcs import default_aggregation_func from pyActionRecog.action_caffe import CaffeNet # build neccessary information print(args.dataset) split_tp = parse_split_file(args.dataset) f_info = parse_directory(args.frame_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) gpu_list = args.gpus eval_video_list = split_tp[args.split - 1][1] score_name = 'fc-action' if 1: eval_video_list = [('ua', 1)] print(eval_video_list[0]) print(f_info) if args.num_worker > 1: pool = multiprocessing.Pool(args.num_worker, initializer=build_net) video_scores_rgb = pool.map(eval_video, eval_video_list) else: build_net() video_scores_rgb = map(eval_video, eval_video_list) video_pred = [ np.argmax(default_aggregation_func(x[0])) for x in video_scores_rgb ] print(video_pred) try: rospy.spin() except KeyboardInterrupt: print("Shutting down") cv2.destroyAllWindows()
parser.add_argument('--shuffle', action='store_true', default=False) args = parser.parse_args() dataset = args.dataset frame_path = args.frame_path rgb_p = args.rgb_prefix flow_x_p = args.flow_x_prefix flow_y_p = args.flow_y_prefix num_split = args.num_split out_path = args.out_list_path shuffle = args.shuffle # operation print 'processing dataset {}'.format(dataset) split_tp = parse_split_file(dataset, frame_path) f_info = parse_directory(frame_path, rgb_p, flow_x_p, flow_y_p) print 'writing list files for training/testing' for i in xrange(max(num_split, len(split_tp))): lists = build_split_list(split_tp, f_info, i, shuffle) open( os.path.join(out_path, '{}_rgb_train_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[0][0]) open( os.path.join(out_path, '{}_rgb_val_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[0][1]) open( os.path.join(out_path,
parser.add_argument('--shuffle', action='store_true', default=False) args = parser.parse_args() dataset = args.dataset frame_path = args.frame_path rgb_p = args.rgb_prefix flow_x_p = args.flow_x_prefix flow_y_p = args.flow_y_prefix num_split = args.num_split out_path = args.out_list_path shuffle = args.shuffle # operation print 'processing dataset {}'.format(dataset) split_tp = parse_split_file( dataset) #split_tp = [([('10-l_1', 17),...],[],[])] f_info = parse_directory(frame_path, rgb_p, flow_x_p, flow_y_p) # f_info = 3 dicts #print type(split_tp),len(split_tp),split_tp print 'writing list files for training/testing' for i in xrange(max(num_split, len(split_tp))): print('i--------', i) lists = build_split_list(split_tp, f_info, i, shuffle) print( lists ) #return ((['/home/LX/hmdb_handup/Ger_teturnen_Pr_fung_-_G_S_somersault_f_cm_np1_le_med_2 77 42\n',...],[]), ([],[])) open( os.path.join(out_path, '{}_rgb_train_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[0][0]) open(