PyTorch 版 YOLOv4 更新了,不僅適用於自定義數據集,還集成了注意力和 MobileNet

2021-02-19 Python開發者

(給Python開發者加星標,提升Python技能)

來源:機器之心

距離 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。該項目向主幹網絡添加了一些注意力方法,如 SEnet、CBAM。

該研究還實現了 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)。
pip3 install -r requirements.txt 

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

然後更新配置文件「config/yolov4_config.py」中「PROJECT_PATH」。該項目準備了 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。
# Download the data.cd $HOME/datawget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar# Extract the data.tar -xvf VOCtrainval_11-May-2012.tartar -xvf VOCtrainval_06-Nov-2007.tartar -xvf VOCtest_06-Nov-2007.tar

  2017 Train images [118K/18GB]   2017 Val images [5K/1GB]   2017 Test images [41K/6GB]   2017 Train/Val annotations [241MB]   #step2: arrange the data to the following structure   COCO   ---train   ---test   ---val   ---annotations

將數據集放入目錄,更新 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 ...)。

1)darknet 預訓練權重:yolov4(https://drive.google.com/file/d/1cewMfusmPjYWbrnuJRuKhPMwRe_b9PaT/view)。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。
CUDA_VISIBLE_DEVICES=0 nohup python -u train.py  --weight_path weight/yolov4.weights --gpu_id 0 > nohup.log 2>&1 &

它還支持 resume 訓練,添加 --resume,使用以下命令即可自動加載 last.pt。
CUDA_VISIBLE_DEVICES=0 nohup python -u train.py  --weight_path weight/last.pt --gpu_id 0 > nohup.log 2>&1 &

修改檢測圖像路徑:DATA_TEST=/path/to/your/test_data# your own images。
for VOC dataset:CUDA_VISIBLE_DEVICES=0 python3 eval_voc.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval --mode detfor COCO dataset:CUDA_VISIBLE_DEVICES=0 python3 eval_coco.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval --mode det

修改評估數據集路徑:DATA_PATH=/path/to/your/test_data # your own images
for VOC dataset:CUDA_VISIBLE_DEVICES=0 python3 eval_voc.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval -

修改評估數據集路徑:DATA_PATH=/path/to/your/test_data # your own images
CUDA_VISIBLE_DEVICES=0 python3 eval_coco.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval --mode val
type=bboxRunning per image evaluation... DONE (t=0.34s).Accumulating evaluation results... DONE (t=0.08s). Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.438 Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.607 Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.469 Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.253 Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.486 Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.567 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.342 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.571 Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.632 Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.458 Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.691 Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.790

在 val_voc.py 中設置 showatt=Ture,網絡即可輸出熱圖。
for VOC dataset:CUDA_VISIBLE_DEVICES=0 python3 eval_voc.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --evalfor COCO dataset:CUDA_VISIBLE_DEVICES=0 python3 eval_coco.py --weight_path weight/best.pt --gpu_id 0 --visiual $DATA_TEST --eval

- EOF -

覺得本文對你有幫助?請分享給更多人

關注「Python開發者」加星標,提升Python技能

好文章,我在看❤️

相關焦點

  • PyTorch版YOLOv4更新了,不僅適用於自定義數據集,還集成了注意力和MobileNet
    項目地址:https://github.com/argusswift/YOLOv4-PyTorch除此以外,該項目還向主幹網絡添加了一些有用的注意力方法,並實現了mobilenetv2-YOLOV4和mobilenetv3-YOLOV4。該項目向主幹網絡添加了一些注意力方法,如 SEnet、CBAM。
  • PyTorch 版 YOLOv4 更新了,可自定義數據集,還集成了 MobileNet
    項目地址:https://github.com/argusswift/YOLOv4-PyTorch 除此以外,該項目還向主幹網絡添加了一些有用的注意力方法,並實現了 mobilenetv2-YOLOV4 和 mobilenetv3-YOLOV4。該項目向主幹網絡添加了一些注意力方法,如 SEnet、CBAM。
  • Scaled-YOLOv4 快速開始,訓練自定義數據集
    usp=sharing現有模型測試準備 COCO 數據集下載 COCO 數據集 http://cocodataset.org/,coco2017├── annotations│   ├── instances_train2017.json│   └── instances_val2017.json├── test2017├──
  • YOLO v4 : 基於數據集BCCD,從頭開始配置文件,訓練一個模型
    014. pip install xxx  【註:安裝軟體包/依賴包,請參考官網環境配置指南,https://github.com/AlexeyAB/darknet#requirements】主要是安裝opencv,CUDA,cuDNN等5. git clone
  • 【CV】YOLOv4最全復現代碼合集(含PyTorch/TF/Keras和Caffe等)
    現在Amusi 將基於不同深度學習框架的 YOLOv4 復現代碼進行匯總(自認為還不錯的復現代碼),為了方便各位 CVers 瀏覽,下述內容已經同步上傳至github:https://github.com/amusi/YOLO-Reproduce-Summary此次YOLOv4 復現代碼合集涵蓋下面幾種常用深度學習框架(含推理):PyTorch
  • YOLOv4的PyTorch最小化實現
    A minimal PyTorch implementation of YOLOv4.
  • 乾貨 | YOLOV5 訓練自動駕駛數據集,並轉Tensorrt,收藏!
    環境配置配置文件修改訓練推理轉TensorrtBDD100K是最大的開放式駕駛視頻數據集之一,其中包含10萬個視頻和10個任務,目的是方便評估自動駕駛圖像識別算法的的進展。每個高解析度視頻一共40秒。該數據集包括超過1000個小時的駕駛數據,總共超過1億幀。這些視頻帶有GPU / IMU數據以獲取軌跡信息。該數據集具有地理,環境和天氣多樣性,從而能讓模型能夠識別多種場景,具備更多的泛化能力。這些豐富的戶外場景和複雜的車輛運動使感知任務更具挑戰性。該
  • YOLOv4最全復現代碼合集(含PyTorch/TF/Keras和Caffe等)
    其實去年Amusi 就整理過YOLOv3的最全復現合集,詳見:YOLOv3最全復現代碼合集(含PyTorch/TensorFlow和Keras等)現在Amusi 將基於不同深度學習框架的 YOLOv4 復現代碼進行匯總(自認為還不錯的復現代碼),為了方便各位 CVers 瀏覽,下述內容已經同步上傳至github:https://github.com/amusi
  • YOLOv4 的各種新實現、配置、測試、訓練資源匯總
    /yolov4.weights ~/Desktop/0002-20170519-2.mp4 -thresh 0.2 -ext_output -out_filename ~/Desktop/output.avi原 YOLOv4 是基於DarkNet框架的,已經有不少小夥伴在著手其他版本的實現:1、YOLOv4 的 TensorFlow 2.0 實現https:/
  • 使用google colab訓練YOLOv5模型
    colab最大的好處是給廣大的AI開發者提供免費的gpu資源,可以在上面非常輕鬆地運行如tensorflow、pytorch、keras等深度學習框架。colab_yolov5接下來,將準備好的口罩數據集上傳到colab文件夾中,這個數據集,前面我們在YOLOv5模型訓練的時候用過,可以到下面的地址下載原始連結 https://public.roboflow.ai/object-detection
  • 目標檢測系列之五(YOLO V4)
    3.4 YOLOv4這部分介紹了YOLOv4的細節構成。YOLOv4包含:1)Backbone主幹網絡:CSPDarknet532)Neck頸部:SPP,PAN3)Head頭部:YOLOv3總體來看,YOLO v4使用了如下結構:主幹網絡的BoF(Bag of Freebies):CutMix和Mosaic數據增強, DropBlock正則化, 標籤平滑(Class label smoothing)
  • 在Android上進行yolov5目標檢測,使用torchscript方式
    import optimize_for_mobilets = optimize_for_mobile(ts)yolov5 android torchscript修改完成後就可以進行轉換了(pytorch1.6) xugaoxiang
  • 【項目實踐】YOLO V4萬字原理詳細講解並訓練自己的數據集(pytorch完整項目打包下載)
    YOLOV4是YOLOV3的改進版,在YOLOV3的基礎上結合了非常多的小Tricks。        2、輸出層的shape分別為(19,19,75),(38,38,75),(76,76,75),最後一個維度為75是因為該圖是基於voc數據集的,它的類為20種,YoloV4隻有針對每一個特徵層存在3個先驗框,所以最後維度為3x25;        如果使用的是coco訓練集,類則為80種,最後的維度應該為255 = 3x85,三個特徵層的shape為(19,19,255
  • pip安裝YOLOv5
    lt;1.20" "matplotlib>=3.2.2,<4"pip install yolov5命令行的使用yolov5 庫安裝好後,同時會生成 yolov5 的命令行工具,其使用方法與源碼中的 detect.py 非常類似,如下yolov5 detect
  • YOLOv3最全復現代碼合集(含PyTorch/TensorFlow和Keras等)
    YOLOv3最全復現代碼合集(含TensorFlow/PyTorch和Keras等)想想距離上次整理已經大半年,很多項目的star數量應該變化很大,而且有的庫應該還在持續更新,期間也有TensorFlow2的推出,所以這版整理已加入TF2-YOLOv3。
  • 深入淺出Yolov3和Yolov4
    目前Yolov4代碼的star數量已經1萬多,據我所了解,目前超過這個數量的,目標檢測領域只有Facebook的Detectron(v1-v2)、和Yolo(v1-v3)官方代碼庫(已停止更新)。所以Yolov4中的各種創新方式,大白覺得還是很值得仔細研究的。為了便於分析,將Yolov4的整體結構拆分成四大板塊:
  • 【CV】YOLOv4官方改進版來了!指標炸裂55.8% AP!Scaled-YOLOv4:擴展跨階段局部網絡
    ,可以上下縮放,並且適用於小型和大型網絡,同時保持最佳的速度和準確性。本文提出了一種網絡縮放方法,該方法不僅可以修改深度,寬度,解析度,還可以修改網絡的結構。YOLOv4-large模型達到了最先進的結果:在Tesla V100上以15 FPS的速度,MS COCO數據集的AP為55.4%(AP50為73.3%),而隨著測試時間的增加,YOLOv4-large的模型達到了55.8% AP(73.2 AP50)。
  • 多平臺輕量級PyTorch模型推理框架MsnhNet
    (需取消勾選OMP_MAX_THREAD)1.使用CMake編譯安裝OpenCV4和Yaml-cpp.2.在環境變量中添加"OpenCV_DIR"和"yaml-cpp_DIR"變量,並設置變量內容為每個庫的CMake目錄.5.最後使用CMake GUI工具配置Msnhnet然後使用Visual Studio編譯安裝.
  • YOLOv4 detail01
    ---YOLOv4 屬於一個將已有的各種trick組合 來提升網絡精度和速度的一個集合,因此對其細節分析很有裨益,本文簡要分析一些YOLOv4的一些細節問題
  • yolov5訓練過程可視化
    軟硬體環境前言前文  yolov5 V4.0更新了啥?