佛山優(yōu)化網站排名收費關鍵詞推廣優(yōu)化外包
目錄標題
- 參考
- 目標檢測定義
- 深度學習對目標檢測的作用
- 單目標檢測
- 多任務框架
- 多任務損失
- 預訓練模型
- 姿態(tài)估計
- 多目標檢測
- 問題
- 滑動窗口(Sliding Window)
- 滑動窗口缺點
- AdaBoost(Adaptive Boosting)
- 參考
- 區(qū)域建議 selective search 思想
- 慢速R-CNN
- 慢速R-CNN思路
- 邊界框回歸(Bbox reg)
- 慢速R-CNN缺點
- Fast R-CNN
- 改進一:先提取特征后區(qū)域建議
- 改進二:全連接神經網絡
- 改進三:裁剪+縮放特征(RoI Pool)
- 為什么需要RoI Pool?
- 區(qū)域裁剪
- Rol Pool
- Rol Align
- Fast R-CNN的問題
- Fast R-CNN vs 慢速R-CNN
- Faster R-CNN
- RPN(Region Proposal Network)
- 區(qū)域建議(Region Proposal Network)
- 運行分為兩個階段
- Faster R-CNN速度
- 目標檢測: 影響精度的因素 ...
參考
【計算機視覺】計算機視覺與深度學習-07-目標檢測-北郵魯鵬老師課程筆記
計算機視覺與深度學習 北京郵電大學 魯鵬 清晰版合集(完整版)
目標檢測定義
目標檢測的目標是確定圖像中存在的目標的類別,并在圖像中標記出它們的位置,通常使用邊界框來表示目標的位置和大小。
單目標檢測:分類+定位
深度學習對目標檢測的作用
深度學習通過使用深層神經網絡模型,可以從原始像素級別上學習和提取圖像特征,從而實現目標檢測。
單目標檢測
將定位任務建模為回歸問題!
多任務框架
一個任務是:分類。
另一個任務是:定位。
多任務損失
網絡訓練的目標是降低總損失,所以 softmax loss 和 L2 loss 將同時減小,也可以為 softmax loss 和 L2 loss 分別設置一個權重,通過改變權重,調整 softmax loss 和 L2 loss 在總損失中所占的比重。
預訓練模型
目標檢測中,一般不從頭開始訓練網絡,而是使用ImageNet上預訓練的模型。
一般分三個階段:
1、分類訓練階段
在這個階段,通常使用預訓練的分類模型(如在ImageNet上預訓練的模型)來進行訓練。該模型已經在大規(guī)模圖像分類任務上學習到了豐富的圖像特征。然后,將最后的全連接層替換成適應目標檢測任務的新的全連接層,并使用目標檢測數據集進行訓練。這個階段的目標是學習分類任務所需的特征表示。
2、定位訓練階段
在這個階段,固定預訓練模型的大部分層,并僅僅調整輸出層和一些頂層特征層。然后,使用目標檢測數據集進行訓練,讓模型學習如何準確地定位目標。這個階段的目標是學習目標的位置信息。
3、分類和定位一起訓練階段
在這個階段,不僅訓練分類任務,還同時訓練目標的位置信息。在模型中同時使用分類和定位損失函數,并根據這兩個任務的權重進行綜合訓練。這個階段的目標是綜合考慮分類和定位任務,使模型能夠準確地檢測并定位目標。
姿態(tài)估計
姿態(tài)估計(Pose Estimation)是計算機視覺中的一個重要任務,旨在從圖像或視頻中推斷出人體、物體或其他目標的姿態(tài)信息,包括位置、方向和關節(jié)角度等。
單目標檢測的思路,還應用于單人體姿態(tài)估計,與box coordinates不同的是,在人體上標注關鍵點,然后通過訓練,與標答進行對比。
-
目標檢測: 首先,使用目標檢測算法來檢測圖像中的人體目標。目標檢測算法可以是傳統(tǒng)的方法(如基于特征的方法)或深度學習方法(如基于卷積神經網絡的方法)。檢測到的人體目標將作為后續(xù)姿態(tài)估計的輸入。
-
關鍵點定位: 對于每個檢測到的人體目標,需要進一步定位其關鍵點,例如人體姿態(tài)估計中的關節(jié)點。可以使用關鍵點檢測算法(如姿態(tài)估計算法或關鍵點檢測算法)來定位人體關鍵點。這些算法可以是傳統(tǒng)的機器學習方法,也可以是基于深度學習的方法。
-
姿態(tài)估計: 一旦獲得了人體關鍵點的位置,可以使用姿態(tài)估計算法來推斷人體的姿態(tài)信息,如人體的位置、旋轉和關節(jié)角度等。姿態(tài)估計算法可以基于幾何模型、優(yōu)化方法或深度學習方法。根據應用需求,可以選擇合適的姿態(tài)表示形式,如關節(jié)角度、骨架模型或三維姿態(tài)等。
-
后處理與應用: 最后,可以對估計的姿態(tài)結果進行后處理,如濾波或平滑操作,以提高估計的準確性和穩(wěn)定性。得到最終的姿態(tài)估計結果后,可以將其應用于各種應用領域,如動作識別、運動分析、虛擬現實、增強現實等。
多目標檢測
問題
困境:每張圖像期望輸出的維度都不一樣。
神經網絡的標答是預先建立好的,因為多目標檢測中目標數量并不確定,輸出的維度不確定,就無法建立Correct box標答,如果使用單目標檢測的訓練方法,無法建立多目標檢測的表達,訓練將不能進行。
滑動窗口(Sliding Window)
在圖像上以不同的尺度和位置滑動固定大小的窗口,然后在每個窗口上應用分類器或特征提取方法來判斷窗口內是否存在目標。滑動窗口方法可以用于檢測不同尺寸的目標,并且可以通過滑動步長控制檢測的精度和速度。
將圖像中所有可能的區(qū)域都給到分類器進行分類,只留下能正確分類的窗口。
困境:CNN需要對圖像中所有可能的區(qū)域(不同位置、尺寸、長寬比)進行分類,計算量巨大!
滑動窗口缺點
窮舉圖像中成千上萬的區(qū)域進行分類,對于神經網絡,計算量很大。
針對這個問題,提出了一種新的思想,先從圖像中產生一些候選區(qū)域再進行分類,而不是窮舉圖像中所有區(qū)域。例如:selective search
AdaBoost(Adaptive Boosting)
AdaBoost是一個非??斓姆诸惼?#xff0c;可以對圖像上的區(qū)域進行窮舉后分類。
參考
AdaBoost算法超詳細講解
AdaBoost 是一種集成學習算法,用于提高分類器的性能。它通過迭代訓練一系列弱分類器(如決策樹、支持向量機等),每次迭代都根據前一輪分類結果對樣本進行調整,使得難以分類的樣本獲得更高的權重,從而加強對這些樣本的分類能力。最終,通過組合多個弱分類器,AdaBoost 可以產生一個強大的分類器。
區(qū)域建議 selective search 思想
針對窮舉圖像所有區(qū)域神經網絡分類計算量大這個問題,提出了一種新的思想,先從圖像中產生一些候選區(qū)域再進行分類,而不是窮舉圖像中所有區(qū)域。例如:selective search。
選擇性搜索(Selective Search):選擇性搜索是一種經典的區(qū)域建議算法。它基于圖像的顏色、紋理、邊緣等信息,在不同尺度和層次上進行區(qū)域合并和分割,生成一系列候選區(qū)域。
selective search思想是在R-CNN的論文中提出的。
慢速R-CNN
基于區(qū)域的目標檢測算法。
慢速R-CNN思路
1 利用區(qū)域建議產生感興趣的區(qū)域。(存入硬盤)
2 對區(qū)域進行縮放。
3 將圖像區(qū)域送入卷積網絡進行特征提取。(存入硬盤)
4 使用支持向量機對區(qū)域進行分類,同時進行邊界框回歸(修正學習)。
邊界框回歸(Bbox reg)
區(qū)域建議生成的區(qū)域,可能有損失,效果不好,進行邊界框回歸,就是為了修正區(qū)域建議生成的區(qū)域與真實區(qū)域的偏差。
邊框回歸(Bounding Box Regression)詳解
對于上圖,綠色的框表示Ground Truth, 紅色的框為Selective Search提取的Region Proposal。那么即便紅色的框被分類器識別為飛機,但是由于紅色的框定位不準(IoU<0.5), 那么這張圖相當于沒有正確的檢測出飛機。 如果我們能對紅色的框進行微調, 使得經過微調后的窗口跟Ground Truth 更接近, 這樣豈不是定位會更準確。 確實,Bounding-box regression 就是用來微調這個窗口的。
慢速R-CNN缺點
問題:計算效率低下,每張圖像大約有2k個區(qū)域需要卷積網絡進行特征提取,重疊區(qū)域反復計算。
Fast R-CNN
在Fast R-CNN中,首先通過卷積神經網絡(CNN)提取整個圖像的特征圖。然后,針對每個感興趣區(qū)域(Region of Interest,RoI),通過RoI池化層將其映射為固定大小的特征圖。這樣可以避免在每個RoI上進行獨立的卷積操作,從而大大減少了計算量。
接下來,將RoI映射后的特征圖輸入到全連接層中,進行目標分類和邊界框回歸。分類部分使用softmax函數對RoI進行多類別分類,而邊界框回歸則用于預測目標的位置和大小。
Fast R-CNN的訓練是端到端的,可以通過反向傳播同時優(yōu)化特征提取網絡和分類/回歸網絡。這種端到端的訓練方式比R-CNN中的多階段訓練更加高效。
改進一:先提取特征后區(qū)域建議
如果先進行區(qū)域建議后進行特征提取,計算量比較大。因此先對整個圖片進行卷積提取特征后,在特征圖上進行區(qū)域扣取。
改進二:全連接神經網絡
改進三:裁剪+縮放特征(RoI Pool)
為什么需要RoI Pool?
先來看一個問題:對于傳統(tǒng)的CNN(如AlexNet和VGG),當網絡訓練好后輸入的圖像尺寸必須是固定值,同時網絡輸出也是固定大小的vector or matrix。如果輸入圖像大小不定,這個問題就變得比較麻煩。有2種解決辦法:
- 從圖像中crop一部分傳入網絡。
- 將圖像warp成需要的大小后傳入網絡。
兩種辦法的示意圖如圖,可以看到無論采取那種辦法都不好,要么crop后破壞了圖像的完整結構,要么warp破壞了圖像原始形狀信息。
回憶RPN網絡生成的proposals的方法:對positive anchors進行bounding box regression,那么這樣獲得的proposals也是大小形狀各不相同,即也存在上述問題。所以Faster R-CNN中提出了RoI Pooling解決這個問題。不過RoI Pooling確實是從Spatial Pyramid Pooling發(fā)展而來。
通過RoI Pooling,即使大小不同的proposal輸出結果都是固定大小,實現了固定長度輸出。
參考:一文讀懂Faster RCNN
區(qū)域裁剪
Rol Pool
區(qū)域頂點規(guī)整到網格交點上(有偏移)
然后進行處理
Rol Pool處理前不同的區(qū)域特征的空間尺寸可能不一致,但是處理后的所有區(qū)域特征尺寸都是一樣的。
問題: 處理后的區(qū)域特征會有輕微的對不齊!
Rol Align
區(qū)域頂點不規(guī)整到網格交點上(無偏移)
在每個區(qū)域中選擇幾個關鍵點,關鍵點個數是可自定義的,是超參數。
RoI Align 解決了傳統(tǒng) RoI Pooling 中的精度損失和空間錯位問題。它通過使用雙線性插值的方式,精確地計算感興趣區(qū)域內每個位置的特征值。具體而言,RoI Align 將感興趣區(qū)域劃分為更細的小格,然后在每個小格內使用雙線性插值計算對應位置的特征值。最后,這些特征值通過平均池化得到感興趣區(qū)域的特征表示。
雙線性插值: 在每個小格內使用雙線性插值來計算對應位置的特征值。雙線性插值利用小格內的四個相鄰像素的特征值,通過加權平均來估計目標位置的特征值。
雙線性插值通過使用周圍四個最近的數據點來估計目標位置的值。假設我們要在一個二維網格上進行插值,其中四個最近的數據點的坐標為 (x1, y1)、(x1, y2)、(x2, y1) 和 (x2, y2),目標位置的坐標為 (x, y)。雙線性插值的計算步驟如下:
- 計算水平方向上的插值:
a. 在 x 軸上,對數據點 (x1, y1) 和 (x2, y1) 進行線性插值,得到兩個插值結果:
f 1 = f ( x 1 ) + ( x ? x 1 ) ? ( f ( x 2 ) ? f ( x 1 ) ) / ( x 2 ? x 1 ) f_1 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f1?=f(x1)+(x?x1)?(f(x2)?f(x1))/(x2?x1)
f 2 = f ( x 1 ) + ( x ? x 1 ) ? ( f ( x 2 ) ? f ( x 1 ) ) / ( x 2 ? x 1 ) f_2 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f2?=f(x1)+(x?x1)?(f(x2)?f(x1))/(x2?x1)。
b. 在 x 軸上,對數據點 (x1, y2) 和 (x2, y2) 進行線性插值,得到兩個插值結果:
f 3 = f ( x 1 ) + ( x ? x 1 ) ? ( f ( x 2 ) ? f ( x 1 ) ) / ( x 2 ? x 1 ) f_3 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f3?=f(x1)+(x?x1)?(f(x2)?f(x1))/(x2?x1)
f 4 = f ( x 1 ) + ( x ? x 1 ) ? ( f ( x 2 ) ? f ( x 1 ) ) / ( x 2 ? x 1 ) f_4 = f(x1) + (x - x1) * (f(x2) - f(x1)) / (x2 - x1) f4?=f(x1)+(x?x1)?(f(x2)?f(x1))/(x2?x1)。
- 計算垂直方向上的插值:
a. 在 y 軸上,對插值結果 f1 和 f2 進行線性插值,得到結果: f 12 = f 1 + ( y ? y 1 ) ? ( f 2 ? f 1 ) / ( y 2 ? y 1 ) f_{12} = f_1 + (y - y_1) * (f_2 - f_1) / (y_2 - y_1) f12?=f1?+(y?y1?)?(f2??f1?)/(y2??y1?)。
b. 在 y 軸上,對插值結果 f3 和 f4 進行線性插值,得到結果: f 34 = f 3 + ( y ? y 1 ) ? ( f 4 ? f 3 ) / ( y 2 ? y 1 ) f_{34} = f_3 + (y - y_1) * (f_4 - f_3) / (y_2 - y_1) f34?=f3?+(y?y1?)?(f4??f3?)/(y2??y1?)。
最終的插值結果為在垂直方向上插值得到的 f 12 f_{12} f12?和 f 34 f_{34} f34?的線性插值結果: f = f 12 + ( y ? y 1 ) ? ( f 34 ? f 12 ) / ( y 2 ? y 1 ) f = f_{12} + (y - y_1) * (f_{34} - f_{12}) / (y_2 - y_1) f=f12?+(y?y1?)?(f34??f12?)/(y2??y1?)。
Fast R-CNN的問題
selective search 區(qū)域建議 耗時過高,幾乎等于單張圖片的檢測時間。
Fast R-CNN vs 慢速R-CNN
Fast R-CNN 相對于慢速 R-CNN 有幾個改進點:
- 特征共享:Fast R-CNN 在整個圖像上只進行一次卷積運算,而慢速 R-CNN 需要為每個候選區(qū)域分別進行卷積運算。這意味著 Fast R-CNN 可以共享卷積層的計算,從而更高效地提取特征。
- 單次前向傳播:Fast R-CNN 可以通過單次前向傳播同時計算所有候選區(qū)域的特征和分類結果,而慢速 R-CNN 需要為每個候選區(qū)域獨立地進行前向傳播,效率較低。
- 損失函數:Fast R-CNN 引入了多任務損失函數,同時優(yōu)化目標分類和邊界框回歸,而慢速 R-CNN 僅使用分類損失函數。
Faster R-CNN
參考:一文讀懂Faster RCNN
在結構上,在中間特征層后加入區(qū)域建議網絡RPN(Region Proposal Network) 產生候選區(qū)域,其他部分保持與Fast R-CNN一致,即扣取每個候選區(qū)域的特征,然后對其進行分類。
RPN(Region Proposal Network)
在目標檢測任務中,RPN的作用是在輸入圖像上提出可能包含目標的候選框(或稱為候選區(qū)域)。RPN是一個小型的神經網絡,它以滑動窗口的方式在特征圖上滑動,并為每個位置生成多個不同尺度和長寬比的候選框。
RPN的輸入是經過卷積神經網絡(如VGG、ResNet等)提取的特征圖。特征圖具有豐富的語義信息,可以幫助RPN更好地定位目標。RPN在特征圖上應用一個小型的卷積滑動窗口,并對每個窗口位置生成多個anchors。
對于每個anchor,RPN會通過卷積和全連接層進行處理,并輸出兩個值:
1)表示該anchor是否包含目標的概率(通常是二分類問題);
2)對應目標邊界框的修正信息,用于調整候選框的位置和形狀。
通過這個過程,RPN能夠生成大量的候選框,并為每個候選框提供目標概率和邊界框的修正信息。然后,根據這些概率和修正信息,可以對候選框進行篩選和精細調整,選出最具有潛力的候選區(qū)域。
RPN所生成的候選區(qū)域隨后被傳遞給后續(xù)的分類器和邊界框回歸器,進行目標分類和精確定位。
區(qū)域建議(Region Proposal Network)
實際使用中,對于每個特征圖上的每個位置,我們通常會采用k個不同尺寸和分辨率的錨點區(qū)域(anchor boxes)
四種損失聯(lián)合訓練:
? RPN分類損失(目標/非目標)
? RPN邊界框坐標回歸損失
? 候選區(qū)域分類損失
? 最終邊界框坐標回歸損失
運行分為兩個階段
第一階段:候選區(qū)域生成
在第一階段,Faster R-CNN使用Region Proposal Network (RPN) 來生成候選區(qū)域。
RPN通過在輸入圖像上滑動窗口,并在不同位置和尺度上生成一系列的候選框(也稱為錨框或anchors),這些候選框可能包含目標。對于每個候選框,RPN預測其包含目標的概率以及對應目標邊界框的修正信息。
第二階段:目標分類和邊界框回歸
在第二階段,Faster R-CNN使用先前生成的候選區(qū)域作為輸入,對這些候選區(qū)域進行目標分類和邊界框回歸。通常,這個階段包括一個用于特征提取的卷積神經網絡(如VGG、ResNet等),以及用于目標分類和邊界框回歸的全連接層。這些層將從候選區(qū)域中提取的特征映射與目標類別進行關聯(lián),并對邊界框進行微調,以更準確地定位目標。