導讀 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文章
3363瀏覽量
42530 -
模型
+關注
關注
1文章
3254瀏覽量
48876 -
跟蹤器
+關注
關注
0文章
131瀏覽量
20042
原文標題:?Yolov5-6.2版本更新,Yolov5也可訓練分類模型,語義分割+實例分割即將發布!
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論