本教程为keras-yolov3版本的训练及测试全过程实现,为保证对新手的友好性,不会过多解释原理,主要是让新手能对全过程有个比较清楚的概念和认识,方便训练自己的数据。
本教程一共有三个部分:一.数据集准备及生成 二.训练所需知识 三.测试及相关性能测试可视化

一.数据集准备及生成:
1.先来熟悉文件结构

font文件夹下是保存keras-yolov3可能会调用到的字体及颜色,在测试部分有用,方便在图片上显示相应文字标签

logs文件夹是保存模型权重的,在训练时也会保存tensorflow下的tensorboard可视化图,可供查看训练曲线

model_data文件夹下保存有coco_classes.txt,tiny_yolo_anchors.txt,voc_classes.txt,yolo.h5,yolo_anchors.txt,yolo-tiny.h5这6个文件,其中必须需要的是后5个。因为在本次训练中,全程按照VOC2007数据集格式来,所以coco_classes.txt文件中保存的coco数据集类别数据可以删除不要,而后5个分别是yolo和tiny-yolo的anchors(锚点)大小和其在原版darknet下载训练并转换成keras模型的预训练权重,这些在训练过程中都要用到。

results文件夹是保存测试部分中对测试集图片进行测试的结果,在测试分析中需要用到

VOCdevkit文件夹是所有数据存放的文件夹,其下文件夹目录为


进入VOC2007文件夹可看到


这里Annotations文件夹保存的是所有图片的标注框xml格式的数据。ImageSets文件夹下还有

三个子文件夹,其中只有Main文件夹有用,里面存放着训练需要调用的图片名称,

这里放着的是训练集和测试集的图片名称,方便训练时的调用。

JPEGImages文件夹下放着所有的图片文件,可以是JPG或者PNG格式的图片。
SegmentationClass和SegmentationObject是作为语义分割中用的,这里keras-yolov3是目标检测,所以可以删去不要。

训练验证测试集生成.py 文件是根据已有的xml(图片)数据生成Main文件夹下的test.txt和train.txt文件的脚本。
新建文本文档.py 文件是修改保存Annotations文件夹下的xml文件路径的脚本,如果路径都是对了,可以不用管这个脚本,如果不对,可以根据自己的文件所在目录进行更改。

回到最开始的目录,yolo3文件夹下保存的是keras-yolov3的模型源码。

2007_train.txt和2007_test.txt是在标注完数据后调用voc_annotation.py文件生成的训练数据和测试数据文件的集合,里面存放着图片路径和目标框信息及类别信息。

剩下的.py文件中最重要的是convert.py,kmeans.py,train.py,voc_annotation.py,yolo.py,yolo_detect.py,yolov3.cfg,yolov3-tiny.cfg这几个文件,其作用分别是:
convert.py 将darknet下训练的权重转化为keras权重使用
kmeans.py 可以根据你自己的xml数据生成新的anchors(锚点),如果自己的数据集数据太特殊,目标太大或者太小导致使用原版效果不好,可以使用这个文件修改anchors,以达到检测更好的效果
train.py 是训练模型并保存权重的文件
voc_annotation.py 是根据已有数据集生成2007_train.txt和2007_test.txt这两个训练时真正调用的文件
yolo.py 定义了yolo模型类,并提供了一些方法,可以方便调用yolo功能进行测试
yolo_detect.py 可以测试图片、视频及实时摄像头,直接生成结果
yolov3.cfg和yolov3-tiny.cfg是模型的config文件,里面定义了模型的结构,一般不用改变,在训练时会有一点地方需要改动

2.文件夹结构及作用讲完后,可以开始准备数据了。先限定是自己的数据集,那么只有源视频数据或者图片,没有任何标注,那么要做的第一件事是将视频转化为图片后存入VOCdevkit/VOC2007/JPEGImages文件目录下,然后使用已经安装好的labelImg对该目录下图片进行标注,并将生成的xml文件存入VOCdevkit/VOC2007/Annotations文件目录下。这两步做完后,运行 python 训练验证测试集生成.py 命令会在同目录下的ImageSets/Main文件下生成train.txt和test.txt,其train和test之间的比例可以通过改变训练验证测试集生成.py脚本中的test_percent = 0.1和train_percent = 0.9这两个数字进行改变。
之后返回根目录,运行 python voc_annotation.py 命令生成训练模型真正需要的2007_train.txt和2007_test.txt文件。至此,数据集的准备已经全部完成。

