0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Python+OpenCV+yolov5實現(xiàn)行人目標(biāo)檢測?

新機器視覺 ? 來源:深度學(xué)習(xí)與計算機視覺 ? 作者:深度學(xué)習(xí)與計算機 ? 2021-01-07 14:04 ? 次閱讀

目標(biāo)檢測支持許多視覺任務(wù),如實例分割、姿態(tài)估計、跟蹤和動作識別,這些計算機視覺任務(wù)在監(jiān)控、自動駕駛和視覺答疑等領(lǐng)域有著廣泛的應(yīng)用。隨著這種廣泛的實際應(yīng)用,目標(biāo)檢測自然成為一個活躍的研究領(lǐng)域。 我們在Fynd的研究團隊一直在訓(xùn)練一個行人檢測模型來支持我們的目標(biāo)跟蹤模型。在本文中,我們將介紹如何選擇一個模型架構(gòu),創(chuàng)建一個數(shù)據(jù)集,并為我們的特定用例進行行人檢測模型的訓(xùn)練。

什么是目標(biāo)檢測

目標(biāo)檢測是一種計算機視覺技術(shù),它允許我們識別和定位圖像或視頻中的物體。目標(biāo)檢測可以理解為兩部分,目標(biāo)定位和目標(biāo)分類。定位可以理解為預(yù)測對象在圖像中的確切位置(邊界框),而分類則是定義它屬于哪個類(人/車/狗等)。

目標(biāo)檢測方法

解決目標(biāo)檢測的方法有很多種,可以分為三類。

級聯(lián)檢測器:該模型有兩種網(wǎng)絡(luò)類型,一種是RPN網(wǎng)絡(luò),另一種是檢測網(wǎng)絡(luò)。一些典型的例子是RCNN系列。

帶錨框的單級檢測器:這類的檢測器沒有單獨的RPN網(wǎng)絡(luò),而是依賴于預(yù)定義的錨框。YOLO系列就是這種檢測器。

無錨框的單級檢測器:這是一種解決目標(biāo)檢測問題的新方法,這種網(wǎng)絡(luò)是端到端可微的,不依賴于感興趣區(qū)域(ROI),塑造了新研究的思路。要了解更多,可以閱讀CornerNet或CenterNet論文。

什么是COCO數(shù)據(jù)集

為了比較這些模型,廣泛使用了一個稱為COCO(commonobjectsincontext)的公共數(shù)據(jù)集,這是一個具有挑戰(zhàn)性的數(shù)據(jù)集,有80個類和150多萬個對象實例,因此該數(shù)據(jù)集是初始模型選擇的一個非常好的基準(zhǔn)。

如何評估性能

評估性能我們需要評價目標(biāo)檢測任務(wù)的各種指標(biāo),包括:

PASCAL VOC挑戰(zhàn)(Everingham等人。2010年)

COCO目標(biāo)檢測挑戰(zhàn)(Lin等人。2014年)

開放圖像挑戰(zhàn)賽(Kuznetsova 2018)。

要理解這些指標(biāo),你需要先去理解一些基本概念,如精確度、召回率和IOU。以下是公式的簡要定義。

平均精度

74c382e4-503c-11eb-8b86-12bb97331649.gif

AP可定義為插值精度召回曲線下的面積,可使用以下公式計算:

74e8e192-503c-11eb-8b86-12bb97331649.png

751e8a4a-503c-11eb-8b86-12bb97331649.png

mAP

AP的計算只涉及一個類,然而,在目標(biāo)檢測中,通常存在K>1類。平均精度(Mean average precision,mAP)定義為所有K類中AP的平均值:

753b1714-503c-11eb-8b86-12bb97331649.png

TIDE

TIDE是一個易于使用的通用工具箱,用于計算和評估對象檢測和實例分割對整體性能的影響。TIDE有助于更詳細(xì)地了解模型錯誤,僅使用mAP值是不可能找出哪個錯誤段導(dǎo)致的。TIDE可以繪制簡單的圖表,使分析變得輕松。https://youtu.be/McYFYU3PXcU

實際問題陳述

我們的任務(wù)是檢測零售店閉路電視視頻源中的人體邊界框,這是跟蹤模型的一個基礎(chǔ)模型,且其檢測所產(chǎn)生的所有誤差都會傳遞到跟蹤模型中。以下是在這類視頻中檢測的一些主要挑戰(zhàn)。

