close

8.3 目標檢測——無人機檢測

 

前言

目標檢測在工業界應用廣泛,例如工業生產線上的品質檢測、監控工業場景中的安全問題、機器人的自主導航等,可以提高生產效率和產品品質,降低生產成本,也可以提高工作環境的安全性,減少事故發生,由此可見目標檢測意義重大。

本小節,將介紹工業界中的熱寵YOLOv5,並通過無人機場景檢測任務進行實現。

本小節內容豐富,包括:

  1. VisDrone資料集介紹
  2. 目標檢測常見資料格式介紹VoC, COCO YOLO
  3. YOLOv1-YOLOv8 概述:瞭解YOLO發展歷史,各版本模型優點,缺點
  4. YOLOv5 原始程式碼結構剖析及使用步驟:瞭解優秀的專案代碼結構,設計
  5. YOLOv5VisDrone資料集上的多組實驗,瞭解不同容量的YOLOv5能力

資料模組

VisDrone資料集介紹

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

VisDrone資料集是一個大規模的用於視覺目標檢測、跟蹤和計數等任務的資料集,由天津大學整理於2018年發佈,論文為Vision Meets Drones: A Challenge,可通過github下載。

其中包含多個任務,這裡採用VisDrone-DET資料集,進行目標檢測案例學習,VisDrone-DET也就是VisDrone2018

VisDrone-DET中,總共包含10209張,劃分為了4個資料集,額外給出了一個1610張模擬的測試集-dev,訓練集6471張,驗證集548張,測試集-dev1610張,測試集-challenge 1580張。

資料特點:圖片解析度較大、目標小、目標存在一定程度遮擋,部分是嚴重遮擋(例如汽車)。

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

下面介紹資料集目錄組織形式與標籤含義

資料包含annotationsimages兩個資料夾,分別存儲標注資訊txt檔,圖片jpg檔,檔案名保持一致。

標籤txt檔中,一行表示一個標注框,一行有8個資訊,例如

495,473,120,46,1,4,0,1

507,447,107,38,1,4,0,1

分別表示:

 <bbox_left>,<bbox_top>,<bbox_width>,<bbox_height>,<score>,<object_category>,<truncation>,<occlusion>

Copy

  • bbox:前四個為bbox信息;
  • score:表示標注框的置信度,取值為010表示忽略,1表示可用。
  • object_category 目標類別,0-11,分別是,gnored regions(0), pedestrian(1), people(2), bicycle(3), car(4), van(5), truck(6), tricycle(7), awning-tricycle(8), bus(9), motor(10), others(11)
  • truncation:截斷程度,取值為0,10表示無截斷,1表示目標有1%~50%的區域再當前幀(圖像)之外。
  • occlusion:遮擋程度,0-20表示無遮擋,1表示1%-50%遮擋,2表示50%-100%遮擋。

對於本案例使用,僅需要剔除score=0bbox

目標檢測資料集格式

瞭解資料之後,需要把資料集轉換為代碼可以接收的形式。與分類分割任務不同,目標檢測領域的資料格式相對固定,一般不需要自己重寫資料載入模組,而是跟隨代碼框架的要求來適配。

目標檢測目前主流的有三種格式,VOC格式、COCO格式、YOLO格式,下面分別介紹。

VOC資料集格式如下:

圖像位於JPEGImages資料夾。

標注檔位於Annotations資料夾中,標注檔與影像檔檔案名應當相同,並且XML格式描述目標的位置和類別等資訊,bbox形式為xminxmaxyminymax

COCO資料集格式如下:

圖像位於images資料夾中。

標注文件位於annotations資料夾下的instances_train2017.json,所有標注均存儲在一個json中,並通過特定欄位獲取圖片對應的標籤資訊。bbox形式為xmin, ymin, w, h

YOLO資料格式如下:

圖像位於images資料夾下。

標注檔位於labels資料夾下,標注檔與影像檔檔案名應當相同,並且以txt檔存儲標籤資訊。txt中一行是一個標注框,一行的格式為:

class x_center y_center width height,其中bbox的數值需要除以長/寬,使得值為0-1之間。

在這裡側面證明了YOLO模型的強大,以往演算法開發要適應資料集的格式,而現在yolo系列模型被廣泛使用,使得大家願意接受YOLO資料格式。

