|
2 | 2 | import cv2
|
3 | 3 | import torch
|
4 | 4 | import numpy as np
|
| 5 | +import datetime |
5 | 6 | from torch.multiprocessing import Pool
|
6 | 7 |
|
7 | 8 | from darknet import Darknet19
|
|
56 | 57 | else:
|
57 | 58 | exp = cc.open_experiment(cfg.exp_name)
|
58 | 59 |
|
| 60 | +batch_per_epoch = imdb.batch_per_epoch |
59 | 61 | train_loss = 0
|
60 | 62 | bbox_loss, iou_loss, cls_loss = 0., 0., 0.
|
61 | 63 | cnt = 0
|
62 | 64 | t = Timer()
|
| 65 | +step_cnt = 0 |
63 | 66 | for step in range(start_epoch * imdb.batch_per_epoch, cfg.max_epoch * imdb.batch_per_epoch):
|
64 | 67 | t.tic()
|
65 | 68 | # batch
|
|
84 | 87 | loss.backward()
|
85 | 88 | optimizer.step()
|
86 | 89 | cnt += 1
|
87 |
| - |
| 90 | + step_cnt += 1 |
88 | 91 | duration = t.toc()
|
89 | 92 | if step % cfg.disp_interval == 0:
|
90 | 93 | train_loss /= cnt
|
91 | 94 | bbox_loss /= cnt
|
92 | 95 | iou_loss /= cnt
|
93 | 96 | cls_loss /= cnt
|
94 |
| - print('epoch: %d, step: %d, loss: %.3f, bbox_loss: %.3f, iou_loss: %.3f, cls_loss: %.3f (%.2f s/batch)' % ( |
95 |
| - imdb.epoch, step, train_loss, bbox_loss, iou_loss, cls_loss, duration)) |
| 97 | + print('epoch %d[%d/%d], loss: %.3f, bbox_loss: %.3f, iou_loss: %.3f, cls_loss: %.3f (%.2f s/batch, rest:%s)' % ( |
| 98 | + imdb.epoch, step_cnt, batch_per_epoch, train_loss, bbox_loss, iou_loss, cls_loss, duration, |
| 99 | + str(datetime.timedelta(seconds=int((batch_per_epoch - step_cnt) * duration))))) |
96 | 100 |
|
97 | 101 | if use_tensorboard and step % cfg.log_interval == 0:
|
98 | 102 | exp.add_scalar_value('loss_train', train_loss, step=step)
|
|
114 | 118 | save_name = os.path.join(cfg.train_output_dir, '{}_{}.h5'.format(cfg.exp_name, imdb.epoch))
|
115 | 119 | net_utils.save_net(save_name, net)
|
116 | 120 | print('save model: {}'.format(save_name))
|
117 |
| - |
| 121 | + step_cnt = 0 |
118 | 122 |
|
119 | 123 | imdb.close()
|
0 commit comments