示例#1
0
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)
示例#2
0
    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)
示例#3
0
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])
示例#4
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)
示例#5
0
    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)
示例#6
0
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)
示例#7
0
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)