YoLo 实践(1)

by lizhen

参考代码:

keras-yolo3 ***

yolo_tensorflow

所需环境:

python3 | annconda

keras

tensorflow

configparser

目标:

使用Keras| tensorflow完成基于Yolo的车辆检测的训练;

实施方法:

(1). Yolo是目前使用比较广泛的模型之一, 在github等开源网站中有很多实现方式, 自己找一个比较靠谱的程序,对其改进. 改进方式有以下几点: (a) 训练给予VOC的模型(复现Yolov3) ; (b) 根据论文去阅读yolo

(2). 改进训练方法, 适用雨车辆检测

Step 0. 测试项目是否可以正常运行

wget https://pjreddie.com/media/files/yolov3.weights # 下载yolo的模型

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5 # 将yolo的模型转化成适合Kears加载的格式

python yolo_video.py --image # 指定使用图片检测

运行效果图

使用VOC数据结构训练模型

Step1: 生成统一格式的标注文件和类别文件

为了方便训练, 针对每一个图片都有一种格式的标注文件:

这两种格式的文件是:

Row format: image_file_path box1 box2 ... boxN
Box 的格式 : x_min,y_min,x_max,y_max,class_id

对于VOC数据集,由于已经有了xml格式的标注文件, 仅需要转换标注的格式即可, 在此提供voc_annotation.py

vim voc_annotation.py # 修改有关VOC2007数据的路径
python voc_annotation.py # 运行有关

通过阅读voc_annotation.py文件, 可以得知:

该脚本可以将VOC2007 中标注修改成上述格式的文本;

转换的过程需要修改VOC数据集的路径;

转换后,会待当前目录(getcwd())创建有关训练和校验的标注文件:


~/workspace/keras-yolo3$ ll
-rw-rw-r-- 1 lizhen lizhen 297885 Oct 23 15:48 2007_train.txt # 产生的新文件
-rw-rw-r-- 1 lizhen lizhen 298595 Oct 23 15:48 2007_val.txt

文件的格式如下:

/keras-yolo3/VOCdevkit/VOC2007/JPEGImages/000064.jpg 1,23,451,500,2
keras-yolo3/VOCdevkit/VOC2007/JPEGImages/000066.jpg 209,187,228,230,14 242,182,274,259,14 269,188,2
95,259,14
keras-yolo3/VOCdevkit/VOC2007/JPEGImages/000073.jpg 121,143,375,460,15 2,154,64,459,15 270,155,375,
331,3 22,143,146,500,14

Step2: 加载预训练模型

为了加快训练的速度和Auc, 可以在已有的模型上进行训练,

在后期的训练中,会冻结yolo模型的前249层, 主要训练后面的高维度的特征

Freeze the first 249 layers of total 252 layers.

