YOLO训练可视化

YOLO(You look only once)是一个先进的深度学习目标检测方法,目前已经有Yolo v1/Yolo v2两个版本的迭代,和基于Yolo v2的Yolo 9000版本。

YOLO是基于C语言编写的深度学习框架Darknet实现的。不过遗憾的是这个框架基本都是大神pjreddie在维护,没有很好的发展框架的文档/处理issues/制定contribute规则,因此在YOLO的改进和调试上,远远不及基于Tensorflow/Caffe框架的工程。

在YOLO的实际运用中,模型再训练是很多人都会进行的操作,然而由于darknet并不像Tensorflow一样提供Tensorboard那么直观的可视化工具,YOLO的模型训练并不是很容易。本文提供一些辅助YOLO训练可视化的代码和使用方法,使训练更加清晰明了。

最新消息是,Yolo v2正式合并进入OpenCV3.4pull版本中,可见该算法已经得到了广泛认同

yolo-cover

训练日志保存

在训练命令最后加上>> [dir]/[log-name.log]的附加命令,例如:

1
/darknet detector train my/mot/person.data my/mot/densenet201_yolo.cfg backup/mot/densenet201_yolo_final.weights >> log/mot-ramdon.log

执行上述命令后,训练过程中的打印日志都会保存在log\mot-ramdon.log文件中

日志图形化展示

采用如下代码,能将训练日志文件进行图形化的展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import argparse
import sys
import matplotlib.pyplot as plt
def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument(
"-file",
help = "path to log file"
)
args = parser.parse_args()
f = open(args.file)
lines = [line.rstrip("\n") for line in f.readlines()]
numbers = {'1','2','3','4','5','6','7','8','9'}
iters = []
loss = []
fig,ax = plt.subplots()
prev_line = ""
for line in lines:
args = line.split(' ')
if args[0][-1:]==':' and args[0][0] in numbers :
iters.append(int(args[0][:-1]))
loss.append(float(args[2]))
ax.plot(iters,loss)
plt.xlabel('iters')
plt.ylabel('loss')
plt.grid()
ticks = range(0,250,10)
#ax.set_yticks(ticks)
plt.show()
if __name__ == "__main__":
main(sys.argv)

执行python plot.py -file [log-filename]来可视化显示训练过程:

1
python plot.py -file log/mot-ramdon.log

visualization

可以通过面板工具放大局部,查看训练是否进入瓶颈,或者还在缓慢下降。

visualization

-END-
enjoy