挑戰(zhàn)

視角:CCTV是頂裝式的,與普通照片的前視圖不同,它有一個角度

人群:商店/商店有時會有非常擁擠的場景

背景雜亂:零售店有更多的分散注意力或雜亂的東西(對于我們的模特來說),比如衣服、架子、人體模型等等,這些都會導(dǎo)致誤報。

照明條件:店內(nèi)照明條件與室外攝影不同

圖像質(zhì)量:來自CCTVs的視頻幀有時會非常差,并且可能會出現(xiàn)運動模糊

測試集創(chuàng)建

我們創(chuàng)建了一個驗證集,其中包含來自零售閉路電視視頻的視頻幀。我們使用行人邊界框?qū)蚣苓M行注釋,并使用mAP@0.50 iou閾值在整個訓(xùn)練迭代中測試模型。

第一個人體檢測模型

我們的第一個模型是一個COCO預(yù)訓(xùn)練的模型,它將“person”作為其中的一個類。我們在每種方法中列出了2個模型,并基于COCO-mAP-val和推理時間對它們進行了評估。

75571464-503c-11eb-8b86-12bb97331649.png

我們選擇YOLOv5是因為它的單級特性(快速推理)和在COCO mAP val上的良好性能,它還有YOLOv5m和YOLOv5s等更快的版本。

YOLOv5

YOLO系列屬于單階段目標(biāo)探測器,與RCNN不同,它沒有單獨的區(qū)域建議網(wǎng)絡(luò)(RPN),并且依賴于不同尺度的錨框。架構(gòu)可分為三個部分:骨架、頸部和頭部。利用CSP(Cross-Stage Partial Networks)作為主干,從輸入圖像中提取特征。PANet被用作收集特征金字塔的主干,頭部是最終的檢測層,它使用特征上的錨框來檢測對象。 YOLO架構(gòu)使用的激活函數(shù)是Google Brains在2017年提出的Swish的變體,它看起來與ReLU非常相同,但與ReLU不同,它在x=0附近是平滑的。

757a7d78-503c-11eb-8b86-12bb97331649.png

損失函數(shù)是具有Logits損失的二元交叉熵

性能

0.48 mAP@0.50 IOU(在我們的測試集上)

分析

這個現(xiàn)成的模型不能很好地執(zhí)行,因為模型是在COCO數(shù)據(jù)集上訓(xùn)練的,而COCO數(shù)據(jù)集包含一些不必要的類,包含人體實例的圖像數(shù)量較少,人群密度也較小。此外,包含人體實例的圖像分布與閉路電視視頻幀中的圖像分布有很大不同。

結(jié)論

我們需要更多的數(shù)據(jù)來訓(xùn)練包含更多擁擠場景和攝像機視角介于45?-60?(類似于CCTV)的模型。

收集公共數(shù)據(jù)

我們的下一步是收集包含行人/行人邊界框的公共可用數(shù)據(jù)集。有很多數(shù)據(jù)集可用于人體檢測,但我們需要一些關(guān)于數(shù)據(jù)集的附加信息,如視角、圖像質(zhì)量、人體密度和背景等,以獲取數(shù)據(jù)集的分布信息。 我們可以看到,滿足我們確切需求的數(shù)據(jù)集并不多,但我們?nèi)匀豢梢允褂眠@些數(shù)據(jù)集,因為人體邊界框的基本要求已經(jīng)得到滿足。在下載了所有的數(shù)據(jù)集之后,我們把它轉(zhuǎn)換成一個通用的COCO格式進行檢測。

第二個人體檢測模型

我們用收集到的所有公共數(shù)據(jù)集訓(xùn)練模型。

訓(xùn)練迭代2:

主干網(wǎng)絡(luò):YOLOv5x

模型初始化:COCO預(yù)訓(xùn)練的權(quán)重

epoch:10個epoch

性能

0.65 mAP @ 0.50 IOU

分析

隨著數(shù)據(jù)集的增加,模型性能急劇提高。有些數(shù)據(jù)集具有滿足我們的一個要求的高擁擠場景,有些包含滿足另一個需求的頂角攝影機視圖。

結(jié)論

雖然模型的性能有所提高,但有些數(shù)據(jù)集是視頻序列,而且在某些情況下背景仍然是靜態(tài)的,可能會導(dǎo)致過擬合。很少有數(shù)據(jù)集有非常小的人體,這使得任務(wù)很難學(xué)習(xí)。

