Yolo3的日誌分析詳解2-主要分析總的損失值、平均損失值等
阿新 • • 發佈:2018-12-17
日誌分析:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import pandas as pd import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec #最大迭代次數 max_batches=15000 # minStep = 18 #其中minStep代表1行Loaded: 0.000024 seconds、10行 Region,1行第n次的結果 1+16+1=18 ''' Loaded: 0.000024 seconds Region 16 Avg IOU: 0.182902, Class: 0.405722, Obj: 0.503862, No Obj: 0.424742, .5R: 0.000000, .75R: 0.000000, count: 13 Region 23 Avg IOU: 0.105590, Class: 0.662942, Obj: 0.520905, No Obj: 0.509580, .5R: 0.000000, .75R: 0.000000, count: 12 Region 16 Avg IOU: 0.130522, Class: 0.408217, Obj: 0.476290, No Obj: 0.424609, .5R: 0.000000, .75R: 0.000000, count: 14 Region 23 Avg IOU: 0.182063, Class: 0.550706, Obj: 0.494642, No Obj: 0.507713, .5R: 0.070175, .75R: 0.000000, count: 57 Region 16 Avg IOU: 0.200967, Class: 0.390888, Obj: 0.475645, No Obj: 0.427092, .5R: 0.062500, .75R: 0.000000, count: 16 Region 23 Avg IOU: 0.143319, Class: 0.580808, Obj: 0.531322, No Obj: 0.509306, .5R: 0.064516, .75R: 0.000000, count: 31 Region 16 Avg IOU: 0.237835, Class: 0.382465, Obj: 0.380643, No Obj: 0.427353, .5R: 0.066667, .75R: 0.000000, count: 15 Region 23 Avg IOU: 0.106707, Class: 0.574932, Obj: 0.548107, No Obj: 0.510025, .5R: 0.000000, .75R: 0.000000, count: 37 Region 16 Avg IOU: 0.163751, Class: 0.414830, Obj: 0.416970, No Obj: 0.425206, .5R: 0.000000, .75R: 0.000000, count: 3 Region 23 Avg IOU: 0.174204, Class: 0.676216, Obj: 0.571296, No Obj: 0.510338, .5R: 0.045455, .75R: 0.000000, count: 22 Region 16 Avg IOU: 0.191540, Class: 0.441109, Obj: 0.392017, No Obj: 0.425114, .5R: 0.047619, .75R: 0.000000, count: 21 Region 23 Avg IOU: 0.144743, Class: 0.646313, Obj: 0.482872, No Obj: 0.507978, .5R: 0.000000, .75R: 0.000000, count: 30 Region 16 Avg IOU: 0.192162, Class: 0.507017, Obj: 0.467949, No Obj: 0.425880, .5R: 0.000000, .75R: 0.000000, count: 10 Region 23 Avg IOU: 0.129258, Class: 0.672717, Obj: 0.588547, No Obj: 0.509534, .5R: 0.000000, .75R: 0.000000, count: 36 Region 16 Avg IOU: 0.182297, Class: 0.803474, Obj: 0.596444, No Obj: 0.424545, .5R: 0.000000, .75R: 0.000000, count: 4 Region 23 Avg IOU: 0.172792, Class: 0.732352, Obj: 0.541576, No Obj: 0.507713, .5R: 0.041667, .75R: 0.000000, count: 24 1: 756.629517, 756.629517 avg, 0.000000 rate, 1.112322 seconds, 64 images ''' #在日誌裡每10個miniStep,即每10次迭代,一次迭代代表1個batch,會出現 2行(分別是Resize 608或者其它尺寸) n=10 step=minStep*n+2#18x10+2 #2 Resize 608 #x%step==0 or x%step==1 #x%step!=0 and x%step!=1 lines=int(step*max_batches/n)#lines =91000=182*500 result = pd.read_csv('/home/zhangping/Desktop/yolo_log/ranPianTiny2.txt', skiprows=[x for x in range(lines) if (x%step==0 or x%step==1)], error_bad_lines=False, names=['Total Loss', 'Avg loss','rate','seconds','images']) #只提取以下類似的行 ''' 1: 756.629517, 756.629517 avg, 0.000000 rate, 1.112322 seconds, 64 images 第n次迭代:總的損失值,平均損失值,學習率、時間、圖片數量 ''' result1=result.iloc[[i for i in range(minStep*max_batches) if (i+1)%18==0]]# #總的損失值 totalLoss = result1['Total Loss'].str.split(': ').str[1]#<class 'pandas.core.series.Series'> totalloss = totalLoss.astype(float) #平均損失值 avgLoss = result1['Avg loss'].str.split(' ').str[1]#replace avgLoss = avgLoss.astype(float) #學習率 rate = result1['rate'].str.split(' ').str[1] rate = rate.astype(float) #時間 seconds = result1['seconds'].str.split(' ').str[1] seconds = avgLoss.astype(float) #圖片數量 images = result1['images'].str.split(' ').str[1] images = images.astype(float) # figure = plt.figure() gs1 = gridspec.GridSpec(3,2) #畫出總的損失值 ax_totalLoss = figure.add_subplot(gs1[0]) ax_totalLoss.set_xlabel('totalLoss') ax_totalLoss.set_ylabel('totalLoss') ax_totalLoss.plot(avgLoss.values,label='totalLoss') #畫出平均損失值 ax_avgloss = figure.add_subplot(gs1[1]) ax_avgloss.set_xlabel('avgloss') ax_avgloss.set_ylabel('avgloss') ax_avgloss.plot(avgLoss.values,label='avgloss') #畫出學習率 ax_rate = figure.add_subplot(gs1[2]) ax_rate.set_xlabel('rate') ax_rate.set_ylabel('rate') ax_rate.plot(rate.values,label='rate') #畫出時間 ax_seconds = figure.add_subplot(gs1[3]) ax_seconds.set_xlabel('seconds') ax_seconds.set_ylabel('seconds') ax_seconds.plot(seconds.values,label='seconds') #畫出圖片數量 ax_images = figure.add_subplot(gs1[4]) ax_images.set_xlabel('images') ax_images.set_ylabel('images') ax_images.plot(images.values,label='images') plt.show()
總的損失值、平均損失值等圖例:
從以上的圖例可以看出 總的損失值和平均損失值都在下降~