日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Coursera自动驾驶课程第11讲:2D Object Detection

發(fā)布時(shí)間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Coursera自动驾驶课程第11讲:2D Object Detection 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在上一講《Coursera自動(dòng)駕駛課程第10講:Feedforward Neural Networks》中我們學(xué)習(xí)了神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識(shí),包括損失函數(shù),梯度下降,正則化,卷積網(wǎng)絡(luò)等。

本講我們將學(xué)習(xí)深度學(xué)習(xí)的一個(gè)重要應(yīng)用:圖像目標(biāo)檢測(cè)。目前3D目標(biāo)檢測(cè)也是一個(gè)研究很火的領(lǐng)域,感興趣的朋友可以查看相關(guān)論文。

本講對(duì)應(yīng)視頻:

  • The Object Detection Problem(Video)
  • 2D Object detection with Convolutional Neural Networks(Video)
  • Training vs Inference (Video)
  • Using 2D Object Detectors for Self-Driving Cars(Video)

文章目錄

      • 1. The Object Detection Problem
        • 1.1 Overview
        • 1.2 Mathematical Problem Formulation
        • 1.3 Evaluation Metrics
      • 2. 2D Object detection with Convolutional Neural Networks
        • 2.1 Overview
        • 2.2 The Feature Extractor
        • 2.3 Anchor Bounding Boxes
        • 2.4 Output Layers
      • 3. Training vs Inference
        • 3.1 Overview
        • 3.2 Minibatch Selection
        • 3.3 Non-Maximum Suppression
      • 4. Using 2D Object Detectors for Self-Driving Cars
        • 4.1 3D Object Detection
        • 4.2 2D Object Tracking
        • 4.3 Traffic sign and signal detection


1. The Object Detection Problem

1.1 Overview

本講,我們將深入研究目標(biāo)檢測(cè),在目標(biāo)檢測(cè)中通常需要識(shí)別車輛、行人、交通信號(hào)燈等的位置,以便我們的汽車知道它在哪里以及如何去駕駛汽車。

2D目標(biāo)檢測(cè)的歷史可以追溯到2001年,當(dāng)時(shí)Paul Viola和Michael Jones發(fā)明了一種非常有效的人臉檢測(cè)算法?,F(xiàn)在稱為Viola,Jones目標(biāo)檢測(cè)框架,是第一個(gè)可通過簡(jiǎn)單的網(wǎng)絡(luò)攝像頭提供可靠實(shí)時(shí)2D目標(biāo)檢測(cè)的目標(biāo)檢測(cè)框架。物體檢測(cè)的下一個(gè)重大突破發(fā)生在四年后,Navneet Dalal和Bill Triggs制定了有向梯度特征描述的直方圖。算法應(yīng)用于行人檢測(cè)問題,其性能優(yōu)于當(dāng)時(shí)提出的所有其他方法。

Dalal Triggs算法一直保持領(lǐng)先地位,直到2012年,多倫多大學(xué)計(jì)算機(jī)科學(xué)系的Alex Krizhevsky,Ilya Sutskever和Geoffrey Hinton以其被稱為AlexNet的卷積神經(jīng)網(wǎng)絡(luò)震撼了計(jì)算機(jī)視覺世界。這是深度學(xué)習(xí)歷史上的一個(gè)里程碑事件,而當(dāng)今的所有目標(biāo)檢測(cè)器幾乎都是基于卷積神經(jīng)網(wǎng)絡(luò)。在介紹如何使用ConvNets進(jìn)行目標(biāo)檢測(cè)之前,我們先介紹什么是目標(biāo)檢測(cè)?


1.2 Mathematical Problem Formulation

給定一張二維圖像,我們需要估計(jì)目標(biāo)所屬邊界框的位置以及目標(biāo)類別。對(duì)于自動(dòng)駕駛汽車,常見的類別有車輛,行人和騎自行車的人。

2D目標(biāo)檢測(cè)問題并非十分容易。我們需要估計(jì)的目標(biāo)在圖像中并不總是能夠被觀察到。

  • 例如,背景目標(biāo)通常被前景目標(biāo)遮擋。
  • 此外,靠近圖像邊緣的目標(biāo)通常會(huì)被截?cái)唷?/li>

二維目標(biāo)檢測(cè)算法面臨的另一個(gè)問題是規(guī)模問題。當(dāng)物體遠(yuǎn)離我們時(shí),目標(biāo)看起來很渺小。最后,我們的算法還應(yīng)該能夠處理圖像光亮變化,這在自動(dòng)駕駛汽車中尤其重要。

