导读 YOLOv5是目前Yolo系列应用非常广的算法,迭代了很多版本,目前已升级到V6.2版本,从原本训练目标检测,到也可训练分类模型,整个算法生态越来越完善,通过本文的梳理,希望对大家学习有帮助。
yolov5-6.2增加了分类训练、验证、预测和导出(所有 11 种格式),还提供了 ImageNet 预训练的 YOLOv5m-cls、ResNet(18、34、50、101) 和 EfficientNet (b0-b3) 模型。
此次发布的主要目标是引入超级简单的 YOLOv5 分类工作流程,就像现有的目标检测模型一样。以下新的 v6.2 YOLOv5-cls 模型只是一个开始,作者将继续与现有的检测模型一起改进这些模型。
下一个版本 v6.3 计划于 9 月发布,将为 YOLOv5 带来官方实例分割支持,今年晚些时候将发布一个主要的 v7.0 版本,更新所有 3 个任务的架构——分类、检测和分割。
1、重要更新
分类模型:TensorFlow、Keras、TFLite、TF.js 模型导出现在使用python export.py --include saved_model pb tflite tfjs完全集成。
ClearML日志记录:与开源实验跟踪器 ClearML 集成。使用 pip install clearml 安装将启用集成并允许用户跟踪在 ClearML 中运行的每个训练。这反过来又允许用户跟踪和比较运行,甚至远程安排运行。
Deci.ai优化:一键自动编译和量化 YOLOv5 以获得更好的推理性能。
GPU导出基准:使用 python utils/benchmarks.py --weights yolov5s.pt --device 0 用于 GPU 基准测试或 --device cpu 用于 CPU 基准测试,对所有 YOLOv5 导出格式进行基准测试(mAP 和速度)。
训练可再现性:使用 torch>=1.12.0 的单 GPU YOLOv5 训练现在完全可再现,并且可以使用新的 --seed 参数(默认种子 = 0)。
Apple Metal Performance Shader (MPS) 支持:通过 --device mps 对 Apple M1/M2 设备的 MPS 支持(完整功能在 pytorch/pytorch#77764 中等待更新)。
2、分类模型与精度
使用 4×A100 在 ImageNet 上训练了 YOLOv5-cls 分类模型 90 个 epoch,并且训练了 ResNet 和 EfficientNet 模型以及相同的默认训练设置进行比较。将所有模型导出到 ONNX FP32 进行 CPU 速度测试,并将所有模型导出到 TensorRT FP16 进行 GPU 速度测试。在 Google Colab Pro 上进行了所有速度测试,以便轻松重现。
3、使用
YOLOv5 分类训练支持使用 --data 参数自动下载 MNIST、Fashion-MNIST、CIFAR10、CIFAR100、Imagenette、Imagewoof 和 ImageNet 数据集。例如,要开始在 MNIST 上进行训练,使用 --data mnist。
train
#Single-GPU pythonclassify/train.py--modelyolov5s-cls.pt--datacifar100--epochs5--img224--batch128 #Multi-GPUDDP python-mtorch.distributed.run--nproc_per_node4--master_port1classify/train.py--modelyolov5s-cls.pt--dataimagenet--epochs5--img224--device0,1,2,3
val
bashdata/scripts/get_imagenet.sh--val#downloadImageNetvalsplit(6.3G,50000images) pythonclassify/val.py--weightsyolov5m-cls.pt--data../datasets/imagenet--img224#validate
test
pythonclassify/predict.py--weightsyolov5s-cls.pt--datadata/images/bus.jpg
4、构建形式
分类模型的构建依旧是YOLOv5的风格,加入了分类的head,这里点赞,不怕没有预训练权重了!
classClassificationModel(BaseModel): #YOLOv5classificationmodel def__init__(self,cfg=None,model=None,nc=1000,cutoff=10):#yaml,model,numberofclasses,cutoffindex super().__init__() self._from_detection_model(model,nc,cutoff)ifmodelisnotNoneelseself._from_yaml(cfg) def_from_detection_model(self,model,nc=1000,cutoff=10): #CreateaYOLOv5classificationmodelfromaYOLOv5detectionmodel ifisinstance(model,DetectMultiBackend): model=model.model#unwrapDetectMultiBackend model.model=model.model[:cutoff]#backbone m=model.model[-1]#lastlayer ch=m.conv.in_channelsifhasattr(m,'conv')elsem.cv1.conv.in_channels#chintomodule c=Classify(ch,nc)#Classify() c.i,c.f,c.type=m.i,m.f,'models.common.Classify'#index,from,type model.model[-1]=c#replace self.model=model.model self.stride=model.stride self.save=[] self.nc=nc def_from_yaml(self,cfg): #CreateaYOLOv5classificationmodelfroma*.yamlfile self.model=None
-
开源
+关注
关注
3文章
3243浏览量
42378 -
模型
+关注
关注
1文章
3158浏览量
48701 -
跟踪器
+关注
关注
0文章
131浏览量
20008
原文标题:Yolov5-6.2版本更新,Yolov5也可训练分类模型,语义分割+实例分割即将发布!
文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论