• YOLOv3自有数据集训练


    YOLO的作者表明他已经放弃CV,darknet是一个C语言库。无论从哪个方面来看,YOLO都是非常奇葩的一个类库。俄罗斯人AlexeyAB也属于其中一部分,他的代码以win平台为主,有很多有趣特点。

    一、基本情况
    非常详细地讲解了AlexeyAB版的darknet的配置方法。最为直观的是可以实时显示loss和mAP图。
     
     
    它的中文翻译版本(有所简化)
    其中有几点值得注意:

    建议为每个类分配至少2000次迭代,但是整体迭代次数不应少于4000次。如果想要更加精准地定义什么时候该停止训练,需要使用以下方法:

    1. 训练过程中,你将会看到日志中有很多错误的度量指标,你需要在avg指标不再下降的时候停止训练,如下图所示:
    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.60730 avg, 0.001000 rate, 3.868000 seconds, 576128 images Loaded: 0.000000 seconds
    • 9002 - 代表当前的迭代次数。
    • 0.60730 avg - average loss (error) - 这个指标是平均loss, 其越低越好。
      在这个指标不再下降的时候就可以停止训练了。最终的值大概分布在0.05-3.0之间,小而简单的模型通常最终loss比较小,大而复杂的loss可能会比较大。

    训练完成后,你就可以从 darknetuilddarknetx64ackup 文件夹中取出比较靠后的几个weights文件,并对他们进行测试,选择最好的权重文件。

    举个例子,你在9000次迭代后停止训练,但最好的权重可能是7000,8000,9000次的值。这种情况的出现是由于过拟合导致的。过拟合是由于过度学习训练集的分布,而降低了模型在测试集的泛化能力。

    Early Stopping Point示意图:

    为了得到在early stopping point处的权重:

    2.1 首先,你的obj.data文件中应该含有valid=valid.txt一项,用于测试在验证集的准确率。如果你没有验证集图片,那就直接复制train.txt重命名为valid.txt。

    2.2 假如你选择在9000次迭代后停止,那可以通过以下命令测试7000,8000,9000三个模型的相关指标。选择最高mAP或者最高IoU的模型最为最终模型。

    • darknet.exe detector map data/obj.data yolo-obj.cfg backupyolo-obj_7000.weights
    • darknet.exe detector map data/obj.data yolo-obj.cfg backupyolo-obj_8000.weights
    • darknet.exe detector map data/obj.data yolo-obj.cfg backupyolo-obj_9000.weights

    或者你可以选择使用-map标志符来直接实时测试mAP值:

    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -map

    然后你就能得到loss曲线和mAP曲线,mAP每4个epoch对验证集进行一次测试,并将结果显示在图中。

    指标解释

    mAP 是Pascal VOC竞赛的默认指标,与MS COCO竞赛中的AP50指标是一致的。

    Precision和Recall参数在Pascal VOC竞赛中略微不同,但 IoU 的意义都是相同的.

    二、训练结果
    1、AlexeyAB标注工具训练结果:
    数据过好,让人怀疑是否过拟合;然后缺乏F1-force,搞一个。
    2、同样的数据集(但是不同标注方法)easydl训练结果
     





  • 相关阅读:
    override 和 重载的区别? Kevin
    EntityFramework SaveChange()方法不能更新的问题 Kevin
    Visual Studio 2010中找不到 entity framework模版 Kevin
    在数据库发生更改时更新 .edmx 文件(MSDN) Kevin
    MVC 3 RoutingSystem Kevin
    用递归的方法计算第30位斐波那契数列的值 Kevin
    log4net的日志输出格式log4net.Layout.PatternLayout用法 Kevin
    JavaScript: The Definitive Guide, 6th Edition Chapter 1 Note 1 Kevin
    闲谈生意人、商人和企业家的区别
    stlport 5.10 编译 更加容易了(visual studio 2005)
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/12390127.html
Copyright © 2020-2023  润新知