既然我們已經(jīng)直觀地了解了什么是目標(biāo)檢測(cè),那么讓我們用數(shù)學(xué)的形式對(duì)問題進(jìn)行形式化。 目標(biāo)檢測(cè)可以定義為特征估計(jì)問題。 給定一個(gè)輸入圖像xxx,我們想找到一個(gè)函數(shù)fff,產(chǎn)生一個(gè)輸出矢量,其中包括左上角的坐標(biāo)(xmin,ymin)(x_{min},y_{min})(xmin?ymin?)以及框右下角的坐標(biāo) (xmax,ymax)(x_{max},y_{max})(xmax?ymax?),以及從Sclass1S_{class1}Sclass1?SclasskS_{classk}Sclassk?的類得分??偨Y(jié)下,函數(shù)形式為:
f(x;θ)=[xmin?,ymin?,xmax?,ymax?,Sclass?1…,Sclass?k]f(x ; \theta)=\left[x_{\min }, y_{\min }, x_{\max }, y_{\max }, S_{\text {class }_{1}} \ldots, S_{\text {class }_{k}}\right]f(x;θ)=[xmin?,ymin?,xmax?,ymax?,Sclass?1??,Sclass?k??]


1.3 Evaluation Metrics

現(xiàn)在介紹一些2D目標(biāo)檢測(cè)常用的評(píng)價(jià)指標(biāo)。

第一個(gè)是IOU。給定紅色的2D目標(biāo)檢測(cè)器的預(yù)測(cè)邊界框,我們希望能夠比較它與真實(shí)邊界框的匹配程度。 IOU定義為兩個(gè)多邊形相交的面積除以它們的并集面積。

下面是一些分類預(yù)測(cè)的評(píng)價(jià)指標(biāo):

  • 真陽性(TP),預(yù)測(cè)分類得分超過分類閾值,且IOU超過IOU閾值。
  • 假陽性(FP),預(yù)測(cè)分類得分超過分類閾值,但I(xiàn)OU小于IOU閾值。
  • 假陰性(FN)。假陰性是沒有被檢測(cè)出的真值目標(biāo)。

一旦我們確定了真陽性,假陽性和假陰性;我們可以根據(jù)以下內(nèi)容確定2D目標(biāo)檢測(cè)器的精確率和召回率。
精確率是真陽性數(shù)量除以真陽性和假陽性之和:
TP/(TP+FP)\mathrm{TP} /(\mathrm{TP}+\mathrm{FP})TP/(TP+FP)

另一方面,召回率是真陽性數(shù)量除以真陽性和假陰性之和:
TP/(TP+FN)\mathrm{TP} /(\mathrm{TP}+\mathrm{FN})TP/(TP+FN)

確定精確率和召回率之后,我們可以更改目標(biāo)類別得分閾值以獲取精度召回曲線,最后,將平均精度確定為精度召回曲線下的面積。 曲線下的面積可以使用數(shù)值積分來計(jì)算,但通常使用·11個(gè)召回點(diǎn)的精確率的平均值來近似。

讓我們通過一個(gè)示例來研究如何使用學(xué)習(xí)的指標(biāo)評(píng)估2D目標(biāo)檢測(cè)的性能。我們對(duì)僅道路場(chǎng)景中的汽車感興趣。

現(xiàn)在讓我們使用平均精度來評(píng)估性能。第一步是獲取所有估計(jì)的邊界框,并根據(jù)目標(biāo)類別得分對(duì)其進(jìn)行排序。然后,我們繼續(xù)計(jì)算每個(gè)預(yù)測(cè)框與相應(yīng)的真實(shí)框之間的IOU。如果不與任何真實(shí)框相交,則將其IOU設(shè)置為零。首先,我們說明分類分?jǐn)?shù)的門檻,比如說0.9。接下來,我們?cè)O(shè)置IOU閾值,IOU閾值為0.7。最終真陽性數(shù)量為2,假陽性數(shù)量為0,假陰性數(shù)量為2。精確率為1,召回率為0.5。在這種情況下,檢測(cè)器是高精度低召回率檢測(cè)器。這意味著檢測(cè)器會(huì)錯(cuò)過場(chǎng)景中的某些目標(biāo),但是當(dāng)它確實(shí)檢測(cè)到目標(biāo)時(shí),在類別分類和邊界框位置上幾乎不會(huì)犯錯(cuò)誤。

讓我們看看將分?jǐn)?shù)閾值從0.9降低到0.7時(shí)檢測(cè)器的性能如何變化。所有邊界框的得分均大于0.7,因此我們不會(huì)通過得分閾值消除它們中的任何一個(gè)。但是,當(dāng)我們檢查IOU時(shí),可以看到其中兩個(gè)的IOU小于0.7。通過消除這兩個(gè)方框,我們得到了三個(gè)真實(shí)的的預(yù)測(cè)。在這種情況下,精度降低了,而召回率從0.5增加到0.75。

