|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Contains evaluation plan for the Im2vox model.""" |
|
from __future__ import absolute_import |
|
from __future__ import division |
|
from __future__ import print_function |
|
|
|
import os |
|
|
|
import tensorflow as tf |
|
from tensorflow import app |
|
|
|
import model_ptn |
|
|
|
flags = tf.app.flags |
|
slim = tf.contrib.slim |
|
|
|
flags.DEFINE_string('inp_dir', |
|
'', |
|
'Directory path containing the input data (tfrecords).') |
|
flags.DEFINE_string( |
|
'dataset_name', 'shapenet_chair', |
|
'Dataset name that is to be used for training and evaluation.') |
|
flags.DEFINE_integer('z_dim', 512, '') |
|
flags.DEFINE_integer('f_dim', 64, '') |
|
flags.DEFINE_integer('fc_dim', 1024, '') |
|
flags.DEFINE_integer('num_views', 24, 'Num of viewpoints in the input data.') |
|
flags.DEFINE_integer('image_size', 64, |
|
'Input images dimension (pixels) - width & height.') |
|
flags.DEFINE_integer('vox_size', 32, 'Voxel prediction dimension.') |
|
flags.DEFINE_integer('step_size', 24, '') |
|
flags.DEFINE_integer('batch_size', 1, 'Batch size while training.') |
|
flags.DEFINE_float('focal_length', 0.866, '') |
|
flags.DEFINE_float('focal_range', 1.732, '') |
|
flags.DEFINE_string('encoder_name', 'ptn_encoder', |
|
'Name of the encoder network being used.') |
|
flags.DEFINE_string('decoder_name', 'ptn_vox_decoder', |
|
'Name of the decoder network being used.') |
|
flags.DEFINE_string('projector_name', 'ptn_projector', |
|
'Name of the projector network being used.') |
|
|
|
flags.DEFINE_string('checkpoint_dir', '/tmp/ptn/eval/', |
|
'Directory path for saving trained models and other data.') |
|
flags.DEFINE_string('model_name', 'ptn_proj', |
|
'Name of the model used in naming the TF job. Must be different for each run.') |
|
flags.DEFINE_string('eval_set', 'val', 'Data partition to form evaluation on.') |
|
|
|
flags.DEFINE_float('proj_weight', 10, 'Weighting factor for projection loss.') |
|
flags.DEFINE_float('volume_weight', 0, 'Weighting factor for volume loss.') |
|
flags.DEFINE_float('viewpoint_weight', 1, |
|
'Weighting factor for viewpoint loss.') |
|
flags.DEFINE_float('learning_rate', 0.0001, 'Learning rate.') |
|
flags.DEFINE_float('weight_decay', 0.001, '') |
|
flags.DEFINE_float('clip_gradient_norm', 0, '') |
|
|
|
flags.DEFINE_integer('save_summaries_secs', 15, '') |
|
flags.DEFINE_integer('eval_interval_secs', 60 * 5, '') |
|
|
|
flags.DEFINE_string('master', '', '') |
|
|
|
FLAGS = flags.FLAGS |
|
|
|
|
|
def main(argv=()): |
|
del argv |
|
eval_dir = os.path.join(FLAGS.checkpoint_dir, FLAGS.model_name, 'train') |
|
log_dir = os.path.join(FLAGS.checkpoint_dir, FLAGS.model_name, |
|
'eval_%s' % FLAGS.eval_set) |
|
if not os.path.exists(eval_dir): |
|
os.makedirs(eval_dir) |
|
if not os.path.exists(log_dir): |
|
os.makedirs(log_dir) |
|
g = tf.Graph() |
|
|
|
with g.as_default(): |
|
eval_params = FLAGS |
|
eval_params.batch_size = 1 |
|
eval_params.step_size = FLAGS.num_views |
|
|
|
|
|
|
|
model = model_ptn.model_PTN(eval_params) |
|
|
|
|
|
|
|
eval_data = model.get_inputs( |
|
FLAGS.inp_dir, |
|
FLAGS.dataset_name, |
|
eval_params.eval_set, |
|
eval_params.batch_size, |
|
eval_params.image_size, |
|
eval_params.vox_size, |
|
is_training=False) |
|
inputs = model.preprocess_with_all_views(eval_data) |
|
|
|
|
|
|
|
model_fn = model.get_model_fn(is_training=False, run_projection=False) |
|
outputs = model_fn(inputs) |
|
|
|
|
|
|
|
names_to_values, names_to_updates = model.get_metrics(inputs, outputs) |
|
del names_to_values |
|
|
|
|
|
|
|
num_batches = eval_data['num_samples'] |
|
slim.evaluation.evaluation_loop( |
|
master=FLAGS.master, |
|
checkpoint_dir=eval_dir, |
|
logdir=log_dir, |
|
num_evals=num_batches, |
|
eval_op=names_to_updates.values(), |
|
eval_interval_secs=FLAGS.eval_interval_secs) |
|
|
|
|
|
if __name__ == '__main__': |
|
app.run() |
|
|