使用Caffe自带的tools来产生loss和accuracy曲线

举例说明:

本人训练时,使用的文件如下:

[ trainsh->solve.py->solver.prototxt->train_val.prototxt ]

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

1. 训练过程中保存日志

执行如下命令:

bash ./train.sh 2>&1 |tee logs/train.log

将会在logs文件夹下生成train.log 的日志文件

注意: 分析日志文件发现,训练过程中每display一次,会保存一次日志

 

2. 创建绘制曲线文件夹myshow及复制相关文件

创建绘制曲线文件夹myshow

把你的caffe目录下的 /tools/extra/ 目录下的

extract_seconds.py

parse_log.sh

plot_training_log.py.example

parse_log.py (非必须)

复制到myshow目录下,再把训练得到的日志文件train.log文件复制到myshow目录下.

 

caffe的 /tools/extra/ 目录:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

myshow目录:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

 

3. 修改文件

3-1. 修改parse_log.sh文件:

#第29行的内容修改
#grep '] Solving ' $1 > aux3.txt
grep 'net.cpp:' $1 > aux3.txt


#第40行的内容修改
#grep '] Solving ' $1 > aux.txt
grep 'net.cpp:' $1 > aux.txt

3-2. 修改extract_seconds.py文件:

#第38行修改
#if line.find('Solving') != -1:
if line.find('Initializing') != -1:

 

3-3. 解析log文件

./parse_log.sh train.log ./

执行上述命令,即可成功解析log,并生成2个文件: .test和.train,如下所示:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

3-4. 执行命令,可视化曲线:

./plot_training_log.py.example 2 loss.png train.log

注意:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

 

说明:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

 

举例说明:

./plot_training_log.py.example 5 loss.png train.log

可视化结果:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

 

4. 遇到的错误总结

4-1. 未对caffe自带的绘图文件(

extract_seconds.py

parse_log.sh

plot_training_log.py.example

)进行修改,直接执行log解析,出现如下错误:

$ ./parse_log.sh train.log ./
Traceback (most recent call last):
  File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 64, in <module>
    extract_seconds(sys.argv[1], sys.argv[2])
  File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 49, in extract_seconds
    assert start_datetime, 'Start time not found'
AssertionError: Start time not found
paste: aux4.txt: No such file or directory
rm: cannot remove 'aux4.txt': No such file or directory
Traceback (most recent call last):
  File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 64, in <module>
    extract_seconds(sys.argv[1], sys.argv[2])
  File "/home/ubuntu/xxx/examples/myshow/extract_seconds.py", line 49, in extract_seconds
    assert start_datetime, 'Start time not found'
AssertionError: Start time not found
paste: aux3.txt: No such file or directory
rm: cannot remove 'aux3.txt': No such file or directory

解决方法就是:

根据上述 3-1, 3-2 的方法进行修改

 

个人分析其原因:

我的train.log中使用的几个关键词有变化:

是'Initializing',不是'Solving'

是的 'net.cpp:'  , 不是 '] Solving '

 

4-2.  我的train.log中没有记录任何有关 'Test net output #0' ,'Test net output #1' 的信息,所以在执行  ./plot_training_log.py.example 0 loss.png train.log 的时候出错.

$ ./plot_training_log.py.example 0 loss.png out.log
0 loss.png ['out.log']
Test accuracy  vs. Iters
Test
['Test accuracy', 'Iters'] Iters Test accuracy
Test accuracy  vs. Iters
Test
{'Iters': 0, 'Seconds': 1, 'Test loss': 3, 'Test accuracy': 2}
----1 out.log.test 0 2
Traceback (most recent call last):
  File "./plot_training_log.py.example", line 198, in <module>
    plot_chart(chart_type, path_to_png, path_to_logs)
  File "./plot_training_log.py.example", line 122, in plot_chart
    data = load_data(data_file, x, y)
  File "./plot_training_log.py.example", line 92, in load_data
    data[1].append(float(fields[field_idx1].strip()))
IndexError: list index out of range

同时发现,解析得到的.test文件内容也缺少一些内容:

caffe 训练过程中输出log日志,并可视化loss和accuracy曲线

有解析结果可知道,缺少了TestAccuracy ,TestLoss 两列内容.

所以,选择0-3的类型执行都会出错.(0-3的类型都是与Test(或.test文件的内容)有关的)

 

5. 参考链接

Caffe和py-faster-rcnn日常使用备忘录

https://blog.csdn.net/sushiqian/article/details/78597024

https://www.cnblogs.com/txg198955/p/6185787.html

https://blog.csdn.net/qq745021926/article/details/78076979