Example #1
0
def main(_):
    logging.set_verbosity(tf.logging.INFO)

    assert os.path.isfile(FLAGS.pipeline_proto)

    g = tf.Graph()
    with g.as_default():
        pipeline_proto = load_pipeline_proto(FLAGS.pipeline_proto)
        logging.info("Pipeline configure: %s", '=' * 128)
        logging.info(pipeline_proto)

        # Get examples from reader.
        examples = ads_examples.get_examples(pipeline_proto.example_reader)

        # Build model for evaluation.
        global_step = slim.get_or_create_global_step()

        model = builder.build(pipeline_proto.model, is_training=False)
        predictions = model.build_inference(examples)
        loss_dict = model.build_loss(predictions)

        uninitialized_variable_names = tf.report_uninitialized_variables()
        saver = tf.train.Saver()

        init_op = tf.group(tf.local_variables_initializer(),
                           tf.global_variables_initializer())

    session_config = train_utils.default_session_config(
        FLAGS.per_process_gpu_memory_fraction)

    # Start session.
    logging.info('=' * 128)
    eval_config = pipeline_proto.eval_config

    model_path = train_utils.get_latest_model(FLAGS.saved_ckpts_dir)
    if model_path is not None:
        with tf.Session(graph=g, config=session_config) as sess:

            # Initialize model.
            sess.run(init_op)
            saver.restore(sess, model_path)
            logging.info('Restore from %s.', model_path)

            warn_names = sess.run(uninitialized_variable_names)
            assert len(warn_names) == 0

            # Evaluation loop.
            step = sess.run(global_step)

            coord = tf.train.Coordinator()
            threads = tf.train.start_queue_runners(coord=coord)

            evaluate_once(sess,
                          None,
                          step,
                          examples['video_id'],
                          predictions=predictions)

            coord.request_stop()
            coord.join(threads, stop_grace_period_secs=10)

    logging.info('Done')
Example #2
0
def main(_):
    logging.set_verbosity(logging.INFO)

    examples = _load_annots(FLAGS.bounding_box_json)
    logging.info('Loaded %s examples.', len(examples))

    # Create computational graph.
    g = tf.Graph()
    with g.as_default():
        # Create model.
        net_fn = nets_factory.get_network_fn(name=FLAGS.feature_extractor_name,
                                             num_classes=1001)
        default_image_size = getattr(net_fn, 'default_image_size', 224)

        images = tf.placeholder(shape=(None, default_image_size,
                                       default_image_size, 3),
                                dtype=tf.float32)

        _, end_points = net_fn(images)
        output_tensor = end_points[FLAGS.feature_extractor_endpoint]

        init_fn = slim.assign_from_checkpoint_fn(
            FLAGS.feature_extractor_checkpoint,
            slim.get_model_variables(FLAGS.feature_extractor_scope))
        uninitialized_variable_names = tf.report_uninitialized_variables()

    # Start session.
    results = {}
    with tf.Session(graph=g, config=default_session_config()) as sess:
        init_fn(sess)
        assert len(sess.run(uninitialized_variable_names)) == 0

        for index, (image_id, example) in enumerate(examples.iteritems()):
            if index % 50 == 0:
                logging.info('On image %i/%i', index, len(examples))

            # Load image, preprocess. TODO: now only works for inception family.
            filename = "{}/{}".format(FLAGS.image_dir, image_id)
            bgr = cv2.imread(filename, cv2.IMREAD_COLOR)
            rgb = bgr[:, :, ::-1]
            rgb = rgb.astype(np.float32) * 2.0 / 255.0 - 1.0

            # Batch operation.
            regions_list = []
            for region in example['regions'][:FLAGS.max_number_of_regions]:
                roi = image_crop_and_resize(
                    rgb,
                    bbox=(region['bbox']['xmin'], region['bbox']['ymin'],
                          region['bbox']['xmax'], region['bbox']['ymax']),
                    crop_size=(default_image_size, default_image_size))
                regions_list.append(roi)
            batch = np.stack(regions_list, axis=0)

            # Save results.
            features = sess.run(output_tensor, feed_dict={images: batch})
            results[image_id] = features

    # Write results.
    assert len(results) == len(examples)
    with open(FLAGS.output_feature_path, 'wb') as fp:
        np.save(fp, results)
    logging.info('Exported features for %i images.', len(results))

    logging.info('Done')
