目標檢測支持許多視覺任務,如實例分割、姿態估計、跟蹤和動作識別,這些計算機視覺任務在監控、自動駕駛和視覺答疑等領域有著廣泛的應用。隨著這種廣泛的實際應用,目標檢測自然成為一個活躍的研究領域。 我們在Fynd的研究團隊一直在訓練一個行人檢測模型來支持我們的目標跟蹤模型。在本文中,我們將介紹如何選擇一個模型架構,創建一個數據集,并為我們的特定用例進行行人檢測模型的訓練。
什么是目標檢測
目標檢測是一種計算機視覺技術,它允許我們識別和定位圖像或視頻中的物體。目標檢測可以理解為兩部分,目標定位和目標分類。定位可以理解為預測對象在圖像中的確切位置(邊界框),而分類則是定義它屬于哪個類(人/車/狗等)。
目標檢測方法
解決目標檢測的方法有很多種,可以分為三類。
級聯檢測器:該模型有兩種網絡類型,一種是RPN網絡,另一種是檢測網絡。一些典型的例子是RCNN系列。
帶錨框的單級檢測器:這類的檢測器沒有單獨的RPN網絡,而是依賴于預定義的錨框。YOLO系列就是這種檢測器。
無錨框的單級檢測器:這是一種解決目標檢測問題的新方法,這種網絡是端到端可微的,不依賴于感興趣區域(ROI),塑造了新研究的思路。要了解更多,可以閱讀CornerNet或CenterNet論文。
什么是COCO數據集
為了比較這些模型,廣泛使用了一個稱為COCO(commonobjectsincontext)的公共數據集,這是一個具有挑戰性的數據集,有80個類和150多萬個對象實例,因此該數據集是初始模型選擇的一個非常好的基準。
如何評估性能
評估性能我們需要評價目標檢測任務的各種指標,包括:
PASCAL VOC挑戰(Everingham等人。2010年)
COCO目標檢測挑戰(Lin等人。2014年)
開放圖像挑戰賽(Kuznetsova 2018)。
要理解這些指標,你需要先去理解一些基本概念,如精確度、召回率和IOU。以下是公式的簡要定義。
平均精度
AP可定義為插值精度召回曲線下的面積,可使用以下公式計算:
mAP
AP的計算只涉及一個類,然而,在目標檢測中,通常存在K>1類。平均精度(Mean average precision,mAP)定義為所有K類中AP的平均值:
TIDE
TIDE是一個易于使用的通用工具箱,用于計算和評估對象檢測和實例分割對整體性能的影響。TIDE有助于更詳細地了解模型錯誤,僅使用mAP值是不可能找出哪個錯誤段導致的。TIDE可以繪制簡單的圖表,使分析變得輕松。https://youtu.be/McYFYU3PXcU
實際問題陳述
我們的任務是檢測零售店閉路電視視頻源中的人體邊界框,這是跟蹤模型的一個基礎模型,且其檢測所產生的所有誤差都會傳遞到跟蹤模型中。以下是在這類視頻中檢測的一些主要挑戰。
挑戰
視角:CCTV是頂裝式的,與普通照片的前視圖不同,它有一個角度
人群:商店/商店有時會有非常擁擠的場景
背景雜亂:零售店有更多的分散注意力或雜亂的東西(對于我們的模特來說),比如衣服、架子、人體模型等等,這些都會導致誤報。
照明條件:店內照明條件與室外攝影不同
圖像質量:來自CCTVs的視頻幀有時會非常差,并且可能會出現運動模糊
測試集創建
我們創建了一個驗證集,其中包含來自零售閉路電視視頻的視頻幀。我們使用行人邊界框對框架進行注釋,并使用mAP@0.50 iou閾值在整個訓練迭代中測試模型。
第一個人體檢測模型
我們的第一個模型是一個COCO預訓練的模型,它將“person”作為其中的一個類。我們在每種方法中列出了2個模型,并基于COCO-mAP-val和推理時間對它們進行了評估。
我們選擇YOLOv5是因為它的單級特性(快速推理)和在COCO mAP val上的良好性能,它還有YOLOv5m和YOLOv5s等更快的版本。
YOLOv5
YOLO系列屬于單階段目標探測器,與RCNN不同,它沒有單獨的區域建議網絡(RPN),并且依賴于不同尺度的錨框。架構可分為三個部分:骨架、頸部和頭部。利用CSP(Cross-Stage Partial Networks)作為主干,從輸入圖像中提取特征。PANet被用作收集特征金字塔的主干,頭部是最終的檢測層,它使用特征上的錨框來檢測對象。 YOLO架構使用的激活函數是Google Brains在2017年提出的Swish的變體,它看起來與ReLU非常相同,但與ReLU不同,它在x=0附近是平滑的。
損失函數是具有Logits損失的二元交叉熵
性能
0.48 mAP@0.50 IOU(在我們的測試集上)
分析
這個現成的模型不能很好地執行,因為模型是在COCO數據集上訓練的,而COCO數據集包含一些不必要的類,包含人體實例的圖像數量較少,人群密度也較小。此外,包含人體實例的圖像分布與閉路電視視頻幀中的圖像分布有很大不同。
結論
我們需要更多的數據來訓練包含更多擁擠場景和攝像機視角介于45?-60?(類似于CCTV)的模型。
收集公共數據
我們的下一步是收集包含行人/行人邊界框的公共可用數據集。有很多數據集可用于人體檢測,但我們需要一些關于數據集的附加信息,如視角、圖像質量、人體密度和背景等,以獲取數據集的分布信息。 我們可以看到,滿足我們確切需求的數據集并不多,但我們仍然可以使用這些數據集,因為人體邊界框的基本要求已經得到滿足。在下載了所有的數據集之后,我們把它轉換成一個通用的COCO格式進行檢測。
第二個人體檢測模型
我們用收集到的所有公共數據集訓練模型。
訓練迭代2:
主干網絡:YOLOv5x
模型初始化:COCO預訓練的權重
epoch:10個epoch
性能
0.65 mAP @ 0.50 IOU
分析
隨著數據集的增加,模型性能急劇提高。有些數據集具有滿足我們的一個要求的高擁擠場景,有些包含滿足另一個需求的頂角攝影機視圖。
結論
雖然模型的性能有所提高,但有些數據集是視頻序列,而且在某些情況下背景仍然是靜態的,可能會導致過擬合。很少有數據集有非常小的人體,這使得任務很難學習。
清理數據
下一步是清理數據。我們從訓練和驗證集中篩選出損失最大的圖像,或者我們可以說這些圖像具有非常少的mAP度量。我們選擇了一個0.3的閾值并將圖像可視化。我們從數據集中篩選出三種類型的錯誤。
錯誤標記的邊界框
包含非常小的邊界框或太多人群的圖像
重復幀的附近
為了去除重復幀,我們只從視頻序列中選擇稀疏幀。
第三個人體檢測模型
有了經過清理和整理的數據集,我們就可以進行第三次迭代了 訓練迭代3:
主干網絡:YOLOv5x
模型初始化:COCO預訓練的權重
epoch:~100個epoch
性能
0.69 mAP @ 0.50 IOU
分析
當未清理的數據從訓練和驗證集中移除時,模型性能略有改善。
結論
數據集被清理,性能得到改善。我們可以得出結論,進一步改進數據集可以提高模型性能。為了提高性能,我們需要確保數據集包含與測試用例相似的圖像。我們處理了人群情況和一些視角的情況,但大多數數據仍然有一個前視角。
數據增強
我們列出了在實際情況下檢測時將面臨的一些挑戰,但是收集到的數據集分布不同,因此,我們采用了一些數據擴充技術,使訓練分布更接近實際用例或測試分布。 下面是我們對數據集進行的擴展。
視角
視角改變
照明條件
亮度
對比度
圖像質量
噪音
圖像壓縮
運動模糊
通過將所有這些擴展匯總,我們可以將公共數據分布更接近實際分布,我們將原始圖像和轉換后的圖像進行比較,可以從下面的圖像中看到。
所有這些擴展都是通過使用“albumentation”來應用的,這是一個易于與PyTorch數據轉換集成的python庫,他們還有一個演示應用程序,我們用來設置不同方法的增強參數。庫中還有很多可以與其他用例一起使用的擴展包。 我們使用albumentation方法來實現這一點。
第四個人體檢測模型
現在有了轉換后的數據集,我們就可以進行第四次迭代了 訓練迭代4: 主干網絡:YOLOv5x 模型初始化:迭代3中的模型 epoch:~100個epoch
性能
0.77 mAP @ 0.50 IOU
分析
性能提高了近8%,該模型能夠預測大多數情況,并在攝像機視角下進行了泛化。由于視頻序列中的背景雜波和遮擋,仍有一些誤報和漏報。
結論
我們試圖收集數據集并覆蓋任務中幾乎所有的挑戰,但是仍然有一個問題仍然存在,并阻礙了我們的模型性能,我們需要收集包含此類場景下的數據。
創建自定義批注
通過數據增強,我們創建了一些真實世界的樣本,但是我們的數據在圖像背景上仍然缺乏多樣性。對于零售商店來說,框架背景充滿了雜亂的東西,人體模型或衣服架子會導致假正例,而大面積的遮擋則會導致假反例。為了增加這種多樣性,我們取消了谷歌搜索,從商店收集閉路電視視頻,并對圖片進行了手工注釋。 首先,我們通過迭代4中的模型傳遞所有的圖像并創建自動標簽,然后使用開源注釋工具CVAT(computervision and annotation tool)進一步修正注釋。
最終人體檢測模型
我們將定制存儲圖像添加到之前的數據集中,并為最終迭代訓練模型。我們的最終數據集分布如下所示。
訓練迭代5: 主干網絡:YOLOv5x 模型初始化:迭代4中的模型 epoch:~100個epoch
性能
0.79 mAP @ 0.50 IOU
分析
我們的模型的性能顯示了大約0.2%的正增長,同時,從TIDE分析可以看出,假正例在誤差中的貢獻也有所降低。
結論
額外的數據有助于使模型對背景干擾更加穩健,但是收集到的數據量與總體數據集大小相比仍然非常少,并且模型仍然存在一些誤報。當在隨機圖像上進行測試時,該模型能夠很好地泛化。
總結
我們從模型選擇開始,以COCO作為基準,我們實現一系列的模型。此外,我們考慮了推理時間和模型架構,并選擇了yolov5。我們收集并清理了各種公開可用的數據集,并使用各種數據擴充技術來轉換這些數據集,以適應我們的用例。最后,我們收集存儲圖像,并在手工注釋后將其添加到數據集中。我們的最終模型是在這個精心設計的數據集上訓練的,能夠從0.46map@IOU0.5提高到0.79map@IOU0.5。
結論
通過根據用例對數據集進行處理,我們改進了大約20%的對象檢測模型,該模型在映射和延遲方面仍有改進的余地,所選的超參數是yolov5默認給出的,我們可以使用optuna等超參數搜索庫對它們進行優化。當訓練分布和測試分布之間存在差異時,域適應是另一種可以使用的技術,同樣,這種情況可能需要一個持續的訓練循環,其中包含額外的數據集,以確保模型的持續改進。
原文標題:使用Python+OpenCV+yolov5實現行人目標檢測
文章出處:【微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
機器視覺
+關注
關注
162文章
4388瀏覽量
120434 -
OpenCV
+關注
關注
31文章
635瀏覽量
41386 -
python
+關注
關注
56文章
4798瀏覽量
84810
原文標題:使用Python+OpenCV+yolov5實現行人目標檢測
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論