如果我們繼續(xù)此過程,則會(huì)得到下表。然后,我們使用yyy軸上的精度值和xxx軸上的召回值來繪制精度召回曲線。請(qǐng)注意,我們還將精度召回點(diǎn)0添加為繪圖中的第一個(gè)點(diǎn),找回點(diǎn)1作為繪圖中的最后點(diǎn)。這使我們可以通過使用介于0和1之間的11個(gè)召回點(diǎn)以計(jì)算P-R曲線下方的面積來近似平均精度。計(jì)算此平均值得出檢測(cè)器的AP為0.75??梢詫z測(cè)器的平均精度值視為所有得分閾值上的性能平均值,從而可以客觀比較檢測(cè)器的性能,而不必考慮產(chǎn)生這些檢測(cè)的確切得分閾值。


2. 2D Object detection with Convolutional Neural Networks

2.1 Overview

讓我們首先回顧2D目標(biāo)檢測(cè)問題。 給定一張圖像作為輸入,我們希望同時(shí)定位場(chǎng)景中的所有目標(biāo)并確定它們屬于哪個(gè)類。 讓我們看看如何使用ConvNet執(zhí)行此任務(wù)。

下圖顯示了用于2D目標(biāo)檢測(cè)的基本流程。

  • 首先,使用特征提取器處理圖像提取特征。
  • 其次,輸出層將特征提取器的輸出作為輸入,同時(shí)提供每個(gè)2D先驗(yàn)boxes的位置及分類。
  • 最后,對(duì)輸出執(zhí)行非極大值抑制以生成最終檢測(cè)結(jié)果。

2.2 The Feature Extractor

下面我們先介紹特征提取器。特征提取器的輸出通常比輸入圖像的寬度和高度小得多。 但是,其深度通常比輸入圖像的深度大兩到三個(gè)數(shù)量級(jí)。 特征提取器的設(shè)計(jì)是一個(gè)非常受歡迎的領(lǐng)域,每年都有很多新的論文介紹如何提取圖像特征。 最常用的特征提取器有VGG,ResNet和Inception。 下面我們將介紹VGG網(wǎng)絡(luò)。

VGG是英國(guó)牛津大學(xué)視覺幾何小組提出的VGG 16分類網(wǎng)絡(luò)(簡(jiǎn)稱VGG16)。網(wǎng)絡(luò)結(jié)構(gòu)構(gòu)成非常簡(jiǎn)單,與大多數(shù)ConvNet一樣,VGG特征提取器由交替的卷積層和池化層構(gòu)建而成。所有卷積層的大小為(3,3,k)(3,3,k)(33k),步幅為1,填充為1。所有最大池化層的大小為(2,2)(2,2)(22),步幅為2,無填充。這些特定的超參數(shù)是通過大量實(shí)驗(yàn)得出的。

對(duì)于VGG特征提取器,所有卷積層的大小為(3,3,k)(3,3,k)(33k),步幅為1,填充為1。卷積后其輸出維度為:
Wout?=Win??m+2×PS+1=Hin??3+2×11+1=Win?Hout?=Hin??m+2×Ps+1=Hin??3+2×11+1=Hin?Dout?=KW_{\text {out }}=\frac{W_{\text {in }}-m+2 \times P}{S}+1=\frac{H_{\text {in }}-3+2 \times 1}{1}+1=W_{\text {in }} \\\boldsymbol{H}_{\text {out }}=\frac{H_{\text {in }}-m+2 \times P}{s}+1=\frac{H_{\text {in }}-3+2 \times 1}{1}+1=H_{\text {in }} \\\boldsymbol{D}_{\text {out }}=KWout??=SWin???m+2×P?+1=1Hin???3+2×1?+1=Win??Hout??=sHin???m+2×P?+1=1Hin???3+2×1?+1=Hin??Dout??=K

另一方面,VGG最大池化層步幅為2,沒有填充。注意到VGG的最大池層將輸入的寬度和高度減小了一半,同時(shí)保持深度不變。其輸出維度為:
Wout=Win?ms+1=Win?22+1=Win2Hout=Hin?ms+1=Hin?22+1=Hin2Dout=DinW_{o u t}=\frac{W_{i n}-m}{s}+1=\frac{W_{i n}-2}{2}+1=\frac{W_{i n}}{2}\\H_{o u t}=\frac{H_{i n}-m}{s}+1=\frac{H_{i n}-2}{2}+1=\frac{H_{i n}}{2}\\ D_{o u t}=D_{i n}Wout?=sWin??m?+1=2Win??2?+1=2Win??Hout?=sHin??m?+1=2Hin??2?+1=2Hin??Dout?=Din?

