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. TCPIP详解卷一

    strongswan man page. kernel-book IntroductionParallelPro then POSIX THread

  2. Oracle WebLogic Server 12c 新特性

    美国时间2011年 12月9日,Oracle公司正式发布WebLogic 12c版本,c是cloud的缩写.截止当前(2013年8月)最新版本为Oracle WebLogic Server 12c ( ...

  3. 主库binlog被purge的情形

    1.演示实验环境 --主库版本: root@(none)>show variables like 'version'; +---------------+-------------------- ...

  4. 转载 python文件复制的方法

    Python复制文件的9种方法 51Testing软件测试网 17-11-1614:13 以下是演示"如何在Python中复制文件"的九种方法. 1.shutil copyfile ...

  5. jumserver 官方文档和

      一步一步安装(CentOS) 本文档旨在帮助用户了解各组件之间的关系, 生产环境部署建议参考 进阶安装文档 安装过程中遇到问题可参考 安装过程中常见的问题 测试推荐环境 CPU: 64位双核处理器 ...

  6. c# 闲谈异常处理

    今天在阅读 .net 源码时发现微软对所有使用枚举类型的地方对枚举值进行了检测,在检测不通过时抛出了异常. , )) { throw new InvalidEnumArgumentException( ...

  7. 食品生鲜调料代理分销拼团商城微信小程序

    食品生鲜调料代理分销拼团商城微信小程序 现在小程序越来越火爆了,一种新的分销拼团模式出现了.一起来分享一下吧 调料商城是一家是专业从事各种调料生产和网上调料商品销售平台,是藤椒油.花椒油.香油.火锅油 ...

  8. ORC Files

    ORC 全称是Optimized Row Columnar,意思是优化的RC file,优化行列式. ORC 文件格式提供了一个很高效的方式来存储hive数据.它旨在克服其他hive文件格式的限制.当 ...

  9. 获取请求Requst中访问请求的客户端IP

    获取请求Request中访问请求的客户端IP /*获取请求客户端的IP地址*/ public static String getIpAddress(HttpServletRequest request ...

  10. C# DataTable 用法

    1.创建DataTable DataTable dataTable = new DataTable(); //创建一个空表 2.创建DataRow DataRow row = dataTable.Ne ...