標籤資料轉換代碼

在目標檢測任務開發過程中,無法避免資料集之間的轉換,這裡推薦repo,可以實現三種資料格式之間的互相轉換。

在本案例中,適合自行編寫腳本進行轉換,這裡yolov5官方也給出了代碼,因此直接複用即可。

推薦yolov5中使用的幾個小函數:

  1. 資料夾的創建, Path物件可直接.mkdir(),並且可設置遞迴及判斷存在與否。

from pathlib import Path

(dir / 'labels').mkdir(parents=True, exist_ok=True# make labels directory

Copy

  1. pbar顯示進度, 將可反覆運算物件用tqdm包一下,並且設置列印的字串資訊格式desc
  2. pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')

Copy

使用配套代碼,運行即可得到與images資料夾在同級目錄下的labels資料夾

python visdrone2yolo.py --data-path /mnt/chapter-8/data/visdrone

Copy

到這裡yolo格式資料集已經準備好,如何在代碼中使用及配置,這部分放到模型模組中的yolo框架講解部分。

模型模組

在資料模組,講解了目標檢測中資料集常見的格式,並且已經轉換稱為yolo格式,等待使用。

若是在分類或分割中,我們會手寫代碼進行實驗,然而在目標檢測,絕大多數是不需要的,原因有

  1. 目標檢測中涉及多個模組,重新造輪子的時間成本高,容易出bug
  2. 目標檢測可用成熟的框架(可用的repo)很多,如ultralyticsyolov3/yolov5/yolov8mmdetectionpaddledetction等,感謝前人的工作!
  3. 成熟的"框架"指,功能齊全,滿足絕大多數場景,受眾多,經得起時間的考驗,可以放心使用。

在圖像分割的實驗中就指出,凡是有系列的,優先考慮,因此,這裡選擇ultralyticsyolov5,它是目前為止(202331007:07:25star最高的目標檢測開原始程式碼倉庫,已經36K,足以證明yolov5的穩定性與可靠性。

yolo系列簡介

 

YOLOv1

YOLOv2

YOLOv3

YOLOv4

YOLOv5

YOLOv6

YOLOv7

YOLOv8

時間

2015.6.8

2016.12.25

2018.4.8

2020.4.23

2020.6.10

2022.6.23

2022.7.7

2023.1

作者

Joseph Redmon

Joseph Redmon

Joseph Redmon

Alexey Bochkovskiy

Ultralytics

美團

Alexey Bochkovskiy

Ultralytics

深度學習目標檢測框架發展快10年時間,只有yoloYou Only Look Once)系列久經不衰,截至目前公認的版本已經到了v8,很難有人能將v1-v8的細節全部吃透。

在校有時間的同學十分建議從v1-v8認真學習,這樣可以理解目標檢測的發展,鍛煉科研意識,掌握代碼能力。

對於工作繁忙的工程師來說,它們只是解決問題的工具,瞭解工具的優點與缺點,有的放矢的應用在各個項目場景也是不錯的選擇。

為此,特地總結yolov1-v8的特點,為後續使用工具打下基礎。

參考deephub文章,可以看到yolo系列主流的模型發展歷程。

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

yolov12015年提出的one-stage目標檢測演算法,與當時的Fater RCNNtwo-stage)共同稱為當時最受歡迎的檢測模型。特點為anchor-free:沒有anchor的概念,每個cell直接輸出bbox。每個cell僅輸出2bbox,每個cell輸出向量為(20+ (4+1)*2),2020個類,1bbox概率,4bbox資訊,一張圖片最終變為7×7的特徵圖,一個cell只能預測1個類,因此定位粗糙,小目標不友好,對重疊物體檢測能力差。

yolov2:針對yolov1定位不精准問題,借鑒faster rcnnanchor-base的概念,並且引入k-means實現anchor的自動配置

yolov3劃時代意義的目標檢測演算法,也奠定了目標檢測之後的範式,backone+neck+多尺度。yolov3網路結構簡單,並且採用多尺度特徵圖實現不同尺寸目標的檢測,速度與精度在當時都是優於其他模型。yolov3採用的是手動配置的33=9anchoranchor的參數設置是通過k-means對標籤進行聚類發現的,*3種尺寸,3種長寬比

