使用Yolov5進行端到端對象檢測

2020-12-05 deephub

最近,Ultralytics推出了YOLOv5,但它的名字卻引發了爭議。為了了解背景,《YOLO》(你只能看一次)的前三個版本是由約瑟夫·雷蒙(Joseph Redmon)創作的。在此之後,Alexey Bochkovskiy在darknet上創建了YOLOv4,號稱比之前的迭代具有更高的平均精度(AP)和更快的結果。

現在,Ultralytics已經發布了YOLOv5,具有可比的AP和比YOLOv4更快的推斷時間。這就產生了許多疑問:新版本是否保證了與YOLOv4相似的準確性?無論答案是什麼,這絕對是目標檢測界發展速度的一個標誌。

自從他們第一次移植YOLOv3以來,Ultralytics就使得使用Pytorch創建和部署模型變得非常簡單,所以我很想嘗試YOLOv5。事實證明,Ultralytics 進一步簡化了這個過程,結果不言自明。

在本文中,我們不探討YOLOv5這個名字是否正規,我們只使用YOLOv5創建一個檢測模型,從創建數據集和注釋到使用它們出色的庫進行訓練和推斷。這篇文章主要關注YOLOv5的實現,包括:

創建數據集注釋圖像數據創建項目結構訓練YOLOv5創建自定義數據集

使用OIDv4下載圖片:

要從開放的數據集下載圖像,我們首先克隆OIDv4_ToolKit並安裝依賴。

git clone github /EscVM/OIDv4_ToolKit cd OIDv4_ToolKit pip install -r requirements.txt

我們現在可以使用這個文件夾中的main.py腳本來下載圖像以及多個類的標籤。

下面我正在下載板球和足球的數據來創建我們的自定義數據集。也就是說,我們將創建一個包含足球和板球的數據集,而學習任務就是檢測這些球。

python3 main.py downloader --classes Cricket_ball Football --type_csv all -y --limit 500

下面的命令創建一個名為「OID」的目錄,其結構如下:

OID目錄結構。我們將只使用這裡的圖像文件(.jpgs),而不使用我們將手動注釋以創建自定義數據集的標籤,儘管我們可以在不同項目需要時使用它們。

在繼續之前,我們需要將所有圖像複製到同一個文件夾中,以便從頭開始標記練習。你可以選擇手動完成,但這也可以快速完成通過遞歸glob函數:

import os from glob import globos.system("mkdir Images") images = glob(r'OID/**/*.jpg', recursive=True) for img in images: os.system(f"cp {img} Images/")

使用HyperLabel標籤圖像

我們將使用一個名為Hyperlabel的工具來標記圖像。過去,我使用過很多工具來創建注釋,比如labelimg、labelbox等,但從來沒有遇到過這麼簡單、這麼開源的工具。唯一的缺點是你不能在Linux上使用這個工具,只能在Mac和Windows上使用,但我想這對我們大多數人來說是可以的。

創建項目

2,設置標籤

3。添加本地圖像數據源

4。標註

這個工具最好的部分是它提供的各種輸出格式。因為我們想要得到Yolo的數據,我們將使用Yolo格式並在注釋完成後導出它。但是如果希望獲得JSON格式(COCO)或XML格式(Pascal VOC)的注釋,也可以選擇使用這個工具。

以Yolo格式導出實際上為我們的每個圖像創建了一個.txt文件,其中包含圖像的classid、xcenter、ycenter、寬度和高度。它還創建了一個名為obj.names的文件,這有助於將classid映射到類名。例如:

注意,注釋文件中的坐標從0到1。另外,請注意,根據obj.names文件(從0開始),class_id對於板球是0,對於足球是1。我們還使用它創建了一些其他文件,但在本例中不會使用它們。

一旦我們完成了這些操作,我們就基本上建立了自定義數據集,並且只需要重新安排這些文件中的一些,以便在以後訓練模型時進行後續的訓練和驗證分割。數據集目前將是一個單獨的文件夾,如下所示,包含圖像和注釋:

dataset - 0027773a6d54b960.jpg - 0027773a6d54b960.txt - 2bded1f9cb587843.jpg - 2bded1f9cb587843.txt -- --

建立項目