清理數(shù)據(jù)

下一步是清理數(shù)據(jù)。我們從訓(xùn)練和驗證集中篩選出損失最大的圖像,或者我們可以說這些圖像具有非常少的mAP度量。我們選擇了一個0.3的閾值并將圖像可視化。我們從數(shù)據(jù)集中篩選出三種類型的錯誤。

錯誤標(biāo)記的邊界框

包含非常小的邊界框或太多人群的圖像

重復(fù)幀的附近

為了去除重復(fù)幀,我們只從視頻序列中選擇稀疏幀。

第三個人體檢測模型

有了經(jīng)過清理和整理的數(shù)據(jù)集,我們就可以進行第三次迭代了 訓(xùn)練迭代3:

主干網(wǎng)絡(luò):YOLOv5x

模型初始化:COCO預(yù)訓(xùn)練的權(quán)重

epoch:~100個epoch

性能

0.69 mAP @ 0.50 IOU

分析

當(dāng)未清理的數(shù)據(jù)從訓(xùn)練和驗證集中移除時,模型性能略有改善。

結(jié)論

數(shù)據(jù)集被清理,性能得到改善。我們可以得出結(jié)論,進一步改進數(shù)據(jù)集可以提高模型性能。為了提高性能,我們需要確保數(shù)據(jù)集包含與測試用例相似的圖像。我們處理了人群情況和一些視角的情況,但大多數(shù)數(shù)據(jù)仍然有一個前視角。

數(shù)據(jù)增強

我們列出了在實際情況下檢測時將面臨的一些挑戰(zhàn),但是收集到的數(shù)據(jù)集分布不同,因此,我們采用了一些數(shù)據(jù)擴充技術(shù),使訓(xùn)練分布更接近實際用例或測試分布。 下面是我們對數(shù)據(jù)集進行的擴展。

視角

視角改變

照明條件

亮度

對比度

圖像質(zhì)量

噪音

圖像壓縮

運動模糊

通過將所有這些擴展匯總,我們可以將公共數(shù)據(jù)分布更接近實際分布,我們將原始圖像和轉(zhuǎn)換后的圖像進行比較,可以從下面的圖像中看到。

所有這些擴展都是通過使用“albumentation”來應(yīng)用的,這是一個易于與PyTorch數(shù)據(jù)轉(zhuǎn)換集成的python庫,他們還有一個演示應(yīng)用程序,我們用來設(shè)置不同方法的增強參數(shù)。庫中還有很多可以與其他用例一起使用的擴展包。 我們使用albumentation方法來實現(xiàn)這一點。

第四個人體檢測模型

現(xiàn)在有了轉(zhuǎn)換后的數(shù)據(jù)集,我們就可以進行第四次迭代了 訓(xùn)練迭代4: 主干網(wǎng)絡(luò):YOLOv5x 模型初始化:迭代3中的模型 epoch:~100個epoch

性能

0.77 mAP @ 0.50 IOU

分析

846902f0-503c-11eb-8b86-12bb97331649.png

性能提高了近8%,該模型能夠預(yù)測大多數(shù)情況,并在攝像機視角下進行了泛化。由于視頻序列中的背景雜波和遮擋,仍有一些誤報和漏報。

結(jié)論

我們試圖收集數(shù)據(jù)集并覆蓋任務(wù)中幾乎所有的挑戰(zhàn),但是仍然有一個問題仍然存在,并阻礙了我們的模型性能,我們需要收集包含此類場景下的數(shù)據(jù)。

創(chuàng)建自定義批注

通過數(shù)據(jù)增強,我們創(chuàng)建了一些真實世界的樣本,但是我們的數(shù)據(jù)在圖像背景上仍然缺乏多樣性。對于零售商店來說,框架背景充滿了雜亂的東西,人體模型或衣服架子會導(dǎo)致假正例,而大面積的遮擋則會導(dǎo)致假反例。為了增加這種多樣性,我們?nèi)∠斯雀杷阉?,從商店收集閉路電視視頻,并對圖片進行了手工注釋。 首先,我們通過迭代4中的模型傳遞所有的圖像并創(chuàng)建自動標(biāo)簽,然后使用開源注釋工具CVAT(computervision and annotation tool)進一步修正注釋。

最終人體檢測模型