二.训练所需知识 :
准备好数据集后当然就是开始训练,在训练前有两个文件中的内容需要修改
–model_data/voc_classes.txt文件和yolov3.cfg文件,在voc_classes.txt中你只需要将根据你数据集的种类和标注时的标签对上,写下英文名字即可

这里只有房子这一类,那么房子在标注时label设为0,在这里放第一个,如果有多类,只需要按照标注时的label数字从小到大写好就可以了;
yolov3.cfg中需要改的地方一共有三处:先进入文件,搜索 yolo 变会有三处地方显示出来,这三处都需要根据自己数据进行修改。如下图:

这是其中一处,这里我标注了三个地方需要改变,带有###change的就是了,filters根据公式3*(5+数据集类别数目)可以修改,这里只有一类那么修改为filters=18就可以(3*(5+1)=18);classes=2修改classes=1,因为只有一类;random=0代表了多尺度训练不开启,不开启对显存的要求会更低,这样显存不够的显卡也可以训练,如果random=1那么多尺度训练开启,在训练中图片会随机增强放大等等,对显存要求更高,这里设为0即可。
剩下两处也跟这里一样进行修改即可。

修改完这两个文件后,就可以进行train.py文件准备开始训练了,下面讲解一下train.py文件中的一些参数,方便自己训练修改:

上图中的annotation_path,log_dir,classes_path,anchors_path分别代表了训练图片数据的路径,模型存放路径,数据集种类路径,模型anchors数据路径,这些自己都是可以修改的,这里我们因为前面的数据生成一直按照VOC2007格式来,所以这里可以不用变。

上图代表训练图片输入的宽高大小,其数值必须是32的倍数,一般设置为(320,320),(416,416),(608,608)这个根据你显存的大小和数据目标框大小进行改变,一般情况下(416,416)即可,这代表训练时会把图片都变成这个大小再送入网络中。

这里选择是使用yolov3的模型还是tiny-yolov3模型,tiny相对小速度快,不过精度降低。

这里进行数据的训练集和验证集划分,比例9:1,可以自行更改。

这里加载预训练模型进行预热,其作用在于使用预训练模型权重,只改变后两层的权重,前面特征提取的权重都没变,为后面不冻结模型-全部层训练打下了基础,方便其loss的降低,这里batch_size和epochs都可以更改,不过一般修改batch_size就够了,显存大的可以改大,预热训练完成后模型权重会保存到’logs/000/trained_weights_stage_1.h5’这里。

这里开启了所有层,都进行训练,轮数更多,以便训练到比较好的效果,让loss收敛。
注意:在keras-yolov3中因为模型构建时使用了l2正则化的措施,所以最终模型的loss都不会降到特别低,一般keras-yolov3loss降到10左右效果便可以了。
训练到结束即可,训练过程就此结束。

三.测试及相关性能测试可视化:
对单张图片,视频及摄像头测试可以使用 yolo_detect.py , 只要输入相应的参数即可,比如输入 python yolo_detect.py --image 后就可以对单张图片进行测试等等。这里要注意其调用的都是 yolo.py 中的Yolo类

这些都是可以根据你自己实际需求改的,比如model_path就是你想测试的模型权重路径,anchors_path和classes_path也是同理,score代表一个阈值,只有置信度高于此值的目标才会被框出来,iou也是同理,model_image_size需要跟你训练时的input_shape一致,gpu_num代表你是否加载多GPU进行测试。
VOC测试集信息生成.py 文件使用了yolo.py 中的Yolo类进行测试集图片的测试,并将生成的结果保存下来,可以作为 pr曲线绘制和map计算的依据。
VOC测试集PR和MAP结果.py 文件调用了 voc_eval_py3.py 文件中的方法计算pr曲线和MAP,并将结果保存下来。

四. 结语:
这篇教程详细阐述了keras-yolov3下的训练和测试全过程,对关键地方进行了解释和说明,读者可以自行更改。关于yolov3 的原理可以自行去查阅资料,这里不作过多解释。

心得:

  1. 在keras-yolov3下,.cfg文件可以不用,在darknet下才有用,只是作为学习其结构的参考,所以我改了backbone后,将darknet_body改为mobilenet_body,一样可以正常训练和运行,只要保持结构一致即可。
  2. 在keras-yolov3下,主要修改的参数还是yolo_anchors.txt和train.py里create_model的ignoresh参数,还有input_shape,这个是决定你显存的,所以,由此也可以看出,keras-yolov3的效果比darknet原版差一些也是自然的,因为很多设置都是没法调的,能改的地方不多。
  3. 仿照原版的结构来理解即可,参读了一下源码,还是基本一致的,所以效果也还是可以的。进一步改进除了我改了的backbon外,估计就是改进结构了,那这个模型就得重新写了。大概就是这样