現(xiàn)在讓我們看看VGG如何處理輸入圖像。給定一個(gè)維度為(M,N,3)(M,N,3)(M,N,3)的圖像,前兩個(gè)卷積層深度為64,然后是第一個(gè)池化層。此時(shí),輸出的寬度和高度將減小一半,而深度將擴(kuò)展到64,下圖是經(jīng)過每一個(gè)卷積層后最終輸出的特征維度。


例如,如果我們有一個(gè)(1240,960,3)(1240,960,3)(1240,960,3)的圖像作為輸入,那么我們的最終輸出維度為(40,30,512)(40,30,512)(40,30,512)。


2.3 Anchor Bounding Boxes

在我們的神經(jīng)網(wǎng)絡(luò)架構(gòu)中要描述的下一步是Anchor Bbox的概念,也稱為錨框。為了生成2D邊界框,我們通常不會(huì)從頭開始,并且在沒有任何先驗(yàn)的情況下估計(jì)邊界框的大小。我們假設(shè)我們已知目標(biāo)的大致尺寸,這些先驗(yàn)稱為錨框。

在訓(xùn)練過程中,網(wǎng)絡(luò)學(xué)會(huì)獲取這些錨點(diǎn)中的每一個(gè),并嘗試將其在質(zhì)心位置和尺寸上都盡可能靠近真值框。它利用了這樣的概念:通過對(duì)錨盒進(jìn)行微調(diào),而不是在整個(gè)圖像中搜索可能的物體位置。在實(shí)踐中,事實(shí)證明,與沒有任何先驗(yàn)直接估計(jì)邊界框相比,殘差學(xué)習(xí)可提供更好的結(jié)果。

關(guān)于如何使用錨框來生成最終預(yù)測(cè),相關(guān)文獻(xiàn)中已經(jīng)提出了許多不同的方法。這里以Faster-RCNN為例。Faster R-CNN方法非常簡(jiǎn)單。 對(duì)于特征圖中的每個(gè)像素,我們將kkk個(gè)錨框關(guān)聯(lián)起來。 然后,在該像素鄰域上執(zhí)行(3,3,D)(3,3,D)(3,3,D)的卷積運(yùn)算。 這將為該像素生成一個(gè)(1,1,D)(1,1,D)(1,1,D)維特征向量。 我們將此(1,1,D)(1,1,D)(1,1,D)維特征向量一一用作與該像素關(guān)聯(lián)的kkk個(gè)錨點(diǎn)中每一個(gè)的特征向量。 然后,我們將提取的特征向量饋入神經(jīng)網(wǎng)絡(luò)的輸出層。


2.4 Output Layers

二維物體檢測(cè)器的輸出層通常包括回歸頭和分類頭。

  • 回歸頭通常包括具有線性輸出層的多個(gè)完全連接的隱藏層?;貧w的輸出通常是殘差向量[Δxcenter?,Δycenter?]\left[\Delta x_{\text {center }}, \Delta y_{\text {center }}\right][Δxcenter??,Δycenter??],需要將其添加到錨點(diǎn)上才能錨框的中心位置。然后這里fw,fhf_w,f_hfw?,fh?是錨框大小的比例。
  • 分類頭還包括多個(gè)完全連接的隱藏層,但具有最終的softmax輸出層。 softmax輸出是每個(gè)類只有一個(gè)分?jǐn)?shù)的向量。最高分?jǐn)?shù)通常為錨框的所屬類別。

回想一下,我們的目標(biāo)是實(shí)現(xiàn)準(zhǔn)確的檢測(cè),這意味著我們希望圖像中每個(gè)目標(biāo)只輸出一個(gè)Bbox。因此,我們將需要采取一些措施來消除網(wǎng)絡(luò)產(chǎn)生的冗余檢測(cè)。在下一小節(jié)我們將會(huì)介紹非極大值抑制,它能很好的解決這個(gè)問題。


3. Training vs Inference

3.1 Overview

讓我們從回顧神經(jīng)網(wǎng)絡(luò)訓(xùn)練開始。 已知網(wǎng)絡(luò)模型和訓(xùn)練數(shù)據(jù):圖像xxx和其標(biāo)簽f?(x)f^*(x)f?(x),最終輸出為邊界框位置和目標(biāo)所屬分類。

