Example #1
0
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])
Example #5
0
                    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]
Example #6
0
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)

Example #8
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)
Example #9
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()
Example #10
0
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(