那些年踩过的yolo坑

博主用的是yolo3,有许多心得在此记录一下

配置:

系统 ubuntu16.04 x64
内存 128G
CPU Intel® Xeon® CPU E5-2650 v4 @ 2.20GHz × 48
磁盘 4T
GPU TITAN V*2 单卡显存12G
compute_capability 700
yolo yolo v3
github AlexeyAB/darknet 和pjreddie/darknet(原版)
link https://github.com/AlexeyAB/darknet和https://github.com/pjreddie/darknet

1、训练自己的数据前,k-means聚类寻找anchor box

不同于yolo v1,2代引入了anchor box,从此预测的不是物体的位置,而是相对于anchor box 的偏移量,因此anchor box 的选择至关重要(其实用默认值也彳亍),可以加快训练收敛速度,对于自己的训练集,可以先用kmeans聚类划分9个新的anchor box框坐标,具体命令参考AlexeyAB大佬的命令如下:
./darknet detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416
“-num_of_clusters 9” 代表9个类,后面代表图像尺寸,得到anchor box的坐标后,将其替换你cfg文件最下面的anchor box

2、对于大分辨率大尺度照片的训练与检测

yolo对于416*416分辨率支持的最好,这个数字在cfg文件开头里的width和height设置,可以根据显存大小调整,但必须是32的倍数。如果训练时出现显存不够的情况可以每次减小32直到可以训练。开始训练时要耐心等待几分钟,直到nan数目合理、训练不停止,loss正常下降再离开等候
等训练完后,如果对于大分辨图片或者小目标检测不出来的情况,除权重训练不到位的情况,还可能是因为测试时输入的width和height太小,修改cfg里test下的width和height,从测试样本的分辨率往下设置,直到不再报显存不够的错误为止,例如:测试40962160的照片,可以先设为40962048,若是显存不够,可减少32或除以2.

3、计算mAP

计算map可以利用AlexeyAB下的命令:
./darknet detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights

会出现以下信息:

 detections_count = 266, unique_truth_count = 94  
class_id = 0, name = fire, ap = 18.57%   	 (TP = 4, FP = 3) 

 for conf_thresh = 0.25, precision = 0.57, recall = 0.04, F1-score = 0.08 
 for conf_thresh = 0.25, TP = 4, FP = 3, FN = 90, average IoU = 40.95 % 

 IoU threshold = 50 %, used Area-Under-Curve for each unique Recall 
 mean average precision ([email protected]) = 0.185692, or 18.57 % 
Total Detection Time: 3.000000 Seconds

你可能感兴趣的:(深度学习)