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

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

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

圖解目標(biāo)檢測算法的網(wǎng)絡(luò)架構(gòu)和基本流程

新機(jī)器視覺 ? 來源:新機(jī)器視覺 ? 作者:新機(jī)器視覺 ? 2022-05-07 15:34 ? 次閱讀

YOLO v3 是目標(biāo)檢測各類算法中非常經(jīng)典的一款,本文試著圖解它的網(wǎng)絡(luò)架構(gòu)和基本流程,給想快速了解它的童鞋提供一些參考。

6ccc0604-cd42-11ec-bce3-dac502259ad0.png

1引 言

近年來,由于在海量數(shù)據(jù)與計(jì)算力的加持下,深度學(xué)習(xí)對圖像數(shù)據(jù)表現(xiàn)出強(qiáng)大的表示能力,成為了機(jī)器視覺的熱點(diǎn)研究方向。圖像的表示學(xué)習(xí),或者讓計(jì)算機(jī)理解圖像是機(jī)器視覺的中心問題。

具體來說,圖像理解包括分類、定位、檢測與分割等單個或組合任務(wù),如下圖所示。

6d05cbdc-cd42-11ec-bce3-dac502259ad0.png

本篇關(guān)注目標(biāo)檢測,它可以認(rèn)為是一個將分類和回歸相結(jié)合的任務(wù)。

目標(biāo)檢測的核心問題可以簡述為圖像中什么位置有什么物體。

1)定位問題:目標(biāo)出現(xiàn)在圖像中哪個位置(區(qū)域)。

2)分類問題:圖像的某個區(qū)域里的目標(biāo)屬于什么類別。

當(dāng)然,目標(biāo)(物體)在圖像中還存在其他問題,如尺寸問題,即物體具有不同大??;還有形狀問題,即物體在各種角度下可以呈現(xiàn)各種形狀。

基于深度學(xué)習(xí)的目標(biāo)檢測算法目前主要分為兩類:Two-stage和One-stage。

Tow-stage

先生成區(qū)域(region proposal,簡稱 RP),即一個可能包含待檢物體的預(yù)選框,再通過卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行分類。

任務(wù)流程:特征提取 --> 生成 RP --> 分類/定位回歸。

常見Two-stage目標(biāo)檢測算法有:R-CNN、Fast R-CNN、Faster R-CNN、SPP-Net 和 R-FCN 等。

One-stage

直接用網(wǎng)絡(luò)提取圖像特征來預(yù)測物體位置和分類,因此不需要 RP。

任務(wù)流程:特征提取–> 分類/定位回歸。

常見的One-stage目標(biāo)檢測算法有:YOLO 系列、SSD 和 RetinaNet 等。不過,為了得到最終目標(biāo)的定位和分類,往往需要后處理。

本篇主要來看 YOLO 系列中的 v3 版本。

2基本原理

首先,我們先從整體上來看一下 YOLO v3 是如何工作的。YOLO v3 算法通過將圖像劃分為個網(wǎng)格(grid)單元來工作,每個網(wǎng)格單元具有相同大小的區(qū)域。這個網(wǎng)格單元中的每一個都負(fù)責(zé)對包含該網(wǎng)格的目標(biāo)的檢測和定位。

相應(yīng)地,這些網(wǎng)格預(yù)測個相對于它們所在單元格的包圍盒相對坐標(biāo),以及目標(biāo)標(biāo)簽和目標(biāo)出現(xiàn)在單元格中的概率。

由于網(wǎng)格的分辨率比起原圖來說已經(jīng)大大降低,而檢測和識別步驟都是針對網(wǎng)格單元來處理的,因此這個方案大大降低了計(jì)算量。但是,由于多個單元格用不同的包圍盒來預(yù)測同一個對象,因此會帶來了很多重復(fù)的預(yù)測框。YOLO v3 使用非最大值抑制(Non-Maximum Suppression,NMS)來處理這個問題。

下圖給出了一個例子,展示了當(dāng)時的個網(wǎng)格以及由此檢測圖中目標(biāo)的大致流程。會涉及很多個包圍盒,最后選出三個包圍盒來定位和識別目標(biāo)。

6d1e8a14-cd42-11ec-bce3-dac502259ad0.png