yolov4yolov4發佈前有個小插曲,那就是YOLO之父Jeseph Redmon,由於無法忽視工作帶來的負面影響,公開宣佈隱退。好在有大神接了他的大旗,在yolov3推出快2年的時間,yolov3的改進版v4終於在2020年來了,yolov4開始,可以認為是一個分割點,更準確地說yolov3是後續模型的分割點。借助paperswithcode的一個精度圖,可以看到yolov3cocomap30-40之間,而往後v4-v8已經來到50-60的區間,已經不在一個檔次。

對於yolov4,它對當時深度學習的多種tricks進行了實驗,集成到yolov3上進行改進,精度和速度都得到大幅度提升。它使用了大量tricks,包括WRCCSPCmBNSAT Mish activationMosaic data augmentationCutMixCmBNDropBlock regularization  CIoU lossGIoU loss

yolov5:在yolov4發佈後短短2個月,yolov5橫空出世,並且帶來了多種大小的模型, nano/s/m/l/x等尺寸,可適用於多種場景,同時配備高品質的開原始程式碼倉庫,短時間內就受到了廣泛關注。yolov5資料增強上使用了Mosaic資料增強、自我調整錨框計算、自我調整圖片縮放(推理時採用最小填充原則,加速推理)、融合新網路模組FocusCSP結、FPN+PANGIOU_Loss,以及預測框篩選的DIOU_nms

yolov62022年由美團提出的速度更快的檢測模型,主打是速度,因此模型特點是backboneneck的設計都為了適應硬體的運算,使用了Rep-PanEfficientRep塊,head部分用瞭解耦的形式,在訓練策略方面採用了anchor-freeSimOTA標記策略、SIoU盒回歸的損失。

