Exemple #1
0
def deal(x):
    v1 = x[6:9]
    x[6:9] = normalize(v1)
    v1 = x[6:9]
    v2 = x[9:12]
    v2 = v2 - proj(v2, v1)
    x[9:12] = normalize(v2)
    #
    v1 = x[18:21]
    x[18:21] = normalize(v1)
    v1 = x[18:21]
    v2 = x[21:24]
    v2 = v2 - proj(v2, v1)
    x[21:24] = normalize(v2)
Exemple #2
0
def animate(i, config, net, optim, data):
    print(i, '/', iternum)
    net.train()
    out = net(data)
    loss = config.loss(data, out)
    optim.zero_grad()
    loss['overall'].backward()
    optim.step()
    print(loss['overall'].data.cpu().numpy())
    net.eval()
    with torch.no_grad():
        out = net(data)
    box3d_src = data[1].data.cpu().numpy()
    box3d_tgt = data[2].data.cpu().numpy()
    center = data[3].data.cpu().numpy()
    r = data[4].data.cpu().numpy()
    gts = data[5].data.cpu().numpy()
    y = out['y'].data.cpu().numpy()
    map = out['dmap'].permute(0, 2, 3, 1).data.cpu().numpy()
    #
    num = box3d_src.shape[0]
    col = int(np.sqrt(num))
    row = num // col
    for ri in range(row):
        for cj in range(col):
            ni = ri * col + cj
            ymap = y[ni, ...]
            ymap *= np.pi
            ymap[1] *= 2
            c3d = recon(center[ni, ...], r[ni, ...], ymap)
            c2d = proj(mv(c3d))
            pv[4 * ni + 0].set_data(c2d[:, 0], c2d[:, 1])
            im1 = norm_im(map[ni, :, :, :3])
            pv[4 * ni + 1].set_array(im1)
            im2 = norm_im(map[ni, :, :, 3:6])
            pv[4 * ni + 2].set_array(im2)
            pv[4 * ni + 3].set_data(c3d[:, 0], c3d[:, 1])
            pv[4 * ni + 3].set_3d_properties(c3d[:, 2])
    if i == iternum - 1:
        exit()
    return pv