我們的目標(biāo)是希望輸出yyy近似等于標(biāo)簽f?(x)f ^*(x)f?(x)。 我們借助損失函數(shù)來進(jìn)行優(yōu)化,損失函數(shù)測(cè)量了預(yù)測(cè)邊界框與真值邊界框的相近程度。 然后,我們將損失函數(shù)的結(jié)果傳遞給優(yōu)化器,該優(yōu)化器輸出一組新的參數(shù)θ\thetaθ,用于后面的迭代運(yùn)算。 注意,在訓(xùn)練期間,特征提取器和輸出層將會(huì)均被修改。但是在下圖中我們看到,每個(gè)目標(biāo)對(duì)應(yīng)輸出并不是一個(gè)邊界框,而我們希望得到的是一個(gè)邊界框,下面我們將介紹如何解決這個(gè)問題。


3.2 Minibatch Selection

請(qǐng)記住,對(duì)于特征圖中的每個(gè)像素,我們會(huì)關(guān)聯(lián)kkk個(gè)錨點(diǎn)。這些錨點(diǎn)在原始圖像中會(huì)出現(xiàn)在哪里呢?正如我們先前所了解的那樣,特征提取器將輸入圖像維度降低了32倍。這意味著,如果我們將特征圖中的每個(gè)像素與一組錨點(diǎn)相關(guān)聯(lián),這些錨點(diǎn)將被轉(zhuǎn)移到原始圖像上通過將它們放在步幅為32的網(wǎng)格上。然后,我們可以可視化這些錨點(diǎn)旁邊的真值邊界框和錨盒。注意到這里錨盒會(huì)重疊,有些沒有重疊。

我們用IOU量化這種重疊,并將錨點(diǎn)分為兩類。我們首先指定兩個(gè)IOU閾值,一個(gè)正閾值和一個(gè)負(fù)閾值。 IOU大于正閾值的任何錨盒稱為正錨盒。同樣,任何IOU小于負(fù)閾值的錨盒都稱為負(fù)錨盒。 IOU在兩個(gè)閾值之間的所有錨盒都將被完全丟棄。那么現(xiàn)在,我們?nèi)绾卧谟?xùn)練中使用這些正的和負(fù)的錨盒呢?

現(xiàn)在讓我們看看如何為正錨盒和負(fù)錨盒分配分類和回歸目標(biāo)。

  • 對(duì)于負(fù)錨盒:我們希望神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)其類別為背景類別,對(duì)于回歸,我們不進(jìn)行邊界框預(yù)測(cè)。
  • 對(duì)于正錨盒:我們希望神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)一個(gè)正確的類別,同時(shí),我們也會(huì)輸出一個(gè)邊界框。

在訓(xùn)練期間處理多個(gè)錨盒的方法并非容易。提出的IOU閾值機(jī)制會(huì)導(dǎo)致大多數(shù)錨盒被判為負(fù)錨盒。當(dāng)用所有這些錨點(diǎn)進(jìn)行訓(xùn)練時(shí),模型將會(huì)產(chǎn)生類偏斜現(xiàn)象。解決這個(gè)問題的方法實(shí)際上非常簡(jiǎn)單,我們不是使用所有錨盒來計(jì)算損失函數(shù),而是使用負(fù)錨盒與正錨盒的比例為三比一的樣本對(duì)選定的小批量樣本進(jìn)行采樣。

例如,如果我們有64個(gè)示例的小批量,則負(fù)錨盒將是分類損失最高的48個(gè)負(fù)錨盒,剩下的16個(gè)錨盒將是正錨盒。

下面我們介紹損失函數(shù),首先介紹的分類損失函數(shù)。如之前所述,我們將使用交叉熵?fù)p失函數(shù)。其中SiS_iSi?是分類輸出。 Si?Si^*Si?是真值。

Lcls=1Ntotal?∑iCrossEntropy(si?,si)L_{c l s}=\frac{1}{N_{\text {total }}} \sum_{i}CrossEntropy \left(s_{i}^{*}, s_{i}\right)Lcls?=Ntotal??1?i?CrossEntropy(si??,si?)

然后是回歸損失函數(shù)。我們使用L2L2L2損失函數(shù)。但是,僅當(dāng)錨盒為正錨盒時(shí),我們才嘗試對(duì)其進(jìn)行修改。在這里如果錨盒為負(fù)錨盒,則pip_ipi?為0;如果錨盒為正錨盒,則pip_ipi?為1。為了進(jìn)行歸一化,我們除以正錨盒總數(shù)。在這里bi?bi^*bi?是真值邊界框,而bib_ibi?是預(yù)測(cè)邊界框。對(duì)于邊界框的調(diào)整,我們使用殘差來進(jìn)行調(diào)整。
Lreg=1Np∑ipiL2(bi?,bi)L_{r e g}=\frac{1}{N_{p}} \sum_{i} p_{i} L_{2}\left(b_{i}^{*}, b_{i}\right)Lreg?=Np?1?i?pi?L2?(bi??,bi?)


