当前位置:   article > 正文

如何利用YOLO训练自己的模型_yolo模型训练

yolo模型训练

本项目包括拉土车的一些标注文件,还有几个配置文件,另外还包括一个flask程序用于测试发布,训练好的模型下载 运行如下: demo

背景:

  • 1、darknet与yolo,darknet是一个深度学习框架,类似tensorflow,theano,mxnet,caffe之类,包含cnn,rnn等组件,yolo是一个网络模型,类似VGG,resnet之类,yolo原生框架是darknet,yolo也可以使用其它框架来搭建。
  • 2、什么是yolo,yolo主要的作用是实时对象检测:你只看一次(You only look once 的缩写)是一个先进的实时对象检测系统。在Titan X上,它以40-90 FPS的速度处理图像,COCO test-dev上的VOC 2007上的mAP为78.6%,mAP为48.1%。
  • 3、计算机视觉(cv)是深度学习应用的一个重要分支。其应用场景主要有分类,对象检测等。而yolo就要是检测一副图像里有没有存在某些对象,以及这些对象的位置坐标在哪里。
  • 4、darknet是c语言写的,主要依赖opencv和cuda。编译时可以选择这两个或者不选或者只选一个,具体看需要。比如cuda就是决定是否使用GPU,如果需要GPU版的darknet,就要修改编译选项将0改成1,然后编译即可。
  • 5、当我们说yolo时,默认是指基于darknet框架下的yolo,而如果是使用其它框架如tensorflow,应该说是tensorflow版的yolo.

相关教学视频

讲解视频

github地址

训练:

在训练之前,我们先要下载darknet的源代码:

1)如果是linux

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

如有cuda及opencv,记得修改makefile

2)如果是windows

git clone https://github.com/AlexeyAB/darknet.git

下载以后根据github上的说明使用vs2015进行编译,编译的时候注意编译选项

步骤

  • 1、样本图片与标注:训练yolo时需要大量的图片的样本,当我们提供一张图片时,我们所关注的对象只是图片中一小块区域,所以我们必须把这个区域标注出来,标注信息放在与图片相同目录且文件相同,但后缀名为.txt,比如有一个图片叫truck1.jpg,而你就要提供一个truck1.txt在它旁边, truck1.txt内容像这样:
0 0.491666666666667 0.561611374407583 0.833333333333333 0.872037914691943

可能是多行,也可能是一行,一行代表一个对象,多行代表这张图片里有多个对象。它一行的意义如下:

<object-class> <x> <y> <width> <height>
  • object-class:是指对象的索引,从0开始,具体代表哪个对象去obj.names配置文件中按索引查。
  • x,y:是一个坐标,需要注意的是它可不是对象左上角的坐标,而对象中心的坐标
  • width,height:是指对象的宽高。
  • 2、准备好了一大堆样本图片及其对应的标注文件以后,我们还需要建立两个索引文件,分别叫train.txt及test.txt,名字其实并不重要,它们的意义在于把需要训练的图片路径一张一行的放在train.txt中,而作为验证的图片路径一张一行的放在test.txt中,形如:
  • 3、使用darknet来训练yolo模型时,需要三个配置文件,两个索引文件
  • 1)模型配置文件,比如名叫my-yolo-net.cfg,需要将yolo的模型结构写到一个配置文件如:
  1. [net]
  2. #Testing
  3. batch=64
  4. subdivisions=8
  5. #Training
  6. #batch=64
  7. #subdivisions=8
  8. height=416
  9. width=416
  10. channels=3
  11. momentum=0.9
  12. decay=0.0005
  13. angle=0
  14. saturation = 1.5
  15. exposure = 1.5
  16. hue=.1
  17. learning_rate=0.001
  18. burn_in=1000
  19. max_batches = 80200
  20. policy=steps
  21. steps=40000,60000
  22. scales=.1,.1
  23. [convolutional]
  24. batch_normalize=1
  25. filters=32
  26. size=3
  27. stride=1
  28. pad=1
  29. activation=leaky
  30. [maxpool]
  31. size=2
  32. stride=2
  33. [convolutional]
  34. batch_normalize=1
  35. filters=64
  36. size=3
  37. stride=1
  38. pad=1
  39. activation=leaky
  40. //省略
  41. 其中像convolutional节就代表一个卷积层,指定有多少个卷积核心filters=30,基本上就是一个网络结构定义以及一些其它配置。
  • 2)一个对象名称文件,比如叫obj.names,这个文件比较简单,一行一个对象名称: dog fox cat .....
  • 3)最后还有一个obj.data文件:
  1. classes= 1
  2. train = /darknet/work/train.txt
  3. valid = /darknet/work/test.txt
  4. names = /darknet/work/cfg/obj.names
  5. backup = /output/
  • classes是指对象分类,这里我只检测一类对象,所以是1
  • names就是指对象名称文件
  • backup是指darknet在训练到比如100轮,200轮....时会自动把模型保存到该目录。它产生的文件名形如:YOLO-obj_9000.* weight,一看到这个文件名,即可知道已经训练了几轮了。
  • train 和valid 是指索引文件了。
darknet.exe detector train cfg/obj.data cfg/yolo-obj.cfg darknet19_448.conv.23
  • darknet.exe detector train:这一段是命令本身,说要开始训练了。
  • cfg/obj.data:就是上面说的obj.data,里有指定train.txt,test.txt,obj.names,backup的路径
  • cfg/yolo-obj.cfg:就是模型的网格结构文件。
  • darknet19_448.conv.23:是预训练文件,预训练文件是让我们基于别人的基础上更快的训练出自己的模型,这样会比较省时间。
  • 5、在darknet源代码里,可以找到很多的配置文件示例,需要花点时间去观赏一下。
  • 6、训练了一段时间以后,忽然关机了,怎么办?没事,再次开机以后去backup目录里找一找,一般会找到如:yolo-obj_1000.weights,yolo-obj_2000.weights这类文件,然后使用最后一个 darknet.exe detector train cfg/obj.data cfg/yolo-obj.cfg backup/yolo-obj_2000.weights 这样,它又会继续往下训练,而不会重头开始。
  • 7、训练过程长这样: 那么什么情况下觉得可以停止了呢?主要是看IOU,如果IOU已经接近于1,那么说明不错了。 这边已经训练了一个泥头车辆的模型

使用:

当我们训练完,一般在普通GPU上要花费几个小时,产生了很多的模型文件以后,我们就可以验证模型了,首先是用命令行来验证:

darknet.exe detector test cfg/obj.data cfg/yolo-obj.cfg yolo-obj1000.weights data/testimage.jpg

参考:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/380020
推荐阅读
相关标签
  

闽ICP备14008679号