1. 使用 YOLO v5 進行目標檢測
在這篇文章中,我們將使用來自 AWS 上的 COCO 數據集(可定製)的圖像設置和運行 YOLO。
一般來說,分類技術在自動駕駛 汽車 中沒有多大幫助,因為它只預測圖像中的一個對象,並且不給出該圖像的位置。 而目標檢測在自動駕駛 汽車 中非常重要,可以檢測場景中的對象及其位置。 YOLO(你只看一次)是由 Joseph Redmon 等人創建的一種高速實時對象檢測演算法。 YOLO使用卷積神經網路 (CNN)解決概率的回歸問題。 後來又進行了一些修改。 為了進行預測,YOLO 只需要通過 CNN 進行一次前向傳播。 它輸出具有相應邊界框的對轎羨姿象。 它廣泛用於自動駕駛 汽車 以檢測場景中的物體。
第 1 步:設置帳戶(這步可以跳過)
登錄wandb.ai網站並復制以下內容:
來自 wandb.ai/authorize 的 API 密鑰
wandb.ai/settings 中的團隊名稱。 默認團派亂隊名稱將是用戶 ID。
第 2 步:創建 AWS 實例(如果你在本機訓練這步也可以跳過)
在閉絕創建實例時,選擇「Deep Learning AMI (Ubuntu 18.04) Version 47.0 — ami-01f1096e6659d38fa」AMI,因為它具有深度學習任務所需的庫。 如果我們在「選擇AWS機器映像 (AMI)」步驟中搜索「deep learning」,我們可以找到這。為「實例類型」選擇 P3 實例。 實例類型 p3.2xlarge(V100) 就足夠了。為了節省成本,請在「配置實例」步驟下選擇 Spot 實例。
第 3 步:安裝依賴項
登錄 AWS 實例後,使用以下命令創建 conda 環境並設置 Weights & Bias 環境變數:
第 4 步:訓練、驗證和測試
第 5 步:檢查指標
驗證集真實標簽
驗證集預測標簽
訓練的損失
測試
以上所有結果都會保存在文件夾yolov5runsdetectexp下
2. yolov5是圖像處理技術嗎
YOLOV5可以說是圖像處理技術,但更准確來說是一種橋鎮單階段目標檢測演算法,機器視覺任務,常見的有分類、檢測、分割。而YOLO正是檢測中的佼佼者,在工業界,YOLO兼顧精度和速度,往往是大家的首選。
延伸:YOLO將對象檢測重新定義為一個回歸問題。能夠將單個卷積神經網路應用於整個圖像,把圖像分褲畝成網格,並預測每個網格的類概率和邊界框。YOLO非常快,由於檢測問題是一個回歸問題,所以不需要復雜的管道。YOLO比「R-CNN」快1000倍,比「Fast R-CNN」快100倍,YOLOV5是YOLO最敏純粗新的版本。
若幫助到您,求採納~
3. yolov5做畢設的難點
yolov5做畢設的難點如下:
yolo容易漏檢,但ssd不容易。
YOLO雖然能夠達到實時的效空告果,但是其mAP與剛面提到的的結果有很大的差距,每個網格只預測一個物體,容易造成漏檢。
文獻綜述好好寫,論文格式好好弄。
主要是因為yolo本身的思想已經很成熟了,在這個框架下的確很難做出些通用性的創新和提升。至於把各種成熟的模塊塞進去發論文,這種仁者見仁智者見智吧。個人感覺還是結合某個方向芹茄改進yolo,會有方向一些。畢竟不同的數據集和尺度上,同樣的改進有時候效果也是不同的。
Yolov5 目標檢測的損失函數由三部分組成,分別是矩形框預測損失函數、置信度預測損失函數以及類別預測損失函數,在上節中分析了目標檢測損失函數GIoU 的缺陷及其改進,使用 CIoU 以及帶有調節因子的二元交叉熵函數替代原網路的損失函數。
4. 目標檢測YOLO v1-v5演進
目標檢測是與計算機視覺和圖像處理相關的計算機技術,用於在一張圖片中識別出些物體的種類,同時要求標出物體的位置。目標檢測已被廣泛應用於人臉檢測、自動駕駛和視頻哪褲監控等圖像領域。
目標檢測中的常見方法,分為one-stage和two-stage兩類。One-stage方法首先輸入圖片,輸出Bounding box (bbox)和分類標簽,由一個網路完成,該方法以YOLO、SSD為主要代表。Two-stage方法則以Faster-RCNN為代表,輸入圖片後,首先生成建議區域(Region Proposal),再輸入分類器進行分類,兩個任務由不同網路完成。
其中,YOLO目標檢測是一種突出且優秀的演算法,其為「you only look once」的縮寫,意為只需瀏覽一次即可識別出圖中物體的類別與位置,且完美地平衡了檢測速度和精度之間的關系。YOLO也由最初的YOLO v1發展到現在最新的YOLO v5。
2015年提出了第一版YOLO v1,YOLO借鑒GoogleNet而提出了Darknet網路。Darknet是用C語言和CUDA編寫的開源神經網路框架,用1x1卷積層+3x3卷積層替代GoogleNet的Inception模塊。網路由24 層卷積層接2層全連接組成,如圖1:
YOLO v1的框架如圖2所示:首先調整圖像大小為448×448,隨後將圖像輸入CNN,最後通過非極大值抑制(NMS)保留最終標定框。
YOLO v1 的核心思想在於將目標檢測視為回歸問題,其將圖片劃分成 SxS 個網格,如果目標中心落入某網格單元,則該網格就負責檢測該目標。每個網格單元預測 B個邊界框(bbox)和類別信息。此外,每個bbox需要預測(x, y, w, h)和置信度共5個值。因此,最終每個網格應預測B個bbox和C個類別,最終輸出S x S x (5*B+C)的tensor。
優點:
YOLO v2在YOLO v1基礎上進行了一系列的改進,在保持分類精度的同時,提高了目標緩緩拿定位的精度以及召回率。首先,YOLO v2能夠適應不同的輸入尺寸,並可根據需要自行權衡檢測准確率和檢測速度;其次,根據層級分類提出了WordTree來混合檢測數據集與分類數據集;最後,提出了可同時在檢測和分類數據集上進行的聯合訓練方式,使用檢測數據集訓練擾搭模型識別部分,使用分類數據集訓練模型分類部分,擴充檢測種類。
對於YOLO v1更為具體的改進包括以下幾點:
不過YOLO v2仍然無法解決同一個網格內物體重疊的問題。YOLO v3則繼續在YOLO v2上做了些許改進:
2020年4月,YOLO v4重磅發布。其在MS COCO數據集上的精度達到了43.5% AP,速度達到65FPS,與 YOLO v3相比分別提高了 10% 和 12%。
YOLO v4首先對相關工作進行總結,並對目標檢測框架拆分:
Object Detection = Backbone + Neck + Head
此外,將所有所有的調優手段分為兩類:「Bag of freebies」和「Bag of specials」。
YOLO v4總結了以上各種調優技巧,從中尋找最優組合。並在訓練過程中,驗證了Bag-of-Freebies和Bag-of-Specials對於YOLO v4的影響。
自YOLO v4發布的40餘天後, Ultralytics公司開源了非官方的YOLO v5,其完全基於PyTorch實現。值得注意的是,每個圖像的推理時間達到140 FPS,並且YOLOv5的權重文件大小僅為YOLOv4的1/9。YOLO v5更快,也更小巧!
由以上YOLO的發展歷程可看出, YOLO系列的發展後期更重視應用落地,沒有提出非常新穎的創新點。
5. 詳細解讀TPH-YOLOv5 | 讓目標檢測任務中的小目標無處遁形
1 簡介
針對無人機捕獲場景的目標檢測是最近比較流行的一項任務。由於無人機在不同高度飛行,目標尺度變化較大,這樣給模型的優化也帶來了很大的負擔。此外,在無人機進行高速低空飛行時,也會帶來密集目標的運動模糊問題。
圖1 小目標與密集問題
為了解決上述2個問題,本文提出了 TPH-YOLOv5 。 TPH-YOLOv5 在YOLOv5的基礎上增加了一個prediction heads 來檢測不同尺度的目標。然後通過探索Self-Attention的預測潛力使用了Transformer Prediction Heads(TPH)代侍戚野替原來的prediction heads。同時作者還集成了卷積塊Attention模型(CBAM)來尋找密集場景下的注意力區域。
為了進一步改進 TPH-YOLOv5 ,作者還提供了大量有用的策略,如數據增強、多尺度測試、多模型集成和使用額外的分類器。
在VisDrone2021數據集上的大量實驗表明,TPH-YOLOv5在無人機捕獲場景上具有良好的性能和可解釋性。在DET-test-challenge數據集上,TPH-YOLOv5的AP結果為39.18%,比之前的SOTA方法(DPNetV3)提高了1.81%。在VisDrone Challenge 2021中,TPH-YOLOv5與YOLOv5相比提高了約7%。
本文的貢獻如下:
2 前人工作總結 2.1 Data Augmentation
數據增強的意義主要是擴展數據集,使模型對不同環境下獲得的圖像具有較高的魯棒性。
Photometric和geometric被研究人員廣泛使用。對於Photometric主要是對圖像的色相、飽和度和值進行了調整。在處理geometric時主要是添加隨機縮放、裁剪、平移、剪切和旋轉。
除了上述的全局像素增強方法外,還有一些比較獨特的數據增強方法。一些研究者提出了將多幅圖像結合在一起進行數據增強的方法,如MixUp、CutMix和Mosaic。
MixUp從訓練圖像中隨機選取2個樣本進行隨機加權求和,樣本的標簽也對應於加權求和。不同於通常使用零像素mask遮擋圖像的遮擋工作,CutMix使用另一個圖像的區域覆蓋被遮擋的區域。Mosaic是CutMix的改進版。拼接4幅圖像,極大地豐富了被檢仔型測物體的背景。此外,batch normalization計算每層上4張不同圖像的激活統計量。
在TPH-YOLOv5的工作中主要是結合了MixUp、Mosaic以及傳統方法進行的數據增強。
2.2 Multi-Model Ensemble Method
我們都知道深度學習模型是一種非線性方法。它們提供了更大的靈活性,並可以根據訓練數據量的比例進行擴展。這種靈活性的一個缺點是,它們通過隨機訓練演算法進行學習,這意味著它們對訓練數據的細節非常敏感,每次訓練時可能會得到一組不同的權重,從而導致不同的預測。 這給模型帶來了一個高方差 。
減少模型方差的一個成功方法是訓練多個模型而不是單一模型,並結合這些模老喊型的預測。
針對不同的目標檢測模型,有3種不同的ensemble boxes方法:非最大抑制(NMS)、Soft-NMS、Weighted Boxes Fusion(WBF)。
在NMS方法中,如果boxes的overlap, Intersection Over Union(IoU)大於某個閾值,則認為它們屬於同一個對象。對於每個目標NMS只留下一個置信度最高的box刪除其他box。因此,box過濾過程依賴於這個單一IoU閾值的選擇,這對模型性能有很大的影響。
Soft-NMS是對NMS進行輕微的修改,使得Soft-NMS在標准基準數據集(如PASCAL VOC和MS COCO)上比傳統NMS有了明顯的改進。它根據IoU值對相鄰邊界box的置信度設置衰減函數,而不是完全將其置信度評分設為0並將其刪除。
WBF的工作原理與NMS不同。NMS和Soft-NMS都排除了一些框,而WBF將所有框合並形成最終結果。因此,它可以解決模型中所有不準確的預測。本文使用WBF對最終模型進行集成,其性能明顯優於NMS。
2.3 Object Detection
基於CNN的物體檢測器可分為多種類型:
一些檢測器是專門為無人機捕獲的圖像設計的,如RRNet、PENet、CenterNet等。但從組件的角度來看,它們通常由2部分組成,一是基於CNN的主幹,用於圖像特徵提取,另一部分是檢測頭,用於預測目標的類和Box。
此外,近年來發展起來的目標檢測器往往在backbone和head之間插入一些層,人們通常稱這部分為檢測器的Neck。接下來分別對這3種結構進行詳細介紹:
Backbone
常用的Backbone包括VGG、ResNet、DenseNet、MobileNet、EfficientNet、CSPDarknet53、Swin-Transformer等,均不是自己設計的網路。因為這些網路已經證明它們在分類和其他問題上有很強的特徵提取能力。但研究人員也將微調Backbone,使其更適合特定的垂直任務。
Neck
Neck的設計是為了更好地利用Backbone提取的特徵。對Backbone提取的特徵圖進行不同階段的再處理和合理使用。通常,一個Neck由幾個自底向上的路徑和幾個自頂向下的路徑組成。Neck是目標檢測框架中的關鍵環節。最早的Neck是使用上下取樣塊。該方法的特點是沒有特徵層聚合操作,如SSD,直接跟隨頭部後的多層次特徵圖。
常用的Neck聚合塊有:FPN、PANet、NAS-FPN、BiFPN、ASFF、SAM。這些方法的共性是反復使用各種上下采樣、拼接、點和或點積來設計聚合策略。Neck也有一些額外的塊,如SPP, ASPP, RFB, CBAM。
Head
作為一個分類網路,Backbone無法完成定位任務,Head負責通過Backbone提取的特徵圖檢測目標的位置和類別。
Head一般分為2種:One-Stage檢測器和Two-Stage檢測器。
兩級檢測器一直是目標檢測領域的主導方法,其中最具代表性的是RCNN系列。與Two-Stage檢測器相比One-Stage檢測器同時預測box和目標的類別。One-Stage檢測器的速度優勢明顯,但精度較低。對於One-Stage檢測器,最具代表性的型號是YOLO系列、SSD和RetaNet。
3TPH-YOLOv53.1 Overview of YOLOv5
YOLOv5有4種不同的配置,包括YOLOv5s,YOLOv5m, YOLOv5l和YOLOv5x。一般情況下,YOLOv5分別使用CSPDarknet53+SPP為Backbone,PANet為Neck, YOLO檢測Head。為了進一步優化整個架構。由於它是最顯著和最方便的One-Stage檢測器,作者選擇它作為Baseline。
圖2 THP-YOLOv5整體架構
當使用VisDrone2021數據集訓練模型時,使用數據增強策略(Mosaic和MixUp)發現YOLOv5x的結果遠遠好於YOLOv5s、YOLOv5m和YOLOv5l, AP值的差距大於1.5%。雖然YOLOv5x模型的訓練計算成本比其他3種模型都要高,但仍然選擇使用YOLOv5x來追求最好的檢測性能。此外,根據無人機捕獲圖像的特點,對常用的photometric和geometric參數進行了調整。
3.2 TPH-YOLOv5
TPH-YOLOv5的框架如圖3所示。修改了原來的YOLOv5,使其專一於VisDrone2021數據集:
圖3 TPH-YOLOv5模型結構 微小物體的預測頭
作者統計了VisDrone2021數據集,發現它包含了很多非常小的目標,所以增加了一個用於微小物體檢測的預測頭。結合其他3個預測頭,4頭結構可以緩解劇烈的目標尺度變化帶來的負面影響。如圖3所示,添加的預測頭(Head 1)是由low-level、高解析度的feature map生成的,對微小物體更加敏感。增加檢測頭後,雖然增加了計算和存儲成本,但對微小物體的檢測性能得到了很大的提高。
Transformer encoder block
圖4 Transformer Block
用Transformer encoder塊替換了YOLOv5原版中的一些卷積塊和CSP bottleneck blocks。其結構如圖4所示。與CSPDarknet53中原有的bottleneck blocks相比,作者認為Transformer encoder block可以捕獲全局信息和豐富的上下文信息。
每個Transformer encoder block包含2個子層。第1子層為multi-head attention layer,第2子層(MLP)為全連接層。每個子層之間使用殘差連接。Transformer encoder block增加了捕獲不同局部信息的能力。它還可以利用自注意力機制來挖掘特徵表徵潛能。在VisDrone2021數據集中,Transformer encoder block在高密度閉塞對象上有更好的性能。
基於YOLOv5,作者只在頭部部分應用Transformer encoder block形成transformer Prediction head(TPH)和backbone端。因為網路末端的特徵圖解析度較低。將TPH應用於低解析度特徵圖可以降低計算和存儲成本。此外,當放大輸入圖像的解析度時可選擇去除早期層的一些TPH塊,以使訓練過程可用。
Convolutional block attention mole (CBAM)
CBAM是一個簡單但有效的注意力模塊。它是一個輕量級模塊,可以即插即用到CNN架構中,並且可以以端到端方式進行訓練。給定一個特徵映射,CBAM將沿著通道和空間兩個獨立維度依次推斷出注意力映射,然後將注意力映射與輸入特徵映射相乘,以執行自適應特徵細化。
圖5 CBAM注意力機制
CBAM模塊的結構如圖5所示。通過本文的實驗,在不同的分類和檢測數據集上將CBAM集成到不同的模型中,模型的性能得到了很大的提高,證明了該模塊的有效性。
在無人機捕獲的圖像中,大覆蓋區域總是包含令人困惑的地理元素。使用CBAM可以提取注意區域,以幫助TPH-YOLOv5抵制令人困惑的信息,並關注有用的目標對象。
Self-trained classifier
用TPH-YOLOv5對VisDrone2021數據集進行訓練後,對test-dev數據集進行測試,然後通過可視化失敗案例分析結果,得出TPH-YOLOv5定位能力較好,分類能力較差的結論。作者進一步探索如圖6所示的混淆矩陣,觀察到一些硬類別,如三輪車和遮陽三輪車的精度非常低。
圖6 檢測混淆矩陣
因此,作者提出了一個Self-trained classifier。首先,通過裁剪ground-truth邊界框並將每個圖像patch的大小調整為64 64來構建訓練集。然後選擇ResNet18作為分類器網路。實驗結果表明,在這個Self-trained classifier的幫助下,所提方法對AP值提高了約0.8%~1.0%。
4實驗與結論
最終在test-set-challenge上取得了39.18的好成績,遠遠高於VisDrone2020的最高成績37.37。
圖9 檢測結果圖