另外,為了兼顧圖像中各種尺度的目標(biāo),可以使用多個不同分辨率的個網(wǎng)格。很快將會看到,YOLO v3 中使用了 3 個尺度。

3總體架構(gòu)

先看一下網(wǎng)絡(luò)架構(gòu),注意它有三個不同分辨率的輸出分支。

6d431ae6-cd42-11ec-bce3-dac502259ad0.png

從 Yolo v3 的流程圖可以看到,總共有 106 層,實(shí)現(xiàn)了對每張圖像在大、中、小三個尺度上檢測目標(biāo)。這個網(wǎng)格有三個出口,分別是 82 層、94 層、106 層。

下面看一下更加詳細(xì)的網(wǎng)絡(luò)架構(gòu)圖,注意有三個檢測結(jié)果(Detection Result)。

6d563928-cd42-11ec-bce3-dac502259ad0.png

上圖左邊是 DarkNet-53,是一個深度為 53 層的卷積神經(jīng)網(wǎng)絡(luò),具體的殘差塊和卷積層如下圖所示。

6d6afa0c-cd42-11ec-bce3-dac502259ad0.png

輸入圖像通過 Darknet 得到三個尺度的特征圖,從上往下為(52×52×256), (26×26×512), (13×13×1024),也就是在三種尺度上進(jìn)行以便檢測到不同大小的目標(biāo)。也可以結(jié)合下面這個更加精煉圖來理解。

6da32ff8-cd42-11ec-bce3-dac502259ad0.png

4關(guān)鍵步驟

目標(biāo)檢測也可以看作是對圖像中的背景和前景作某種理解分析,即從圖像背景中分離出感興趣的目標(biāo),得到對于目標(biāo)的描述<位置,類別>。

由于可能有多個目標(biāo)存在,模型輸出是一個列表,包含目標(biāo)的位置以及目標(biāo)的類別。目標(biāo)位置一般用矩形檢測框(包圍盒)的中心和寬高來表示。

?模型輸出值

分辨率最低的輸出分支對應(yīng)的結(jié)果是,下圖展示了在特征圖上的檢測結(jié)果,特征圖上的一個像素對應(yīng)一個網(wǎng)格,每個網(wǎng)格會有 3 個預(yù)測框,每個預(yù)測框具有(5 + C)個值,其中前 5 個數(shù)對應(yīng)包圍盒的位置以及屬于目標(biāo)的可能性,C 表示類別數(shù)。

6db94d7e-cd42-11ec-bce3-dac502259ad0.png

具體來看,最后輸出的結(jié)果為:每個網(wǎng)格單元對應(yīng)一個維向量,表示一個網(wǎng)格可以預(yù)測包圍盒的數(shù)目,上面已經(jīng)說了,個數(shù)值中的前個對應(yīng)包圍盒的中心位子和寬高值和個目標(biāo)置信度。

這個結(jié)果的含義大致清楚了,但是還有個小問題,就是這個輸出是根據(jù)什么信息計(jì)算而來呢?

如下圖所示,在前一層得到的特征圖上再接一個核大小為的卷積層得到最終的輸出,即由每個網(wǎng)點(diǎn)的特征向量(1024 維)轉(zhuǎn)化為我們需要的輸出,即包圍盒、目標(biāo)置信度以及類別信息。

6dcd969e-cd42-11ec-bce3-dac502259ad0.png

上面說了,在這個尺度上會檢測 3 個預(yù)測框,把它們拼接在一起,得到完整的結(jié)果示意圖如下。

6e22d686-cd42-11ec-bce3-dac502259ad0.png

另外兩個尺度上類似,它們對應(yīng)的分支輸出如下兩個圖所示。

6e43f1cc-cd42-11ec-bce3-dac502259ad0.png

網(wǎng)絡(luò)會在 3 個尺度上分別檢測,每個尺度上每個網(wǎng)格點(diǎn)都預(yù)設(shè) 3 個包圍盒,所以整個網(wǎng)絡(luò)共檢測到13×13×3 + 26×26×3 + 52×52×3 = 10647個包圍盒。

那么這里的 3 個預(yù)設(shè)包圍盒又是怎么回事呢?

其實(shí)每個網(wǎng)格單元可以對目標(biāo)的包圍盒進(jìn)行一定數(shù)量的猜測,比如下圖中的示例,黃色網(wǎng)格單元進(jìn)行兩次包圍盒(藍(lán)色框)預(yù)測以定位人的位置。