為了訓練我們的自定義目標檢測器,我們將使用來自Ultralytics的Yolov5。我們首先克隆存儲庫並安裝依賴項:

git clone github /ultralytics/yolov5 # clone repo cd yolov5 pip install -U -r requirements.txt

然後我們開始創建自己的名為training的文件夾,我們將在其中保存自定義數據集。

!mkdir training

我們首先將自定義數據集文件夾複製到該文件夾中,並使用簡單的trainvalfolder_split創建訓練和驗證文件夾。下面的代碼創建了一些訓練和驗證文件夾,並用圖像填充它們。

import glob, os import random# put your own path here dataset_path = 'dataset'# Percentage of images to be used for the validation set percentage_test = 20!mkdir data !mkdir data/images !mkdir data/labels !mkdir data/images/train !mkdir data/images/valid !mkdir data/labels/train !mkdir data/labels/valid# Populate the folders p = percentage_test/100 for pathAndFilename in glob.iglob(os.path.join(dataset_path, "*.jpg")): title, ext = os.path.splitext(os.path.basename(pathAndFilename)) if random.random() <=p : os.system(f"cp {dataset_path}/{title}.jpg data/images/valid") os.system(f"cp {dataset_path}/{title}.txt data/labels/valid") else: os.system(f"cp {dataset_path}/{title}.jpg data/images/train") os.system(f"cp {dataset_path}/{title}.txt data/labels/train")

運行之後,您的數據文件夾結構應該如下所示。它應該有兩個目錄映像和標籤。

我們現在必須添加兩個配置文件到訓練文件夾:

數據集。我們創建一個文件「dataset」。包含訓練和驗證圖像的路徑以及類。# train and val datasets (image directory or *.txt file with image paths) train: training/data/images/train/ val: training/data/images/valid/# number of classes nc: 2# class names names: ['Cricketball', 'Football']

模型。yaml:在創建網絡時,我們可以使用從小到大的多種模型。例如,yolov5s。yolov5/models目錄中的yaml文件是帶有7M參數的小Yolo模型,而yolov5x。yaml是最大的Yolo型號,有96M Params。對於這個項目,我將使用yolov5l。有50m params的yaml。首先從yolov5/models/yolov5l中複製文件。將yaml轉換到training文件夾,並更改nc,即根據我們的項目需求將類數改為2。# parameters nc: 2 # change number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple

訓練

此時,我們的訓練文件夾看起來如下:

一旦我們完成了上述步驟,我們就可以開始訓練我們的模型了。這和運行下面的命令一樣簡單,在這裡我們提供配置文件和各種其他參數的位置。您可以在train.py文件中查看其他不同的選項,但這些是我認為值得注意的選項。

# Train yolov5l on custom dataset for 300 epochs $ python train.py --img 640 --batch 16 --epochs 300--data training/dataset.yaml --cfg training/yolov5l.yaml --weights ''

有時你可能會得到一個錯誤,PyTorch 1.5版本在這種情況下運行在一個單一的GPU使用:

# Train yolov5l on custom dataset for 300 epochs $ python train.py --img 640 --batch 16 --epochs 300--data training/dataset.yaml --cfg training/yolov5l.yaml --weights '' --device 0

開始訓練之後,可以通過檢查自動創建的filetrainbatch0.jpg和testbatch0_gt.jpg來檢查訓練是否已經設置好,前者包含第一批的訓練標籤,後者包含測試圖像的groundtruth

結果

要查看使用tensorboard在瀏覽器中的localhost:6006上的結果,請在另一個命令行終端中運行此命令

tensorboard --logdir=runs

下面是各種驗證度量。在訓練結束時,這些度量也會保存在一個results.png文件中。

預測

Yolov5提供了很多不同的方法來檢查新數據的結果。

要檢測一些圖像,您可以簡單地將它們放入名為inference/images的文件夾中,然後根據自動運行推斷:

python detect.py --weights weights/best.pt

您也可以在視頻使用detect.py文件進行檢測:

python detect.py --weights weights/best.pt --source inference/videos/messi.mp4 --view-img --output inference/output

在這裡,我指定希望使用- view-img標誌查看輸出,並將輸出存儲在位置推斷/輸出中。這將在這個位置創建一個.mp4文件。令人印象深刻的是,網絡模型可以找到球,在這裡進行推斷的速度,以及從未觀察到的數據令人震驚的準確性。

