def test(args): # augmentation setting trans = Transform(padding=[args.crop_pad_inf, args.crop_pad_sup], flip=args.flip, size=args.size, shift=args.shift, lcn=args.lcn) # test data test_fn = '%s/test_joints.csv' % args.datadir test_dl = np.array([l.strip() for l in open(test_fn).readlines()]) # load model if args.gpu >= 0: cuda.init(args.gpu) model = load_model(args) if args.gpu >= 0: model.to_gpu() else: model.to_cpu() # create output dir epoch = int(re.search(ur'epoch_([0-9]+)', args.param).groups()[0]) result_dir = os.path.dirname(args.param) out_dir = '%s/test_%d' % (result_dir, epoch) if not os.path.exists(out_dir): os.makedirs(out_dir) out_log = '%s.log' % out_dir fp = open(out_log, 'w') mean_error = 0.0 N = len(test_dl) for i in range(0, N, args.batchsize): lines = test_dl[i:i + args.batchsize] input_data, labels = load_data(trans, args, lines) if args.gpu >= 0: input_data = cuda.to_gpu(input_data.astype(np.float32)) labels = cuda.to_gpu(labels.astype(np.float32)) _, preds = model.forward(input_data, labels, train=False) if args.gpu >= 0: preds = cuda.to_cpu(preds.data) input_data = cuda.to_cpu(input_data) labels = cuda.to_cpu(labels) for n, line in enumerate(lines): img_fn = line.split(',')[args.fname_index] img = input_data[n].transpose((1, 2, 0)) pred = preds[n] img_pred, pred = trans.revert(img, pred) # turn label data into image coordinates label = labels[n] img_label, label = trans.revert(img, label) # calc mean_error error = np.linalg.norm(pred - label) / len(pred) mean_error += error # create pred, label tuples img_pred = np.array(img_pred.copy()) img_label = np.array(img_label.copy()) pred = [tuple(p) for p in pred] label = [tuple(p) for p in label] # all limbs img_label = draw_joints(img_label, label, args.draw_limb, args.text_scale) img_pred = draw_joints(img_pred, pred, args.draw_limb, args.text_scale) msg = '{:5}/{:5} {}\terror:{}\tmean_error:{}'.format( i + n, N, img_fn, error, mean_error / (i + n + 1)) print(msg, file=fp) print(msg) fn, ext = os.path.splitext(img_fn) tr_fn = '%s/%d-%d_%s_pred%s' % (out_dir, i, n, fn, ext) la_fn = '%s/%d-%d_%s_label%s' % (out_dir, i, n, fn, ext) cv.imwrite(tr_fn, img_pred) cv.imwrite(la_fn, img_label)
parser.add_argument('--lcn', type=bool, default=True, help='local contrast normalization for data' 'augmentation') parser.add_argument('--joint_num', type=int, default=7) parser.add_argument('--fname_index', type=int, default=0, help='the index of image file name in a csv line') args = parser.parse_args() print(args) # augmentation setting trans = Transform(args) # test data #test_fn = '%s/test_joints.csv' % args.data_dir #test_dl = np.array([l.strip() for l in open(test_fn).readlines()]) result_dir = '%s/test_trans/' % args.data_dir if not os.path.exists(result_dir): os.makedirs(result_dir) #for i, line in enumerate(test_dl): for i, line in enumerate(glob.glob('%s/images/*' % args.data_dir)): orig, input_data, label = load_data(trans, args, line) input_data = input_data.transpose((0, 2, 3, 1))[0].astype(np.float32) label = label.astype(np.float32).flatten() cv.imwrite('%s/%d_orig.jpg' % (result_dir, i), orig) img, label = trans.revert(input_data, label) label = [tuple(l) for l in label] pose = draw_joints(input_data.copy(), label) pose = np.array(pose.copy()) cv.imwrite('%s/%d_pose.jpg' % (result_dir, i), pose)
def video_test(args): # augmentation setting trans = Transform(args) # test data test_fn = args.datadir #test_dl = np.array([l.strip() for l in open(test_fn).readlines()]) # load model if args.gpu >= 0: cuda.get_device(args.gpu).use() model = load_model(args) if args.gpu >= 0: model.to_gpu() else: model.to_cpu() # create output dir epoch = int(re.search('epoch-([0-9]+)', args.param).groups()[0]) result_dir = os.path.dirname(args.param) out_dir = '%s/test_%d' % (result_dir, epoch) if not os.path.exists(out_dir): os.makedirs(out_dir) out_log = '%s.log' % out_dir fp = open(out_log, 'w') input_data_all, labels_all = load_video(trans, args) preds_all = [] for i in range(0, len(input_data_all), args.batchsize): if args.gpu >= 0: input_data = cuda.to_gpu( input_data_all[i:i + args.batchsize].astype(np.float32)) labels = cuda.to_gpu(labels_all[i:i + args.batchsize].astype( np.float32)) x = Variable(input_data, volatile=True) t = Variable(labels, volatile=True) model(x, t) if args.gpu >= 0: preds = cuda.to_cpu(model.pred.data) input_data = cuda.to_cpu(input_data) labels = cuda.to_cpu(labels) for n in xrange(len(input_data)): img = input_data[n].transpose((1, 2, 0)) pred = preds[n] img_pred, pred = trans.revert(img, pred) # turn label data into image coordinates label = labels[n] img_label, label = trans.revert(img, label) # create pred, label tuples img_pred = np.array(img_pred.copy()) pred = [tuple(p) for p in pred] # all limbs img_pred = draw_joints(img_pred, pred, args.draw_limb, args.text_scale) tr_fn = 'tmp/%d.png' % (i + n + 1) cv.imwrite(tr_fn, img_pred) preds_all.append(pred) save_vid_res(preds_all, out_dir, args.vidfile.split(".")[0])
def test(args): # augmentation setting trans = Transform(args) # test data test_fn = '%s/test_joints.csv' % args.datadir test_dl = np.array([l.strip() for l in open(test_fn).readlines()]) # load model if args.gpu >= 0: cuda.get_device(args.gpu).use() model = load_model(args) if args.gpu >= 0: model.to_gpu() else: model.to_cpu() # create output dir epoch = int(re.search('epoch-([0-9]+)', args.param).groups()[0]) result_dir = os.path.dirname(args.param) out_dir = '%s/test_%d' % (result_dir, epoch) if not os.path.exists(out_dir): os.makedirs(out_dir) out_log = '%s.log' % out_dir fp = open(out_log, 'w') mean_error = np.zeros(7) N = len(test_dl) for i in range(0, N, args.batchsize): lines = test_dl[i:i + args.batchsize] input_data, labels = load_data(trans, args, lines) if args.gpu >= 0: input_data = cuda.to_gpu(input_data.astype(np.float32)) labels = cuda.to_gpu(labels.astype(np.float32)) x = Variable(input_data, volatile=True) t = Variable(labels, volatile=True) model(x, t) if args.gpu >= 0: preds = cuda.to_cpu(model.pred.data) input_data = cuda.to_cpu(input_data) labels = cuda.to_cpu(labels) for n, line in enumerate(lines): img_fn = line.split(',')[args.fname_index] img = input_data[n].transpose((1, 2, 0)) pred = preds[n] img_pred, pred = trans.revert(img, pred) # turn label data into image coordinates label = labels[n] img_label, label = trans.revert(img, label) # calc mean_error error = np.linalg.norm(pred - label, axis=1) mean_error += error # create pred, label tuples img_pred = np.array(img_pred.copy()) img_label = np.array(img_label.copy()) pred = [tuple(p) for p in pred] label = [tuple(p) for p in label] # all limbs img_label = draw_joints(img_label, label, args.draw_limb, args.text_scale) img_pred = draw_joints(img_pred, pred, args.draw_limb, args.text_scale) msg = '{:5}/{:5} {}\tshoulderl:{}\tshoulderr:{}\tnose:{}\telbowl:{}\telbowr:{}\twristl:{}\twristr:{}'.format( i + n, N, img_fn, error[2], error[4], error[3], error[1], error[5], error[0], error[6]) print(msg, file=fp) print(msg) fn, ext = os.path.splitext(img_fn.split('/')[-1]) tr_fn = '%s/%d-%d_%s_pred%s' % (out_dir, i, n, fn, ext) la_fn = '%s/%d-%d_%s_label%s' % (out_dir, i, n, fn, ext) cv.imwrite(tr_fn, img_pred) cv.imwrite(la_fn, img_label)
parser.add_argument('--lcn', type=bool, default=True, help='local contrast normalization for data augmentation') parser.add_argument('--joint_num', type=int, default=7) args = parser.parse_args() print(args) # augmentation setting trans = Transform(padding=[args.crop_pad_inf, args.crop_pad_sup], flip=args.flip, size=args.size, shift=args.shift, lcn=args.lcn) # test data test_fn = '%s/test_joints.csv' % args.data_dir test_dl = np.array([l.strip() for l in open(test_fn).readlines()]) result_dir = '%s/test_trans' % args.data_dir if not os.path.exists(result_dir): os.makedirs(result_dir) for i, line in enumerate(test_dl): orig, input_data, label = load_data(trans, args, line) input_data = input_data.transpose((0, 2, 3, 1))[0].astype(np.float32) label = label.astype(np.float32).flatten() cv.imwrite('%s/%d_orig.jpg' % (result_dir, i), orig) img, label = trans.revert(input_data, label) label = [tuple(l) for l in label] pose = draw_joints(input_data.copy(), label) pose = np.array(pose.copy()) cv.imwrite('%s/%d_pose.jpg' % (result_dir, i), pose)
def test(args): # test data test_fn = '%s/test_joints.csv' % args.datadir test_dl = np.array([l.strip() for l in open(test_fn).readlines()]) # load model if args.gpu >= 0: cuda.get_device(args.gpu).use() model = load_model(args) if args.gpu >= 0: model.to_gpu(args.gpu) # create output dir epoch = int(re.search('epoch-([0-9]+)', args.param).groups()[0]) result_dir = os.path.dirname(args.param) out_dir = '%s/test_%d' % (result_dir, epoch) if not os.path.exists(out_dir): os.makedirs(out_dir) out_log = '%s.log' % out_dir fp = open(out_log, 'w') mean_error = 0.0 N = len(test_dl) for i in range(0, N, args.batchsize): lines = test_dl[i:i + args.batchsize] input_data, labels = load_data(trans, args, lines) if args.gpu >= 0: input_data = cuda.to_gpu(input_data.astype(np.float32)) labels = cuda.to_gpu(labels.astype(np.float32)) else: input_data = input_data.astype(np.float32) labels = labels.astype(np.float32) x = Variable(input_data, volatile=True) t = Variable(labels, volatile=True) model(x, t) if args.gpu >= 0: preds = cuda.to_cpu(model.pred.data) input_data = cuda.to_cpu(input_data) labels = cuda.to_cpu(labels) else: preds = model.pred.data for n, line in enumerate(lines): img_fn = line.split(',')[args.fname_index] img = input_data[n].transpose((1, 2, 0)) pred = preds[n] img_pred, pred = trans.revert(img, pred) # turn label data into image coordinates label = labels[n] img_label, label = trans.revert(img, label) # calc mean_error error = np.linalg.norm(pred - label) / len(pred) mean_error += error # create pred, label tuples img_pred = np.array(img_pred.copy()) img_label = np.array(img_label.copy()) pred = [tuple(p) for p in pred] label = [tuple(p) for p in label] # all limbs img_label = draw_joints( img_label, label, args.draw_limb, args.text_scale) img_pred = draw_joints( img_pred, pred, args.draw_limb, args.text_scale) msg = '{:5}/{:5} {}\terror:{}\tmean_error:{}'.format( i + n, N, img_fn, error, mean_error / (i + n + 1)) print(msg, file=fp) print(msg) fn, ext = os.path.splitext(img_fn) tr_fn = '%s/%d-%d_%s_pred%s' % (out_dir, i, n, fn, ext) la_fn = '%s/%d-%d_%s_label%s' % (out_dir, i, n, fn, ext) cv.imwrite(tr_fn, img_pred) cv.imwrite(la_fn, img_label)
def demo(args): # augmentation setting trans = Transform(args) # test data test_dl = sorted(glob.glob('%s/*' % args.datadir)) # load model if args.gpu >= 0: cuda.get_device(args.gpu).use() model = load_model(args) if args.gpu >= 0: model.to_gpu() else: model.to_cpu() # create output dir epoch = int(re.search('epoch-([0-9]+)', args.param).groups()[0]) out_dir = '%s/' % (args.resultdir) if not os.path.exists(out_dir): os.makedirs(out_dir) out_log = '%s.log' % out_dir fp = open(out_log, 'w') N = len(test_dl) with open('%s/joint_coords.csv' % out_dir, 'wb') as csvfile: writer = csv.writer(csvfile) for i in range(0, N, args.batchsize): lines = test_dl[i:i + args.batchsize] input_data, labels = load_data_demo(trans, args, lines) if args.gpu >= 0: input_data = cuda.to_gpu(input_data.astype(np.float32)) labels = cuda.to_gpu(labels.astype(np.float32)) x = Variable(input_data, volatile=True) t = Variable(labels, volatile=True) model(x, t) if args.gpu >= 0: preds = cuda.to_cpu(model.pred.data) input_data = cuda.to_cpu(input_data) labels = cuda.to_cpu(labels) for n, line in enumerate(lines): img_fn = line.split(',')[args.fname_index] img = input_data[n].transpose((1, 2, 0)) pred = preds[n] img_pred, pred = trans.revert(img, pred) # create pred img_pred = np.array(img_pred.copy()) pred = [tuple(p) for p in pred] writer.writerow(pred) # all limbs img_pred = draw_joints(img_pred, pred, args.draw_limb, args.text_scale) fn, ext = os.path.splitext(img_fn.split('/')[-1]) tr_fn = '%s/%s_pred%s' % (out_dir, fn, ext) cv.imwrite(tr_fn, img_pred)