PyTorch 版 YOLOv4 更新了,可自定義數據集,還集成了 MobileNet

2022-01-09 計算機視覺聯盟

點上方藍字計算機視覺聯盟獲取更多乾貨

距離 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

這是我的私人微信,還有少量坑位,可與相關學者研究人員交流學習 目前開設有人工智慧、機器學習、計算機視覺、自動駕駛(含SLAM)、Python、求職面經、綜合交流群掃描添加CV聯盟微信拉你進群,備註:CV聯盟

博士筆記 | 周志華《機器學習》手推筆記第一章思維導圖

博士筆記 | 周志華《機器學習》手推筆記第九章

點個在看支持一下吧

相關焦點

  • PyTorch 版 YOLOv4 更新了,不僅適用於自定義數據集,還集成了注意力和 MobileNet
    近日,有研究者在 GitHub 上開源了一個項目:基於 PyTorch 深度學習框架的 YOLOv4 復現版本,該版本基於 YOLOv4 作者給出的實現 AlexeyAB/darknet,並在 PASCAL VOC、COCO 和自定義數據集上運行。
  • 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├──
  • 乾貨 | YOLOV5 訓練自動駕駛數據集,並轉Tensorrt,收藏!
    每個高解析度視頻一共40秒。該數據集包括超過1000個小時的駕駛數據,總共超過1億幀。這些視頻帶有GPU / IMU數據以獲取軌跡信息。該數據集具有地理,環境和天氣多樣性,從而能讓模型能夠識別多種場景,具備更多的泛化能力。這些豐富的戶外場景和複雜的車輛運動使感知任務更具挑戰性。該
  • 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:/
  • YOLOv4最全復現代碼合集(含PyTorch/TF/Keras和Caffe等)
    其實去年Amusi 就整理過YOLOv3的最全復現合集,詳見:YOLOv3最全復現代碼合集(含PyTorch/TensorFlow和Keras等)現在Amusi 將基於不同深度學習框架的 YOLOv4 復現代碼進行匯總(自認為還不錯的復現代碼),為了方便各位 CVers 瀏覽,下述內容已經同步上傳至github:https://github.com/amusi
  • 【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.
  • 使用google colab訓練YOLOv5模型
    colab最大的好處是給廣大的AI開發者提供免費的gpu資源,可以在上面非常輕鬆地運行如tensorflow、pytorch、keras等深度學習框架。colab_yolov5接下來,將準備好的口罩數據集上傳到colab文件夾中,這個數據集,前面我們在YOLOv5模型訓練的時候用過,可以到下面的地址下載原始連結 https://public.roboflow.ai/object-detection
  • 基於YOLOv5預訓練模型 訓練自定義數據集 實現檢測並分類圖像中的Logo功能
    自定義包含18個logo(對應18個開票方)的發票數據集實現自動檢測並分類圖像中的Logo功能,準確率99%訓練數據
  • 在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
  • 目標檢測系列之五(YOLO V4)
    3.3 Additional improvement為了讓目標檢測模型更加適合在單卡進行訓練,作者還做了如下改進:1) 提出新的數據增強方法Mosaic和自對抗訓練SAT2) 採用遺傳算法來選擇最優的超參數3) 改進SAM、PAN和Cross-mini-Batch Normalization使訓練更高效Mosaic
  • pip安裝YOLOv5
    lt;1.20" "matplotlib>=3.2.2,<4"pip install yolov5命令行的使用yolov5 庫安裝好後,同時會生成 yolov5 的命令行工具,其使用方法與源碼中的 detect.py 非常類似,如下yolov5 detect
  • 深入淺出Yolov3和Yolov4
    不得不服,當然可能針對具體不同的數據集效果也不一樣,但總體來說,改進效果是很優秀的,下面大白對Yolov4的各個創新點繼續進行深挖。4.3.1 輸入端創新考慮到很多同學GPU顯卡數量並不是很多,Yolov4對訓練時的輸入端進行改進,使得訓練在單張GPU上也能有不錯的成績。比如數據增強Mosaic、cmBN、SAT自對抗訓練。
  • 使用 YOLOv5 訓練自動駕駛目標檢測網絡
    YOLO V5借鑑了YOLO V4的修改版PANET結構。PANET通常使用自適應特徵池將相鄰層加在一起,以進行掩模預測。但是,當在YOLOv4中使用PANET時,此方法略麻煩,因此,YOLO V4的作者沒有使用自適應特徵池添加相鄰層,而是對其進行Concat操作,從而提高了預測的準確性。
  • 多平臺輕量級PyTorch模型推理框架MsnhNet
    庫.該框架自帶一套類似netron的可視化工具, 可在編寫Msnhnet文件時清晰掌握網絡結構.D:/Msnhnet/bin3.測試 yolov3 "yolov3 D:/models".4.測試 yolov3tiny_video "yolov3tiny_video D:/models".
  • YOLOv5 深度可視化解析
    作為技術人員,我對此不進行評論,但是由於其在各個數據集上體現出收斂速度快,模型可定製性強的特點,故還是非常有必要深入研究下源碼。    本文從可視化角度結合源碼進行分析,需要特別注意的是:yolov5還在快速迭代中,可能後續改動非常大,所以我僅僅以當前最新版本也就是2020.08.07時候clone的版本為例進行分析。
  • YOLOV4視頻對象檢測,python+opencv輕鬆實現
    上期文章,我們介紹了YOLOV4對象檢測算法的模型以及基本知識,哪裡還進行了圖片的對象檢測,如何使用YOLOV4進行視頻檢測與實時視頻檢測呢?().rstrip('\n').split("\n")np.random.seed(42)COLORS = np.random.randint(0, 255, size=(len(LABELS), 3), dtype="uint8")weightsPath = "yolo-coco/yolov4.weights"
  • 實用教程詳解:用OpenCV的DNN模塊部署YOLOv5目標檢測
    在YOLOv5之前的YOLOv3和YOLOv4的官方代碼都是基於darknet框架的實現的,因此OpenCV的DNN模塊做目標檢測時,讀取的是.cfg和.weight文件,那時候編寫程序很順暢,沒有遇到bug。