我們將定制存儲圖像添加到之前的數(shù)據(jù)集中,并為最終迭代訓(xùn)練模型。我們的最終數(shù)據(jù)集分布如下所示。

87885d6e-503c-11eb-8b86-12bb97331649.png

訓(xùn)練迭代5: 主干網(wǎng)絡(luò):YOLOv5x 模型初始化:迭代4中的模型 epoch:~100個epoch

性能

0.79 mAP @ 0.50 IOU

分析

8aac9032-503c-11eb-8b86-12bb97331649.png

我們的模型的性能顯示了大約0.2%的正增長,同時,從TIDE分析可以看出,假正例在誤差中的貢獻也有所降低。

結(jié)論

額外的數(shù)據(jù)有助于使模型對背景干擾更加穩(wěn)健,但是收集到的數(shù)據(jù)量與總體數(shù)據(jù)集大小相比仍然非常少,并且模型仍然存在一些誤報。當(dāng)在隨機圖像上進行測試時,該模型能夠很好地泛化。

總結(jié)

我們從模型選擇開始,以COCO作為基準(zhǔn),我們實現(xiàn)一系列的模型。此外,我們考慮了推理時間和模型架構(gòu),并選擇了yolov5。我們收集并清理了各種公開可用的數(shù)據(jù)集,并使用各種數(shù)據(jù)擴充技術(shù)來轉(zhuǎn)換這些數(shù)據(jù)集,以適應(yīng)我們的用例。最后,我們收集存儲圖像,并在手工注釋后將其添加到數(shù)據(jù)集中。我們的最終模型是在這個精心設(shè)計的數(shù)據(jù)集上訓(xùn)練的,能夠從0.46map@IOU0.5提高到0.79map@IOU0.5。

結(jié)論

通過根據(jù)用例對數(shù)據(jù)集進行處理,我們改進了大約20%的對象檢測模型,該模型在映射和延遲方面仍有改進的余地,所選的超參數(shù)是yolov5默認(rèn)給出的,我們可以使用optuna等超參數(shù)搜索庫對它們進行優(yōu)化。當(dāng)訓(xùn)練分布和測試分布之間存在差異時,域適應(yīng)是另一種可以使用的技術(shù),同樣,這種情況可能需要一個持續(xù)的訓(xùn)練循環(huán),其中包含額外的數(shù)據(jù)集,以確保模型的持續(xù)改進。

原文標(biāo)題:使用Python+OpenCV+yolov5實現(xiàn)行人目標(biāo)檢測

文章出處:【微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器視覺
    +關(guān)注

    關(guān)注

    162

    文章

    4399

    瀏覽量

    120492
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    635

    瀏覽量

    41421
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84865

