Example #1
0
def main(_):
    """
    Main script for training.
    :return: None.
    """

    # Create feature extractor.
    mobile_conf = mobileConf.loadMobileConf()
    ft_extractor = mobileNet.MobileNet(mobile_conf)

    # Load SSD config.
    ssd_conf = ssdConf()
    ssd_net = ssdNet.SSDNet(ssd_conf, ft_extractor)

    # Predict labels and bouding boxes.
    input_img = tf.placeholder(
        tf.int8,
        [None, ssd_conf['input_h'], ssd_conf['input_w'], ssd_conf['input_c']])
    labels, logits, bboxes, endpoints = ssd_net.predict(input_img)

    # Compute loss and put them to tf.collections.LOSS and other loss.
    input_labels = tf.placeholder(tf.int8, [None, ssd_conf['class_num']])
    input_bboxes = tf.placeholder(tf.int8, [None, 4])
    total_loss = ssd_net.loss(labels=labels,
                              bboxes=bboxes,
                              glabels=input_labels,
                              gbboxes=input_bboxes)

    # load traning config.
    trainConf = script_conf.loadTrainConf()

    # Create optimizer.
    optimizer = utils.getOptimizer(trainConf)

    # Train model using optimizer.
    train_op = optimizer.minimize(total_loss)

    # Prepare training data.
    dataset = dt.DataSet(trainConf['dataset_path'], trainConf['batch_size'],
                         trainConf['class_num'])
    imgs, sizes, glabels, gbboxes = dataset.getNext()

    with tf.Session() as ss:
        for i in range(trainConf['epoch_num']):
            ss.run(train_op,
                   feed_dict={
                       input_img: imgs,
                       input_labels: glabels,
                       input_bboxes: gbboxes,
                       labels: labels,
                       bboxes: bboxes
                   })
Example #2
0
import network.mobileNet as mobileNet
import common.config as gconf
import tensorflow as tf
import tensorlayer as tl
import numpy as np

import matplotlib.pyplot as plt

if __name__ == '__main__':
    # Create feature extractor.
    global_conf = gconf.loadTrainConf()
    ft_extractor = mobileNet.MobileNet(global_conf)

    path = '/home/autel/data/exp_imgs'
    img_name = 'face.jpg'
    img = tl.vis.read_image(img_name, path)
    img = img[:224, :224]
    img = np.reshape(img, [1, 224, 224, 3])
    img = tf.constant(np.ones([3, 224, 224, 3]), dtype=tf.float32)
    ft, _ = ft_extractor.predict(img)

    ss = tf.Session()

    # initialize all variables in the session
    tl.layers.initialize_global_variables(ss)

    # ft = ss.run(ft.outputs, feed_dict={input_img: img})
    ft = ss.run(ft.outputs)
    ss.close()
    print(np.shape(ft))
    # print(ft)