def main(_):
    logging.set_verbosity(tf.logging.INFO)

    assert os.path.isfile(FLAGS.pipeline_proto)
    assert os.path.isfile(FLAGS.action_reason_annot_path)

    pipeline_proto = load_pipeline_proto(FLAGS.pipeline_proto)
    logging.info("Pipeline configure: %s", '=' * 128)
    logging.info(pipeline_proto)

    groundtruths = load_action_reason_annots(FLAGS.action_reason_annot_path)

    g = tf.Graph()
    with g.as_default():
        # Get examples from reader.
        split = 'valid'
        if not FLAGS.continuous_evaluation:
            split = 'test'

        examples, feed_init_fn = ads_mem_examples.get_examples(
            pipeline_proto.example_reader, split)

        # Build model for training.
        global_step = slim.get_or_create_global_step()

        model = builder.build(pipeline_proto.model, is_training=False)
        predictions = model.build_evaluation_graph(examples)

        init_fn = model.get_init_fn()
        uninitialized_variable_names = tf.report_uninitialized_variables()

        saver = tf.train.Saver()
        init_op = tf.group(tf.local_variables_initializer(),
                           tf.global_variables_initializer())

    session_config = train_utils.default_session_config(
        FLAGS.per_process_gpu_memory_fraction)

    # evaluation on test set.
    logging.info('Start evaluating.')
    eval_config = pipeline_proto.eval_config

    # One time evaluation and inference.
    if not FLAGS.continuous_evaluation:
        model_path = train_utils.get_latest_model(FLAGS.saved_ckpt_dir)
        with tf.Session(graph=g, config=session_config) as sess:
            feed_init_fn(sess)
            sess.run(init_op)
            saver.restore(sess, model_path)
            logging.info('Restore model from %s.', model_path)
            warn_names = sess.run(uninitialized_variable_names)
            assert len(warn_names) == 0

            # Evaluate the best model in terms of recall@3.
            step = sess.run(global_step)
            evaluate_once(sess, None, step, predictions, groundtruths)

        logging.info('Done')

        exit(0)

    # Continuous evaluation on valid set.
    writer = tf.summary.FileWriter(FLAGS.eval_log_dir, g)
    step = prev_step = -1
    while True:
        start = time.time()

        try:
            model_path = tf.train.latest_checkpoint(FLAGS.train_log_dir)

            if model_path is not None:
                with tf.Session(graph=g, config=session_config) as sess:
                    # Restore model.
                    feed_init_fn(sess)
                    sess.run(init_op)
                    saver.restore(sess, model_path)
                    logging.info('Restore model from %s.', model_path)

                    warn_names = sess.run(uninitialized_variable_names)
                    assert len(warn_names) == 0

                    step = sess.run(global_step)
                    if step != prev_step and step > eval_config.eval_min_global_steps:
                        # Evaluate the latest model.
                        prev_step = step
                        metric = evaluate_once(sess, writer, step, predictions,
                                               groundtruths)

                        step_best, metric_best = train_utils.save_model_if_it_is_better(
                            step,
                            metric,
                            model_path,
                            FLAGS.saved_ckpt_dir,
                            reverse=False)

                        if step_best == step:
                            summary = tf.Summary()
                            summary.value.add(tag='metrics/model_metric',
                                              simple_value=metric_best)
                            writer.add_summary(summary, global_step=step)
                        writer.flush()

                # with tf.Session
            # if model_path is not None
        except Exception as ex:
            pass

        if step >= eval_config.number_of_steps:
            break

        sleep_secs = eval_config.eval_interval_secs - (time.time() - start)
        if sleep_secs > 0:
            logging.info('Now sleep for %.2lf secs.', sleep_secs)
            time.sleep(sleep_secs)

    writer.close()
    logging.info('Done')
