YOLO初体验

用tensorflow玩了玩Faster-RCNN,都说YOLO用起来更爽,也玩了玩YOLO,确实爽,这边做个入门的Demo~

目录:
1、环境搭建
2、数据准备
3、训练
4、测试

一、环境搭建
操作系统:Ubuntu16.04
GPU:GTX1080ti x 4
CUDA:V8.0.61
cudnn:V5.1.10
自行安装~

下载yolo3项目(自己找个位置放):

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

修改makefile配置(在darknet文件夹下):

GPU=1 #如果使用GPU设置为1,CPU设置为0
CUDNN=0  #如果使用CUDNN设置为1,否则为0
OPENCV=0 #如果调用摄像头,还需要设置OPENCV为1,否则为0
OPENMP=0  #如果使用OPENMP设置为1,否则为0
DEBUG=0  #如果使用DEBUG设置为1,否则为0

CC=gcc
NVCC=nvcc #修改为自己的路径
AR=ar
ARFLAGS=rcs
OPTS=-Ofast
LDFLAGS= -lm -pthread 
COMMON= -Iinclude/ -Isrc/
CFLAGS=-Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC
...
ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand 
endif

然后保存,make一下~
接下来安装一下opencv包吧~
参考:
https://blog.csdn.net/zzyczzyc/article/details/84193696

二、数据准备
首先要有标注过的图片吧,网上大多教程都用VOC数据集,我这里用的不是VOC,也是网上找的小数据集,下载链接:
链接: https://pan.baidu.com/s/1T2v88vaQ34nII6ikmf5gww 提取码: jazm
数据长这样子:
YOLO初体验_第1张图片
那先来讲讲yolo的标注软件吧,这里用的是yolo_mark~
教程一大堆:
可参考:https://blog.csdn.net/heiheiya/article/details/83506913
其中说到的“配置正确的opencv包含目录和库目录”,如果没配置编译的时候会报如下错误:
无法打开源文件: “opencv2/opencv.hpp”
这时参考这个博客可解决:
https://www.cnblogs.com/aiguona/p/9370433.html
注意,博客里面是debug的,我们要用x64 release的~
vs2015破解:https://blog.csdn.net/qq_19678579/article/details/76692822

按照教程即可打开已标注的图片啦~
如下图:
YOLO初体验_第2张图片
分4类
people:行人
front:车的前边
side:车的侧边
back:车的后边

对,还有一个它的标注文件长这样:
一张图片对应一个txt文件,一个txt文件包含多个object
以相对坐标给出~
举个例子吧
下图是用labelImg软件标注出来行人的坐标,xml的那种形式

对应的xml文件如下:
YOLO初体验_第3张图片
这边得到几个有用的信息:
目标物四至坐标:
在这里插入图片描述
图片长、宽:
在这里插入图片描述
好嘞~,根据公式开始换算成yolo3的那种txt形式:
先看txt想要什么,如下:
YOLO初体验_第4张图片
那来换算一下呗~
中心点 = (Xmin + 1/2(Xmax - Xmin),Ymin + 1/2(Ymax - Ymin)) = (671,582)
YOLO初体验_第5张图片
可以计算一下。
可参考这个示意图
https://blog.csdn.net/qq_34806812/article/details/82355614

yolo_mark的一些快捷键:
YOLO初体验_第6张图片
YOLO初体验_第7张图片

三、训练
有了数据,那就开始来训练吧~
上面已经下载了darknet,然后也修改了makefile
我们再下载下预训练权重吧

wget https://pjreddie.com/media/files/yolov3.weights
wget https://pjreddie.com/media/files/yolov3-tiny.weights
wget https://pjreddie.com/media/files/darknet53.conv.74

看要用哪一个,这里是用最后一个darknet53.conv.74
接下来,有了数据,有了预训练权重,那就来设计下怎么训练呗,也就是你想设置模型的参数
有个很重要的文件就是.cfg文件

.cfg文件:
[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=8
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 50200
policy=steps
steps=40000,45000
scales=.1,.1

.................................

根据需要来设置吧
包括初始学习率、学习率衰减率,batch、step及各层参数…
详细参见:https://blog.csdn.net/ll_master/article/details/81487844

设置完后还要有个.data结尾的配置文件
在这里插入图片描述
好,最后把这两个文件放在darknet下面的cfg文件夹里面(名字自个取,如test_yolo3.cfg和test_yolo3.data)
YOLO初体验_第8张图片然后开始训练吧~
命令如下:

sudo ./darknet detector train cfg/test_yolov3.data  cfg/test_yolov3.cfg  darknet53.conv.74
//mutil gpu
sudo ./darknet detector train cfg/test_yolov3.data  cfg/test_yolov3.cfg /home/adminroot/test/backup/test_yolov3_700.weights -gpus 0,1,2,3
//恢复训练
sudo ./darknet detector train cfg/test_yolov3.data  cfg/test_yolov3.cfg /home/adminroot/test/backup/test_yolov3.backup -gpus 0,1

训练日志说明:
https://blog.csdn.net/qq_33444963/article/details/80842179
四、测试

最后测试一张图片:
//test pic
sudo ./darknet detector test cfg/test_yolov3.data  cfg/test_yolov3.cfg backup/my_yolov3_900.weights /home/adminroot/Desktop/jam1_0001.jpg

YOLO初体验_第9张图片

最后视频:
//test mp4
sudo ./darknet detector demo cfg/test_yolov3.data  cfg/test_yolov3.cfg backup/my_yolov3_900.weights /home/adminroot/test/data/test.mp4

附:可能出现的问题
YOLO初体验_第10张图片

参考:https://blog.csdn.net/qq_34806812/article/details/81537842


参考:
https://blog.csdn.net/lixiaoyu101/article/details/86537128
https://blog.csdn.net/lilai619/article/details/79695109

你可能感兴趣的:(目标检测,深度学习)