def train(self):
    self.sess.run(tf.global_variables_initializer())
    try:
        print(('=> Restoring weights from: %s ... ' % self.initial_weight))
        self.loader.restore(self.sess, self.initial_weight)
    except:
        print(('=> %s does not exist !!!' % self.initial_weight))
        print('=> Now it starts to train YOLOV3 from scratch ...')
        self.first_stage_epochs = 0
    for epoch in range(1, ((1 + self.first_stage_epochs) + self.second_stage_epochs)):
        if (epoch <= self.first_stage_epochs):
            train_op = self.train_op_with_frozen_variables
        else:
            train_op = self.train_op_with_all_variables
        pbar = tqdm(self.trainset)
        (train_epoch_loss, test_epoch_loss) = ([], [])
        for train_data in pbar:
            (_, summary, train_step_loss, global_step_val) = self.sess.run([train_op, self.write_op, self.loss, self.global_step], feed_dict={self.input_data: train_data[0], self.label_sbbox: train_data[1], self.label_mbbox: train_data[2], self.label_lbbox: train_data[3], self.true_sbboxes: train_data[4], self.true_mbboxes: train_data[5], self.true_lbboxes: train_data[6], self.trainable: True})
            train_epoch_loss.append(train_step_loss)
            self.summary_writer.add_summary(summary, global_step_val)
            pbar.set_description(('train loss: %.2f' % train_step_loss))
        for test_data in self.testset:
            test_step_loss = self.sess.run(self.loss, feed_dict={self.input_data: test_data[0], self.label_sbbox: test_data[1], self.label_mbbox: test_data[2], self.label_lbbox: test_data[3], self.true_sbboxes: test_data[4], self.true_mbboxes: test_data[5], self.true_lbboxes: test_data[6], self.trainable: False})
            test_epoch_loss.append(test_step_loss)
        (train_epoch_loss, test_epoch_loss) = (np.mean(train_epoch_loss), np.mean(test_epoch_loss))
        ckpt_file = ('./checkpoint/yolov3_train_loss=%.4f.ckpt' % train_epoch_loss)
        log_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        print(('=> Epoch: %2d Time: %s Train loss: %.2f Test loss: %.2f Saving %s ...' % (epoch, log_time, train_epoch_loss, test_epoch_loss, ckpt_file)))
        self.saver.save(self.sess, ckpt_file, global_step=epoch)
def train(self):
    self.sess.run(tf.global_variables_initializer())
    try:
        print(('=> Restoring weights from: %s ... ' % self.initial_weight))
        self.loader.restore(self.sess, self.initial_weight)
    except:
        print(('=> %s does not exist !!!' % self.initial_weight))
        print('=> Now it starts to train YOLOV3 from scratch ...')
        self.first_stage_epochs = 0
    for epoch in range(1, ((1 + self.first_stage_epochs) + self.second_stage_epochs)):
        if (epoch <= self.first_stage_epochs):
            train_op = self.train_op_with_frozen_variables
        else:
            train_op = self.train_op_with_all_variables
        pbar = tqdm(self.trainset)
        (train_epoch_loss, test_epoch_loss) = ([], [])
        for train_data in pbar:
            (_, summary, train_step_loss, global_step_val) = self.sess.run([train_op, self.write_op, self.loss, self.global_step], feed_dict={self.input_data: train_data[0], self.label_sbbox: train_data[1], self.label_mbbox: train_data[2], self.label_lbbox: train_data[3], self.true_sbboxes: train_data[4], self.true_mbboxes: train_data[5], self.true_lbboxes: train_data[6], self.trainable: True})
            train_epoch_loss.append(train_step_loss)
            self.summary_writer.add_summary(summary, global_step_val)
            pbar.set_description(('train loss: %.2f' % train_step_loss))
        for test_data in self.testset:
            test_step_loss = self.sess.run(self.loss, feed_dict={self.input_data: test_data[0], self.label_sbbox: test_data[1], self.label_mbbox: test_data[2], self.label_lbbox: test_data[3], self.true_sbboxes: test_data[4], self.true_mbboxes: test_data[5], self.true_lbboxes: test_data[6], self.trainable: False})
            test_epoch_loss.append(test_step_loss)
        (train_epoch_loss, test_epoch_loss) = (np.mean(train_epoch_loss), np.mean(test_epoch_loss))
        ckpt_file = ('./checkpoint/yolov3_train_loss=%.4f.ckpt' % train_epoch_loss)
        log_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        print(('=> Epoch: %2d Time: %s Train loss: %.2f Test loss: %.2f Saving %s ...' % (epoch, log_time, train_epoch_loss, test_epoch_loss, ckpt_file)))
        self.saver.save(self.sess, ckpt_file, global_step=epoch)