import argparse import math import h5py import numpy as np #import tensorflow as tf import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import socket import importlib import os import sys #import cPickle as pickle import pickle BASE_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.append(BASE_DIR) sys.path.append(os.path.join(BASE_DIR, 'models')) sys.path.append(os.path.join(BASE_DIR, 'utils')) import tf_util parser = argparse.ArgumentParser() parser.add_argument('--gpu', type=int, default=0, help='GPU to use [default: GPU 0]') parser.add_argument('--model', default='pointnet_hico', help='Model name: pointnet_cls or pointnet_cls_basic [default: pointnet_cls]') parser.add_argument('--num_point', type=int, default=1228, help='Point Number [256/512/1024/2048] [default: 1024]') parser.add_argument('--model_path', default='log/model.ckpt', help='model checkpoint file path [default: log/model.ckpt]') parser.add_argument('--input_list', default='./', help='Path list of your point cloud files [default: ./pc_list.txt]') FLAGS = parser.parse_args() NUM_POINT = FLAGS.num_point GPU_INDEX = FLAGS.gpu MODEL_PATH = FLAGS.model_path BATCH_SIZE = 1 MODEL = importlib.import_module(FLAGS.model) # import network module MODEL_FILE = os.path.join(BASE_DIR, 'models', FLAGS.model+'.py') MAX_NUM_POINT = 1228 NUM_CLASSES = 600 HOSTNAME = socket.gethostname() print('HOSTNAME: ', HOSTNAME) def evaluate(): with tf.device('/gpu:'+str(GPU_INDEX)): pointclouds_pl = MODEL.placeholder_inputs(BATCH_SIZE, NUM_POINT) is_training_pl = tf.placeholder(tf.bool, shape=()) # simple model feat = MODEL.get_model(pointclouds_pl, is_training_pl) # Add ops to save and restore all the variables. saver = tf.train.Saver() # Create a session config = tf.ConfigProto() config.gpu_options.allow_growth = True config.allow_soft_placement = True config.log_device_placement = True sess = tf.Session(config=config) # Restore variables from disk. saver.restore(sess, MODEL_PATH) ops = {'pointclouds_pl': pointclouds_pl, 'is_training_pl': is_training_pl, 'feat': feat} eval_one_epoch(sess, ops) def eval_one_epoch(sess, ops): is_training = False input_list = None with open(FLAGS.input_list, 'r') as f: input_list = f.readlines() for fn in range(len(input_list)): current_data = pickle.load(open(fn, 'rb')) current_data = current_data[None, :NUM_POINT, :] feed_dict = {ops['pointclouds_pl']: current_data, ops['is_training_pl']: is_training} feat = sess.run([ops['feat']], feed_dict=feed_dict) print('filename: ', fn) pickle.dump(feat, open(fn[:-4] + '_feature.pkl', 'wb')) with tf.Graph().as_default(): evaluate()