您還可以通過將——source指定為0來使用webcam作為源。您可以在detect.py文件中查看其他各種選項。

結論

在這篇文章中,我討論了如何使用自定義數據集創建Yolov5對象檢測模型。我喜歡Ultralytics讓創建物體檢測模型變得如此容易。

此外,他們提供的查看模型結果的各種方式使它成為我很久以來看到的一個完整的包。

如果你想親身體驗自定義數據集,你可以在Kaggle上下載注釋數據,在Github上下載代碼。

作者:Rahul Agarwal

deephub翻譯組

相關焦點

  • 1.8M超輕量目標檢測模型NanoDet,比YOLO快,上線兩天Star量超200
    在與其他模型進行比較時,項目作者選擇使用 COCO mAP (0.5:0.95) 作為評估指標,兼顧檢測和定位的精度,在 COCO val 5000 張圖片上測試,並且沒有使用 Testing-Time-Augmentation。
  • 從零開始PyTorch項目:YOLO v3目標檢測實現
    在過去幾個月中,我一直在實驗室中研究提升目標檢測的方法。在這之中我獲得的最大啟發就是意識到:學習目標檢測的最佳方法就是自己動手實現這些算法,而這正是本教程引導你去做的。在本教程中,我們將使用 PyTorch 實現基於 YOLO v3 的目標檢測器,後者是一種快速的目標檢測算法。
  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    它是將CNN用於對象檢測的起源,能夠基於豐富的特徵層次結構進行目標精確檢測和語義分割來源。如何確定這些邊界框的大小和位置呢?R-CNN網絡是這樣做的:在圖像中提出了多個邊框,並判斷其中的任何一個是否對應著一個具體對象。
  • MMDetection新版本V2.7發布,支持DETR,還有YOLOV4在路上!
    最近CV界最大的新聞就是transformer的應用,這其中最火的就是Facebook提出的基於transformer的目標檢測模型DETR(https
  • PyTorch版YOLOv4更新了,適用於自定義數據集
    從今年 4 月 YOLOv4 發布後,對於這個目標檢測框架,問的最多的問題或許就是:「有沒有同學復現 YOLOv4 的, 可以交流一下麼」。由於原版 YOLO 使用 C 語言進行編程,光憑這一點就讓不少同學望而卻步。網上有很多基於 TF/Keras 和 Caffe 等的復現版本,但不少項目只給了代碼,並沒有給出模型在 COCO、PASCAL VOC 數據集上的訓練結果。
  • 使用Google Colab上的PyTorch YOLOv3
    yolo的git倉庫:https://github.com/ultralytics/yolov3。儘管倉庫已經包含如何使用YOLOv3的教程,教程只需要運行`python detect.py --source file.mp4`,但是我準備簡化代碼。
  • YOLO項目復活!大神接過衣缽,YOLO之父隱退2月後,v4版正式發布
    許多人擔心這個強大的目標檢測算法研究會因此偃旗息鼓。然而學術界和開源社區的力量是強大的,YOLO v4開發者正是開發過Windows版和Linux版YOLO的Alexey Bochkovskiy。這次的YOLO v4在性能上相比前代也有巨大提升,在保持和前代相同運行速度下,精確度大幅提高。性能大幅提升閒話少敘,一起來看實驗結果。以下實驗結果均採用單個 1080Ti 或 2080Ti 進行訓練。
  • 使用模板匹配在Python上進行對象檢測!(附代碼)
    了解如何在沒有機器學習或任何框架的情況下在Python上進行對象檢測每當我們聽說「 對象檢測 」時,我們就會想到機器學習以及不同的框架。但是我們實際上可以在不使用機器學習或任何其他框架的情況下進行對象檢測。在本文中,我將向您展示如何僅使用Python進行操作。
  • 使用PyTorch實現目標檢測與跟蹤
    重磅乾貨,第一時間送達 引言 在昨天的文章中,我們介紹了如何在PyTorch中使用您自己的圖像來訓練圖像分類器,然後使用它來進行圖像識別。本文將展示如何使用預訓練的分類器檢測圖像中的多個對象,並在視頻中跟蹤它們。
  • YOLOv4來了,大型調優現場,速度和準確率俱佳
    為此,YOLOv4加入了SPP block,能夠顯著地改善感受域大小,而且速度幾乎沒有什麼下降。另外,使用PANet替換FPN來進行多通道特徵的融合。最終,YOLOv4選擇CSPDarknet53作為主幹網絡,配合SPP模塊,PANet通道融合以及YOLOv3的anchor based head。
  • 當前最佳的YOLOv4是如何煉成的?細數那些小細節
    使用 Tesla V100 GPU,在 MS COCO 數據集上以接近 65 FPS 的推理速度,YOLOv4 實現了 43.5% AP (65.7% AP)的準確度。但對於目標檢測而言,高準確度早已不是唯一的目標。我們還希望邊緣設備也能流暢地運行這些模型。因此,如何使用低成本硬體實時地處理輸入視頻也成為了一個重要的研究方向。
  • 使用CNVnator進行CNV檢測
    CNVnator是一款CNV檢測軟體,基於Read-Depth的分析策略,通過對全基因組測序數據進行分析來預測CNV, 原始碼保存在github上,網址如下https://github.com/abyzovlab/CNVnator這個軟體的安裝比較複雜,我這裡直接使用別人裝好的docker
  • Python代碼使用OpenCV進行Blob檢測|blob|opencv|二進位|算法_網易...
    blob是圖像中一組共享的區域,它們具有一些共同的屬性(例如灰度值,形狀,尺寸等)blob檢測的目的是識別並標記一些特定區域,blob檢測在自動化工業領域比較常見。  OpenCV提供了一種方便的方法來檢測blob並根據不同的特徵對其進行過濾。
  • 端羧基聚酯樹脂平均分子量及其分布的凝膠滲透色譜法檢測
    慧聰表面處理網訊:【摘要】選用Styragel HR 2色譜柱,通過對流速、柱溫等條件的探析,最終以0.35mL/min四氫呋喃(THF)為流速,40℃柱溫,進樣量50微升,進行分離,並以示差折光檢測器(RID)檢測,建立了對端羧基聚酯樹脂的平均分子量及其分布的檢測方法。
  • 使用Python+OpenCV進行圖像處理(二)
    如果我們沒有進行恰當的預處理,無論我們有多麼好的數據也很難得到理想的結果。本篇是視覺入門系列教程的第二篇。整個視覺入門系列內容如下:理解顏色模型與在圖像上繪製圖形(圖像處理基本操作)。基本的圖像處理與濾波技術。從特徵檢測到人臉檢測。
  • 利用機器學習,進行人手的21個3D手關節坐標檢測
    手掌檢測模型  為了檢測手的初始位置,設計了模型,該模型針對移動實時使用進行了優化,其方式類似於的人臉檢測模型。  通過上述技術,在手掌檢測方面達到了95.7%的平均精度。使用規則的交叉熵損失並且沒有解碼器給出的基線僅為86.22%。
  • DocHub v2.1 實現移動端支持,構建你自己的百度文庫
    介紹DocHub 文庫系統是使用Go語言的Beego框架開發實現的類百度文庫解決方案,使用對商業友好的 Apache2.0 開源協議進行開源,支持office、PDF、TXT、EPUB、MOBI
  • 如何使用Python進行面部識別?
    全文共2841字,預計學習時長8分鐘圖源:unsplash本文將介紹圖像處理中的一些重要概念,除了具體解釋每個步驟之外,還將提供一個在Python中使用Cv2和DLib庫輕鬆進行人臉識別的項目。感興趣區域在使用圖像進行面部分析時,最重要的概念之一是定義感興趣區域(ROI),我們必須在圖像中定義一個特定的部分,在那裡篩選或執行一些操作。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    我們人類可以很容易地在一瞬間從複雜的場景中檢測和識別出物體。然而,將這種思維過程轉化為機器的思維,需要我們學習使用計算機視覺算法進行目標檢測。因此在本文中,我們將建立一個自動車輛檢測器和計數器模型。以下視頻是你可以期待的體驗:https://youtu.be/C_iZ2yivskE注意:還不懂深度學習和計算機視覺的新概念?