YOLO学习之旅——(1)基于YOLOv3和TLR数据集的交通标示检测

基于YOLOv3和TLR数据集的交通标示检测

本文主要用于记录本人在使用YOLOv3测试自己的数据集的一些相关经验,如有不足之处,欢迎大家在评论区批评指正。

1. 官方代码

请参考

  1. YOLO官网:YOLO:Real-Time Object Detection
  2. 官方代码:GitHub:darknet
  3. 本人代码: github上暂未上传,待春暖花开之时,再说。。。

2. 实现平台配置

硬件环境

直接上图吧,就不一个一个写了。。。

本人所用平台

软件环境配置(仅供参考,已有的可跳过)

1.显卡驱动安装
please 百度
2. CUDA 和CUDNN安装
仅供参考,可装可不装,已有的请跳过

3. 安装darknet

3.1 安装须知

Darknet is easy to install with only two optional dependancies:

  • OpenCV if you want a wider variety of supported image types.
  • CUDA if you want GPU computation.

Both are optional so lets start by just installing the base system.

简单来说,首先得有opencv,然后是 GPU(可有可无,当然有更好)

3.2 Installing The Base System

First clone the Darknet git repository here. This can be accomplished by:

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

If this works you should see a whole bunch of compiling information fly by:

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

If you have any errors, try to fix them? If everything seems to have compiled correctly, try running it!

./darknet

You should get the output:

usage: ./darknet <function>

Great! Now check out the cool things you can do with darknet here.

3.3 Detection Using A Pre-Trained Model

使用预训练模型进行检测

You already have the config file for YOLO in the cfg/ subdirectory. You will have to download the pre-trained weight file here (237 MB). Or just run this:

wget https://pjreddie.com/media/files/yolov3.weights

Then run the detector!

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

You will see some output like this:

layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32  0.299 BFLOPs
    1 conv     64  3 x 3 / 2   416 x 416 x  32   ->   208 x 208 x  64  1.595 BFLOPs
    .......
  105 conv    255  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 255  0.353 BFLOPs
  106 detection
truth_thresh: Using default '1.000000'
Loading weights from yolov3.weights...Done!
data/dog.jpg: Predicted in 0.029329 seconds.
dog: 99%
truck: 93%
bicycle: 99%

在这里插入图片描述

3.4 Reference

如果大家还有看不明白的可以参考下面的链接

1.使用YOLO进行目标检测
2. 关于darknet的安装

4. 生成voc格式的数据集

参考:

数据格式:

  • 训练图片格式类似000001.jpg、000002.jpg

按照voc数据集的结构放置图像文件

  • Annotation中主要存放xml文件,每一个xml对应一张图像,并且每个xml中存放的是标记的各个目标的位置和类别信息,命名通常与对应的原始图像一样;
  • ImageSets我们只需要用到Main文件夹,这里面存放的是一些文本文件,通常为train.txttest.txt等,该文本文件里面的内容是需要用来训练或测试的图像的名字;
  • JPEGImages文件夹中放我们已按统一规则命名好的原始图像。
--VOC  
    --Annotations  
    --ImageSets  
      --Main  
      --Layout  
      --Segmentation  
    --JPEGImages  
    --SegmentationClass//暂时可有可无 
    --SegmentationObject //暂时可有可无

将新建的voc文件夹放到scripts/VOCdevkit/目录下,若无VOCdevkit文件夹则新建一个。

用labelImg标注图像,windows版本下载;linux版本下载。会自己生成相关标签的xml文件,很好用。

根据自己情况修改/scripts/voc_label.py脚本并运行,将xml文件转换成yolo格式的txt文件。同时会在scripts文件夹下生成labels文件夹。


分界线

以上使用自己的数据集制作VOC格式数据集的方法,但我用的是开源数据集,所以。。。


如果不想自己制作数据集,可以参考下面的内容:

TLR数据集下载地址:

下载解压之后,应该是这样的额。。。
解压之后

关于数据集的几点说明:

如果从官网下载的数据集:

在这里插入图片描述

修改配置文件(重点)

  1. 修改/cfg/voc.data文件,class为类别数目,train为训练数据txt所放的位置,valid为validation数据txt所放的位置,names为voc.names所放的位置,backup为模型训练过程中存储模型参数的位置
  • 修改成我这样就好,但有些路径要改成自己的
classes= 4 
train  = /work_project/yolo_signal_detec/darknet/scripts/VOCdevkit/VOC2018/ImageSets/Main/2018_train.txt
valid  = /work_project/yolo_signal_detec/darknet/scripts/VOCdevkit/VOC2018/ImageSets/Main/2018_validation.txt
names  = /work_project/yolo_signal_detec/darknet/data/voc_2018.names
backup = /work_project/yolo_signal_detec/darknet/model

  1. 修改/data/voc.name文件,一行一个类别标签
green
greenleft
greenstraight
red
redleft
redstraight
  1. 修改/cfg/yolov3-voc.cfg,用的哪个模型就修改哪个模型的.cfg文件,这边用动是yolov3-voc。
    • 修改batchsize=64subdivisions=8,batch_size表示每一个批次用来训练的图片张数,subdivisions表示一个批分成几组导入训练。若出现GPU训练动时候提示memory_out可以修改这两个参数试试;
    • filters=27,计算公式为filters=3x(classes数目+5);
    • [yolo]子参数下,classes大小改成你的训练数据的类别数目,这边为4random改成0(关闭多尺度训练,如果显存足够可以置为1)
    • 修改max_batches,steps
learning_rate=0.001
burn_in=1000
max_batches = 8000
policy=steps
steps=6400,7200
scales=.1,.1
  • 其他的可参考百度网盘 相关文件
  1. 修改darknet下的Makefile文件
GPU=1 #有就是1,无则0 ,其他的类似
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0
ZED_CAMERA_v2_8=0

修改之后记得编译一下

make

5. 训练与测试

以上所有的准备工作完成之后,就可以开始训练了

训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

训练之后会生成相应的weight文件,用这些weight文件就可以测试了
在这里插入图片描述

测试

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg yolov3-signal.weights

yolov3.weights为你训练好的模型权重,没有的可以在我这下载
下载地址:红绿灯检测模型文件

在这里插入图片描述


The end
大概就这样吧,有什么问题留言就好

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joker-wt

我的心愿是——世界和平

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值