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)
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
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 '''
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 '''
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() '''