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 })
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)
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
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'])
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'