6e59c45c-cd42-11ec-bce3-dac502259ad0.png

而 YOLO v3 中采用3 個預(yù)設(shè)包圍盒,但值得注意的是這里限定只能檢測同一個目標(biāo)。

?先驗(yàn)包圍盒

還有一個問題,每個網(wǎng)格對應(yīng)的包圍盒怎么取呢?理論上,包圍盒可以各種各樣,但是這樣的話就需要大量計(jì)算。

為了節(jié)省計(jì)算,不妨預(yù)先了解一下在圖像中出現(xiàn)的目標(biāo)一般具有怎么樣的包圍盒??梢酝ㄟ^在數(shù)據(jù)集 VOC 和 COCO 上使用聚類法尋找一般目標(biāo)的包圍盒尺寸。

6e8018fa-cd42-11ec-bce3-dac502259ad0.png

在包圍盒的維度上運(yùn)行 k-means 聚類,以獲得良好先驗(yàn)。左圖顯示了我們在選擇時得到的平均 IOU。在 YOLO v2 中,作者選擇,此時在模型的召回率與復(fù)雜性之間具有較好的平衡。右圖顯示了 VOC 和 COCO 的相對質(zhì)心。兩組先驗(yàn)都傾向于更薄、更高的盒子,而 COCO 的尺寸變化比 VOC 更大。

而在 YOLO v3 中,通過聚類選出了個先驗(yàn)包圍盒:(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)。

?包圍盒預(yù)測

有了預(yù)設(shè)的先驗(yàn)包圍盒,怎么來計(jì)算實(shí)際包圍盒呢?總不能直接套到每個網(wǎng)格單元處就完事了吧。

YOLO v3 引入一個機(jī)制,可以適當(dāng)調(diào)整預(yù)設(shè)包圍盒來生成實(shí)際的包圍盒。下圖中的公式將網(wǎng)絡(luò)輸出值轉(zhuǎn)換得到實(shí)際的包圍盒信息。

6e93df66-cd42-11ec-bce3-dac502259ad0.png

或者參考下圖,

6ea617a8-cd42-11ec-bce3-dac502259ad0.png

預(yù)測出包圍盒中心點(diǎn)相對于網(wǎng)格單元左上角的相對坐標(biāo)。通過和可以將包圍盒中心點(diǎn)限制于網(wǎng)格單元內(nèi)。另外,為了得到訓(xùn)練數(shù)據(jù)的值,只需要反算即可。

?包圍盒后處理

YOLO v3 模型的輸出并沒有直接給出包含目標(biāo)的包圍盒,而是包含所有網(wǎng)格單元對應(yīng)結(jié)果的張量,因此需要一些后處理步驟來獲得結(jié)果。

首先,需要根據(jù)閾值和模型輸出的目標(biāo)置信度來淘汰一大批包圍盒。而剩下的包圍盒中很可能有好幾個圍繞著同一個目標(biāo),因此還需要繼續(xù)淘汰。這時候就要用到非極大值抑制(Non-Maximum Suppression,NMS),顧名思義就是抑制不是極大值的元素,可以認(rèn)為求局部最優(yōu)解。用在此處的基本思路就是選擇目標(biāo)置信度最大的包圍盒,然后排除掉與之 IoU 大于某個閾值的附近包圍盒。

6ebb56c2-cd42-11ec-bce3-dac502259ad0.png

而兩個包圍盒的 IoU 計(jì)算如下,

6ed5e5a0-cd42-11ec-bce3-dac502259ad0.png

?損失函數(shù)

由于網(wǎng)絡(luò)的輸出值比較多,因此損失函數(shù)也具有很多項(xiàng),但總體還是清晰的,這里不作展開。

5實(shí) 驗(yàn)

網(wǎng)上基于PyTorch[1]或者TF[2]等庫的 YOLO v3 實(shí)現(xiàn)版本很多,可以直接拿來把玩。下面是網(wǎng)上隨手下載的幾個圖像的測試結(jié)果,看著效果是不是還可以呢。

6ef1b14a-cd42-11ec-bce3-dac502259ad0.png

6f111e22-cd42-11ec-bce3-dac502259ad0.png

6f375f10-cd42-11ec-bce3-dac502259ad0.png

6f71364a-cd42-11ec-bce3-dac502259ad0.png

