我正在尝试使用AlexeyAB的darknet来检测图像中的对象。但是它只能检测到2到3个对象。它无法检测到小对象(例如帽子)。我使用的是以下命令:
./darknet detector test ./cfg/coco.data ./cfg/yolov3.cfg /weight_path/ /image_path/
我该怎么办?
回答:
根据AlexeyAB页面,对于小对象,你可以这样做:
对于训练小对象(图像调整到416×416后,小于16×16的对象) – 将layers设置为-1, 11,而不是https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L720,并将stride设置为4,而不是https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L717
对于训练小对象和大对象,你可以使用修改后的模型:
此外,训练完成后,在检测阶段,你可以执行以下操作:
通过在你的.cfg文件中设置(height=608和width=608)或(height=832和width=832)或(任何32的倍数的值)来增加网络分辨率 – 这会提高精度,并使检测小对象成为可能:链接
无需再次训练网络,只需使用已经为416×416分辨率训练好的.weights文件
但为了获得更高的精度,你应该以更高的分辨率608×608或832×832进行训练,注意:如果出现内存不足错误,
则在.cfg文件中应增加subdivisions=16, 32或64:链接