Example #4
0
def main(_):
    logging.set_verbosity(tf.logging.INFO)

    model_proto = _load_model_proto(FLAGS.model_proto)
    logging.info('Model proto: \n%s', model_proto)

    # Load vocab.
    word_to_id, id_to_symbol = load_symbol_cluster(FLAGS.symbol_cluster_path)
    logging.info('Number of classes: %i.', len(id_to_symbol))

    # Load image features.
    img_features = np.load(FLAGS.feature_path).item()
    logging.info('Load %i features.', len(img_features))

    # Note that ZERO is reserved for 'unclear'.
    annots = load_raw_annots(FLAGS.symbol_annot_path)
    x, y = _get_data(annots, img_features, len(id_to_symbol))

    number_of_val_examples = FLAGS.number_of_val_examples
    x_train, y_train = x[number_of_val_examples:], y[number_of_val_examples:]
    x_valid, y_valid = x[:number_of_val_examples], y[:number_of_val_examples]

    logging.info('Load %d train examples.', len(x_train))
    logging.info('Load %d valid examples.', len(x_valid))

    # Build graph to train symbol classifier.
    g = tf.Graph()
    with g.as_default():
        # For training
        logits, init_fn = mlp.model(model_proto, x_train, is_training=True)
        loss_op = tf.nn.sigmoid_cross_entropy_with_logits(labels=y_train,
                                                          logits=logits)
        loss_op = tf.reduce_mean(loss_op)

        optimizer = tf.train.AdamOptimizer(FLAGS.learning_rate)
        train_op = slim.learning.create_train_op(loss_op, optimizer=optimizer)
        init_op = tf.global_variables_initializer()

        # For evaluation.
        tf.get_variable_scope().reuse_variables()
        logits_val, init_fn_val = mlp.model(model_proto,
                                            x_valid,
                                            is_training=False)

        saver = tf.train.Saver()

    with tf.Session(graph=g,
                    config=train_utils.default_session_config()) as sess:
        sess.run(init_op)

        max_v, metrics = 0, []
        for i in xrange(FLAGS.max_iters):
            (_, loss, pred_train,
             pred_valid) = sess.run([train_op, loss_op, logits, logits_val])

            mAP_micro = average_precision_score(y_valid[:, 1:],
                                                pred_valid[:, 1:],
                                                average='micro')
            mAP_macro = average_precision_score(y_valid[:, 1:],
                                                pred_valid[:, 1:],
                                                average='macro')
            metric = mAP_macro

            if i % 100 == 0:
                logging.info(
                    'step=%d, loss=%.4lf, mAP_micro=%.4lf, mAP_macro=%.4lf.',
                    i + 1, loss, mAP_micro, mAP_macro)

                if metric >= max_v:
                    saver.save(sess, FLAGS.output_model_path)
                    max_v = metric

                if len(metrics) >= 3:
                    if metric < metrics[-1] and metrics[-1] < metrics[
                            -2] and metrics[-2] < metrics[-3]:
                        logging.info('Process early stopping.')
                        break

                metrics.append(metric)

    logging.info('Done')
