用darknet框架中的YOLOv3对自己的数据集进行训练和预测

本文详细介绍了如何使用darknet框架中的YOLOv3模型,针对自定义数据集进行训练和预测。包括下载darknet源码、修改配置文件、准备数据集、训练模型、批量输出txt和jpg格式的预测结果,以及计算mAP值的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reference

https://pjreddie.com/darknet/yolo/ 

https://blog.youkuaiyun.com/weixin_42731241/article/details/81352013

https://blog.youkuaiyun.com/mieleizhi0522/article/details/79989754

https://blog.youkuaiyun.com/yinhuan1649/article/details/82258703

目录

Reference

★训练阶段★

1. 下载darknet源码

2. 修改darknet的Makefile文件

3. 准备数据集

4. 修改voc_label.py

5. 下载预训练模型

6. 修改./darknet/cfg/voc.data文件

7. 修改./darknet/data/voc.name文件

8. 修改./darknet/cfg/yolov3-voc.cfg文件

9. 开始训练

★测试阶段(批量输出txt)★

1. 制作test.txt文件

2. 修改./darknet/cfg/voc.data文件

3. 修改./darknet/cfg/yolov3-voc.cfg文件

4. 执行测试语句

5. 转换预测结果格式

★测试阶段(批量输出jpg)★ 

1. 制作test.txt文件

2. 修改./darknet/example/detector.c文件

3. 还是在detector.c中添加代码

 4. 重新编译整个darknet

5. 执行测试命令

★计算mAP★

1. 准备工作

2. 新建compute_mAP.py

3. 运行


★训练阶段★

1. 下载darknet源码

在命令窗口(terminal)中进入你想存放darknet源码的路径,然后在该路径下输入依次输入以下命令:

git clone https://github.com/pjreddie/darknet
cd darknet

上述命令首先从darknet的源码地址复制一份源码到本地,下载下来的是一个名为darknet的文件。然后进入这个名为darknet的文件夹。

2. 修改darknet的Makefile文件

Note:如果不需要darknet在GPU上运行,则略过此步骤,只需执行make命令。

在命令窗口输入以下命令打开Makefile文件:

vi Makefile

将Makefile文件开头的GPU=0改为GPU=1,如下所示:

GPU=1
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0

修改完之后,需要执行make命令才可以生效。

make

3. 准备数据集

在./darknet/scripts文件夹下创建文件夹,命名为VOCdevkit,然后再在VOCdevkit文件夹下创建一系列文件夹,整个目录结构如下所示:

VOCdevkit
-VOC2019 # 这个文件夹的年份可以自己取
--Annotations # 在这个文件夹下存放所有的xml文件
--ImageSets
---Main # 在这个文件夹下新建两个TXT文件
----train.txt
----val.txt
--JPEGImages # 在这个文件夹下存放所有的图片文件

上述文件及文件夹创建好之后,下面来对我们的数据集生成train.txt和val.txt,这两个文件中存放训练图像和测试图像的文件名(不含.jpg后缀)。

新建一个create_txt.py文件(名字可以自己随便取),然后将以下代码复制进去(注意相应路径的修改

import os
from os import listdir, getcwd
from os.path import join
if __name__ == '__main__':
    source_folder='/home/darknet/scripts/VOCdevkit/VOC2019/JPEGImages/'     # 修改为自己的路径
    dest='/home/darknet/scripts/VOCdevkit/VOC2019/ImageSets/Main/train.txt' # 修改为自己的路径
    dest2='/home/darknet/scripts/VOCdevkit/VOC2019/ImageSets/Main/val.txt'  # 修改为自己的路径
    file_list=os.listdir(source_folder)       
    train_file=open(dest,'a')                 
    val_file=open(dest2,'a')   
    count = 0               
    for file_obj in file_list:
        count += 1                
       
        file_name,file_extend=os.path.splitext(file_obj)
        
        if(count<800):  # 可以修改这个数字,这个数字用来控制训练集合验证集的分割情况                   
            
            train_file.write(file_name+'\n')  
        else :
            val_file.write(file_name+'\n')    
    train_file.close()
    val_file.close()

制作好create_txt.py文件后,在命令行执行该文件:

python create_txt.py

执行完毕之后可以看到刚刚我们新建的train.txt和val.txt文件中被写进了我们的数据集图片的文件名。

4. 修改voc_label.py

打开scripts文件夹下的 voc_label.py 文件,修改以下信息:

sets=[('2019', 'train'), ('2019', 'val')] # 此处的2019对应前面新建文件夹时的2019,train和val对应两个TXT文件的文件名

classes = ["car", "people"] # 此处为数据集的类别名称,一定要与xml文件中的类别名称一致,有几类就写几类

os.system("cat 2019_train.txt 2019_val.txt > train.txt") # 此处是将两个txt连接成一个txt,如果你训练时不用val.txt中的数据,可以注释掉这句话。

# 另外,删除另外一条os.system(...)语句。 

保存修改后,运行该文件:

python voc_label.py

执行完毕之后,会生成2019_train.txt、2019_val.txt、train.txt 三个文件,如下图:

 

5. 下载预训练模型

为了加速训练过程,可以在darknet官网上下载预训练模型,在该预训练模型上再进行训练。

在命令窗口输入以下命令:

wget https://pjreddie.com/media/files/darknet53.conv.74 

下载过程可能非常慢,可以在网盘中下载:链接:https://pan.baidu.com/s/1HImtoeaYnk0u8540yXn2yw  提取码:pyhl 

下载完之后,将该文件放在 ./darknet 目录下。

6. 修改./darknet/cfg/voc.data文件

将voc.data 文件做如下修改:

classes= 2 # 你的数据集的类别数
train  = /darknet/scripts/2019_train.txt # 第4步中生成的txt文件路径
valid  = /darknet/scripts/20
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值