yolov7:在yolov6推出不到半個月,yolov7也發佈了,yolov7團隊與yolov4團隊一致,屬於官方YOLO團隊(yolov4團隊接過yolo之父Jeseph Redmon的大旗)。yolov7同樣從速度方面做了許多優化,例如記憶體訪問成本、I / O比率、element-wise、啟動函數等,以及模型重參數化(re-parameterization

yolov8yolov5的團隊——ultralytics打造的集成圖像分類、圖像分割、目標檢測於一體的結構,目前github位址並為採用yolov8而是採用ultralytics。發佈2個多月後,論文仍舊未發佈,具體優化內容請關注官方github,從代碼中觀察吧。

yolov5 代碼結構講解

根據廣大工程師用腳投票的結果,本案例採用ultralyticsyolov5來實現目標檢測,並學習代碼中優秀的設計思想,同時剖析用戶如何使用yolov5倉庫代碼。

後續建議跟進yolov8!

學習yolov5之前,推薦閱讀yolov5readme,其中包含了許多學習資料。

下圖為yolov5(2023.03)的代碼結構,邏輯相當清晰,可分三個模組,三個模組是圖像分類、圖像分割和目標檢測。

目標檢測分為datamodelsutils和運行腳本部分。

  • data:存放的主要是資料超參數配置yaml檔。
  • models:存放的是各模型的yaml設定檔,即模型創建依賴於yaml檔。
  • utils:存放各功能模組,如,資料增強augmentations.py 自動計算anchor功能autoanchor.py,啟動函數activations.py fastapi介面等等。

檢測模型的訓練、驗證、推理分別在:train.py, val.py, detect.py中。下面將重點講解train.py的運行機制。

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

yolov5 訓練機制講解

train.py600多行,並且調用了許多函數,一開始接觸會感到困難。

不過不用擔心,它還是pytorch框架,仍舊逃離不了基礎核心模組, dataloader moduleloss scheduler,反覆運算訓練。

下面依次簡要的說明train.py中是如何訓練的。

參數配置模組

使用parse_opt()進行參數包裝,訓練時可指定模型、資料集配置yaml路徑,超參數配置yaml路徑等內容。

資料模組

man() --> train()-->create_dataloader(): 188行,調用了create_dataloader()函數,並且傳入了資料集配置yaml檔中的訓練集路徑。

utils/dataloders.py-->LoadImagesAndLabels(): 在函數內部採用LoadImagesAndLabels()類實現pytorchdataset的生成,class LoadImagesAndLabels(Dataset), 代碼有483行,裡面實現了許多資料檢測、資料載入功能,但是核心與pytorchdataset是一致的,重點關注init中做了哪些初始化,以及getitem如何從磁片載入圖片並且做資料預處理、資料增強的即可。

模型模組

125行實現模型創建,可以看到是通過配置資訊進行創建的,這裡的配置資訊來自參數配置模組中--cfg或者指定預訓練模型--weights

model = Model(cfg or ckpt['model'].yaml, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device) # create

再看往裡看 DetectionModel繼承自BaseModelBaseModel集成nn.Module,裡邊細節就可通過nn.Module的基礎知識一步一步剖析。

反覆運算訓練模組

核心功能在,262

262行:主迴圈

for epoch in range(start_epoch, epochs):  # epoch ------------------------------------------------------------------

284行:batch迴圈

for i, (imgs, targets, paths, _) in pbar:  # batch -------------------------------------------------------------

310行:前向推理,計算loss,反向傳播

pred = model(imgs)  # forward

loss, loss_items = compute_loss(pred, targets.to(device))  # loss scaled by batch_size

scaler.scale(loss).backward()

344行:epoch維度變更學習率,因此在batch的迴圈之外

lr = [x['lr'] for x in optimizer.param_groups]  # for loggers

scheduler.step()

Copy

日誌輸出模組

runs資料夾下會有train資料夾,每一次實驗會以exp{實驗次序}創建資料夾,在下面會保存訓練過程中的一系列有價值內容。

如下圖所示,會有這些檔

weights:訓練好的模型權重,包括last.pt, best.pt

hyp.yaml:訓練時的超參數,便於複現

results.png:訓練曲線,便於分析訓練情況,調整超參數

results.csv:訓練指標記錄表格

train_batch2.jpg:訓練資料集,bbox繪製情況,十分有用,可用於檢測資料標籤是否處理正確!

val_batch0_labels.jpg:驗證資料集,bbox驗證情況

val_batch2_pred.jpg:模型預測出的bbox在驗證集上的情況。

混淆矩陣:針對標籤的預測的情況進行混淆矩陣觀察,這個混淆矩陣是轉置了的,行是預測,列才是真實標籤,以下圖為例,汽車這個類別中,有78%的汽車框被預測為了汽車,有19%的汽車框沒有被檢測到,剩下2%的汽車框被檢測出來了,但是分類時分為了van(箱式貨櫃車)。

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

PR_curvePR曲線是各類別的AP情況

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

P_curveR_curve:是觀察模型對各類別分類情況,可用於挑選分類概率閾值, 橫軸表示選擇的閾值,縱軸是對應的值。可以看到閾值越小召回率越高,反之,精確度越低。

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

labels_correlogram.jpg:是借助seabornpairplot,繪製的多變數的二維分析相關性統計分析圖。以列為基礎,第一列是x與其它資料的關係,第一列,第一行,表示x的整體分佈,可以看到是相對於中心點0.5對稱的,表明矩形框在寬這個維度,左邊有的數量與右邊有的數量是一致的,並且呈現中間多,兩邊少的情況。

第一列,第二行,表示xy的分佈情況,同labels.jpg中第三幅圖一樣,觀察矩形框整體情況是寬度偏中間,高度偏中間與中下部。

第一列,第三行,表示xw的分佈情況,呈現一個梯形,這個很合理,因為當x靠近圖片的最左邊的時候,即物體在圖像的邊界時,這個物體一般不會很大,否則根據拍照的基礎原理,肯定會將鏡頭朝向主要物體,並放置在鏡頭中央,不至於在邊界處。

第一列,第四行,表示xh的分佈情況。

第二列,第二行,是y的整體分佈,可以看到是偏向0-0.5之間。

第三列,第三行,是w的整體分佈。

第四列,第四行,是h的整體分佈。

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

yolov5 訓練VisDrone步驟

第一步:設置資料集配置yaml檔,首先到detection\yolov5-master\data\下複製一份yaml,命名為mydrone.yaml,設置好路徑即可,這裡yolo資料格式只需要images路徑就能通過相對路徑尋找到labels。同時設置好檢測類別數量與名稱

path: G:\deep_learning_data\VisDrone  # dataset root dir

train: VisDrone2019-DET-train\\images # train images (relative to 'path') 128 images

val: VisDrone2019-DET-val\\images  # val images (relative to 'path') 128 images

test:  # test images (optional)

 

nc: 10  # number of classes

names: ['pedestrian', 'people', 'bicycle', 'car', 'van', 'truck', 'tricycle', 'awning-tricycle', 'bus', 'motor']

Copy

第二步:將預訓練模型下載到code/chapter-8/03_detection/yolov5-master下,下載方式為github

第三步:在終端,運行訓練指令,即可在runs/train下面看到對應日誌.

python train.py --imgsz 640 --batch 16 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8

Copy

對比實驗

實驗一:visdrone資料集特點是解析度大,一般的640,1000的尺寸無法滿足要求,為此,進行了5種尺寸的訓練,用於觀察不同解析度對精度的影響

實驗二:yolov5提供多種尺寸的模型,這裡觀察s/m/l三種尺寸的模型對精度的影響。

實驗三:同時觀察yolov5自帶的三種不同強度的資料增強帶來怎樣的精度變化。

更新:所有實驗權重、實驗檔已經上傳雲盤:連結:https://pan.baidu.com/s/11kQJcCka2VyR5ToF-N0BOQ 提取碼:op4x

實驗一/二:不同輸入尺寸對模型精度的變化

python train.py --imgsz 640 --batch 24 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-low.yaml

python train.py --imgsz 960 --batch 16 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-low.yaml

python train.py --imgsz 1280 --batch 12 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-low.yaml

python train.py --imgsz 1600 --batch 8 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-low.yaml

python train.py --imgsz 1920 --batch 6 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-low.yaml

Copy

map50/map50:95

640

960

1280

1600

1920

 

yolov5s

0.33/0.18

0.44/0.26

0.50/0.30

0.54/0.33

0.55/0.34

exp0-4

yolov5m

0.38/0.21

0.48/0.30

0.53/0.33

0.57/0.36

0.59/0.38

exp11-15

yolov5l

0.40/0.23

0.50/0.31

0.55/0.35

0.57/0.37

0.60/0.39

exp16-20

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

從上圖可以看出:

  1. 隨著尺寸增大,精度得到提高,且1920仍未達到瓶頸,可繼續增加圖片尺寸來獲得精度提高。
  2. 隨著模型容量增大,精度得到提高;可根據任務難以程度選擇合適容量的模型。
  3. size和模型容量兩者間可以選擇更適合的方式來漲點,即size也可以漲點,換大模型也可以漲點,如果不能同時採用,則根據上下游條件進行取捨。

實驗三:不同資料增強方法的變化

這裡套用yolov5提供的三種強度的資料增強方法,觀察精度變化。

python train.py --imgsz 960 --batch 16 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-low.yaml

python train.py --imgsz 960 --batch 16 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-med.yaml

python train.py --imgsz 960 --batch 16 --epochs 100 --data mydrone.yaml --weights yolov5s.pt --workers 8 --hyp data/hyps/hyp.scratch-high.yaml

Copy

 

scratch-low

scratch-med

scratch-high

 

map50/map50:95

0.44/0.26

0.44/0.26

0.43/0.26

exp5-7

從結果可知,yolov5中自帶的low, med, high在本案例中效果都一樣,並無差別。

模型推理

訓練好模型後,可通過detect.py進行推理並觀察結果,detect.py提供了多個參數介面

  • weights:訓練好的.pt文件,.pt檔中存儲了模型結構,因此無需額外指定模型結構的yaml
  • source:需要檢測的資料來源,支援圖片、視頻、攝像頭、網路視頻url
  • data:資料集yaml檔,關聯檢測的類別名稱
  • imgsz:圖像輸入大小
  • conf-thres:檢測框置信度閾值
  • iou-thres:非極大值抑制時的iou閾值設置
  • half:採用半精度(Float 16)進行推理,可提升推理速度,但有一定精度損失

其它配置參數可看代碼注釋,這面介紹detect.py中的核心代碼結構,觀察其是如何實現推理的。

第一部分,資料載入讀取,對於資料的載入與讀取,採用utils/dataloders.py中實現的3個類來實現包裝,並進行反覆運算。如LoadStreamsLoadScreenshotsLoadImages,對於三個類的實例,在使用時,採用for迴圈進行依次取出資料

dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride)

