darknet框架中YOLO3的参数理解

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次效果

猜你喜欢

转载自blog.csdn.net/weixin_39128119/article/details/85220814