3.3 Non-Maximum Suppression

到目前為止,我們已經(jīng)掌握了如何在訓(xùn)練期間處理目標(biāo)的多個(gè)輸出框。 但是,當(dāng)我們?cè)谕评磉^程中運(yùn)行神經(jīng)網(wǎng)絡(luò)時(shí),我們?cè)撛趺崔k? 請(qǐng)記住,在推理過程中,我們只希望場(chǎng)景中每個(gè)目標(biāo)只有一個(gè)輸出框。 這是非最大抑制發(fā)揮作用的時(shí)候,這是一種非常強(qiáng)大的方法,可以改善基于錨點(diǎn)的神經(jīng)元網(wǎng)絡(luò)的推理輸出。

非最大抑制以預(yù)測(cè)方框列表BBB作為輸入,每個(gè)預(yù)測(cè)方塊列表由類輸出得分和回歸坐標(biāo)組成。它還需要輸入一個(gè)預(yù)定義的IOU閾值,我們將其稱為η\etaη。

算法如下:

  • 首先根據(jù)列表BBB的輸出分?jǐn)?shù)進(jìn)行排序。我們還初始化了一個(gè)空集DDD。
  • 然后,我們遍歷排序后的列表BBB中的所有元素。在for循環(huán)內(nèi),我們首先確定列表BBB中得分最高的框bmaxb_{max}bmax?,它應(yīng)該是BBB中的第一個(gè)元素。然后,我們從邊界框集BBB中刪除此邊界框,并將其添加到輸出集DDD中。
  • 接下來,我們找到剩余在集合BBB中的所有IOU大于η\etaη的框。這些框與當(dāng)前的最大框bmaxb_maxbm?ax重疊。滿足此條件的所有框?qū)牧斜?span id="ozvdkddzhkzd" class="katex--inline">BBB中刪除。我們不斷遍歷列表BBB直到為空,然后返回列表DDD。現(xiàn)在DDD中每個(gè)對(duì)象包含一個(gè)邊界框。

    讓我們通過一個(gè)直觀的示例來了解非最大抑制算法在實(shí)際中是如何工作的。假設(shè)我們已經(jīng)按照降序?qū)吔缈蛄斜磉M(jìn)行了排序,如下圖所示。 bmaxb_{max}bmax?是排序列表B中的第一個(gè)邊界框B1B_1B1?。然后,我們將每個(gè)邊界框與bmaxb_{max}bmax?進(jìn)行比較。我們計(jì)算IOU,并將其與IOU閾值η\etaη進(jìn)行比較。在這種情況下,IOU大于閾值η\etaη,最終我們從列表BBB中刪除B3B_3B3?。我們對(duì)列表中的下一個(gè)最高分重復(fù)此過程。最終初始列表BBB現(xiàn)在為空。因此,我們的非最大抑制算法將退出并返回輸出框列表DDD,該列表按預(yù)期包含每個(gè)對(duì)象的唯一邊界框。

4. Using 2D Object Detectors for Self-Driving Cars

4.1 3D Object Detection

在本小節(jié),我們將討論2D目標(biāo)檢測(cè)的三個(gè)重要應(yīng)用。

  • 首先,我們將討論如何將2D目標(biāo)檢測(cè)擴(kuò)展到3D。
  • 其次,我們將討論目標(biāo)跟蹤。
  • 最后,我們將討論如何將2D目標(biāo)檢測(cè)應(yīng)用于交通標(biāo)志和信號(hào)燈的檢測(cè)。

對(duì)于自動(dòng)駕駛汽車來說,其運(yùn)動(dòng)場(chǎng)景是3D,有時(shí)僅檢測(cè)圖像平面中的目標(biāo)是不夠的。汽車需要知道行人,汽車,車道和路標(biāo)在汽車周圍的位置。這時(shí)我們需要將問題從2D擴(kuò)展到3D,并在世界坐標(biāo)中定位檢測(cè)到的目標(biāo)。3D目標(biāo)檢測(cè)是一個(gè)相對(duì)較新的主題,并且此領(lǐng)域的結(jié)果在不斷變化。

3D目標(biāo)檢測(cè)我們需要知道目標(biāo)類別,例如是汽車,行人和自行車員。另外我們要估計(jì)3D目標(biāo)質(zhì)心位置,3D目標(biāo)的尺寸和3D目標(biāo)的方向。

