def train(): total_timer = Timer() train_timer = Timer() load_timer = Timer() max_epoch = 30 epoch_step = int(cfg.train_num//cfg.batch_size) t = 1 for epoch in range(1, max_epoch + 1): print('-'*25, 'epoch', epoch,'/',str(max_epoch), '-'*25) t_loss = 0 ll_loss = 0 r_loss = 0 c_loss = 0 for step in range(1, epoch_step + 1): t = t + 1 total_timer.tic() load_timer.tic() images, labels, imnm, num_boxes, imsize = data.get() # load_timer.toc() feed_dict = {input_: images, get_boxes: labels[..., 1:5][:, ::-1, :], get_classes: labels[..., 0].reshape((cfg.batch_size, -1))[:, ::-1] } if cfg.cnt_branch: _, g_step_, tt_loss, cl_loss, cn_loss, re_loss, lr_ = sess.run( [train_op, global_step, total_loss, cls_loss, cnt_loss, reg_loss, lr], feed_dict = feed_dict) else: _, g_step_, tt_loss, cl_loss, re_loss, lr_ = sess.run( [train_op, global_step, total_loss, cls_loss, reg_loss, lr], feed_dict = feed_dict) total_timer.toc() if g_step_%50 ==0: sys.stdout.write('\r>> ' + 'iters '+str(g_step_)+str('/')+str(epoch_step*max_epoch)+' loss '+str(tt_loss) + ' ') sys.stdout.flush() summary_str = sess.run(summary_op, feed_dict = feed_dict) train_total_summary = tf.Summary(value=[ tf.Summary.Value(tag="config/learning rate", simple_value=lr_), tf.Summary.Value(tag="train/classification/focal_loss", simple_value=cfg.class_weight*cl_loss), tf.Summary.Value(tag="train/classification/cnt_loss", simple_value=cfg.cnt_weight*cn_loss), # tf.Summary.Value(tag="train/p_nm", simple_value=p_nm_), tf.Summary.Value(tag="train/regress_loss", simple_value=cfg.regress_weight*re_loss), # tf.Summary.Value(tag="train/clone_loss", simple_value=cfg.class_weight*cl_loss + cfg.regress_weight*re_loss + cfg.cnt_weight*cn_loss), # tf.Summary.Value(tag="train/l2_loss", simple_value=l2_loss), tf.Summary.Value(tag="train/total_loss", simple_value=tt_loss) ]) print('curent speed: ', total_timer.diff, 'remain time: ', total_timer.remain(g_step_, epoch_step*max_epoch)) summary_writer.add_summary(summary_str, g_step_) summary_writer.add_summary(train_total_summary, g_step_) if g_step_%10000 == 0: print('saving checkpoint') saver.save(sess, cfg.ckecpoint_file + '/model.ckpt', g_step_) total_timer.toc() sys.stdout.write('\n') print('>> mean loss', t_loss) print('curent speed: ', total_timer.average_time, 'remain time: ', total_timer.remain(g_step_, epoch_step*max_epoch)) print('saving checkpoint') saver.save(sess, cfg.ckecpoint_file + '/model.ckpt', g_step_)
restorer = tf.train.Saver(g_list) restorer.restore(sess, restore_path) if __name__ == '__main__': val_timer = Timer() data = pascal_voc('test', False, cfg.test_img_path, cfg.test_label_path, cfg.test_img_txt, False) val_pred = [] # saved_pred = {} gt_dict = {} val_rloss = 0 val_closs = 0 val_cnt_loss = 0 for val_step in range(1, cfg.test_num + 1): val_timer.tic() images, labels, imnm, num_boxes, imsize = data.get() feed_dict = { input_: images, get_boxes: labels[..., 1:5][:, ::-1, :], get_classes: labels[..., 0].reshape((cfg.batch_size, -1))[:, ::-1] } if cfg.cnt_branch: b, s, l, valcloss_, valcntloss_, valrloss_ = sess.run( [nms_box, nms_score, nms_label, cls_loss, cnt_loss, reg_loss], feed_dict=feed_dict) else: b, s, l, valcloss_, valrloss_ = sess.run( [nms_box, nms_score, nms_label, cls_loss, reg_loss], feed_dict=feed_dict) val_rloss += valrloss_ / cfg.test_num