yolov3训练自己的模型,yolo模型继续训练
Yolov5自定义图像训练测试及模型调整(详细流程)1。图像数据采集和标记2。数据集分割和准备3。设置训练参数和准备训练3.1数据/训练配置XXX。XXX
在书中(详细流程)))))))))))))))))))))))))))接下来的30分钟内完成Yolov5的安装、配置和使用。
1.图像数据的获取和注释。当您定制自己的数据集时,您需要首先对数据进行注释。数据来源包括下载已有的开发数据集、拍照、抓取等。
如果是通过照片或爬虫获取的数据图像,需要标注数据。这个过程可以用工具来完成,但也需要人工操作。此外,图像越多越好。如果样本太少,模型的训练和预测都会受到影响,难以拟合。
这里的自定义数据往往没有现成的数据集,所以用手机拍照获取图像。
有许多图像标记工具,这里我使用Makesense AI工具来标记图像:
地址:3359 www.makesense.ai/make sense . ai功能强大,免费照片标签在线工具。
Makesense.ai不需要安装,使用浏览器即可。很方便。另外,可以直接导出Yolo格式,不需要使用工具进行转换。
(当然还有其他工具,比如labelimg,但是只能导出xml。Xml-txt转换需要脚本,但是labelimg等本地工具的数据更私密/安全。)
或者拖动上传要标记的图像文件,然后单击对象检测。
当你点击“ObjectDetection”时,会显示一条信息,表明你需要添加一个标签,如有必要,添加标签的名称。
(根据待测数据集,如果有几种类型,请补充几种。)
添加标签名称后,点击“开始项目”。
然后进入舞台,用rect画一个矩形框做标记。
生成传感器支撑点、线和区域标记。
标记完成后,点击“导出评论”导出标签。
选择Yolo格式
导出的tag标签文件实际上是类别和区域位置,每个标签格式代表:
class _ centery _ centerwidthheight对应于lable文件中每行的内容。示例:
因为我们可以用makesense.ai直接生成yolo格式的label txt,以后就不需要使用工具进行转换了,直接复制到数据集就可以了,非常方便。否则,对于xml文件格式,需要一个用于xml-txt转换的脚本。
2.数据集划分和准备:首先划分测试数据集,将定制的测试图像数据和标签数据集分别划分为训练集、验证集和测试集。比例随数据量而异,一般可以是963360233602%。
遵循Yolov5的原生格式,我们创建了一个新的数据集目录和两个子目录images和labels,用于存储待训练图像和标签的标签数据:
分别创建数据集目录train/val/test,
将每个对应的测试数据集放入对应的文件夹(文件名要一一对应),如下图所示。
到目前为止,训练所需的数据集已经分段并准备好了。
3.配置训练参数,准备训练:不像。Yolov3/Yolov4的cfg配置文件,Yolov5参数配置文件都在。yaml格式。
3.1修改数据/培训配置xxx.yaml文件。然后,您需要修改Yolov5的培训配置参数来定制和创建培训。您要使用的yaml配置文件。
为了修改方便,我们可以复制原始数据/coco128.yaml,更改其名称,将参数改为自定义训练参数。
首先,通过观察coco128.yaml可以看出,原来coco训练集中的类别数是80,标签(模型识别的类别名称)分别是下一个名称。
根据具体需要进行修改。这里用于测试的修复如下
将path/train/val/test目录路径更改为自定义数据集路径,将NC(numberofclasses)更改为2,将名称注释为您自己的数据类名,然后删除downloadtrain.py。
修改后的yaml:
3.2修改models/model configuration XXX . yaml文件进入“model/directory”时,将显示四个模型配置的YAML文件。
您需要选择要修改的模型yaml。这里为了准确起见,以模型网络参数最大的yolov5x为例,打开yolov5x.yaml。
模型的yaml文件中包含了与模型网络相关的配置参数,比如nc下的depth_multiple。
指网络的深度,width_multiple是网络的宽度,anchors是锚点(标记对象的方框),backbone是主干网。
yolov5x.yaml是yolov5x模型训练的具体参数。在这里,同上,相应的参数也被修改。
建议复制一个新的yaml进行修改:
Nc改为2。对于锚点,如果您已经提前进行了聚类,则可以同步修改计算的锚点。否则,您不能修改它们。Yolov5默认可以自动判断是否需要重新聚类锚(使用K-means),所以我这里没有操作。
4.开始训练。修改两个yaml配置文件后,您可以开始训练:
python train . py-CFG Models/yolo V5 M _ TSTAT。YAML数据/TSTAT。YAML-重量级yolov 5M . PT-EPOCH 150-批量-32开始训练:
然后就是漫长的训练过程,等待训练完成。
训练结束后,从最后的日志可以看出,训练好的模型的权重保存在runs/train/exp17/weights/last . pt和best.pt中
还包括训练过程数据,如PR曲线、混淆矩阵和results.png/txt.
train.py相关参数解析:
权重:权重文件路径。如果是,重复训练参数。如果不是空白,就做迁移学习。重量文件的型号应与cfg参数中的型号相对应。epochs:指整个数据集在训练过程中迭代的次数。批次大小:每次梯度更新的批次号。指权重更新前一次查看多少张图片。config-thres:模型目标检测的置信度阈值cfg:用于存储模型结构数据的配置文件:存储训练、测试文件img-size:输入图片的宽度和高度rect:执行矩形训练resume:恢复最近保存的模型并开始训练nosave:仅保存最终的检查点notest:仅测试最后一个epochevolve:evolve super parameter cache-images:缓存图像以加速训练name:rename results . txt to results _ name . txt device:cuda device,即0或0,1,2,3or5.训练后测试模型:同样使用detect.py,权重使用新训练后的best.pt。你可以拍一张新的测试图片,或者找一张以前没用过的图片。
python detect . py-weights runs/train/exp 16/weights/best . pt-sourcedata/test/TC 400 _ 137.jpg(模型调优后图片的置信度为0.9)train_batch0.jpg:可以看到模型在训练过程中,模型用0和1分别代表两个不同的标签/类。
Yolov5官网的预训练模型在训练中使用了coco数据集,从0到80的数字分别代表不同的标签/类别。
例如,官方文件提供的train _ batch0.jpg的示例图片对应于batch 0:
实时摄像头识别如下,识别的辨别力还在~
6.细心调模型参数的朋友可以发现,上述目标检测识别的置信度都比较低(实时摄像头检测的置信度都低于0.2)。
一般好的模型的置信度应该在0.6以上,识别率应该在90%以上。
所以这次训练出来的模型识别效果很差,用不上。这是因为上面的培训流程没有进行模型的调优。
接下来需要对YOLOv5模型的参数进行优化,提高识别率和置信度。(或者增加样本数据量,然后重新训练)
Train.py会默认使用源代码的模型超参数。这些参数对于Githu上的源代码在训练时的数据集(如coco数据集)可能是最优的,但在我们的自定义数据中不一定有效。
实际上Github上的预训练模型在识别率等方面也存在一些缺陷,不能直接应用到实际项目中。在大多数应用中,需要重新调整,基于相应的数据集训练出适合自己项目的模型。
优化模型的hyp参数后,置信水平明显提高,最终检验为实时摄像头检测的置信度能达到0.6以上,纯img检测图像更是能达到0.9:
在参数整定的过程中,通常要多次重复微调-训练-测试,最终才能得到符合要求/更好的HyperPara并应用于工程中。
上图:
调整data/hyps/hyp.finetune.yaml中的超参数:
最后,lr0(学习率)被调整为0.0030,并且epoch和batch-size被修改。
部分hyp超参数意义:
0: 0.0032 #学习率lrf: 0.12 #余弦退火动量:0.843 #学习率动量权重_衰减:0.00036 #权重衰减系数warmup_epochs: 2.0 #学习预热epoch warm _ momentum: 0.5 #预热学习率动量warm _ bias _ LR: 0.05 #预热学习率box: 0.0296 # giou损失系数cls: 0.243 #分类损失系数cls_pw 有或没有对象丢失的系数obj_pw: 0.911 #有或没有对象丢失的正样本的权重iou_t: 0.2 #标签和锚的iou训练阈值,并将历元增加到1000,批大小增加到64。 再用train.py,训练时间也是。
python train . py-CFG models/yolov 5m _ tstat . YAML-data data/tstat . YAML-weights yolov 5m . pt-epoch 1000-batch-size 64
当然也要考虑到,在视频图像识别中,运动物体的识别率比静止图像差,运动检测越激烈,偏差越大。
例如,将设备放在桌面上的识别率和置信度会更稳定:
同时也要考虑到,我在这里测试的时候,手工取的数据量比较少,也可能导致模型欠拟合,导致模型识别效果不好。
实际的图像数据量,每一类都要好于1500,并做一些图像增强、变换等数据预处理技术。增加模型的稳健性,防止过拟合。
模型调优的技巧请参考官网的提示:https://docs . ultralytics . com/tutorials/training-tips-best-results/
在模型测试时,无论是加载模型的速度,还是测试图片的推理速度,都能明显感觉到Yolov5更快,尤其是加载模型的速度,因为同样的数据集训练出来的模型Yolov5更轻量,体积缩小到Yolov3的近四分之一。
到目前为止,Yolov5定制数据训练和测试/模型调优已经完成。
附Yolov5的网络模型结构图(图片来自知乎江大白)
下面将继续深入讨论Yolov5的源代码和主干网络。
博主推荐热门文章:一篇读懂系列:
一读无线充电技术(附方案选择及原理分析)一读:Android/iOS手机如何通过音频接口(耳机接口)与外设通信一读:Android手机如何通过USB接口与外设通信(附原理分析及方案选择)LoRa Mesh系列:
LoRa学习:LoRa学习的关键参数(扩频因子、编码速率、带宽)的设置与解读:信道占用检测原理(CAD) LoRa/FSK无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等。)网络安全系列:
ATECC508A芯片开发笔记(1):我第一次见到SHA/HMAC/AES-CBC/CTR算法的性能和RAM消耗测试结果。常用加密/签名/哈希算法(多平台AES/DES、DH、ECDSA、RSA等)的性能比较。)AES加密和解密效率测试(纯软件AES 128/256)——采用嵌入式Cortex-M0和M3平台
嵌入式学习中良好的动手项目和项目安排(有代码资料、学习视频和嵌入式学习规划)IAR调试技巧总结:Linux内核编译配置(Menuconfig)如数据断点、CallStack、设置堆栈、检查堆栈使用情况和堆栈深度、内存、设置Next语句等。制作文件系统的详细步骤:调用Android底层的C代码(JNI实现)。第一步:开机启动,安装中文字体,虚拟键盘,打开SSH等Android/Linux设备。有线和无线双网共存(内部和外部网络)嵌入式开发系列:
AI:机器学习必须知道的几个术语:标签、特征、模型……AI:卷积神经网络CNN已解决过拟合方法AI:什么是机器学习的数据清洗AI:机器学习的模型是如何训练的?(通过试错学习)数据可视化:TensorboardX安装和使用(安装测试案例演示)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。