YoLo 实践(1)
YoLo 实践(1)
by lizhen
参考代码:
keras-yolo3 ***
所需环境:
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)的更多相关文章
- YOLO实践初探
学习了Andrew Ng 深度学习第三周卷积神经网络课程后,接着看了看YOLO论文,论文看得懵懵懂懂,沉不下心精雕细琢,手痒痒,迫不及待地想试一试YOLO效果.于是乎,在github上下载了ping星 ...
- 目标检测算法YOLO算法介绍
YOLO算法(You Only Look Once) 比如你输入图像是100x100,然后在图像上放一个网络,为了方便讲述,此处使用3x3网格,实际实现时会用更精细的网格(如19x19).基本思想是, ...
- 『计算机视觉』YOLO系列总结
网络细节资料很多,不做赘述,主要总结演化思路和解决问题. 一.YOLO 1.网络简介 YOLO网络结构由24个卷积层与2个全连接层构成,网络入口为448x448(v2为416x416),图片进入网络先 ...
- 目标检测:YOLO(v1 to v3)——学习笔记
前段时间看了YOLO的论文,打算用YOLO模型做一个迁移学习,看看能不能用于项目中去.但在实践过程中感觉到对于YOLO的一些细节和技巧还是没有很好的理解,现学习其他人的博客总结(所有参考连接都附于最后 ...
- yolov3实践(一)
很多博友看了我的第一篇博客yolo类检测算法解析——yolo v3,对其有了一定的认识和了解,但是并没有贴出代码和运行效果,略显苍白.因此在把篇博客理论的基础上,造就了第一篇实践文章,也就是本文.只要 ...
- [深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
内容 背景 准备 实践 结果 总结 引用 背景 老规矩,先上代码吧 代码所在: https://github.com/BruceDone/darknet_demo 最近在做深度学习相关的项目的时候,了 ...
- 2018软工实践—Alpha冲刺(8)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...
- 2018软工实践—Alpha冲刺(6)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...
- 2018软工实践—Alpha冲刺(4)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助前后端接口的开发 测试项目运行的服务器环 ...
随机推荐
- watch深度监测
假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type=&q ...
- 矩阵快速幂--51nod-1242斐波那契数列的第N项
斐波那契额数列的第N项 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, ...
- python自动化 协程函数、二分查找、模块搜索
协程函数 yiled: 把函数的执行结果封装好__iter__和__next__得到一个迭代器 与return功能类似,都可以返回值,但是return只能返回一次只 def fun(count): p ...
- Java 网络通信相关
http://m.blog.csdn.net/xiaojin21cen/article/details/78587541 越下面越底层 , 最后面的都是框架 , 下面的是 编程语言提供的库的 NIO ...
- 小y的质数
题目链接:https://ac.nowcoder.com/acm/contest/634/C 链接:https://ac.nowcoder.com/acm/contest/634/C来源:牛客网 题目 ...
- sql server 保留小数,向上保留指定位数的小数,仅记录,勿看。
比如 4.05 要取成 4.1 , 4.16 取成 4.2 ,4.5 取成 4.5 ,意思就是小数部分第二位不管是多少都丢掉然后加0.1,但是如果是 4.5 这样完整的就不需要处理. 可以像下面这么写 ...
- 2019美国大学生数学建模竞赛B题(思路)
建模比赛已经过去三天了,但留校的十多天里,自己的收获与感受依然长存于心.下面的大致流程,很多并没有细化,下面很多情况都是在假设下进行的,比如假设飞机能够来回运送药品,运货无人机就只运货,在最大视距下侦 ...
- voip通话分析(含语音质量)
SipAnalysis.exe使用python开发,通过抓取网卡通信包进行质量分析:1) 分析VOIP通话的发起方.挂机方及对应时间点2) 分析通话使用的媒体信息(方向.载荷.切换时间)3) 分析通话 ...
- 没有循环的JavaScript
有些文章中提到过,缩进(并不能特别准确的)说明了代码的复杂程度.我们想要的是简单的JavaScript.之所以层层缩进,是因为我们用抽象的方式解决问题.但要选用什么抽象方法呢?截止目前,我们没有在特定 ...
- 前端emmet插件的一些常用用法
以下是在webstorm中简单使用emmet插件,注意一点就是当编写完emmet命令后一定要把光标移动到命令的结尾处,不然生成的代码会不一样 <!DOCTYPE html> <htm ...