目录

1.训练生成log日志

2.训练结果可视化

2.1从log日志提取loss数据

2.2 将loss文件和iou文件的数据取出

2.3 脚本执行过程常见问题


环境:ubuntu系统

1.训练生成log日志

训练的脚本命令如下,在darknet应用程序文件目录下执行即可:

/darknet detector train cfg/voc.data cfg/yolov3-tiny.cfg yolov3-tiny.conv.15 -gpus 0,1,2 >> train.log

运行后,原本在终端生成的训练结果会全部写到当前目录的train.log文件下,训练过程可随时查看log文件。

2.训练结果可视化

这个过程设计到两个python脚本代码,先上代码吧

2.1从log日志提取loss数据

import inspect
import os
import random
import sys
def extract_log(log_file,new_log_file,key_word):
    with open(log_file, 'r') as f:
      with open(new_log_file, 'w') as train_log:
  #f = open(log_file)
    #train_log = open(new_log_file, 'w')
        for line in f:
    # move multi gpu sy log
          if 'Syncing' in line:
            continue
    # move zero error log
          if 'nan' in line:
            continue
          if key_word in line:
            train_log.write(line)
    f.close()
    train_log.close()
 
extract_log('train.log','train_log_loss.txt','images')
extract_log('train.log','train_log_iou.txt','IOU')

训练过程log

 提取的loss文件

提取的iou文件

2.2 将loss文件和iou文件的数据取出

将loss文件的avg数值取出,将iou文件的Avg IOU数值取出,代码如下:

可视化训练的loss

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
#以逗号为标志分割各个数值
result = pd.read_csv('train_log_loss.txt',error_bad_lines=False, names=['loss', 'avg', 'rate', 'seconds', 'images'])
result.head()
 
#result['loss']=result['loss'].str.split(' ').str.get(1)
result['avg']=result['avg'].str.split(' ').str.get(1)
#result['rate']=result['rate'].str.split(' ').str.get(1)
#result['seconds']=result['seconds'].str.split(' ').str.get(1)
#result['images']=result['images'].str.split(' ').str.get(1)


#result['loss']=pd.to_numeric(result['loss'],errors='ignore')
result['avg']=pd.to_numeric(result['avg'],errors='ignore')
#result['rate']=pd.to_numeric(result['rate'],errors='ignore')
#result['seconds']=pd.to_numeric(result['seconds'],errors='ignore')
#result['images']=pd.to_numeric(result['images'],errors='ignore')

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
#ax.plot(result['avg'].values,label='avg_loss')
x=np.arange(1, len(result)*3, 3)#使用3个显卡同时训练
ax.plot(x,result['avg'].values)
ax.legend(loc='best')
ax.set_title('The loss curves')
ax.set_xlabel('batches')
plt.show()
fig.savefig('avg_loss')

 可视化训练的iou结果

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
#以逗号为标志分割各个数值
result = pd.read_csv('train_log_iou.txt',error_bad_lines=False, names=['avg_iou','class','obj','no_obj','0.5r','0.75r','count'])
result.head()

print[result['avg_iou']]
result['avg_iou']=result['avg_iou'].str.split(' ').str.get(4)
print[result['avg_iou']]

result['avg_iou']=pd.to_numeric(result['avg_iou'],errors='ignore')


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
#ax.set_xlim((0,lines))
#ax.set_ylim((0.0,1.0))
x=np.arange(1, len(result)/2 + 1, 0.5)
ax.plot(x, result['avg_iou'].values)
#ax.legend(loc='best')
ax.set_title('The iou curves')
ax.set_xlabel('batches')
ax.set_ylabel('avg_iou')
plt.show()
fig.savefig('avg_iou')

2.3 脚本执行过程常见问题

  • 缺少python的运行库matplotlib和pandas

安装了pip的,直接pip install xxx即可,安装完后发现还有问题“No module named _tkinter”,当使用pip安装时发现安装不上,查阅相关资料后发现,使用以下命令就能安装:

sudo apt-get install python-tk  

如果是Python3

sudo apt-get install python3-tk 

安装完成后发现脚本可以运行了。

show下可视化结果: 

 3 参考文章:

https://blog.csdn.net/qq_39161737/article/details/78814743

https://blog.csdn.net/qq_33144323/article/details/80556954

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