keras-yolov3训练及测试详解相关推荐

  1. 史上最详细的Pytorch版yolov3代码中文注释详解(四)

    史上最详细的Pytorch版yolov3代码中文注释详解(一):https://blog.csdn.net/qq_34199326/article/details/84072505 史上最详细的Pyt ...

  2. 语言模型训练工具SRILM详解

    语言模型训练工具SRILM详解 SRILM是著名的约翰霍普金斯夏季研讨会(Johns Hopkins Summer Workshop)的产物,诞生于1995年,由SRI实验室的Andreas Stol ...

  3. 神经网络学习小记录58——Keras GhostNet模型的复现详解

    神经网络学习小记录58--Keras GhostNet模型的复现详解 学习前言 什么是GhostNet模型 源码下载 GhostNet模型的实现思路 1.Ghost Module 2.Ghost Bo ...

  4. Pytorch | yolov3原理及代码详解(二)

    阅前可看: Pytorch | yolov3原理及代码详解(一) https://blog.csdn.net/qq_24739717/article/details/92399359 分析代码: ht ...

  5. FastText 总结:文本分类、词向量训练、参数详解

    FastText:文本分类.词向量训练.参数详解 前言 - FastText 简介 一.FastText - 安装 1.1 - Github下载安装 1.2 - 编译器安装 二.FastText - ...

  6. mysql ssd 性能测试 写入_MySQL服务器的SSD性能问题分析和测试详解

    [问题] 我们有台HP的服务器,SSD在写IOPS约5000时,%util达到80%以上,那么这块SSD的性能究竟有没有问题,为解决这个问题做了下面测试. [工具] blktrace是linux下用来 ...

  7. batchnorm2d参数 torch_pytorch方法测试详解——归一化(BatchNorm2d)

    测试代码: import torch import torch.nn as nn m = nn.BatchNorm2d(2,affine=True) #权重w和偏重将被使用 input = torch ...

  8. Nmap渗透测试详解(一)

    Nmap渗透测试详解(一) 如今,Nmap享有"扫描之王"盛誉. Nmap诞生于1996年.在这个信息爆炸的互联网时代,Nmap依然保持着充沛的活力以及旺盛的生命力.原因如下: 知 ...

  9. 逆变效率软件测试,【干货】光伏逆变器动态MPPT效率测试详解

    原标题:[干货]光伏逆变器动态MPPT效率测试详解 在现实生活中,由于阳光照射角度.云层.阴影等多种因素影响,光伏阵列接受到的阳光辐照度和相应温度在不同的条件下会有很大的差别,比如在早晨和中午,在 晴 ...

最新文章

  1. Fast.ai推出NLP最新迁移学习方法「微调语言模型」,可将误差减少超过20%!
  2. 在MyEclipse启动或者是tomcat启动的时候出现:Address already in use: JVM_Bindnull:8080
  3. 8000字 | Python数据可视化,完整版实操指南 !
  4. elasticsearch搜素关键字自动补全(suggest)
  5. NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」
  6. swift 3.0 中使用 xib
  7. SQL Prompt 快捷键
  8. Vue3.x 推荐使用 mitt.js
  9. 因为机遇,不会轻易悲伤
  10. 【OpenDDS开发指南V3.20】第一章:介绍
  11. luogu P4556 [Vani有约会]雨天的尾巴
  12. Matlab实现Taylor展开近似计算、五角星画法
  13. 测试投入度量元的选择
  14. OMCS 语音视频框架
  15. HTML之调色原理分析
  16. 微信读书产品体验报告
  17. EasyExcel 动态表头 + 数据单元格合并
  18. 成熟男人与24岁女孩精彩对白 —非常感动
  19. python绘制分形图基础_python绘制分形图
  20. 时间复杂度与大O记法的理解

热门文章

  1. Android如何修改使用默认使用GPS提供时间
  2. Juniper SRX Junos升级
  3. 贝叶斯规划学习BPL
  4. SpringBoot高级_与安全
  5. android os v2.0,免除升级烦恼 Android OS v2.2给力手机推荐
  6. Nginx中last和break redirect和permanent区别和联系
  7. ckEditor使用方法
  8. Android 13 适配指南~
  9. NVIDIA支持CUDA的显卡选型简述
  10. 华工 计算机应用 作业,华工网教2018计算机应用基础平时作业