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])
Esempio n. 3
0
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
Esempio n. 5
0
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(
Esempio n. 6
0
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)
Esempio n. 7
0
                    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])
Esempio n. 9
0
}, {
    '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:
Esempio n. 11
0
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()
Esempio n. 12
0
                    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), ...名称和标签