Example #5
0
def main(_):
  logging.set_verbosity(tf.logging.INFO)

  assert os.path.isfile(FLAGS.pipeline_proto)
  assert os.path.isfile(FLAGS.sentiment_vocab_path)
  assert os.path.isfile(FLAGS.sentiment_anno_vocab)
  assert os.path.isfile(FLAGS.sentiment_raw_annot_path)
  assert os.path.isfile(FLAGS.sentiment_clean_annot_path)

  sentiment_raw_annot = load_raw_annot(FLAGS.sentiment_raw_annot_path)
  sentiment_clean_annot = eval_utils.load_clean_annot(FLAGS.sentiment_clean_annot_path)
  topic_clean_annot = load_clean_annot(FLAGS.topic_clean_annot_path)

  g = tf.Graph()
  with g.as_default():
    pipeline_proto = load_pipeline_proto(FLAGS.pipeline_proto)
    logging.info("Pipeline configure: %s", '=' * 128)
    logging.info(pipeline_proto)

    # Get examples from reader.
    examples = ads_examples.get_examples(pipeline_proto.example_reader)

    # Build model for evaluation.
    global_step = slim.get_or_create_global_step()

    model = builder.build(pipeline_proto.model, is_training=False)
    predictions = model.build_inference(examples)
    loss_dict = model.build_loss(predictions)

    uninitialized_variable_names = tf.report_uninitialized_variables()
    saver = tf.train.Saver()
    
    init_op = tf.group(tf.local_variables_initializer(),
        tf.global_variables_initializer())

  session_config = train_utils.default_session_config( 
      FLAGS.per_process_gpu_memory_fraction)

  # Start session.
  logging.info('=' * 128)
  eval_config = pipeline_proto.eval_config
  writer = tf.summary.FileWriter(FLAGS.eval_log_dir, g)

  prev_step = -1
  while True:
    start = time.time()

    try:
      model_path = tf.train.latest_checkpoint(FLAGS.train_log_dir)

      if model_path is not None:
        with tf.Session(graph=g, config=session_config) as sess:

          # Initialize model.
          sess.run(init_op)
          saver.restore(sess, model_path)
          logging.info('Restore from %s.', model_path)

          warn_names = sess.run(uninitialized_variable_names)
          assert len(warn_names) == 0

          step = sess.run(global_step)
          if step != prev_step and step > eval_config.eval_min_global_steps:
            prev_step = step

            # Evaluation loop.
            coord = tf.train.Coordinator()
            threads = tf.train.start_queue_runners(coord=coord)

            model_metric = evaluate_sentiment_once(sess, 
                writer, 
                step, 
                examples['video_id'],
                predictions=predictions,
                clean_annot=sentiment_clean_annot, 
                raw_annot=sentiment_raw_annot,
                use_sigmoid=True)

            step_best, metric_best = train_utils.save_model_if_it_is_better(
                step, model_metric, model_path, FLAGS.saved_ckpts_dir,
                reverse=False)

            # We improved the model, record it.
            if step_best == step:
              summary = tf.Summary()
              summary.value.add(
                  tag='metrics/metric_best', simple_value=metric_best)
              writer.add_summary(summary, global_step=step)
              writer.flush()

            coord.request_stop()
            coord.join(threads, stop_grace_period_secs=10)

          if step >= eval_config.number_of_steps:
            break
    except Exception as ex:
      pass

    # Sleep a while.
    sleep_secs = eval_config.eval_interval_secs - (time.time() - start)
    if sleep_secs > 0:
      logging.info('Now sleep for %.2lf secs.', sleep_secs)
      time.sleep(sleep_secs)

  writer.close()
  logging.info('Done')