dataset = LoadScreenshots(source, img_size=imgsz, stride=stride, auto=pt)

dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride)

 

for path, im, im0s, vid_cap, s in dataset:

Copy

第二部分,模型載入,使用models/common.py中的DetectMultiBackend類實現,該類支持多種計算後端如pytorch\onnx\tensorrt\jit\dnn等等。其中,pytorch模型是通過models/experimental.py中的attempt_load()函數實現載入。attempt_load()需要的一個核心參數就是.pt檔路徑。然後根據.pt內資訊完成模型創建、權重載入等工作。

model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)

model = attempt_load(weights if isinstance(weights, list) else w, device=device, inplace=True, fuse=fuse)

Copy

第三部分,推理與保存,推理主要兩個步驟,模型前向傳播,經過NMS後得到最終輸出矩形框。對於結果視覺化,這裡採用Annotator類實現繪製,首先將圖像傳入Annottor,進行產生實體,後續通過annotator.box_label()進行bboxlabels的繪製。

pred = model(im, augment=augment, visualize=visualize)

pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)

# ------------------------------------------------------------------------------------------------

annotator = Annotator(im0, line_width=line_thickness, example=str(names))

annotator.box_label(xyxy, label, color=colors(c, True))

Copy

運行以下推理指令,即可在.runs/detect/exp*下獲得結果,下圖為航拍視頻推理示例

 

