YOLOv5s训练未生成result文件
runs文件下未生成results.csv文件
·
第一次写博文,记录下网络训练遇到的问题,方便复盘。
训练使用的是yolov5_obb_prune_tracking-master旋转目标框检测算法,
项目地址传送门:yolov5_obb旋转框检测(kld loss、probloss),剪枝,跟踪_yolov5obb-CSDN博客
问题:
在训练过程中,runs目录下没有生成result.csv文件。对于这个问题似乎没什么人提问,在项目开源和社区也没有找到解决的办法。
解决办法:
经过查看和对比YOLOv5官方开源代码,发现使用的yolov5_obb_prune_tracking-master项目中train.py的一行代码被注释掉了,取消注释就好
# Update best mAP
fi = fitness(np.array(results).reshape(1, -1)) # weighted combination of [P, R, mAP@.5, mAP@.5-.95]
if fi > best_fitness:
best_fitness = fi
log_vals = list(mloss) + list(results) + lr
#callbacks.run('on_fit_epoch_end', log_vals, epoch, best_fitness, fi)
修改为:
# Update best mAP
fi = fitness(np.array(results).reshape(1, -1)) # weighted combination of [P, R, mAP@.5, mAP@.5-.95]
if fi > best_fitness:
best_fitness = fi
log_vals = list(mloss) + list(results) + lr
callbacks.run('on_fit_epoch_end', log_vals, epoch, best_fitness, fi)
运行出现报错:
接着改,这个报错是因为在字符串格式化时出现了问题,str.format()
方法来替代 %
运算符进行字符串格式化。
修改utils/loggrts文件夹下的 on_fit_epoch_end 函数,重新定义s
def on_fit_epoch_end(self, vals, bn_weights, epoch, best_fitness, fi):
# Callback runs at the end of each fit (train+val) epoch
x = {k: v for k, v in zip(self.keys, vals)} # dict
if self.csv:
file = self.save_dir / 'results.csv'
n = len(x) + 1 # number of cols
# s = '' if file.exists() else (('%20s,' * n % tuple(['epoch'] + self.keys)).rstrip(',') + '\n') # add header
s = '' if file.exists() else (('{:<20}' * n).format(*['epoch'] + self.keys)).rstrip(',') + '\n'
with open(file, 'a') as f:
f.write(s + ('%20.5g,' * n % tuple([epoch] + vals)).rstrip(',') + '\n')
if self.tb:
for k, v in x.items():
self.tb.add_scalar(k, v, epoch)
self.tb.add_histogram('bn_weights/hist', bn_weights, epoch, bins='doane')
if self.wandb:
self.wandb.log(x)
self.wandb.end_epoch(best_result=best_fitness == fi)
完成、
但是还是有个问题,就是results.csv文件中的各列标题没有做好,好在影响不大,有时间再改。
更多推荐
所有评论(0)