6小 結(jié)

先回顧下面這個圖,看看是否了解每個步驟的含義。

6f990ce2-cd42-11ec-bce3-dac502259ad0.png

然后再用一個圖來總結(jié)一下流程,

6fb8aeee-cd42-11ec-bce3-dac502259ad0.png

接下來根據(jù)輸出的目標(biāo)置信度淘汰一大批包圍盒,在使用非極大值抑制繼續(xù)淘汰一批,最后剩下檢測到的目標(biāo),下圖是這些步驟的簡化版本演示圖。

70109de8-cd42-11ec-bce3-dac502259ad0.png

參考代碼

[1]

PyTorch 實(shí)現(xiàn):https://github.com/eriklindernoren/PyTorch-YOLOv3

[2]

TensorFlow 實(shí)現(xiàn):https://machinelearningmastery.com/how-to-perform-object-detection-with-yolov3-in-keras/

審核編輯 :李倩

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

原文標(biāo)題:圖解目標(biāo)檢測算法之 YOLO

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

收藏 人收藏

    評論

    相關(guān)推薦

    廣和通推出多功能AI紅外相機(jī)解決方案,賦能多領(lǐng)域AI發(fā)展

    檢測 該解決方案內(nèi)置廣和通目標(biāo)檢測算法,可高效解決野外偏遠(yuǎn)地區(qū)目標(biāo)檢測存在的極端光線、環(huán)境背景復(fù)雜、
    的頭像 發(fā)表于 01-15 15:36 ?60次閱讀
    廣和通推出多功能AI紅外相機(jī)解決方案,賦能多領(lǐng)域AI發(fā)展

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

    一、前言 1.1 開發(fā)需求 這篇文章講解:?采用華為云最新推出的 Flexus 云服務(wù)器 X 實(shí)例部署 YOLOv3 算法,完成圖像分析、目標(biāo)檢測。 隨著計(jì)算機(jī)視覺技術(shù)的飛速發(fā)展,深度學(xué)習(xí)模型如
    的頭像 發(fā)表于 01-02 12:00 ?92次閱讀
    采用華為云 Flexus 云服務(wù)器 X 實(shí)例部署 YOLOv3 <b class='flag-5'>算法</b>完成<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>

    AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測模型

    并非易事,它涉及到從選擇合適的算法架構(gòu)到針對特定硬件平臺進(jìn)行優(yōu)化等一系列復(fù)雜的工作。 接下來,我們將詳細(xì)介紹如何在資源受限的邊緣設(shè)備上成功部署目標(biāo)檢測模型,探索其背后的原理和技術(shù),并討
    發(fā)表于 12-19 14:33

    如何制定一套優(yōu)質(zhì)的工業(yè)視覺檢測算法方案?

    在現(xiàn)代工業(yè)生產(chǎn)中,視覺檢測技術(shù)的應(yīng)用正變得越來越廣泛,它在提高產(chǎn)品質(zhì)量、優(yōu)化生產(chǎn)流程方面發(fā)揮著至關(guān)重要的作用。然而,與人臉識別、交通監(jiān)控、安防監(jiān)控等應(yīng)用場景相比,工業(yè)視覺檢測項(xiàng)目的場景更為特殊,它
    的頭像 發(fā)表于 11-14 01:05 ?705次閱讀
    如何制定一套優(yōu)質(zhì)的工業(yè)視覺<b class='flag-5'>檢測算法</b>方案?

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

    目標(biāo)檢測在計(jì)算機(jī)視覺領(lǐng)域中具有重要意義。YOLOv5(You Only Look One-level)是目標(biāo)檢測算法中的一種代表性方法,以其高效性和準(zhǔn)確性備受關(guān)注,并且在各種
    的頭像 發(fā)表于 11-11 10:38 ?1279次閱讀
    在樹莓派上部署YOLOv5進(jìn)行動物<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>的完整<b class='flag-5'>流程</b>

    旗晟機(jī)器人環(huán)境檢測算法有哪些?

    硬件支撐,更離不開強(qiáng)大的算法庫作為軟件核心,二者相輔相成,缺一不可。今天就來了解旗晟機(jī)器人環(huán)境檢測算法。 1、設(shè)施異常監(jiān)測 通過集成高精度傳感器與智能圖像識別技術(shù)。它不僅能檢測A字梯是否存在變形,還能精確評估梯腳
    的頭像 發(fā)表于 07-19 17:54 ?554次閱讀
    旗晟機(jī)器人環(huán)境<b class='flag-5'>檢測算法</b>有哪些?

    慧視小目標(biāo)識別算法 解決目標(biāo)檢測中的老大難問題

    隨著深度學(xué)習(xí)和人工智能技術(shù)的興起與技術(shù)成熟,一大批如FasterR-CNN、RetinaNet、YOLO等可以在工業(yè)界使用的目標(biāo)檢測算法已逐步成熟并進(jìn)入實(shí)際應(yīng)用,大多數(shù)場景下的目標(biāo)檢測
    的頭像 發(fā)表于 07-17 08:29 ?538次閱讀
    慧視小<b class='flag-5'>目標(biāo)</b>識別<b class='flag-5'>算法</b>   解決<b class='flag-5'>目標(biāo)</b><b class='flag-5'>檢測</b>中的老大難問題

    基于深度學(xué)習(xí)的小目標(biāo)檢測

    在計(jì)算機(jī)視覺領(lǐng)域,目標(biāo)檢測一直是研究的熱點(diǎn)和難點(diǎn)之一。特別是在小目標(biāo)檢測方面,由于小目標(biāo)在圖像中所占比例小、特征不明顯,使得
    的頭像 發(fā)表于 07-04 17:25 ?987次閱讀

    bp神經(jīng)網(wǎng)絡(luò)算法的基本流程包括哪些

    BP神經(jīng)網(wǎng)絡(luò)算法,即反向傳播神經(jīng)網(wǎng)絡(luò)算法,是一種常用的多層前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法。它通過反向傳播誤
    的頭像 發(fā)表于 07-04 09:47 ?704次閱讀

    BP神經(jīng)網(wǎng)絡(luò)算法的基本流程包括

    、自然語言處理等。本文將詳細(xì)介紹BP神經(jīng)網(wǎng)絡(luò)算法的基本流程,包括網(wǎng)絡(luò)結(jié)構(gòu)、激活函數(shù)、前向傳播、反向傳播、權(quán)重更新和訓(xùn)練過程等。 網(wǎng)絡(luò)結(jié)構(gòu) B
    的頭像 發(fā)表于 07-03 09:52 ?549次閱讀

    口罩佩戴檢測算法

    口罩佩戴檢測算法基于YOLOv5在圖像識別檢測領(lǐng)域的優(yōu)異性能,本文研究基于基于YOLOv5的口罩佩自動戴檢測方法。首先從網(wǎng)絡(luò)和真實(shí)生活中中尋找并采集不同場景人群口罩佩戴的圖片約500張
    的頭像 發(fā)表于 07-01 20:20 ?343次閱讀
    口罩佩戴<b class='flag-5'>檢測算法</b>

    人員跌倒識別檢測算法

    人員跌倒識別檢測算法是基于視頻的檢測方法,通過對目標(biāo)人體監(jiān)測,當(dāng)目標(biāo)人體出現(xiàn)突然倒地行為時,自動監(jiān)測并觸發(fā)報(bào)警。人員跌倒識別檢測算法基于計(jì)算
    的頭像 發(fā)表于 06-30 11:47 ?483次閱讀
    人員跌倒識別<b class='flag-5'>檢測算法</b>

    安全帽佩戴檢測算法

    安全帽佩戴監(jiān)控是鐵路工程施工人員安全管理中的重點(diǎn)和難點(diǎn),它對檢測算法的準(zhǔn)確 率與檢測速度都有較高的要求。本文提出一種基于神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索的安全帽佩戴
    的頭像 發(fā)表于 06-26 22:22 ?425次閱讀
    安全帽佩戴<b class='flag-5'>檢測算法</b>

    咳嗽檢測深度神經(jīng)網(wǎng)絡(luò)算法

    [10]。許多咳嗽檢測算法在臨床行業(yè)中流行,用于識別和檢測咳嗽聲音,以獲得有價(jià)值的見解。但是,從實(shí)時音頻流中檢測咳嗽的方法仍然很少。醫(yī)生利用咳嗽聲和非咳嗽聲的良好辨別性[11]有助于早期診斷慢性咳嗽
    發(fā)表于 05-15 19:05

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

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