原文標(biāo)題:使用Python+OpenCV+yolov5實現(xiàn)行人目標(biāo)檢測

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    采用華為云 Flexus 云服務(wù)器 X 實例部署 YOLOv3 算法完成目標(biāo)檢測

    YOLOv3 在圖像識別和目標(biāo)檢測領(lǐng)域展現(xiàn)出了卓越的性能。為了滿足日益增長的數(shù)據(jù)處理需求,本項目利用華為云最新推出的 Flexus 云服務(wù)器 X 實例的強大計算能力,部署 YOLOv
    的頭像 發(fā)表于 01-02 12:00 ?93次閱讀
    采用華為云 Flexus 云服務(wù)器 X 實例部署 <b class='flag-5'>YOLOv</b>3 算法完成<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>

    在RK3568教學(xué)實驗箱上實現(xiàn)基于YOLOV5的算法物體識別案例詳解

    非常流行的實時目標(biāo)檢測模型,它提供了出色的性能和精度。YOLOv5可以分為三個部分,分別是: 1、主干特征提取網(wǎng)絡(luò)(Backbone) 2、加強特征提取網(wǎng)絡(luò)(FPN) 3、分類器與回歸器(Yolo
    發(fā)表于 12-03 14:56

    一個月速成python+OpenCV圖像處理

    適用于哪些場景,然后通過Python編寫代碼來實現(xiàn)這些算法,并應(yīng)用于實際項目中,實現(xiàn)圖像的檢測、識別、分類、定位、測量等目標(biāo)。本文將介紹一個
    的頭像 發(fā)表于 11-29 18:27 ?178次閱讀
    一個月速成<b class='flag-5'>python+OpenCV</b>圖像處理

    YOLOv10自定義目標(biāo)檢測之理論+實踐

    概述 YOLOv10 是由清華大學(xué)研究人員利用 Ultralytics Python 軟件包開發(fā)的,它通過改進模型架構(gòu)并消除非極大值抑制(NMS)提供了一種新穎的實時目標(biāo)檢測方法。這些
    的頭像 發(fā)表于 11-16 10:23 ?607次閱讀
    <b class='flag-5'>YOLOv</b>10自定義<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>之理論+實踐

    如何用OpenCV的相機捕捉視頻進行人檢測--基于米爾NXP i.MX93開發(fā)板

    : breakvideo.release()cv2.destroyAllWindows() 保存后執(zhí)行”python3 opencv_test.py OpenCV裝好后,可以為后面的人臉
    發(fā)表于 11-15 17:58

    在樹莓派上部署YOLOv5進行動物目標(biāo)檢測的完整流程

    目標(biāo)檢測在計算機視覺領(lǐng)域中具有重要意義。YOLOv5(You Only Look One-level)是目標(biāo)檢測算法中的一種代表性方法,以其
    的頭像 發(fā)表于 11-11 10:38 ?1293次閱讀
    在樹莓派上部署<b class='flag-5'>YOLOv5</b>進行動物<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>的完整流程

    YOLOv6在LabVIEW中的推理部署(含源碼)

    YOLOv6 是美團視覺智能部研發(fā)的一款目標(biāo)檢測框架,致力于工業(yè)應(yīng)用。如何使用python進行該模型的部署,官網(wǎng)已經(jīng)介紹的很清楚了,但是對于如何在LabVIEW中
    的頭像 發(fā)表于 11-06 16:07 ?347次閱讀
    <b class='flag-5'>YOLOv</b>6在LabVIEW中的推理部署(含源碼)

    【飛凌嵌入式OK3576-C開發(fā)板體驗】rknn實現(xiàn)yolo5目標(biāo)檢測

    rknn_model_zoo/examples/yolov5/python 目錄下,運行 convert.py 腳本,該腳本有幾個參數(shù)如下: 其中platform為板卡平臺的芯片類型,dtype為模型
    發(fā)表于 09-19 02:20

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測-迅為電子

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實現(xiàn)Yolov5分類檢測-迅為電子
    的頭像 發(fā)表于 08-23 14:58 ?789次閱讀
    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>Yolov5</b>分類<b class='flag-5'>檢測</b>-迅為電子

    opencv-pythonopencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學(xué)習(xí)軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?1308次閱讀

    DongshanPI-AICT全志V853開發(fā)板搭建YOLOV5-V6.0環(huán)境

    版 1.搭建Python環(huán)境 打開Conda終端,創(chuàng)建Python3.7的Conda環(huán)境,輸入 conda create -n py37_yolov5 python=3.7 創(chuàng)建完成
    發(fā)表于 07-12 09:59

    YOLOv5的原理、結(jié)構(gòu)、特點和應(yīng)用

    YOLOv5(You Only Look Once version 5)是一種基于深度學(xué)習(xí)的實時目標(biāo)檢測算法,它屬于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的范疇。下面我將詳細(xì)介紹
    的頭像 發(fā)表于 07-03 09:23 ?6427次閱讀

    yolov5的best.pt導(dǎo)出成onnx轉(zhuǎn)化成fp32 bmodel后在Airbox上跑,報維度不匹配怎么處理?

    $ python3 yolov5_opencv_3output.py --bmodel ../../best_pt_1684x_int8_sym.bmodel --input ../../21.png
    發(fā)表于 05-31 08:10

    OpenVINO? C# API部署YOLOv9目標(biāo)檢測和實例分割模型

    YOLOv9模型是YOLO系列實時目標(biāo)檢測算法中的最新版本,代表著該系列在準(zhǔn)確性、速度和效率方面的又一次重大飛躍。
    的頭像 發(fā)表于 04-03 17:35 ?927次閱讀
    OpenVINO? C# API部署<b class='flag-5'>YOLOv</b>9<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>和實例分割模型

    基于OpenCV DNN實現(xiàn)YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現(xiàn)YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統(tǒng)、烏班圖系統(tǒng)、Jetson的Jetpack系統(tǒng)
    的頭像 發(fā)表于 03-01 15:52 ?1794次閱讀
    基于<b class='flag-5'>OpenCV</b> DNN<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>YOLOv</b>8的模型部署與推理演示