在每種情況下,這種詳細(xì)的狀態(tài)信息都可以提高運(yùn)動(dòng)預(yù)測(cè)和避免碰撞的能力,并提高汽車在交通中行駛的能力。該目標(biāo)的狀態(tài)可以表示為質(zhì)心位置的3D向量,質(zhì)心位置表示為目標(biāo)的(x,y,z)(x,y,z)(x,y,z)。3D目標(biāo)i尺寸,表示為目標(biāo)的長(zhǎng)寬高(l,w,h)(l,w,h)(l,w,h)。方向角的3D向量,表示為目標(biāo)的側(cè)傾角,俯仰角和偏航角。對(duì)于道路場(chǎng)景,我們感興趣的方向角通常只是偏航角。但是,如何從2D邊界框到對(duì)物體位置和尺寸的精確3D估計(jì)呢?


在3D中擴(kuò)展2D目標(biāo)檢測(cè)的最常見,最成功的方法是使用激光雷達(dá)點(diǎn)云數(shù)據(jù)。問題是應(yīng)將點(diǎn)云以哪種表示形式輸入到神經(jīng)網(wǎng)絡(luò)?

一些研究人員選擇直接處理原始點(diǎn)云數(shù)據(jù)。其他研究人員選擇相對(duì)于某個(gè)固定點(diǎn)對(duì)點(diǎn)云數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理。最后,還可以對(duì)這些點(diǎn)進(jìn)行預(yù)處理,以構(gòu)建固定長(zhǎng)度的表示形式,無論我們使用哪種表示形式,都期望以有向3D邊界框的形式獲得結(jié)果。請(qǐng)記住,上面討論的過程只是執(zhí)行3D目標(biāo)檢測(cè)的一種方法。

那么,為什么我們選擇將2D檢測(cè)擴(kuò)展到3D而不是直接在3D中檢測(cè)對(duì)象?

  • 首先,2D目標(biāo)檢測(cè)器比3D目標(biāo)檢測(cè)器更加完善。通常,我們可以從成熟的2D目標(biāo)檢測(cè)器中獲得很高的精度和召回率。
  • 其次,我們從2D目標(biāo)檢測(cè)器結(jié)果中獲得分類。無需使用LiDAR數(shù)據(jù)傳遞到網(wǎng)絡(luò)即可確定我們檢測(cè)的是汽車還是其它。這在2D圖像數(shù)據(jù)中非常明顯。
  • 最后,如果無法對(duì)應(yīng)該在哪里找到目標(biāo)做出任何假設(shè),在3D空間中搜索可能的目標(biāo)在計(jì)算上??是相當(dāng)昂貴的。將2D目標(biāo)檢測(cè)器擴(kuò)展到3D,通??梢允刮覀兿拗颇繕?biāo)實(shí)例的搜索區(qū)域,從而使實(shí)時(shí)性能易于管理。

但是,將2D目標(biāo)檢測(cè)器擴(kuò)展到3D也會(huì)引起一系列獨(dú)特的問題。

  • 使用這種方法進(jìn)行3D目標(biāo)檢測(cè)所引起的一個(gè)突出問題是:我們將3D姿態(tài)估計(jì)器的性能限制在一個(gè)上限(即2D檢測(cè)器的性能)上。
  • 此外,從攝像頭的角度來看,當(dāng)2D到3D方法面臨嚴(yán)重的遮擋和截?cái)鄷r(shí)通常會(huì)失敗。
  • 最后,由這種方法的串行特性引起的等待時(shí)間通常不可忽略。延遲感知這意味著我們的汽車經(jīng)過一定延遲后會(huì)看到道路上的物體??。如果此延遲很大,則系統(tǒng)可能不夠安全,無法運(yùn)行,因?yàn)檐囕v反應(yīng)時(shí)間受感知等待時(shí)間限制。

4.2 2D Object Tracking

2D到3D目標(biāo)檢測(cè)的另一個(gè)非常重要的應(yīng)用是目標(biāo)跟蹤。 跟蹤涉及將對(duì)同一物體的檢測(cè)序列拼接在一起,以定義隨時(shí)間變化的物體運(yùn)動(dòng)。 我們將從描述一種簡(jiǎn)單的跟蹤方法開始,該方法可以在2D和3D中使用。

執(zhí)行目標(biāo)檢測(cè)時(shí),通常在每個(gè)幀中獨(dú)立檢測(cè)目標(biāo)。 但是,在跟蹤中,我們通常通過已知的目標(biāo)動(dòng)力學(xué)模型預(yù)測(cè)目標(biāo)的運(yùn)動(dòng)。 通常我們需要做出一些假設(shè):例如,假設(shè)我們的相機(jī)和被跟蹤的目標(biāo)不能在很短的時(shí)間內(nèi)傳送到不同的位置。 另外,我們假設(shè)場(chǎng)景逐漸平滑變化。 所有這些假設(shè)在道路場(chǎng)景中在邏輯上都是有效的。