python detect.py --weights ./runs/train/exp2/best.pt --source G:\DJI_0690.MP4 --data data/mydrone.yaml --imgsz 1280 --half

python detect.py --weights best.pt --source G:\DJI_0690.MP4 --data data/mydrone.yaml --imgsz 1280

Copy

<<AI人工智慧 PyTorch自學>> 8.3 目標檢測—

到這裡,yolov5代碼就講解完畢,yolov5代碼庫還有許多值得學習的地方,這裡由於篇幅關係,作為拓展閱讀推薦給大家:

  1. 模型匯出為TFLite, ONNX, CoreML, TensorRThttps://github.com/ultralytics/yolov5/issues/251
  2. TTA(test time augmentation): https://github.com/ultralytics/yolov5/issues/303
  3. 模型剪枝:https://github.com/ultralytics/yolov5/issues/304
  4. yolov5訓練技巧總結:https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results
  5. yolov5模型集成:https://github.com/ultralytics/yolov5/issues/318

小結

本案例介紹了yolov5實現無人機視角的目標檢測,主要涉及以下知識點:

  1. Visdrone資料集介紹與標籤含義解析,會有模糊程度與遮擋程度的兩個額外標注資訊。
  2. 目標檢測常見資料形式:voccocoyolo形式,三者的bbox形式均不一樣,使用時需要注意轉換。xmin,ymin,xmax,ymax xmin, ymin, w, h x_center, y_center, w, h
  3. yolov1-v8模型簡介:簡要介紹v1-v8的模型特點,便於後續有的放矢的選擇使用。
  4. yolov5代碼結構介紹:剖析yolov5專案代碼結構,並分析如何進行訓練、推理。
  5. 自訂資料集訓練過程:詳細介紹自己的資料集要如何使用yolov5進行訓練的過程,核心在於瞭解yolov5的資料載入形式與模型載入形式都通過yaml檔進行管理。
  6. 對比實驗:分析解析度、模型容量、資料增強方法帶來的精度變化,對後續重要超參數設置具有指導性意義。

本案例已近萬字,可以快速用代碼實現目標檢測,但是對於目標檢測的學習來說,還遠不夠,案例初衷還是通過具體的專案,來鞏固pytorch基礎知識。

最後,可以發現,即使是採用yaml來管理資料和模型,在實現的時候還會繼承datasetdataloader,以及nn.Module,由此可見第三章和第四章的概念有多麼重要。

對於想要深入瞭解目標檢測的朋友,推薦學習:

  1. 非深度學習目標檢測時期的檢測方法;
  2. faster rcnn + yolov3的詳細理論過程與代碼實現
  3. yolov3後時代下的,anchor-free, one-stage的檢測模型
  4. 特定問題目標檢測:小目標檢測, 旋轉目標檢測,密集場景目標檢測,超大解析度圖像目標檢測、遮擋場景目標檢測等等

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 HCHUNGW 的頭像
    HCHUNGW

    HCHUNGW的部落格

    HCHUNGW 發表在 痞客邦 留言(0) 人氣()