def test_phase_minibatch_generator(): for step, minibatch in enumerate( get_while_running(test_process, test_queue)): if (num_minibatches is not None) and (step == num_minibatches): break yield minibatch
def test_net(): ''' Evaluate the network ''' # Make result directory and the result file. result_dir = os.path.join(cfg.DIR.OUT_PATH, cfg.TEST.EXP_NAME) if not os.path.exists(result_dir): os.makedirs(result_dir) result_fn = os.path.join(result_dir, 'result.mat') print("Exp file will be written to: " + result_fn) # Make a network and load weights NetworkClass = load_model(cfg.CONST.NETWORK_CLASS) print('Network definition: \n') print(inspect.getsource(NetworkClass.network_definition)) net = NetworkClass(compute_grad=False) net.load(cfg.CONST.WEIGHTS) solver = Solver(net) # set constants batch_size = cfg.CONST.BATCH_SIZE # set up testing data process. We make only one prefetching process. The # process will return one batch at a time. queue = Queue(cfg.QUEUE_SIZE) data_pair = category_model_id_pair( dataset_portion=cfg.TEST.DATASET_PORTION) processes = make_data_processes(queue, data_pair, 1, repeat=False, train=False) num_data = len(processes[0].data_paths) num_batch = int(num_data / batch_size) # prepare result container results = {'cost': np.zeros(num_batch)} for thresh in cfg.TEST.VOXEL_THRESH: results[str(thresh)] = np.zeros((num_batch, batch_size, 5)) # Get all test data batch_idx = 0 for batch_img, batch_voxel in get_while_running(processes[0], queue): if batch_idx == num_batch: break pred, loss, activations = solver.test_output(batch_img, batch_voxel) print('%d/%d, cost is: %f' % (batch_idx, num_batch, loss)) for i, thresh in enumerate(cfg.TEST.VOXEL_THRESH): for j in range(batch_size): r = evaluate_voxel_prediction(pred[j, ...], batch_voxel[j, ...], thresh) results[str(thresh)][batch_idx, j, :] = r # record result for the batch results['cost'][batch_idx] = float(loss) batch_idx += 1 print('Total loss: %f' % np.mean(results['cost'])) sio.savemat(result_fn, results)
def demo(args): ''' Evaluate the network ''' # Make a network and load weights NetworkClass = load_model(cfg.CONST.NETWORK_CLASS) print('Network definition: \n') print(inspect.getsource(NetworkClass.network_definition)) net = NetworkClass(compute_grad=False) net.load(cfg.CONST.WEIGHTS) solver = Solver(net) # set up testing data process. We make only one prefetching process. The # process will return one batch at a time. queue = Queue(cfg.QUEUE_SIZE) data_pair = category_model_id_pair(dataset_portion=cfg.TEST.DATASET_PORTION) processes = make_data_processes(queue, data_pair, 1, repeat=False, train=False) num_data = len(processes[0].data_paths) num_batch = int(num_data / args.batch_size) # Get all test data batch_idx = 0 for batch_img, batch_voxel in get_while_running(processes[0], queue): if batch_idx == num_batch: break pred, loss, activations = solver.test_output(batch_img, batch_voxel) if (batch_idx < args.exportNum): # Save the prediction to an OBJ file (mesh file). print('saving {}/{}'.format(batch_idx, args.exportNum - 1)) voxel2obj('out/prediction_{}b_{}.obj'.format(args.batch_size, batch_idx), pred[0, :, 1, :, :] > cfg.TEST.VOXEL_THRESH) else: break batch_idx += 1 if args.file: # Use meshlab or other mesh viewers to visualize the prediction. # For Ubuntu>=14.04, you can install meshlab using # `sudo apt-get install meshlab` if cmd_exists('meshlab'): call(['meshlab', 'obj/{}.obj'.format(args.file)]) else: print('Meshlab not found: please use visualization of your choice to view %s' % args.file)
def demo(args): ''' Evaluate the network ''' # Make a network and load weights NetworkClass = load_model(cfg.CONST.NETWORK_CLASS) print('Network definition: \n') print(inspect.getsource(NetworkClass.network_definition)) net = NetworkClass(compute_grad=False) net.load(cfg.CONST.WEIGHTS) solver = Solver(net) # set up testing data process. We make only one prefetching process. The # process will return one batch at a time. queue = Queue(cfg.QUEUE_SIZE) data_pair = category_model_id_pair( dataset_portion=cfg.TEST.DATASET_PORTION) processes = make_data_processes(queue, data_pair, 1, repeat=False, train=False) num_data = len(processes[0].data_paths) num_batch = int(num_data / args.batch_size) # Get all test data batch_idx = 0 for batch_img, batch_voxel in get_while_running(processes[0], queue): if batch_idx == num_batch: break pred, loss, activations = solver.test_output(batch_img, batch_voxel) if (batch_idx < args.exportNum): # Save the prediction to an OBJ file (mesh file). print('saving {}/{}'.format(batch_idx, args.exportNum - 1)) # voxel2obj('out/prediction_{}b_{}.obj'.format(args.batch_size, batch_idx), # pred[0, :, 1, :, :] > cfg.TEST.VOXEL_THRESH) else: break batch_idx += 1
def test_phase_minibatch_generator(test_process, test_queue): for step, minibatch in enumerate(get_while_running(test_process, test_queue)): yield minibatch
def test_net(): ''' Evaluate the network ''' # Make result directory and the result file. result_dir = os.path.join(cfg.DIR.OUT_PATH, cfg.TEST.EXP_NAME) if not os.path.exists(result_dir): os.makedirs(result_dir) result_fn = os.path.join(result_dir, 'result.mat') print("Exp file will be written to: " + result_fn) # Make a network and load weights NetworkClass = load_model(cfg.CONST.NETWORK_CLASS) #print('Network definition: \n') #print(inspect.getsource(NetworkClass.network_definition)) net = NetworkClass() net.cuda() solver = Solver(net) solver.load(cfg.CONST.WEIGHTS) # set constants batch_size = cfg.CONST.BATCH_SIZE # set up testing data process. We make only one prefetching process. The # process will return one batch at a time. queue = Queue(cfg.QUEUE_SIZE) data_pair = category_model_id_pair(dataset_portion=cfg.TEST.DATASET_PORTION) processes = make_data_processes(queue, data_pair, 1, repeat=False, train=False) num_data = len(processes[0].data_paths) num_batch = int(num_data / batch_size) # prepare result container results = {'cost': np.zeros(num_batch), 'mAP': np.zeros((num_batch, batch_size))} # Save results for various thresholds for thresh in cfg.TEST.VOXEL_THRESH: results[str(thresh)] = np.zeros((num_batch, batch_size, 5)) # Get all test data batch_idx = 0 for batch_img, batch_voxel in get_while_running(processes[0], queue): if batch_idx == num_batch: break #activations is a list of torch.cuda.FloatTensor pred, loss, activations = solver.test_output(batch_img, batch_voxel) #convert pytorch tensor to numpy array pred = pred.data.cpu().numpy() loss = loss.data.cpu().numpy() for j in range(batch_size): # Save IoU per thresh for i, thresh in enumerate(cfg.TEST.VOXEL_THRESH): r = evaluate_voxel_prediction(pred[j, ...], batch_voxel[j, ...], thresh) results[str(thresh)][batch_idx, j, :] = r # Compute AP precision = sklearn.metrics.average_precision_score( batch_voxel[j, 1].flatten(), pred[j, 1].flatten()) results['mAP'][batch_idx, j] = precision # record result for the batch results['cost'][batch_idx] = float(loss) print('%d/%d, costs: %f, mAP: %f' % (batch_idx, num_batch, loss, np.mean(results['mAP'][batch_idx]))) batch_idx += 1 print('Total loss: %f' % np.mean(results['cost'])) print('Total mAP: %f' % np.mean(results['mAP'])) sio.savemat(result_fn, results)