YOLOv3训练自己的模型

3.0 前言

        本文是YOLOv3系列第3篇,记录YOLOv3如何训练自己的模型。

        YOLOv3系列第1篇:win10下YOLOv3下载与编译

        YOLOv3系列第2篇:YOLOv3的应用

        YOLOv3系列第3篇:YOLOv3训练自己的模型


        建议参考github上作者的说明,写的十分清楚。

        

        参考的网页:

        https://github.com/AlexeyAB/darknet/blob/master/README.md

        https://blog.csdn.net/lilai619/article/details/79695109#commentBox

        https://blog.csdn.net/hrsstudy/article/details/65447947

        

3.1 配置cfg文件

        3.1.1 复制yolov3.cfg(...\darknet-master\cfg目录下)文件并重命名为yolo-obj.cfg(或者其他名字,只要各处对应即可),复制到darknet.exe相同目录下(或者其他目录,输入命令时对应即可)。

        3.1.2 修改batch=64,subdivisions=8。

        3.1.3 修改classes和filters,共三处。如果检测两类物体,则classes=2,

                    filters=(classess+5)*3=(2+5)*3=21。

        3.1.4 上述修改具体行数参考github即可。


3.2 配置obj.name文件和obj.data文件(命名也可以为其他,只要对应即可)

        新建obj.names文件和obj.data文件,放在目录...\darknet-master\build\darknet\x64\data下。

        obj.names内容(每行一个类的名字,名字随便写,随时可以改)

        

        obj.data内容(valid是为了训练完成后测试模型效果)

        

    

3.3 准备图片和对应的标签文件

        每张图片对应一个同名txt文件,txt文件存储的是类的坐标信息(详见github),可以在官网上下载专用的软件yolo_mark标记,放在目录...\darknet-master\build\darknet\x64\data\obj下。
        

        txt文件内容

        

        标记标签的软件界面:

        

        

3.4 准备存储图片路径的文件

      新建train.txt文件(名字要和obj.data中对应)放在目录...\darknet-master\build\darknet\x64\data下(命名和路径与obj.data中对应)存储的数据为训练的图片相对于darknet.exe的位置,每行一条数据。
                

3.5 准备预训练的模型

        在github下载darknet53.conv.74后放在目录...\darknet-master\build\darknet\x64下即可。

        

 

3.6 训练过程

       3.6.1  训练命令(需要首先进入darknet.exe同一目录):

    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74
        默认显示avg loss的图像,添加-dont_show则不显示
    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show

        命令解释:

        darknet.exe detector train:表示训练(train改为test为测试)
        data/obj.data:data文件的路径
        yolo-obj.cfg:cfg文件的路径
        darknet53.conv.74:使用的预模型路径

        3.6.2 可能出现的错误情况:

        可能出现内存不足的情况,解决:
        修改cfg文件:
        修改subdivisions为16或32或64;
        如果依旧不足,修改三个[yolo](修改classes的那个地方)下的random,修改为0(含义 :关闭多尺度训练)

        3.6.3 训练界面

        

        3.6.4 训练历程与部分参数解释

        每迭代100次会存储一个模型,avg loss是一个错误率的指标,越低越好,刚开始会很大,下降也很快,最终降到0.***,每个类一般迭代2000次,所以实训项目需要4000次。使用GTX 950m,大约每100次迭代耗时70分钟。

        Region xx: cfg文件中yolo-layer的索引;
        Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
        Class: 标注物体的分类准确率,越大越好,期望数值为1;
        obj: 越大越好,期望数值为1;
        No obj: 越小越好;
        .5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
        0.75R: 以IOU=0.75为阈值时候的recall;

        count:正样本数目。

        

        3.6.5 直观地查看训练结果(输出图片)

    darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
         yolo-obj_8000.weights:查看的模型的路径。

        输入后会提示输入图片路径,输入即可。


        3.6.6 中断后在之前的基础上继续训练:

   darknet.exe detector train data/obj.data yolo-obj.cfg yolo-obj_2000.weights

        yolo-obj_2000.weights:之前的模型路径。


        3.6.7 查看模型精确效果(输出数据)

        按照准备训练数据的方法准备测试数据(图片与对应标签,存储图片路径的文件);
        修改data文件的valid;
        使用如下命令测试:

    darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
         backup\yolo-obj_7000.weights:测试的模型的路径(相对于darknet.exe)。

        界面:

        

        由于可能出现过拟合的情况,所以最好的模型不一定在后边,

        可以多测试几组,选择一个性能较好的模型。


        3.6.8 训练结果展示

        迭代100次、400次、800次效果

        

        迭代1200次、1600次、2300次效果

        



    
  • 9
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值