cd /home/lizhen/workspace/keras-yolo3 # 切换到工作目录
python convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5 # 将适用于darknet的模型转换成Keras ....
__________________________________________________________________________________________________
conv2d_67 (Conv2D) (None, None, None, 2 130815 leaky_re_lu_65[0][0]
__________________________________________________________________________________________________
conv2d_75 (Conv2D) (None, None, None, 2 65535 leaky_re_lu_72[0][0]
==================================================================================================
Total params: 62,001,757
Trainable params: 61,949,149
Non-trainable params: 52,608
__________________________________________________________________________________________________
None
Saved Keras model to model_data/yolo.h5
Read 62001757 of 62001757.0 from Darknet weights.

Step3: 训练VOC数据

为了防止在训练过程中出现OOM异常, 根据问题1的提示, 可以将epoch和batch的数量降低;

对 train.py 的读取文件位置进行修改, 替换成上Step1中生成207_train.txt

python train.py # 读取2017_train.txt ,同时运行模型

~/workspace/keras-yolo3$ ls logs/001/
ep003-loss38.801-val_loss35.522.h5 ep009-loss26.373-val_loss27.126.h5 events.out.tfevents.1540299060.BoHong
ep003-loss39.940-val_loss36.366.h5 events.out.tfevents.1540294790.BoHong trained_weights_final.h5
ep006-loss29.750-val_loss28.700.h5 events.out.tfevents.1540296584.BoHong trained_weights_stage_1.h5

通过阅读train.py 可知, 经过训练以后会在./logs/0001下产生模型, 模型是** trained_weights_final.h5**

训练过程中的loss变化如下:

Step4: 测试模型

python yolo_video.py --model logs/0001/trained_weights_final.h5 --image

测试效果:

问题集合

1. Out of system memory when unfreeze all of the layers.

在训练数据的过程中(python train.py), 会因为GPU的OOM异常而提前退出训练;

根据

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

中提供的信息, 可以尝试一下集中方案:

1 only train 2 classes, car and person, modify model_data/voc_classes.txt

2 batch_size = 2 & epoch = 20

3 set load_pretrained=False

4 update tensorflow to 1.8.0

附录A

ConfigParser

ConfigParser模块在python3中修改为configparser.这个模块定义了一个ConfigParser类,该类的作用是使用配置文件生效,配置文件的格式和windows的INI文件的格式相同

该模块的作用 就是使用模块中的RawConfigParser()、ConfigParser()、 SafeConfigParser()这三个方法,创建一个对象使用对象的方法对指定的配置文件做增删改查 操作。



后期准备解析yolo论文,改代码 敬请期待~

YoLo 实践(1)的更多相关文章

  1. YOLO实践初探

    学习了Andrew Ng 深度学习第三周卷积神经网络课程后,接着看了看YOLO论文,论文看得懵懵懂懂,沉不下心精雕细琢,手痒痒,迫不及待地想试一试YOLO效果.于是乎,在github上下载了ping星 ...

  2. 目标检测算法YOLO算法介绍

    YOLO算法(You Only Look Once) 比如你输入图像是100x100,然后在图像上放一个网络,为了方便讲述,此处使用3x3网格,实际实现时会用更精细的网格(如19x19).基本思想是, ...

  3. 『计算机视觉』YOLO系列总结

    网络细节资料很多,不做赘述,主要总结演化思路和解决问题. 一.YOLO 1.网络简介 YOLO网络结构由24个卷积层与2个全连接层构成,网络入口为448x448(v2为416x416),图片进入网络先 ...

  4. 目标检测:YOLO(v1 to v3)——学习笔记

    前段时间看了YOLO的论文,打算用YOLO模型做一个迁移学习,看看能不能用于项目中去.但在实践过程中感觉到对于YOLO的一些细节和技巧还是没有很好的理解,现学习其他人的博客总结(所有参考连接都附于最后 ...

  5. yolov3实践(一)

    很多博友看了我的第一篇博客yolo类检测算法解析——yolo v3,对其有了一定的认识和了解,但是并没有贴出代码和运行效果,略显苍白.因此在把篇博客理论的基础上,造就了第一篇实践文章,也就是本文.只要 ...

  6. [深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别

    内容 背景 准备 实践 结果 总结 引用 背景 老规矩,先上代码吧 代码所在: https://github.com/BruceDone/darknet_demo 最近在做深度学习相关的项目的时候,了 ...

  7. 2018软工实践—Alpha冲刺(8)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...

  8. 2018软工实践—Alpha冲刺(6)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...

  9. 2018软工实践—Alpha冲刺(4)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助前后端接口的开发 测试项目运行的服务器环 ...

随机推荐

  1. python之类与对象(5)

    6. 类的多继承与超继承 6.1 多继承 python的类还有一个特点,就是可以继承多个类.但是我们作为测试人员,在实际中很少用到这个多继承,这里不就详细(一直都不详细,hhhh)写了.上代码: #! ...

  2. confiparser模块

    什么是confiparser confiparser,翻译为配置解析,很显然,他是用来解析配置文件的, 何为配置文件? 用于编写程序的配置信息的文件 何为配置信息? 为了提高程序的扩展性,我们会把一些 ...

  3. python四则运算2.0

    github项目地址: https://github.com/kongkalong/python PSP 预估耗时(分钟) Planning .Estimate 48*60 Development . ...

  4. Python——模块以及导入注意事项

    在Python中,每一个文件都应该是可以被导入的. 每一个独立的python文件都是一个模块 在导入文件时,文件中所有没有任何缩进的代码都会被执行一遍. 而在实际应用时,每个模块都是有专人负责独立开发 ...

  5. idea没有tomcat选项在setting也没有Application Servers

    原因:dea未正常关闭,重启后发现,Tomcat的选项不见了,File->Setting->Build,Excution,Deployment里面Application Servers也不 ...

  6. lfs

      LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式.它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw c ...

  7. CodingLife的CSS样式整理

    1 首页的超链接鼠标悬停效果 .postTitle a:hover { color:red; text-decoration:none } 2 正文标题鼠标悬停效果 #topics .postTitl ...

  8. mysql 5.6 windows7 解压缩版安装的坑

    从官网下载了解压缩版的mysql ,解压缩后,配置好环境变量,运行安装命令,提示我 缺失ddl文件,然后百度,找到了一个windows 系统组件扫描安装缺失组件的程序,然后继续安装,遇到了 初始化密码 ...

  9. 本地IDC机房数据库容灾解决方案

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB 发表于云+社区专栏 作者介绍:李明,腾讯云数据库架构师华南区负责人,曾在某专业数据库服务商.51jo ...

  10. 深入redis内部--事件处理机制

    1. redis事件的定义 /* State of an event based program */ typedef struct aeEventLoop { int maxfd; /* highe ...