Exemple #3
0
def run(**kwargs):
    print('a')
    #get configuration
    try:
        config = importlib.import_module('config.'+kwargs['config']);
        opt = config.__dict__;
        for k in kwargs.keys():
            if not kwargs[k] is None:
                opt[k] = kwargs[k];
    except Exception as e:
        print(e);
        traceback.print_exc();
        exit();
    #get network
    try:
        m = importlib.import_module('net.'+opt['net']);
        net = m.Net(**opt);
        if torch.cuda.is_available():
            net = net.cuda();
    except Exception as e:
        print(e);
        traceback.print_exc();
        exit();
    #get dataset
    try:
        m = importlib.import_module('util.dataset.'+opt['dataset']);
        train_data = m.Data(opt,True);
        val_data = m.Data(opt,False);
        train_load = DataLoader(train_data,batch_size=opt['batch_size'],shuffle=True,num_workers=opt['workers']);
        val_load = DataLoader(val_data,batch_size=opt['batch_size'],shuffle=False,num_workers=opt['workers']);
    except Exception as e:
        print(e);
        traceback.print_exc();
        exit();
        
    if opt['model']!='':
        partial_restore(net,opt['model']);
        print("Previous weights loaded");
    if 'train' in opt['user_key']:
        load = train_load;
    else:
        load = val_load;
    if opt['model']!='':
        outdir = os.path.dirname(opt['model'])+os.sep+'view_'+opt['user_key'];
        if not os.path.exists(outdir):
            os.mkdir(outdir);
    for i, data in enumerate(load,0):
        print(i,'/',len(train_data)//opt['batch_size']);
        data2cuda(data);
        net.eval();
        with torch.no_grad():
            out = net(data);
        img = data[0].data.cpu().numpy();
        box2d_src = data[1].data.cpu().numpy();
        box3d_src = data[2].data.cpu().numpy();
        box2d_tgt = data[3].data.cpu().numpy();
        box3d_tgt = data[4].data.cpu().numpy();
        r = data[5].data.cpu().numpy();
        gts = data[6].data.cpu().numpy();
        y = out['y'].data.cpu().numpy();

        tri = box_face;
        num = box3d_src.shape[0];
        col = 4;
        row = num // col;
        for ri in range(row):
            for cj in range(col):
                ni = ri*col+cj;
                fig = plt.figure(figsize=(48,16));
                #
                ax = fig.add_subplot(132,projection='3d');
                ax.view_init(elev=20, azim=0)
                ax.plot_trisurf(box3d_tgt[ni,...,0],box3d_tgt[ni,...,1],tri,box3d_tgt[ni,...,2],color=(0,0,1,0.1));
                ax.plot_trisurf(box3d_src[ni,...,0],box3d_src[ni,...,1],tri,box3d_src[ni,...,2],color=(0,1,0,0.1));
                ygt = gts[ni,...];
                ygt *= np.pi;
                ygt[1] *= 2;
                c3d1 = recon(box3d_src[ni,...],r[ni,...],ygt);
                ax.plot(c3d1[:,0],c3d1[:,1],c3d1[:,2],color='k');
                ymap = y[ni,...];
                ymap *= np.pi;
                ymap[1] *= 2;
                c3d2 = recon(box3d_src[ni,...],r[ni,...],ymap);
                ax.plot(c3d2[:,0],c3d2[:,1],c3d2[:,2],color='r');
                ax.scatter(box3d_src[ni,0:4,0],box3d_src[ni,0:4,1],box3d_src[ni,0:4,2],color='b',marker='*');
                ax.scatter(box3d_src[ni,4:8,0],box3d_src[ni,4:8,1],box3d_src[ni,4:8,2],color='c',marker='*');
                ax.scatter(box3d_tgt[ni,0:4,0],box3d_tgt[ni,0:4,1],box3d_tgt[ni,0:4,2],color='k',marker='x');
                ax.scatter(box3d_tgt[ni,4:8,0],box3d_tgt[ni,4:8,1],box3d_tgt[ni,4:8,2],color='r',marker='x');
                ax.set_aspect('equal', adjustable='box');
                #
                ax = fig.add_subplot(133,projection='3d');
                ax.view_init(elev=20, azim=90)
                ax.plot_trisurf(box3d_tgt[ni,...,0],box3d_tgt[ni,...,1],tri,box3d_tgt[ni,...,2],color=(0,0,1,0.1));
                ax.plot_trisurf(box3d_src[ni,...,0],box3d_src[ni,...,1],tri,box3d_src[ni,...,2],color=(0,1,0,0.1));
                ax.plot(c3d1[:,0],c3d1[:,1],c3d1[:,2],color='k');
                ax.plot(c3d2[:,0],c3d2[:,1],c3d2[:,2],color='r');
                ax.scatter(box3d_src[ni,0:4,0],box3d_src[ni,0:4,1],box3d_src[ni,0:4,2],color='b',marker='*');
                ax.scatter(box3d_src[ni,4:8,0],box3d_src[ni,4:8,1],box3d_src[ni,4:8,2],color='c',marker='*');
                ax.scatter(box3d_tgt[ni,0:4,0],box3d_tgt[ni,0:4,1],box3d_tgt[ni,0:4,2],color='k',marker='x');
                ax.scatter(box3d_tgt[ni,4:8,0],box3d_tgt[ni,4:8,1],box3d_tgt[ni,4:8,2],color='r',marker='x');
                ax.set_aspect('equal', adjustable='box');
                #
                ax = fig.add_subplot(131);
                ax.set_aspect('equal', adjustable='box');
                ax.imshow(img[ni,...]);
                ax.scatter(box2d_src[ni,0:4,0],box2d_src[ni,0:4,1],color='b',marker='*');
                ax.scatter(box2d_src[ni,4:8,0],box2d_src[ni,4:8,1],color='c',marker='*');
                ax.scatter(box2d_tgt[ni,0:4,0],box2d_tgt[ni,0:4,1],color='k',marker='x');
                ax.scatter(box2d_tgt[ni,4:8,0],box2d_tgt[ni,4:8,1],color='r',marker='x');
                ax.set_aspect('equal', adjustable='box');
                c2d1 = proj(mv(c3d1));
                c2d2 = proj(mv(c3d2));
                ax.plot(c2d1[:,0],c2d1[:,1],color='k');
                ax.plot(c2d2[:,0],c2d2[:,1],color='r');
                if opt['model']!='':
                    plt.savefig(os.path.join(outdir,"_%04d_%04d.png"%(i,ni)));
                if opt['ply']:
                    plt.show();
                plt.close(fig);
            
    #run the code
    '''
Exemple #4
0
def run(**kwargs):
    global iternum
    #get configuration
    try:
        config = importlib.import_module('config.' + kwargs['config'])
        opt = config.__dict__
        for k in kwargs.keys():
            if not kwargs[k] is None:
                opt[k] = kwargs[k]
    except Exception as e:
        print(e)
        traceback.print_exc()
        exit()
    iternum = opt['nepoch']
    #get network
    try:
        m = importlib.import_module('net.' + opt['net'])
        net = m.Net(**opt)
        if torch.cuda.is_available():
            net = net.cuda()
    except Exception as e:
        print(e)
        traceback.print_exc()
        exit()
    #get dataset
    try:
        m = importlib.import_module('util.dataset.' + opt['dataset'])
        train_data = m.Data(opt, True)
        val_data = m.Data(opt, False)
        train_load = DataLoader(train_data,
                                batch_size=opt['batch_size'],
                                shuffle=True,
                                num_workers=opt['workers'])
        val_load = DataLoader(val_data,
                              batch_size=opt['batch_size'],
                              shuffle=False,
                              num_workers=opt['workers'])
    except Exception as e:
        print(e)
        traceback.print_exc()
        exit()

    if opt['model'] != '':
        partial_restore(net, opt['model'])
        print("Previous weights loaded")
    if 'train' in opt['user_key']:
        load = train_load
        print(train_data.datapath[0])
    else:
        load = val_load
        print(val_data.datapath[0])

    if opt['model'] != '':
        outdir = os.path.dirname(
            opt['model']) + os.sep + 'view_' + opt['user_key']
        if not os.path.exists(outdir):
            os.mkdir(outdir)

    for i, data in enumerate(load, 0):
        data2cuda(data)
        d = data
        #
        net.eval()
        with torch.no_grad():
            out = net(data)
        #
        img = data[0].data.cpu().numpy()
        box_src = data[1].data.cpu().numpy()
        box_tgt = data[2].data.cpu().numpy()
        center = data[3].data.cpu().numpy()
        r = data[4].data.cpu().numpy()
        gt = data[5].data.cpu().numpy()
        yout = out['y'].data.cpu().numpy()
        map = out['dmap'].permute(0, 2, 3, 1).data.cpu().numpy()
        #run the code
        #optim = eval('optim.'+opt['optim'])(config.parameters(net),lr=opt['lr'],weight_decay=opt['weight_decay']);
        tri = box_face
        global pv
        num = box_src.shape[0]
        col = int(np.sqrt(num))
        row = num // col
        for ri in range(row):
            for cj in range(col):
                ni = ri * col + cj
                fig = plt.figure(figsize=(48, 16))
                #===========================================
                y = gt[ni, ...].copy()
                y *= np.pi
                y[1] *= 2
                c3d = recon(center[ni, ...], r[ni, ...], y)
                #===========================================
                ymap = yout[ni, ...]
                ymap *= np.pi
                ymap[1] *= 2
                c3do = recon(center[ni, ...], r[ni, ...], ymap)
                c2do = proj(mv(c3do))
                #===========================================
                ax = fig.add_subplot(1, 5, 1)
                ax.imshow(img[ni, ...])
                c2d = proj(mv(c3d))
                line = ax.plot(c2do[:, 0], c2do[:, 1], color='r')
                pv.extend(line)
                ax.plot(c2d[:, 0], c2d[:, 1], color='k')
                #===========================================
                ax = fig.add_subplot(1, 5, 2)
                im1 = norm_im(map[ni, :, :, :3])
                im1 = ax.imshow(im1)
                pv.append(im1)
                #===========================================
                ax = fig.add_subplot(1, 5, 3)
                im2 = norm_im(map[ni, :, :, 3:])
                im2 = ax.imshow(im2)
                pv.append(im2)
                #===========================================
                ax = fig.add_subplot(1, 5, 4, projection='3d')
                ax.view_init(elev=20, azim=90)
                ax.set_aspect('equal', adjustable='box')
                ax.plot_trisurf(box_tgt[ni, ..., 0],
                                box_tgt[ni, ..., 1],
                                tri,
                                box_tgt[ni, ..., 2],
                                color=(0, 0, 1, 0.1))
                ax.plot_trisurf(box_src[ni, ..., 0],
                                box_src[ni, ..., 1],
                                tri,
                                box_src[ni, ..., 2],
                                color=(0, 1, 0, 0.1))
                line = ax.plot(c3do[:, 0], c3do[:, 1], c3do[:, 2], color='r')
                #==========================================
                pv.extend(line)
                ax.plot(c3d[:, 0], c3d[:, 1], c3d[:, 2], color='k')
                #==========================================
                ax = fig.add_subplot(1, 5, 5, projection='3d')
                ax.set_aspect('equal', adjustable='box')
                ax.plot_trisurf(box_tgt[ni, ..., 0],
                                box_tgt[ni, ..., 1],
                                tri,
                                box_tgt[ni, ..., 2],
                                color=(0, 0, 1, 0.1))
                ax.plot_trisurf(box_src[ni, ..., 0],
                                box_src[ni, ..., 1],
                                tri,
                                box_src[ni, ..., 2],
                                color=(0, 1, 0, 0.1))
                line = ax.plot(c3do[:, 0], c3do[:, 1], c3do[:, 2], color='r')
                #===========================================
                pv.extend(line)
                ax.plot(c3d[:, 0], c3d[:, 1], c3d[:, 2], color='k')
                #===========================================
                if opt['model'] != '':
                    plt.savefig(
                        os.path.join(outdir, "_%04d_%04d.png" % (i, ni)))
                if opt['ply']:
                    plt.show()
                plt.close(fig)
                #============

    #run the code
    '''
Exemple #5
0
def run(**kwargs):
    global iternum
    #get configuration
    try:
        config = importlib.import_module('config.' + kwargs['config'])
        opt = config.__dict__
        for k in kwargs.keys():
            if not kwargs[k] is None:
                opt[k] = kwargs[k]
    except Exception as e:
        print(e)
        traceback.print_exc()
        exit()
    iternum = opt['nepoch']
    #get network
    try:
        m = importlib.import_module('net.' + opt['net'])
        net = m.Net(**opt)
        if torch.cuda.is_available():
            net = net.cuda()
    except Exception as e:
        print(e)
        traceback.print_exc()
        exit()
    #get dataset
    try:
        m = importlib.import_module('util.dataset.' + opt['dataset'])
        train_data = m.Data(opt, True)
        val_data = m.Data(opt, False)
        train_load = DataLoader(train_data,
                                batch_size=opt['batch_size'],
                                shuffle=True,
                                num_workers=opt['workers'])
        val_load = DataLoader(val_data,
                              batch_size=opt['batch_size'],
                              shuffle=False,
                              num_workers=opt['workers'])
    except Exception as e:
        print(e)
        traceback.print_exc()
        exit()

    for i, data in enumerate(train_load, 0):
        data2cuda(data)
        d = data
        break
    #
    img = data[0].data.cpu().numpy()
    box_src = data[1].data.cpu().numpy()
    box_tgt = data[2].data.cpu().numpy()
    center = data[3].data.cpu().numpy()
    r = data[4].data.cpu().numpy()
    gt = data[5].data.cpu().numpy()
    #run the code
    optim = eval('optim.' + opt['optim'])(config.parameters(net),
                                          lr=opt['lr'],
                                          weight_decay=opt['weight_decay'])
    tri = box_face
    global pv
    num = box_src.shape[0]
    col = int(np.sqrt(num))
    row = num // col
    for ri in range(row):
        for cj in range(col):
            ni = ri * col + cj
            y = gt[ni, ...].copy()
            y *= np.pi
            y[1] *= 2
            c3d = recon(center[ni, ...], r[ni, ...], y)
            #===========================================
            ax = fig.add_subplot(row, col * 4, 4 * ni + 1)
            ax.imshow(img[ni, ...])
            c2d = proj(mv(c3d))
            line = ax.plot(c2d[:, 0], c2d[:, 1], color='r')
            pv.extend(line)
            ax.plot(c2d[:, 0], c2d[:, 1], color='k')
            #===========================================
            ax = fig.add_subplot(row, col * 4, 4 * ni + 2)
            im1 = ax.imshow(img[ni, ...])
            pv.append(im1)
            #===========================================
            ax = fig.add_subplot(row, col * 4, 4 * ni + 3)
            im2 = ax.imshow(img[ni, ...])
            pv.append(im2)
            ax = fig.add_subplot(row, col * 4, 4 * ni + 4, projection='3d')
            ax.axis('equal')
            ax.plot_trisurf(box_tgt[ni, ..., 0],
                            box_tgt[ni, ..., 1],
                            tri,
                            box_tgt[ni, ..., 2],
                            color=(0, 0, 1, 0.1))
            ax.plot_trisurf(box_src[ni, ..., 0],
                            box_src[ni, ..., 1],
                            tri,
                            box_src[ni, ..., 2],
                            color=(0, 1, 0, 0.1))
            line = ax.plot(c3d[:, 0], c3d[:, 1], c3d[:, 2], color='r')
            pv.extend(line)
            ax.plot(c3d[:, 0], c3d[:, 1], c3d[:, 2], color='k')
    #run the code
    animfunc = partial(animate, config=config, net=net, optim=optim, data=data)
    anim = animation.FuncAnimation(fig,
                                   animfunc,
                                   init_func=init,
                                   frames=iternum,
                                   interval=30,
                                   blit=False)
    plt.show()
    '''