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)),
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])
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] stack_depth = 0
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) def eval_video(video): global net
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_train = parse_directory('../data/iso_train_depth/', rgb_p, flow_x_p, flow_y_p) f_info_test = parse_directory('../data/iso_test_depth/', rgb_p, flow_x_p, flow_y_p) print 'writting list files for training/testing' out_path = '/data4/jiali/good-practice/data/' # got only one split train_lists = build_gesture_train(split_tp[0][0], f_info_train, shuffle) test_lists = build_gesture_test(split_tp[0][1], f_info_test, shuffle) open(os.path.join(out_path, '{}_depth_train_split_{}.txt'.format(dataset, 1)), 'w').writelines(train_lists[0]) open(os.path.join(out_path, '{}_depth_val_split_{}.txt'.format(dataset, 1)), 'w').writelines(test_lists[0]) open(
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)
type=str, help='output directory path to hold the splits file') parser.add_argument('--num_split', type=int, default=3) parser.add_argument('--shuffle', action='store_true', default=False) args = parser.parse_args() dataset = args.dataset frame_path = args.frame_path out_path = args.out_list_path num_split = args.num_split shuffle = args.shuffle # operation print('processing dataset {}'.format(dataset)) split_tp = parse_split_file(dataset) f_info = parse_directory(frame_path) print('writing list files for training/testing') for i in range(max(num_split, len(split_tp))): lists = build_split_list(split_tp, f_info, i, shuffle) #print(lists[0]) open( os.path.join(out_path, '{}_rgb_train_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[0]) open( os.path.join(out_path, '{}_rgb_val_split_{}.txt'.format(dataset, i + 1)), 'w').writelines(lists[1])
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_train = parse_directory('../data/HuDaTrain', rgb_p, flow_x_p, flow_y_p) f_info_test = parse_directory('../data/HuDaTest/', rgb_p, flow_x_p, flow_y_p) print 'writting list files for training/testing' out_path = '/data4/jiali/good-practice/data/' # got only one split train_lists = build_gesture_train(split_tp[0][0], f_info_train, shuffle) test_lists = build_gesture_test(split_tp[0][1], f_info_test, shuffle) # open(os.path.join(out_path, '{}_rgb_train_split_{}.txt'.format(dataset, 1)), 'w').writelines(train_lists[0]) # open(os.path.join(out_path, '{}_rgb_val_split_{}.txt'.format(dataset, 1)), 'w').writelines(test_lists[0]) open( os.path.join(out_path, '{}_rgb_flow_train_split_{}.txt'.format(dataset, 1)), 'w').writelines(train_lists[1])
}, { 'modality': 'flow', 'net_proto': args.net_proto_flow, 'net_weights': args.net_weights_flow, 'cnt_indexer': 2, 'stack_depth': 5 }] # Loop over each video in args.frame_path if frame_path[-1] != '/': frame_path = frame_path + '/' videos = glob.glob(frame_path + '*/') for video_path in videos: # build necessary information about video names, directories of frames, and number of rgb and flow files #f_info contains 3 dictionaries: [ {vid:path}, {vid:rgb_counts}, {vid:flow_counts} ] f_info = parse_directory(video_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) eval_clip_list = list(f_info[0]) eval_clip_list = sorted( eval_clip_list, key=lambda clip: int(clip[-4:])) # put clips in order num_videos = len(eval_clip_list) # extract the desired caffe net features and store in files if args.num_worker > 1: for s in streamCNN: pool = multiprocessing.Pool(args.num_worker, initializer=build_net, initargs=(s['net_proto'], s['net_weights'])) s['clip_features'] = pool.map(eval_clip, eval_clip_list) pool.close() pool.join()
modality = args.modality gpu_list = range(args.num_gpu) num_worker = min(args.num_worker, args.num_gpu) # default values data_dir = '/generated/data' frame_dir = '/generated/frames' num_frame_per_video = 25 net_weights = '/generated/models/' + args.model net_proto = '/tsn_caffe/models/tsn_{0}_deploy.prototxt'.format(modality) rgb_prefix = 'img_' flow_x_prefix = 'flow_x_' flow_y_prefix = 'flow_y_' f_info = parse_directory(frame_dir, 'img_', 'flow_x', 'flow_y') eval_video_list = [] with open('/generated/data/{0}_val_split.txt'.format(modality)) as f: for l in f.readlines(): # /folder/to/frame_folder num_images class -> (frame_folder, class) tmp = l.split('/')[-1].split(' ') eval_video_list.append((tmp[0], tmp[2])) result_name = 'scores_{0}'.format(args.model) score_name = 'fc-action' def build_net(): global net my_id = multiprocessing.current_process()._identity[0] \ if num_worker > 1 else 1 if gpu_list is None:
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()
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) #指向视屏名称txt列表 [([trainlist1], [testlist1]),([trainlist2], [testlist2]),([trainlist3], [testlist3])] f_info = parse_directory( args.frame_path, args.rgb_prefix, args.flow_x_prefix, args.flow_y_prefix) #return dir_dict, rgb_counts, flow_counts gpu_list = args.gpus #eval_video_list = split_tp[args.split - 1][1] #用于验证的视频名称 #eval_video_list = [("video", 0),] #指定测试video path = args.frame_path eval_video_list = [] for root, dirs, files in os.walk(path): for name in dirs: #print(os.path.join(root, name)) eval_video_list.append((name, 0)) print 'eval_video_list:' print eval_video_list #[('v_ApplyEyeMakeup_g01_c01', 0), ('v_ApplyEyeMakeup_g01_c02', 0), ...名称和标签