def main(_):
    logging.set_verbosity(logging.INFO)

    examples = _load_annots(FLAGS.action_reason_annot_path)
    logging.info('Loaded %s examples.', len(examples))

    # Create computational graph.
    g = tf.Graph()
    with g.as_default():
        # Create model.
        net_fn = nets_factory.get_network_fn(name=FLAGS.feature_extractor_name,
                                             num_classes=1001)
        default_image_size = getattr(net_fn, 'default_image_size', 224)

        images = tf.placeholder(shape=(None, default_image_size,
                                       default_image_size, 3),
                                dtype=tf.float32)

        _, end_points = net_fn(images)
        output_tensor = end_points[FLAGS.feature_extractor_endpoint]

        init_fn = slim.assign_from_checkpoint_fn(
            FLAGS.feature_extractor_checkpoint,
            slim.get_model_variables(FLAGS.feature_extractor_scope))
        uninitialized_variable_names = tf.report_uninitialized_variables()

    # Start session.
    results = {}
    with tf.Session(graph=g, config=default_session_config()) as sess:
        init_fn(sess)
        assert len(sess.run(uninitialized_variable_names)) == 0

        image_ids, batch = [], []
        for index, (image_id, example) in enumerate(examples.iteritems()):

            # Process the current batch.
            if index % FLAGS.batch_size == 0:
                if len(batch) > 0:
                    features = sess.run(
                        output_tensor,
                        feed_dict={images: np.stack(batch, axis=0)})
                    for img_id, feature in zip(image_ids, features):
                        results[img_id] = feature
                    image_ids, batch = [], []
                logging.info('On image %i/%i', index, len(examples))

            # Load image, preprocess. TODO: now only works for inception family.
            filename = "{}/{}".format(FLAGS.image_dir, image_id)
            bgr = cv2.imread(filename, cv2.IMREAD_COLOR)
            rgb = bgr[:, :, ::-1]
            rgb = rgb.astype(np.float32) * 2.0 / 255.0 - 1.0
            rgb = cv2.resize(rgb, (default_image_size, default_image_size))

            batch.append(rgb)
            image_ids.append(image_id)

        # For the final batch.
        if len(batch) > 0:
            features = sess.run(output_tensor,
                                feed_dict={images: np.stack(batch, axis=0)})
            for image_id, feature in zip(image_ids, features):
                results[image_id] = feature

    # Write results.
    assert len(results) == len(examples)
    with open(FLAGS.output_feature_path, 'wb') as fp:
        np.save(fp, results)
    logging.info('Exported features for %i images.', len(results))

    logging.info('Done')
Example #7
0
def main(_):
    logging.set_verbosity(tf.logging.INFO)

    assert os.path.isfile(FLAGS.pipeline_proto)

    g = tf.Graph()
    with g.as_default():
        pipeline_proto = load_pipeline_proto(FLAGS.pipeline_proto)
        logging.info("Pipeline configure: %s", '=' * 128)
        logging.info(pipeline_proto)

        train_config = pipeline_proto.train_config

        # Get examples from reader.
        examples, feed_init_fn = ads_mem_examples.get_examples(
            pipeline_proto.example_reader, split='train')

        # Build model for training.
        model = builder.build(pipeline_proto.model, is_training=True)
        predictions = model.build_inference_graph(examples)
        loss_dict = model.build_loss(predictions)

        model_init_fn = model.get_init_fn()
        uninitialized_variable_names = tf.report_uninitialized_variables()

        if FLAGS.restore_from:
            variables_to_restore = slim.get_variables_to_restore(
                exclude=[name for name in train_config.exclude_variable])
            restore_init_fn = slim.assign_from_checkpoint_fn(
                FLAGS.restore_from, variables_to_restore)

        def init_fn(sess):
            model_init_fn(sess)
            if FLAGS.restore_from:
                restore_init_fn(sess)

        # Loss and optimizer.
        for loss_name, loss_tensor in loss_dict.iteritems():
            tf.losses.add_loss(loss_tensor)
            tf.summary.scalar('losses/{}'.format(loss_name), loss_tensor)
        total_loss = tf.losses.get_total_loss()
        tf.summary.scalar('losses/total_loss', total_loss)

        for reg_loss in tf.losses.get_regularization_losses():
            name = 'losses/reg_loss_{}'.format(reg_loss.op.name.split('/')[0])
            tf.summary.scalar(name, reg_loss)

        optimizer = train_utils.build_optimizer(train_config)
        if train_config.moving_average:
            optimizer = tf.contrib.opt.MovingAverageOptimizer(
                optimizer, average_decay=0.99)

        gradient_multipliers = train_utils.build_multipler(
            train_config.gradient_multiplier)

        variables_to_train = model.get_variables_to_train()
        logging.info('=' * 128)
        for var in variables_to_train:
            logging.info(var)
        train_op = slim.learning.create_train_op(
            total_loss,
            variables_to_train=variables_to_train,
            clip_gradient_norm=0.0,
            gradient_multipliers=gradient_multipliers,
            summarize_gradients=True,
            optimizer=optimizer)

        saver = None
        if train_config.moving_average:
            saver = optimizer.swapping_saver()

    # Start checking.
    logging.info('Start checking...')
    session_config = train_utils.default_session_config(
        FLAGS.per_process_gpu_memory_fraction)

    def _session_wrapper_fn(sess):
        feed_init_fn(sess)
        return sess

    slim.learning.train(train_op,
                        logdir=FLAGS.train_log_dir,
                        graph=g,
                        master='',
                        is_chief=True,
                        number_of_steps=train_config.number_of_steps,
                        log_every_n_steps=train_config.log_every_n_steps,
                        save_interval_secs=train_config.save_interval_secs,
                        save_summaries_secs=train_config.save_summaries_secs,
                        session_config=session_config,
                        session_wrapper=_session_wrapper_fn,
                        init_fn=init_fn,
                        saver=saver)

    logging.info('Done')
