YoloV3运行自己的数据集(详细)

因为实习工作的需要,要做一些目标检测的项目。用到了一些目标检测的网络,那就记录一下,这次就先记录一下yolov3的训练之路吧。

1.数据集的准备

安装labelImg软件,来标注自己的数据集。

pip install PyQt5 -i http://pypi.douban.com/simple/
pip install labelimg

安装完之后再终端输入labelimg就行,之后就可以开始标注数据了。

是选择图片所在位置, 选择保存 xml文件的位置。 创建矩形框用于选择目标位置。 创建形如:

darknet
----VOCdevkit
--------VOC2007
------------Annotations
------------JPEGImages
------------ImageSets
----------------Main
------------labels
------------test.py
----voc_label.py
的文件夹。

之后下载提取码:tfcj对应的脚本。
我们将图片放入JPEGImages,将生成的xml文件放入Annotations。并且将test.py和voc_label.py放入VOC2007文件夹下。
    1.运行test.py文件,那么将在ImageSets\Main下生成train.txt、test.py、val.txt和trainval.txt,其中trainval.txt是test.py和val.txt的合并。
    2.YOLOV3的label标注的一行五个数分别代表类别(从 0 开始编号),BoundingBox 中心X坐标、中心Y坐标、宽和高。这些坐标都是0~1的相对坐标。和我们刚才标注的生成的xml文件不同,因此需要运行voc_label.py(必须在训练的机子上运行)生成我们实验需要的标签数据。生成在labels下的txt文件,同时生成2007_train.txt、2007_val.txt和2007_test.txt
最终的文件如下:

到此我们的数据准备工作完成。

2.源码下载与编译

    1.执行:


git clone https://github.com/pjreddie/darknet
cd darknet
#也可以用软件打开进行编辑 如果使用CPU模式。则不用修改Makefile文件
vim Makefile

    2.编辑Makefile文件:

GPU=1 #如果使用GPU设置为1,CPU设置为0
CUDNN=1  #如果使用CUDNN设置为1,否则为0
OPENCV=0 #如果调用摄像头,还需要设置OPENCV为1,否则为0
OPENMP=0  #如果使用OPENMP设置为1,否则为0
DEBUG=0  #如果使用DEBUG设置为1,否则为0
...
NVCC=/usr/local/cuda-11.0/bin/nvcc   #NVCC=nvcc 修改为自己的路径``
...
COMMON+= -DGPU -I/usr/local/cuda-11.0/include/  #修改为自己的路径
...
LDFLAGS+= -L/usr/local/cuda-11.0/lib64 -lcuda -lcudart -lcublas -lcurand #修改为自己的路径

修改完之后,执行:

make 

这就编译完成。
    3.下载预训练权重,测试demo

# 将yolov3.weights放在./darknet下
wget https://pjreddie.com/media/files/yolov3.weights 
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

如果在./darknet下生成predictions.jpg如下:

表示运行成功,下一步就可是运行自己的数据集了.

    4.运行自己的数据
VOCdevkit放入darknet
然后下载预训练数据集:

# darknet53.conv.74放在./darknet下
wget https://pjreddie.com/media/files/darknet53.conv.74

    5.修改参数
1.修改cfg/voc.data

classes= 4 #检测类别
train  = /root/xxx/darknet/2007_train.txt
valid  = /root/xxx/darknet/2007_test.txt
names = data/voc.names
backup = backup

2.修改文件cfg/yolov3-voc.cfg

[net]
# Testing 训练时注释
#  batch=1
#  subdivisions=1
# Training 
batch=64
subdivisions=16

更多的参数解释参考参数解释
同时在这个文件中搜索yolo词,一共有3个每个地方都必须要改2处,

filters=21 # 修改为3*(5+len(classes)) 
activation=linear

[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=2 # 修改为len(classes) person car
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1 # 原来是1,显存小改为0。(是否要多尺度输出。)选择性修改

可修改:random = 1:原来是1,显存小改为0。(是否要多尺度输出。)
3.修改data/voc.names和coco.names

# 修改为自己的类别
aeroplane
bicycle
bird
boat
bottle
bus
car
cat
chair
cow

    6.开始训练

# -gpu可选
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpu 0
# 中断后可重新训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gups 0,1,2,3 backup/yolov3-voc.backup -gpus 0,1,2,3

训练好的模型保存在darknet/backup/
我们用训练好的模型进行测试:

./darknet detect cfg/yolov3-voc.cfg backup/yolov3-voc_xx.weights data/img.jpg

如果想批量获取输出结果,请使用脚本提取码:tfcj中的yolo3.py来获取

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值