PyTorch版YOLOv4更新了,適用於自定義數據集

2020-10-06 機器之心Pro

機器之心報導

作者:陳萍

距離YOLO v4 的推出,已經過去 5 個多月。YOLO 框架採用 C 語言作為底層代碼,這對於慣用 Python 的研究者來說,實在是有點不友好。因此網上出現了很多基於各種深度學習框架的 YOLO 復現版本。近日,就有研究者在 GitHub 上更新了基於 PyTorch 的 YOLOv4。


從今年 4 月 YOLOv4 發布後,對於這個目標檢測框架,問的最多的問題或許就是:「有沒有同學復現 YOLOv4 的, 可以交流一下麼」。由於原版 YOLO 使用 C 語言進行編程,光憑這一點就讓不少同學望而卻步。網上有很多基於 TF/Keras 和 Caffe 等的復現版本,但不少項目只給了代碼,並沒有給出模型在 COCO、PASCAL VOC 數據集上的訓練結果。

近日,有研究者在 GitHub 上開源了一個項目:基於 PyTorch 深度學習框架的 YOLOv4 復現版本,該版本基於 YOLOv4 作者給出的實現 AlexeyAB/darknet,並在 PASCAL VOC、COCO 和自定義數據集上運行。

項目地址:https://github.com/argusswift/YOLOv4-PyTorch

除此以外,該項目還向主幹網絡添加了一些有用的注意力方法,並實現了 mobilenetv2-YOLOV4 和 mobilenetv3-YOLOV4。

attentive YOLOv4

該項目向主幹網絡添加了一些注意力方法,如 SEnet、CBAM。

SEnet (CVPR 2017)

CBAM (CVPR 2018)

mobilenet YOLOv4

該研究還實現了 mobilenetv2-YOLOV4 和 mobilenetv3-YOLOV4(只需更改 config/yolov4_config.py 中的 MODEL_TYPE 即可)。

下表展示了 mobilenetv2-YOLOV4 的性能結果:

現在我們來看該項目的詳細內容和要求。

環境要求

Nvida GeForce RTX 2080TI

CUDA10.0

CUDNN7.0

windows 或 linux 系統

python 3.6

特性

DO-Conv (https://arxiv.org/abs/2006.12030) (torch>=1.2)

Attention

fp_16 training

Mish

Custom data

Data Augment (RandomHorizontalFlip, RandomCrop, RandomAffine, Resize)

Multi-scale Training (320 to 640)

focal loss

CIOU

Label smooth

Mixup

cosine lr

安裝依賴項

運行腳本安裝依賴項。你需要提供 conda 安裝路徑(例如 ~/anaconda3)以及所創建 conda 環境的名稱(此處為 YOLOv4-PyTorch)。

需要注意的是:安裝腳本已在 Ubuntu 18.04 和 Window 10 系統上進行過測試。如果出現問題,請查看詳細的安裝說明:https://github.com/argusswift/YOLOv4-PyTorch/blob/master/INSTALL.md。

準備工作

1. git 複製 YOLOv4 庫

準備工作的第一步是複製 YOLOv4。

然後更新配置文件「config/yolov4_config.py」中「PROJECT_PATH」。

2. 數據集準備

該項目準備了 Pascal VOC 和 MSCOCO 2017 數據集。其中 PascalVOC 數據集包括 VOC 2012_trainval、VOC 2007_trainval 和 VOC2007_test,MSCOCO 2017 數據集包括 train2017_img、train2017_ann、val2017_img、val2017_ann、test2017_img、test2017_list。

PascalVOC 數據集下載命令:

MSCOCO 2017 數據集下載命令:

在數據集下載好後,需要進行以下操作:

將數據集放入目錄,更新 config/yolov4_config.py 中的 DATA_PATH 參數。

(對於 COCO 數據集)使用 coco_to_voc.py 將 COCO 數據類型轉換為 VOC 數據類型。

轉換數據格式:使用 utils/voc.py 或 utils/coco.py 將 pascal voc *.xml 格式(或 COCO *.json 格式)轉換為 *.txt 格式(Image_path xmin0,ymin0,xmax0,ymax0,class0 xmin1,ymin1,xmax1,ymax1,class1 ...)。

3. 下載權重文件

1)darknet 預訓練權重:yolov4(https://drive.google.com/file/d/1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT/view)。

2)Mobilenet 預訓練權重:

mobilenetv2:(https://pan.baidu.com/share/init?surl=sjixK2L9L0YgQnvfDuVTJQ,提取碼:args);

mobilenetv3:(https://pan.baidu.com/share/init?surl=75wKejULuM0ZD05b9iSftg,提取碼:args)。

3)在根目錄下創建 weight 文件夾,將下載好的權重文件放到 weight / 目錄下。

4)訓練時在 config/yolov4_config.py 中設置 MODEL_TYPE。

4. 轉換成自定義數據集(基於自定義數據集進行訓練)

1)將自定義數據集的圖片放入 JPEGImages 文件夾,將注釋文件放入 Annotations 文件夾。

