当前位置:   article > 正文

yolov3 tiny训练自己的数据集进行物体检测 (只检测行人)_yolov3-tiny识别不到人

yolov3-tiny识别不到人

说明:我的电脑是个16年3500元买的笔记本(勇气可嘉:)

环境:额外的包之类的,我用的anaconda,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包。

我的版本:python 3.7.4 - tensorflow 1.13.1 - numpy 1.16.0 - keras 2.2.4

1. 下载Github上面的文件

https://github.com/qqwweee/keras-yolo3

直接下载zip。本文是针对以上文件内容的微小改动来训练自己的数据

 

2. 下载预训练的权值

https://pjreddie.com/media/files/yolov3-tiny.weights

下载完成后放入上面解压文件的目录下 C:\Users\...\Desktop\keras-yolo3-master,下文所述“[目录]”,皆指向此目录

 

3. 下载数据集文件(自己制作也行,自己制作参考其他博客)

https://pan.baidu.com/s/15ewJZoav2ebmkqBf2bPyeA 提取码:anv2

此处为博主z649431508收集的数据集,放在代码同一目录下解压(去掉外面多套的文件夹VOCdevkit,没有多套请忽略该提示)。

解压后可以把里面文件删除只保留:Annotations、ImageSets和JPEGImages。

将ImageSets\Main 文件夹下的txt文件全部删掉

用python写个脚本生成一个txt文件,仿照下图形式,里面的内容一直到009963(也就是该数据集里面最后一张图片),完事后这个train.txt放到 \VOCdevkit\VOC2007\ImageSets\Main下(这里如果觉得数据集太多可以设置idx<5000)

python代码如下:

  1. idx = 1
  2. f = open('train.txt', 'w')
  3. while idx < 9964:
  4. f.write('{:0>6d}'.format(idx) + '\n')
  5. idx += 1
  6. f.close()

 

4. 修改相关文件配置

  1. 修改voc_annotation.py,将class改为:classes = ["person"](我们只识别人所以只保留person),将sets改为:sets=[('2007', 'train')]
  2. 修改model_data/voc_classes.txt 和 coco_classes.txt,删除多余类,只保留person(这一行)
  3. 修改yolov3-tiny.cfg,将[yolo]下的classes改为=1,将[yolo]上的[convolutional]下的filter改为filters=18 [因为3 * ( classes + x + y + w + h + score )],因为tiny yolov3只有两个不同输出分支张量,所以总共需要修改两处[yolo]和其上面的[convolutional]下的内容
  4. 修改train.py里面,找到anchors_path,改为anchors_path = 'model_data/tiny_yolo_anchors.txt'
  5. 修改yolo.py里面,修改使得 "anchors_path": 'model_data/tiny_yolo_anchors.txt'

 

5. 生成.txt文件

运行anaconda prompt(以下“运行”所指,皆为在anaconda prompt下键入指令)

  • 运行voc_annotation.py

  • 目录下会生成名字前缀为2007_的txt文件,然后删掉它们的前缀 "2007_",得到train.txt内容如下,每行的内容前面是路径,后面五个数字为一组,前四个是标记的box的xywh,后面一个0表示person。

  • (可选)运行kmeans.py文件,利用kmeans算法找到最合适的6个不同尺寸的anchor,用此文件替换model_data下的anchor文件。根据我自己的数据集,得到如下anchor

 

6.  运行 convert.py 将之前下载的预训练权重(30M文件)转化成keras网络的权重(生成 .h5 文件)

python convert.py -w yolov3-tiny.cfg yolov3-tiny.weights model_data/tiny_yolo_weights.h5

 

6.x 如果不训练,此时可以直接运行验证别人训练好的网络的性能(*)

python yolo_video.py --image

test/person.jpg(要在目录下创建test文件夹,里面放上一张图片命名person.jpg)

 

7. 训练网络

python train.py

下面的图片是我整合所有图片数据集后进行训练的结果,因为图片太多,所有我修改了50+50epoch,改为15+5epoch

 

8. 测试自己得到的权值

在 logs/000/下有你刚刚('~')训练得到的权值文件 trained_weights_stage_1.h5(前15epoch得到)  以及 trained_weights_final.h5(15+5epoch得到)

修改 yolo.py"model_path": 'logs/000/trained_weights_final.h5'

 

9. 效果

运行 6.x 所述内容

我通过整合数据并且加入自己标记的数据后,一共有10000张图片,其中4000张包含人的。在只解封最后两层训练了15个epoch,然后解封所有层训练了5个epoch。训练后的效果感觉上其实不如官网权重的效果好,不过也不差太多。

 

10. 其他

附yolov3-tiny网络参数和结构图:

 

参考

https://www.jianshu.com/p/d76adef49293

https://blog.csdn.net/lly1122334/article/details/89019891

 

 

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

闽ICP备14008679号