版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、YOLOv3 树叶识别实践 I目录 TOC o 1-5 h z HYPERLINK l bookmark2 o Current Document 1 整体设计 1 HYPERLINK l bookmark4 o Current Document 实验任务 1 HYPERLINK l bookmark6 o Current Document 开发思路 1 HYPERLINK l bookmark8 o Current Document 树叶数据集的建立 2 HYPERLINK l bookmark10 o Current Document 采集树叶 2 HYPERLINK l bookmark1
2、2 o Current Document 采集图像 2 HYPERLINK l bookmark14 o Current Document 图像预处理 2 HYPERLINK l bookmark16 o Current Document 图像标注 3 HYPERLINK l bookmark18 o Current Document YOLOv3 训练树叶识别模型 11 HYPERLINK l bookmark20 o Current Document 搭建开发环境 11 HYPERLINK l bookmark22 o Current Document 下载、配置、编译及检验工程项目 11
3、 HYPERLINK l bookmark24 o Current Document 将树叶集及配置文件移植到工程项目 14 HYPERLINK l bookmark26 o Current Document 训练过程 15 HYPERLINK l bookmark28 o Current Document 利用训练模型测试图片和视频 18 HYPERLINK l bookmark30 o Current Document 4.1 测试图片 18 HYPERLINK l bookmark32 o Current Document 4.2 测试视频 20 HYPERLINK l bookmark
4、34 o Current Document 测试结果分析 21 HYPERLINK l bookmark36 o Current Document 参考资料 22 1 整体设计实验任务建立一个不少于 10 个不同种类的树叶数据集,测试数据是实时视频并要求有一定 的背景复杂度。开发思路(1)采集树叶建立树叶数据集;(2)利用 YOLOv3训练模型;树叶数据集的建立我们在校园内选取了 10 种常见的树叶种类来制作数据集,分别是八角金盘、 杜鹃、广玉兰、海桐、木槿、石楠、梧桐、银杏、樟叶。以下将详细介绍树叶数据集的 制作流程。采集树叶我们在校园内收集了上述树叶每种各 10 片。收集的树叶一般要求形态
5、特征完整、 叶片平整,以方便后面我们的数字化处理。采集图像我们采用手机对采集的叶片拍照得到树叶图像。 在采集树叶图像的时候一般要注意 以下几点。一是背景纯净,这里我们用一张白纸作为背景;二是尽量避免光线直射并不 要有人为的阴影遮挡,我们是在宿舍里对采集的叶片拍照,用了几盏台灯在四周补光。 三是叶片尽可能摆放平整, 我们在收集叶片的时候便刻意采集了比较平整的叶片。 每片 树叶我们采集其 4种形态的照片,因此每类有 40张树叶照片,整个树叶集有 400 张照 片。图 3.1 某片银杏树叶的四种形态照片图像预处理预处理主要包括对树叶图像的统一像素大小和命名。 我们将所有树叶图片都编辑为 416 41
6、6 大 小。为了方便识读,我们用汉语拼音进 行命 名编号,分别为 BaJiaoJinPan0140 (八角金盘) 、DuJuan0140(杜鹃) 、GuangYuLan014(0 广玉兰) 、 GuiYe0140(桂叶)、 HaiTong0140(海桐)、 MuJin0140(木槿)、 ShiNan0140(石 楠)、 WuTong0140(梧桐)、 YinXing0140 (银杏)、 ZhangYe0140(樟叶)。图 3.2 预处理后的某片木槿叶片的四种形态照片图像标注图像标注是指用标注工具将树叶图像中的叶片选择框出,于是便会产生一个 txt 格 式的文本,里面包含叶片 id (与我们自定
7、义的叶片名字一一对应)和叶片位置信息(在 训练的时候可获取“图像中该位置区域代表何种树叶”的信息)。我们采用的是官方推 荐的标注工具 Yolo_mark-master ,官方下载网址是 HYPERLINK /AlexeyAB /AlexeyAB /Yolo_mark 。编译环境是 Windows10+VS2015+opencv3.4.0 。以下将详细介绍 Yolo_mark-master 的配置及使用步骤。(1)编译 Yolo_mark-master 项目在官网上下载 darknet-master 工程代码后解压, 打开 yolo_mark.sln ,编译运行前还需 要做两件事情。在“解决资源
8、管理器”下右键项目,打开项目属性窗口,设置为 Release&64图 3.3 设置属性窗口( 1 )将项目与自己电脑的 opencv 文件路径链接。在“ C/C+常规 附加包含目录”,修改为自己的 opencv中“ include ”文件夹 路径。我这里是“ C:opencvbuildinclude ”。如下图所示。图 3.4 设置属性窗口( 2 )在“链接器 常规 附加包含目录”,修改为自己的 opencv中“ lib ”文件夹路径。我这里是“ C:opencvbuildx64vc14lib ”。如下图所示。(补充说明: v14 VS2015,V15 VS2017)图 3.5 设置属性窗口(
9、 3 )完成 a、b以后,注意要先点“应用”,然后点“确定”,窗口关闭。另外,编译运 行项目前注意工具栏这里也要设置为 Release&64。图 3.6 设置工具栏编译运行项目后,会在“ Yolo_mark-masterx64Release ”路径下产生“ yolo_mark.exe ”文件,双击“ yolo_mark.cmd ”便可打开 Yolo_mark-master 的图形界 面。如下图所示。“ image num: n”指我们当前正在标注整个数据集中的第n张图片;“object id : m”指我们给标注的物体选择第 m个id 号,前面也已经介绍, id 与我们自 定义的叶片名字一一对
10、应。图 3.7 标注工具图形界面(2)标注图像删除“ Yolo_mark-masterx64Releasedataimg ”中的所有数据,把我们预处理好 的400张树叶图像放到该目录。图 3.8 预处理后的 400 张树叶图像更改“ obj.data ”文件中 “ classes= 10”(因 为我们的叶片种类是 10),保存;图 3.9 修改 obj.data 文件文件中物体名字,如下图更改“ Yolo_mark-masterx64/Release/data/s 所示,然后保存。它们对应的 id 分别为 0-9 。图 3.10 修改 s 文件双击“ yolo_mark.cmd ”便可打开官方
11、标注工具。如下图所示。图中可以看到我们目 前正在标注的是 400张图像的第一张(从 0开始计数), id 是 0,对应着树叶名 “ BaJiaoJinPan ”。图 3.11 未标注前的八角金盘图像这样叶片便多了一个标注框, 标注框接下来需要我们将图中的叶片用鼠标框起来,左上角有我们自定义的叶片名字。如下图所示。图 3.12 标注后的八角金盘图像我们可以用鼠标移动小滑标来换图像和叶片的 id ,由于图片太多,图片刻度比较密 集,我们可以用键盘的左右键来切换图像。当我们切换至下一张图像的同时,会生成存 有标注信息的 txt 格式文本。如下图所示。图 3.13 标注后产生 txt 伴随文本图 3.
12、14 txt 伴随文本内容当我们把“八角金盘”图像全标注好后,不要忘了用鼠标把叶片id 从0拖至 1图 3.15 修改 id我们要把 400张叶片图像每一张都标注好,这是一项比较繁杂枯燥的工作图 3.16 木槿图像标注图 3.17 樟叶图像标注图 3.21 全部标注好的树叶图像YOLOv3 训练树叶识别模型制作好树叶数据集后就要训练自己的树叶识别模型了。 这也是最核心最关键的一部 分。以下为训练自己的模型的详细步骤。搭建开发环境我们使用的开发环境为 window10+ VS2015(v14)+ OpenCV3.4.0+ cuDNNv7.1.3+ CUDA9.1。开发环境的搭建在 CSDN上有很
13、多前人的宝贵经验可以借鉴,这里不再赘述。下载、配置、编译及检验工程项目(1)我们从 GitHub 上下载项目代码 (网址: HYPERLINK /AlexeyAB/darknet /AlexeyAB/darknet),并解压。( 2)进入“ darknet-masterbuilddarknet”目录,利用编辑器(记事本即可)打开darknet.vcxproj ,将 CUDA修改为自己对应的版本。由于 darknet.vcxproj 中默认使用的 是CUDA 9.1,此处我们不用修改。(3)用 VS2015打开“ darknet-masterbuilddarknet”目录下的“ darknet.
14、sln ”(没 有 GPU则打开 darknet_no_gpu.sln )。首先工具栏这里设置成“ Release&x64图 4.1 设置工具栏(4)配置文件及编译。在“属性页 VC+目录 包含目录”中添加“ C:opencvbuildinclude ”(即本机 opencv的 include 文件路径);在“属性页 VC+目录 库目录”中添加 “C:opencvbuildx64vc14lib”(即本机 opencv的 lib 文件路径)。如下图所示。图 4.2 设置属性窗口( 1 )在“链接器 输入 附加依赖项”中添加“ opencv_world340.lib ”。(说明: opencv_w
15、orld340.lib 是位于“ opencvbuildx64vc14lib”目录下的一个库)如下图所示。图 4.3 设置属性窗口( 2 )将“ C:Program FilesNVIDIA GPU Computing Toolkit CUDAv9.1extras visual_studio_integrationMSBuildExtensions ”中的所有文件拷贝到 “ C:Program Files(x86)MSBuildMicrosoft.Cppv4.0v140BuildCustomizations”右键项目 生成。成功后会在“ darknet-masterbuilddarknetx64
16、 ”目录下生 成一个“ darknet.exe ”文件,然后将“ opencvbuildx64vc14bin ”下的 “ opencv_world340.dll ”和“ opencv_ffmpeg340_64.dll ”复制到 “ darknet.exe ”的 同级别目录下。检验配置是否成功。从 GitHub 上下载已训练好的模型 yolov3.weights, 点击超链接即可下载。图 4.4 yolov3.weights 下载下载后放在“ darknet-masterbuilddarknetx64 ”下,双击该目录下的 darknet_yolo_v3.cmd ”会出现下图结果,表明配置及编译
17、工程项目成功。图 4.5 配置成功测试图将树叶集及配置文件移植到工程项目( 1)配置 cfg 文件复制“darknet-mastercfg ”目录下的“yolov3.cfg ”并重命名为“ yolov3-leaf.cfg (或者其他名字,只要各处对应即可),复制到与“ darknet.exe ”同目录下(或者其 他目录,输入命令时对应即可)。打开“ yolov3-leaf.cfg ”文件(建议用 VS打开,因为显示行数,而后面涉及到某 些行参数的修改,方便查找)。然后进行以下修改。修改 batch=64,subdivisions=8 。含义为每轮迭代训练会从所有训练集里随机抽取 batch =
18、 64 个样本参与训练,所有 这些 batch 个样本又被均分为 subdivision = 8 次送入网络参与训练,以减轻内存占用的 压力。因此 subdivision 值小于等于 batch 。修改 classes=10 。因为我们有 10种叶片,修改的行数为 610、 696、783。图 4.6 修改 classes修改 filters=45 。计算 filters=(classess+5)*3=(10+5)*3=45,修改行数为 603、689、776。( 2)移植 s 文件、 obj.data 文件和 train.txt 文件将制作树叶数据集时遇到的 s 文件和 obj.data 文
19、件及同目录的 train.txt 文件复制到“ darknet-masterbuilddarknetx64data ”路径下,并分别重命名为 “ s ”、“ obj-leaf.data ”和“ train-leaf.txt ”。s 文件内容不需要修改。将 train-leaf.txt文件中的“ img”全部替换为“ leaf ”。 obj-leaf.data 文件内容修改如下图所示。图 4.7 修改 obj-leaf.data 文件(3)移植树叶数据集 在“ darknet-masterbuilddarknetx64data”路径下新建一个 “leaf ”文件夹,将标注好的树叶数据集全部复制到
20、该文件夹。4)下载预训练模型 我们是在预训练模型上用自制数据集继续进行训练。从GitHub 上下载预训练模型darknet53.conv.74 ”并放到“ darknet-masterbuilddarknetx64 ”路径下。图 4.8 GitHub 上预训练模型下载链接训练过程(1)命令语句介绍 需要我们发出相关命令语句才能进行相关训练操作。发出命令语句的方式有两种, 一是打开“命令提示符” 窗口,进入 darknet.exe 同级目录,然后输入命令语句, “ enter ” 键执行;二是直接在 darknet.exe 同级目录新建 .cmd格式文件,然后在文件内写入希望 执行的命令语句,保
21、存后双击该 .cmd格式文件便可执行命令。方法二可重复执行,因此 一般我们采用方法二。训练命令语句为: darknet.exe detector train data/obj-leaf.data yolov3-leaf.cfg darknet53.conv.74解释: darknet.exe detector train :表示训练( train 改为 test 为测试); data/obj-leaf.data:表示 data 文件路径; yolov3-leaf.cfg :表示 cfg 文件的路径;darknet53.conv.74 :表示预训练模型路径。(2)开始训练新建命令文件 新建 .c
22、md 格式文件并命名为“ yolov3_leaf_train ”,右键 编辑,将训练命令语 句复制进去并保存。排错调试双击“ yolov3_leaf_train.cmd ”,开始训练。 这时候, 我出现了内存不足的错误。 于是,我便开始以下调试。修改 cfg 文件中 subdivisions 为16或32 或64,还是内存不足。三个修改 classes 的地方,下面几行都有一个 random 参数,默认是 random=1, 表示开启多尺度训练;这里我们可以把这三处都修改为random=0,即关闭多尺度训练。尝试之后,还是内存不足。接下来我尝试减小 batch 值,当使 batch=8 , s
23、ubdivisions=8 时,便不再出现内 存不足的错误了。正式训练 解决内存不足错误后,双击“ yolov3_leaf_train.cmd ”。便出现如下图所示的结 果。一开始 avg loss 值比较大, 在一千左右, 不过开始时 avg loss 值衰减的也比较快。 当 avg loss 值衰减到 10 以下后,衰减的就非常缓慢了。本次训练用了将近一天一夜的时间在我电脑上迭代训练了两万六千多次。 每迭代一 百次会生成一个 .weights 格式的训练模型, 可在 “ backup”文件夹下查看。由于一个模 型将近 240M大小,因此可以定期删除一些模型,以防止磁盘空间被用完。在迭代到
24、13900次时,由于要用电脑做些别的事情,我叉掉命令框中断了一下。后 面我又在此基础上继续训练,只需将训练命令语句中的“ darknet53.conv.74 ”修改为yolov3-leaf_13900.weights”,保存后再双击 “ yolov3_leaf_train.cmd”文件即可。图 4.9 训练截图( 1 )图 4.10 训练截图( 2 )图 4.11 训练截图( 3 )图 4.12 训练截图( 4 )利用训练模型测试图片和视频利用自己训练好的模型进行测试比较简单,把待测试文件放到指定路径下, 再执行 测试命令语句即可。由于可能出现过拟合的情况,所以最好的模型不一定在后边,可以 多
25、测试几组,选择一个性能较好的模型。4.1 测试图片(1)移植待测试图片在“ darknet-masterbuilddarknetx64”路径下新建一个“ test ”文件夹。将待测试图片放到该文件夹下。如下图所示,将图像 t1.jpg 、 t2.jpg 和 t3.jpg 放到 test 文件夹下。图 5.1 待测试图像(2)新建测试图片命令文件新建 .cmd 格式文件并命名为“ yolov3_leaf_test ”,右键 编辑,输入测试命令 语句:darknet.exe detector test data/obj-leaf.data yolov3-leaf.cfg backupyolov3-
26、leaf_24000.weights testt1.jpg。解释:darknet.exe detector test :表示测试图像; data/obj-leaf.data:表示 .data文件路径;yolov3-leaf.cfg :表示 .cfg 文件路径, backupyolov3-leaf_24000.weights 表示使用的训练好的模型路径, 这里我经过多次测试,发现迭代 24000 次后的模型识别 效果最好; testt1.jpg :表示要测试的图像路径。(3)图片测试结果测试不同的图像,只需要修改“ yolov3_leaf_test.cmd ”文件中的图片名即可。测 试结果如以下
27、图片所示。图 5.1 图像 t1 (木槿)识别结果图 5.2 图像 t2 (石楠)识别结果图 5.3 图像 t3 (银杏)识别结果4.2 测试视频(1)移植待测试视频 在“ darknet-masterbuilddarknetx64 测试视频放到该文件夹下。如下图所示,将视频 路径下新建一个“ test ”文件夹。将待 test 放到 test 文件夹下。图 5.4 待测试视频2)新建测试图片命令文件新建 .cmd 格式文件并命名为“ yolov3_leaf_video_test”,右键 编辑,输入测试命令语句:darknet.exe detector demo data/obj-leaf.d
28、ata yolov3-leaf.cfgbackupyolov3-leaf_24000.weights testtest3.mp4 -i 0 -out_filename res.avi pause。解释:darknet.exe detector demo:表示测试视频; data/obj-leaf.data:表示 .data文件路径;yolov3-leaf.cfg :表示 .cfg 文件路径, backupyolov3-leaf_24000.weights表示使用的训练好的模型路径; testtest3.mp4 :表示要测试的视频路径; -i 0 -out_filename res.avi pause:表示保存输出结果在“ darknet.exe ”同目录下并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年油页岩行业分析报告及未来发展趋势报告
- 2026年管线钢行业分析报告及未来发展趋势报告
- 2025年注册会计师题库及答案
- 【2025年】医院《医疗纠纷预防和处理条例》培训考试题(附答案)
- 2025年特种设备生产和使用单位安全总监和安全员考试题库附答案
- 2026年竞聘综合能力笔试题及答案
- 2026年电子宠物电商行业分析报告及未来发展趋势报告
- 2026年儿科急救药品知识考核测试题库含答案
- 2026年前厅餐饮考试题及答案
- 【2025年】医院感染预防与控制知识考试题及答案
- 松树鳃角金龟课件
- 2025 年工程机械行业发展研究报告
- 高速铁路轨道施工与维护课件 2.无缝线路养护维修
- 中职学校新校区搬迁舆情预案背景
- 《银屏乐声》第1课时《映山红》课件+2025-2026学年人音版(简谱)(2024)初中音乐八年级上册
- 上海软课题申报书示范
- (正式版)DB61∕T 5042-2022 《桩基施工安全技术规程》
- 2025年GMAT逻辑推理能力提高模拟试题及答案
- 古建筑拆除协议合同模板
- 村卫生室药品管理规范
- 2025年中学生法治素养竞赛题库及答案
评论
0/150
提交评论