Example #8
0
def main(_):
  logging.set_verbosity(tf.logging.INFO)

  assert os.path.isfile(FLAGS.pipeline_proto), FLAGS.pipeline_proto

  g = tf.Graph()
  with g.as_default():
    pipeline_proto = load_pipeline_proto(FLAGS.pipeline_proto)
    logging.info("Pipeline configure: %s", '=' * 128)
    logging.info(pipeline_proto)

    train_config = pipeline_proto.train_config

    # Get examples from reader.
    examples = ads_examples.get_examples(pipeline_proto.example_reader)

    # Build model for training.
    global_step = slim.get_or_create_global_step()

    model = builder.build(pipeline_proto.model, is_training=True)
    predictions = model.build_inference(examples)
    loss_dict = model.build_loss(predictions)

    init_fn = model.get_init_fn()
    uninitialized_variable_names = tf.report_uninitialized_variables()

    # Loss and optimizer.
    for loss_name, loss_tensor in loss_dict.iteritems():
      tf.losses.add_loss(loss_tensor)
      tf.summary.scalar('losses/{}'.format(loss_name), loss_tensor)
    total_loss = tf.losses.get_total_loss()
    tf.summary.scalar('losses/total_loss', total_loss)

    optimizer = train_utils.build_optimizer(train_config)
    if train_config.moving_average:
      optimizer = tf.contrib.opt.MovingAverageOptimizer(optimizer,
          average_decay=0.99)

    gradient_multipliers = train_utils.build_multipler(
        train_config.gradient_multiplier)

    variables_to_train = model.get_variables_to_train()
    for var in variables_to_train:
      logging.info(var)

    train_op = slim.learning.create_train_op(total_loss,
        variables_to_train=variables_to_train, 
        clip_gradient_norm=5.0,
        gradient_multipliers=gradient_multipliers,
        summarize_gradients=True,
        optimizer=optimizer)

    saver = None
    if train_config.moving_average:
      saver = optimizer.swapping_saver()

  # Starts training.
  logging.info('Start training.')

  session_config = train_utils.default_session_config( 
      FLAGS.per_process_gpu_memory_fraction)
  slim.learning.train(train_op, 
      logdir=FLAGS.train_log_dir,
      graph=g,
      master='',
      is_chief=True,
      number_of_steps=train_config.number_of_steps,
      log_every_n_steps=train_config.log_every_n_steps,
      save_interval_secs=train_config.save_interval_secs,
      save_summaries_secs=train_config.save_summaries_secs,
      session_config=session_config,
      init_fn=init_fn,
      saver=saver)

  logging.info('Done')