这是关于训练CNN的更普遍的问题,但我使用的是YOLO。 我已经开始通过标记来自不同摄像机视频(在类似环境中)的一些数据来开始“人”检测的训练集...。每次我为新摄像机添加新数据时,我都在重新训练YOLO,这实际上改善了检测这个相机对于训练,我将数据随机分为训练/验证集。我使用验证集来计算准确性。这并不是过度拟合,因为训练中还使用了所有先前的数据。
现在,我已经收集了超过10万个标记数据。由于我的数据集很大,我当时不希望再进行培训。但是看起来我仍然需要这样做。如果我要获取新的摄像机视频,将500-1000个样本标记为标签,然后将其添加到庞大的数据集中并再次进行训练,则此摄像机的准确性正在提高。 我不明白是不是真的明白。为什么我仍需要向集合中添加新数据?为什么在新数据上准确性会大大提高,而成千上万的现有数据却被“绘制”了呢?因为添加新数据不会提高准确性,我是否可以停止训练?
感谢您分享您的想法和想法!
答案 0 :(得分:1)
有趣的问题。如果您的数据质量很好并且培训过程是“完美的”,那么您将始终能够更好地进行概括。考虑一下所有可能要检测的图像。您仅使用其中的一个示例,希望它足以进行概括。您可以继续增加数据集,并可能增加0.01%,问题是您想何时停止。您的模型精度永远不会达到100%。
我的看法:如果您的项目属于个人,并且没有人依赖它,那么如果您的准确率超过95%,请停止生成更多数据。考虑后期处理以改善结果。由于您正在检测视频,因此可能会尝试跟随人的运动,因此,如果在一帧中未检测到它,并且您从前一帧和后一帧中获得了信息,您也许可以做些花哨的事情。
希望它会有所帮助,加油!
答案 1 :(得分:0)
要创建一个好的模型,您当然需要尽可能多的图像。但是您必须注意模型是否变得过度拟合,这是模型不再学习并且平均损失升高并且 mAP 越来越低,当发生过度拟合时,您必须停止训练并选择保存在darknet / backup /文件夹中的最佳权重。
对于YOLO,应在停止培训时遵循一些准则。最明显的是:
在培训期间,您会看到各种错误指示,并且当不再降低 0.XXXXXXX 平均水平时,您应该停止操作:
Region Avg IOU: 0.798363, Class: 0.893232, Obj: 0.700808, No Obj: 0.004567, Avg Recall: 1.000000, count: 8 Region Avg IOU: 0.800677, Class: 0.892181, Obj: 0.701590, No Obj: 0.004574, Avg Recall: 1.000000, count: 8
9002: 0.211667, 0.060730 avg, 0.001000 rate, 3.868000 seconds, 576128 images Loaded: 0.000000 seconds
9002-迭代编号(批处理数量)
0.060730平均-平均损失(错误)-越低越好
当您看到平均损失0.xxxxxx平均不再在许多次迭代中减少时,您应该停止训练。最终平均损失可以从0.05(对于小模型和简单数据集)到3.0(对于大模型和困难数据集)。我个人认为平均损失为0.06的模型就足够了。
AlexeyAB在他的github存储库上详细解释了所有内容,请https://github.com/AlexeyAB/darknet#when-should-i-stop-training
阅读本节