下圖顯示了目標(biāo)跟蹤常用的處理流程, 我們將這些檢測(cè)稱為測(cè)量,將每個(gè)預(yù)測(cè)與相應(yīng)的測(cè)量相關(guān)聯(lián),然后使用相關(guān)的測(cè)量更新目標(biāo)預(yù)測(cè)。

現(xiàn)在讓我們描述每個(gè)必要的步驟。

  • 首先,我們目標(biāo)狀態(tài)定義為其在圖像空間中的位置和速度。每個(gè)目標(biāo)都有一個(gè)更新其狀態(tài)的運(yùn)動(dòng)模型。例如,此處顯示的等速運(yùn)動(dòng)模型用于將每個(gè)邊界框移動(dòng)到第二幀中的新位置。注意,由于模型不是完美的,我們?cè)谶\(yùn)動(dòng)模型中添加了高斯噪聲。

  • 在預(yù)測(cè)之后,我們從2D目標(biāo)檢測(cè)器獲得第二幀測(cè)量值。然后,我們通過計(jì)算所有預(yù)測(cè)和所有測(cè)量之間的IOU,將每個(gè)測(cè)量與一個(gè)預(yù)測(cè)相關(guān)聯(lián)。如果某個(gè)測(cè)量的IOU最高,則它將與相應(yīng)的預(yù)測(cè)相關(guān)。

  • 最后一步包括使用卡爾曼濾波器融合測(cè)量和預(yù)測(cè)??柭鼮V波器更新包括位置和速度在內(nèi)的整個(gè)目標(biāo)狀態(tài)。

還有一些復(fù)雜的問題需要解決,特別是如何啟動(dòng)追蹤以及如何終止追蹤。

  • 如果獲得的檢測(cè)結(jié)果與之前的任何預(yù)測(cè)都不相關(guān),則我們將啟動(dòng)新的追蹤。
  • 同樣,如果預(yù)測(cè)與預(yù)設(shè)幀數(shù)的測(cè)量值不相關(guān),則終止不一致的追蹤。
  • 最后,我們需要注意的是,通過在3D中定義IOU,我們可以使用相同的方法進(jìn)行3D目標(biāo)跟蹤。

4.3 Traffic sign and signal detection

現(xiàn)在我們可以從自動(dòng)駕駛汽車上安裝的攝像機(jī)中看到典型的行車記錄儀樣式圖像。通常,汽車必須在遠(yuǎn)距離檢測(cè)交通標(biāo)志和交通信號(hào),以使汽車知道如何及時(shí)做出適當(dāng)反應(yīng)。遠(yuǎn)距離,交通標(biāo)志和信號(hào)在圖像中僅占很少的像素,這使得檢測(cè)問題特別具有挑戰(zhàn)性。此外,交通標(biāo)志變化很大。通常,包括多達(dá)50個(gè)需要可靠分類的類別。另一方面,交通信號(hào)燈在世界不同地區(qū)的顯示方式可能有所不同,并且需要檢測(cè)多種狀態(tài),自動(dòng)駕駛汽車才能通過信號(hào)交叉口安全操作。

此外,交通信號(hào)燈會(huì)隨著汽車行駛而改變狀態(tài)。嘗試跟蹤圖像空間中的交通信號(hào)時(shí),這可能會(huì)導(dǎo)致一些問題。幸運(yùn)的是,到目前為止,我們已經(jīng)描述的標(biāo)準(zhǔn)目標(biāo)檢測(cè)器無需進(jìn)行重大改動(dòng)即可用于檢測(cè)交通標(biāo)志和信號(hào)。但是,當(dāng)前的方法依賴于多級(jí)分層模型來更穩(wěn)健地執(zhí)行此檢測(cè)任務(wù)。

讓我們考慮這里顯示的兩階段模型。它們共享特征提取器的輸出以執(zhí)行它們各自的任務(wù)。

  • 在此示例中,第一階段輸出指向圖像中所有交通標(biāo)志和信號(hào)的類不可知邊界框,而無需指定每個(gè)框?qū)儆谀膫€(gè)類。
  • 然后,第二階段從第一階段獲取所有邊界框,并將它們分類為紅色,黃色或綠色信號(hào)停止標(biāo)志等類別。此外,某些方法還使用第二階段來進(jìn)一步細(xì)化圖框中提供的邊界框。

總結(jié)

以上是生活随笔為你收集整理的Coursera自动驾驶课程第11讲:2D Object Detection的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。