Example #3
0
def main(_):
    """
    Main script for training.
    :return: None.
    """

    # Create feature extractor.
    gconf = conf.loadTrainConf()
    # mobilenet = mobileNet.MobileNet(gconf)

    # Prepaire data
    dataset = dt.DataSet(path=gconf['dataset_path'],
                         batchsize=gconf['batch_size'],
                         class_num=gconf['class_num'])

    img_name_batch, img_batch, sizes_batch, class_id_batch, box_num_batch, labels_batch, bboxes_batch = dataset.getNext(
    )
    labels_batch = tf.one_hot(class_id_batch, gconf['class_num'] + 1)
    labels_batch = labels_batch[:, 1:]
    dataset_itr = dataset._itr

    # Predict labels
    # img_batch = tf.cast(input_imgs, tf.float32)
    input_imgs = tf.placeholder(
        tf.float32, [None, gconf['input_size'], gconf['input_size'], 3])
    alexnet, _ = nets.resnet_v2.resnet_v2_50(input_imgs,
                                             num_classes=20,
                                             is_training=True)
    logits = alexnet

    #  Compute loss
    labels = tf.placeholder(tf.float32, [None, gconf['class_num']])
    tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits)
    loss = tf.losses.get_total_loss()
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(
        learning_rate=gconf['learning_rate'])
    train_op = optimizer.minimize(loss)

    correct_prediction = tf.equal(tf.argmax(logits, axis=1),
                                  tf.argmax(labels, axis=1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    tf.summary.scalar('train_acc', accuracy)

    summary = tf.summary.merge_all()
    init_op = tf.global_variables_initializer()

    with open(
            '/home/autel/libs/ssd-tensorflow-ljanyst/pascal-voc/trainval/VOCdevkit/VOC2007/classes.json'
    ) as label_name_file:
        class_dict = json.load(label_name_file)

    step_cnt = 0
    with tf.Session() as sess:
        tb_log_writer = tf.summary.FileWriter(gconf['log_dir'], sess.graph)

        sess.run(init_op)

        for _ in range(gconf['epoch_num']):
            sess.run(dataset_itr.initializer)

            while True:
                step_cnt = step_cnt + 1
                try:
                    # train
                    imgs_input, labels_input = sess.run(
                        [img_batch, labels_batch])

                    # lab_pred, lab_batch = sess.run([labels_pred, class_id_batch], feed_dict={input_imgs:imgs_input,
                    #                                                       labels: labels_input});
                    # print(lab_pred, lab_batch)
                    # exit(0)
                    #
                    # for img, class_onehot in zip(imgs_input, labels_input):
                    #     utils.visulizeClass(img, class_onehot, class_dict, hold=True)
                    #     plt.waitforbuttonpress()

                    summary_val, loss_val, train_acc, _ = sess.run(
                        [summary, loss, accuracy, train_op],
                        feed_dict={
                            input_imgs: imgs_input,
                            labels: labels_input
                        })

                    if step_cnt % gconf['log_step'] == 0:
                        tb_log_writer.add_summary(summary_val, step_cnt)
                        print('Step %d, loss: %f, train_acc: %f' %
                              (step_cnt, loss_val, train_acc))
                except tf.errors.OutOfRangeError:
                    # log statistics
                    # break
                    break
Example #4
0
import network.mobileNet as mobileNet
import network.ssdConf as ssdConf
import network.ssdNet as ssdNet
import common.config as confutil
import tensorflow as tf
import tensorlayer as tl
import numpy as np

g_conf = confutil.loadTrainConf()

# Create feature extractor.
ft_extractor = mobileNet.MobileNet(g_conf)
ssd_conf = ssdConf.addSSDConf(g_conf)

ssd_net = ssdNet.SSDNet(ssd_conf, ft_extractor)
anchors = ssd_net._create_anchors(ssd_net._net_conf['featuremaps'])
Example #5
0
import common.dataset as dt
import tensorflow as tf
import common.config as script_conf
import numpy as np
import matplotlib.pyplot as plt
import common.utils as utils
import json

if __name__ == '__main__':
    # load traning config.
    trainConf = script_conf.loadTrainConf()

    dataset = dt.DataSet(path=trainConf['dataset_path'],
                         batchsize=10,
                         class_num=trainConf['class_num'])

    # img_batch, size_batch, \
    img_name_batch, img_batch, sizes_batch, class_id_batch, box_num_batch, labels_batch, bboxes_batch = dataset.getNext(
    )
    class_id_batch_hot = tf.one_hot(class_id_batch, trainConf['class_num'] + 1)
    class_id_batch_hot = class_id_batch_hot[:, 1:]
    # labels_mask = tf.greater(labels_batch, 0)
    # labels_batch = tf.one_hot(labels_batch, 20)
    # labels_batch = tf.boolean_mask(labels_batch, labels_mask, axis=0)
    #
    # bboxes_batch = tf.boolean_mask(bboxes_batch, labels_mask, axis=0)

    # img_fig = plt.imshow(np.zeros([100, 100]))

    with open(
            '/home/autel/libs/ssd-tensorflow-ljanyst/pascal-voc/trainval/VOCdevkit/VOC2007/classes.json'