2)使用 xml_to_txt.py 文件將訓練和測試文件列表寫入 ImageSets/Main/*.txt。

3)轉換數據格式:使用 utils/voc.py 或 utils/coco.py 將 pascal voc *.xml 格式(或 COCO *.json 格式)轉換為 *.txt 格式(Image_path xmin0,ymin0,xmax0,ymax0,class0 xmin1,ymin1,xmax1,ymax1,class1 ...)。

訓練

運行以下命令開始訓練,詳情參見 config / yolov4_config.py。訓練時應將 DATA_TYPE 設置為 VOC 或 COCO。

它還支持 resume 訓練,添加 --resume,使用以下命令即可自動加載 last.pt。

檢測

修改檢測圖像路徑:DATA_TEST=/path/to/your/test_data# your own images。

結果可以在 output / 中查看,如下所示:

評估(Pascal VOC 數據集)

修改評估數據集路徑:DATA_PATH=/path/to/your/test_data # your own images

評估(COCO 數據集)

修改評估數據集路徑:DATA_PATH=/path/to/your/test_data # your own images

可視化熱圖

在 val_voc.py 中設置 showatt=Ture,網絡即可輸出熱圖。

在 output / 中可以查看熱圖,如下所示:

相關焦點

  • PyTorch版YOLOv4更新了,適用於自定義數據集
    從今年 4 月 YOLOv4 發布後,對於這個目標檢測框架,問的最多的問題或許就是:「有沒有同學復現 YOLOv4 的, 可以交流一下麼」。由於原版 YOLO 使用 C 語言進行編程,光憑這一點就讓不少同學望而卻步。網上有很多基於 TF/Keras 和 Caffe 等的復現版本,但不少項目只給了代碼,並沒有給出模型在 COCO、PASCAL VOC 數據集上的訓練結果。
  • PyTorch版YOLOv4更新了,不僅適用於自定義數據集,還集成了注意力和...
    近日,有研究者在 GitHub 上開源了一個項目:基於 PyTorch 深度學習框架的 YOLOv4 復現版本,該版本基於 YOLOv4 作者給出的實現 AlexeyAB/darknet,並在 PASCAL VOC、COCO 和自定義數據集上運行。
  • ...v4更新了,不僅適用於自定義數據集,還集成了注意力和MobileNet
    近日,有研究者在 GitHub 上開源了一個項目:基於 PyTorch 深度學習框架的 YOLOv4 復現版本,該版本基於 YOLOv4 作者給出的實現 AlexeyAB/darknet,並在 PASCAL VOC、COCO 和自定義數據集上運行。
  • PyTorch中的可迭代數據集重採樣
    動機不平衡學習是一種機器學習範例,其中分類器必須從具有傾斜的類分布的數據集中學習。不平衡的數據集可能對分類器的性能產生不利影響。重新平衡數據集是處理類不平衡的一種方法。這可以通過以下方式完成:採樣不足的普通類。對稀有類進行過度採樣。兩者兼而有之。
  • Pytorch 1.1.0駕到!小升級大變動,易用性更強,支持自定義RNN
    新智元原創 來源:pytorch.org、GitHub編輯:金磊【新智元導讀】盼望已久,Pytorch終於更新了!Pytroch 1.1.0的發布除了修復了已有bug之外,最大的亮點就是可以更快、更好的支持自定義RNN,以及TensorBoard對可視化和模型調試提供了一流的本地支持。
  • 新版PyTorch 1.2 已發布:功能更多、兼容更全、操作更快!
    在與 Microsoft 的合作中,我們增加了對導出 ONNX Opset 版本 7(v1.2)、8(v1.3)、9(v1.4)和 10(v1.5)的全面支持。同時,我們還優化了常量摺疊(constant folding)的傳遞,用以支持最新版本的 ONNX Opset 10。ScriptModule 也有相應的改進,包括:支持多輸出、張量工廠表、元組作為輸入和輸出。
  • 年度最大更新!PyTorch 0.4:完全改變API,官方支持Windows
    特別是,在輸入可以變化的情況下,例如文本這樣的非結構化數據,這非常有用而且高效。圖:PyTorch動態計算圖 - 來源:http://pytorch.org/about/以下為更新內容目錄:主要核心變更Tensor/Variable合併零維張量dtypes遷移指南新功能張量全面支持高級索引快速傅立葉變換神經網絡權衡內存計算bottleneck
  • 新版PyTorch發布!新增TorchScript API,擴展ONNX導出
    有網友評價,Transformer層非常棒,此前需要用自己的自定義圖層,現在終於不用去維護它了。TensorBoard不再是一個實驗性的功能了。RIP,瀏覽器。總之,1.2.0版本的PyTorch更方便更好用了。一起圍觀下具體更新。
  • 為深度學習模型加載自定義圖像數據集
    在本文中,你將學習如何加載自定義數據和創建圖像序列和測試數據集,作為深度學習模型的輸入。Open CV2PIL這裡使用的數據集是來自Kaggle的Intel圖像分類。數據集連結:https://www.kaggle.com/puneet6060/intel-image-classification/version/2「Intel圖像分類」數據集已分為train、test和Val,我們將僅使用訓練數據集學習如何使用不同的庫加載數據集。
  • 用PyTorch部署模型
    我們看一下今天的roadmap:1、使用docker安裝2、導出模型3、定義handler4、保存模型為了展示torchserve,我們將提供一個經過全面訓練的ResNet34進行圖像分類的服務。docker pull pytorch/torchserve:latest所有可用的tags:https://hub.docker.com/r/pytorch/torchserve/tags關於docker和torchserve的更多信息:https://
  • 「他山之石」PyTorch trick 集錦
    對於不用的數據變量,Pytorch 可以自動進行回收從而釋放相應的顯存。還有其他學習率更新的方式:1、自定義更新公式:scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda epoch:1/(epoch+1))2、不依賴epoch更新學習率:lr_scheduler.ReduceLROnPlateau
  • 如何在自定義數據集上訓練YOLOv5
    我們相信,與乾淨的數據管理工具相結合,任何希望在其項目中部署計算機視覺項目的開發人員都可以輕鬆地使用此技術。我們使用公共血細胞檢測數據集,你可以自己導出。你也可以在自己的自定義數據上使用本教程。事實上,我們和許多人經常將YOLOv3和YOLOv4 Darknet權重轉換為Ultralytics PyTorch權重,以便使用更輕的庫更快地進行推理。YOLOv5比YOLOv4表現更好嗎?我們很快會向你介紹,你可能對YOLOv5和YOLOv4有了初步的猜測。
  • 如何在自定義數據集上訓練YOLOv5
    你也可以在自己的自定義數據上使用本教程。公共血細胞檢測數據集:https://public.roboflow.ai/object-detection/bccd為了訓練探測器,我們採取以下步驟:安裝YOLOv5依賴項下載自定義YOLOv5對象檢測數據定義YOLOv5模型配置和架構訓練一個定製的YOLOv5探測器評估YOLOv5性能可視化YOLOv5訓練數據對測試圖像運行YOLOv5推斷導出保存的YOLOv5權重以供將來推斷
  • PyTorch 1.0 首個 RC 版本發布,包含大量重要特性
    它包含一種名為 Torch Script 的語言(它是 Python 的一個子集,所以編寫的仍然是 Python),以及兩種可以使現有代碼與 JIT.Torch Script 代碼兼容的方法。 使用 Torch Script 的代碼可以實現非常大的優化,並且可以序列化以供在後續的 C++API 中使用。
  • YOLO v5 實現目標檢測(參考數據集&自製數據集)
    4.1 設置coco128.yaml文件 4.2 文件目錄組織 4.3 選擇模型 4.4 訓練 4.5 訓練數據可視化 4.6 推斷/預測訓練公開數據集Mask Wearing Dataset 5.1 數據集的選擇 5.2 標籤格式說明 5.3 數據集的放置和配置文件的修改訓練自製數據集
  • 《PyTorch中文手冊》來了
    v0.4.1 已經新建了分支作為存檔,並且該不會再進行更新了。目錄第一章: pytorch 入門1. Pytorch 簡介2. Pytorch 環境搭建3.PyTorch 深度學習:60 分鐘快速入門 (官方)張量Autograd: 自動求導神經網絡訓練一個分類器選讀:數據並行處理 (多 GPU)4.
  • 基於PyTorch的YOLOv4 復現版本 不僅開源還有新驚喜
    距離 YOLO v4 的推出,已經過去 5 個多月。但由於YOLO 框架採用 C 語言作為底層代碼,網上出現了很多基於各種深度學習框架的 YOLO 復現版本。近日,就有研究者在 GitHub 上更新了基於 PyTorch 的 YOLOv4。
  • PyTorch 1.4 發布:支持 Java 和分布式模型並行訓練
    更新日誌顯示,此版本包含了 1500 多次提交,並在 JIT、ONNX、分布式、性能和 Eager 前端等方面進行了改進,以及對於移動版本和量化方面的實驗領域也進行了改進。1.4 還增加了新的實驗性功能,其中包括基於 RPC 的分布式模型並行訓練以及對 Java 的語言綁定。
  • PyTorch v1.1 重大更新,TensorBoard已加入豪華套餐
    近日在 2019 年 Facebook 開發者大會「F8」上,Facebook 公布了 PyTorch 的重大更新 1.1 版本,同時還發布並開源了其它多個開發工具,繼續降低機器學習/深度學習模型開發調試以及深度學習專用硬體設計的門檻。雷鋒網 AI 科技評論把更新主要內容介紹如下。更新更強的 PyTorch v1.1
  • 13個算法工程師必須掌握的PyTorch Tricks
    4、擴展單張圖片維度因為在訓練時的數據維度一般都是 (batch_size, c, h, w),而在測試時只輸入一張圖片,所以需要擴展維度,擴展維度有多個方法:import cv2import torch