基于CNN的圖像目标檢測方法
Two State Method
RCNN(Rich feature hierarchies for accurate object detection and semantic segmentation)
RCNN是第一個成功把深度學習應用到目标檢測的算法。RCNN主要解決兩個問題:一個是使用深度學習網絡來定位目标,二是使用少量标記資料來訓練大容量模型。
RCNN出現之前,目标檢測有兩種方法——一種是把定位問題轉化為回歸問題,但該方法表現的不好;另一個方法是使用滑動視窗進行識别,但CNN為了保持高空間分辨率隻使用了兩個卷積層和池化層,但RCNN模型有5個卷積層,進而接收域和步長都非常大,導緻定位困難。為了解決CNN的定位問題,使用recognition using regions範式來進行優化。
RCNN出現之前,含标記的資料比較稀缺,其數量不足以支援大型CNN的訓練。為了解決标記資料數量少的問題,傳統方法是先使用無監督學習,再使用監督學習進行微調(fine-tuning),而RCNN在大型輔助資料集上先進行預訓練,然後在小型标注資料集上進行domain-specific的微調,這種方法即可以有效解決标記資料稀缺的問題,且使得模型的預訓練變得高效。
RCNN在進行目标檢測時出現的主要錯誤是定位錯誤,使用bound box regression可以有效消除這種錯誤。
RCNN的實作步驟:
- 使用selective search在輸入圖像上生成2000個region proposal;
- 使用CNN從每個region proposal中提取一個固定長度的特征向量;
- 使用類别特定的線性SVM對每個region proposal進行分類;
- 使用bound-box regression對預測的邊框進行處理。
訓練SVM:由于訓練資料過大導緻其無法完全放在記憶體中,提出了hard negative mining方法——把錯誤分類的樣本先歸于negative樣本,再進行訓練,反複如此,直至達到停止條件(如分類器性能不再提升等)。
SPP Net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)
SPP Net主要解決了兩個問題——一是RCNN因為需要對所有的region proposal分别進行提取特征,是以速度較慢,SPP Net針對這一點,采取對整張輸入圖像進行卷積計算來提取特征,加快了處理速度;二是因為全連接配接層的問題,使得RCNN對輸入圖像的尺寸有嚴格的要求,SPP Net方法通過使用SPP layer來替代最後一個卷積層之後的池化層,使得模型可以在輸入任何尺寸的圖像後生成同樣大小的特征圖以滿足全連接配接層的需要,使得模型忽略了對輸入圖像尺寸的限制,同時減少了過拟合的出現。
SPP Net的實作步驟:
- 使用Edge Boxes在輸入圖像上生成2000個region proposal(Edge Boxes與Selective Search方法的功能相似,但Edge Boxes處理速度更快(每張圖像需要0.2s,SS方法每張圖像需要1-2s));
- 對輸入圖像進行resize,其中min(w, h) = s,s是事先定義好的,s∈S{480,576,688,864,1200};
- 對整個圖像提取特征;
- 使用SPP layer替代Conv5後的池化層,生成指定長度的特征傳入候選的全連接配接層;
- 針對每個類别訓練二進制線性SVM對特征進行分類;
- 使用bound-box regression對預測的邊框進行處理。
SPP layer的處理過程:
假設Conv5的輸出是256維的特征圖,使用(1×1,2×2,4×4)的SPP layer進行處理,則生成三個分别為256維、2×2×256維、4×4×256維的特征向量,則後續第一個全連接配接層FC6輸入的大小為21×256維(256+4×256+16×256)。
多尺寸訓練multi-size training:使用multi-size training方法,每次在網絡上完整的疊代一次,然後更改輸入的尺寸進行下一次完整的疊代,通過實驗比較發現使用180-224之間的尺寸随機确定輸入的尺寸對最終準确率的提高有幫助。使用single-size training方法比RCNN的速度提升了102倍,而mAP隻減少了1.2%;使用5-size training方法比RCNN快了38倍,檢測效果基本一緻。
Fast RCNN
Fast RCNN針對RCNN和SPP Net的處理速度和準确率進行了改進。
SPP Net存在的缺陷主要是因為其處理過程是多層次的,包括特征提取、使用損失函數微調網絡、訓練SVM、選擇合适的bound box regression進行處理,特征需要存入磁盤,導緻其速度較慢。因為其不能更新SPP layer之前卷積層的參數,隻能使用固定的卷積層,是以導緻準确率也不夠高。
ROI pooling layer:
ROI是卷積特征圖中的一個矩形框,其被一個元組定義(r, c, h, w),r和c是指其左上角的坐标,h和w指其高和寬。
使用最大池化把ROI(region of interest)中的特征轉化為一個有着固定尺寸H×W的小特征圖(H和W的值獨立于任何ROI)。
ROI max pooling是把一個h×w大小的輸入分割成H×W個子視窗,子視窗的大小為h/H × w/W(因為池化層輸出的大小為H×W,是以子視窗個數為H×W)。ROI層可以看作是一個簡化的SPP 層,但ROI隻有一層。
multi-task 損失:Fast RCNN有兩個滑動輸出層,第一個輸出層對每個ROI輸出一個K+1類(K個類别+背景)的離散機率分布,通常機率分布是通過對全連接配接層;第二個輸出層輸出K類bound box的位置坐标資訊(r, c, h, w)。每一個ROI被使用ground-truth類别 u 和ground-truth的bound box回歸類别 v 進行标記,multi-task損失為:
Lcls(p, u) = log pu是正确類别u的log損失,[u>=1]表示u>=1時為1,否則為0。
其中
Fast RCNN的實作步驟:
- 輸入整個圖像和一個候選對象集合(即SS方法或EB方法等方法生成的2000個候選對象組成的集合);
- 使用卷積層和最大池化層生成一個卷積特征圖;
- 對特征圖中的每一個候選對象,使用ROI池化層生成一個固定長度的特征向量;
- 每個特征向量通過兩個滑動輸出層,輸出一個K+1類的機率分布和K個四元元組,該四元元組定義了每一個類别的bound box的位置。
Fast RCNN的優勢:
- 比RCNN和SPP Net更高的檢測品質(更高的mAP);
- 訓練使用single-state 且使用multi-task 損失;
- 訓練過程中可以更新所有卷積層的參數;
- 因為Fast RCNN中大部分是end-to-end的訓練,是以特征隻需存儲再顯存,不需要存入磁盤。
Faster RCNN(Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks)
因為對生成region proposal的時間優化已經到了瓶頸,是以為了加快檢測的整體效率,提出了一個新的網絡Region Proposal Network,RPN通過和Fast RCNN共享整幅圖像的特征,甚至可以實作“cost-free”生成region proposal。
Faster RCNN的重點是RPN和anchor。
RPN的輸入為任何尺寸的圖像,輸出一系列候選目标邊框及其對它們的客觀打分結果。因為RPN和Fast RCNN共享卷積特征,是以兩個網絡共用一組卷積層。為了生成region proposal,使用一個小型卷積網絡在最後一個共享卷積層輸出的特征圖上滑動(該小型卷積網絡可以看作一個滑動視窗),滑動視窗把特征圖中n×n大小的區域作為輸入,每個滑動視窗映射到一個低維特征,該特征作為兩個滑動全連接配接層的輸入——一個是邊框回歸層reg,一個是邊框分類層cls。
在每個滑動視窗的位置,同時預測多個region proposal,假定每個位置最大的proposal的數量為k,k個proposal被相關的邊框進行參數化,稱為anchor。對每個位置使用3種長寬比和3種形狀比例,是以一個W×H大小的特征圖共有W×H×k個anchor。基于anchor的方法是建立一個anchor金字塔,比Selective Search、Edge box、Multi Box等方法更具有效率——使用多長寬比和形狀比例進行分類和回歸,僅僅需要單一比例的特征圖、圖像和單一尺寸的滑動視窗。
為了訓練RPN,對每個anchor配置設定一個二進制類别的标簽,如果IoU>=0.7為正樣本,IoU<=0.3為負樣本(IoU是anchor和ground-truth之間重疊的比例)。RPN使用end-to-end的反向傳播和SGD進行訓練,因為每一個小批量樣本中有很多的正樣本和負樣本,而負樣本的數量占主導地位,可能會導緻結果偏向負樣本,是以在整幅圖像中随機采樣256個anchor來計算損失,其中正負樣本的數量均為128個,如果正樣本的數量不足,則使用負樣本進行填充。
三種訓練和共享特征的方法:
- alternating training( 交替訓練):先訓練RPN,使用Image Net的預訓練模型和端到端的微調進行初始化以生成候選區域;再使用RPN訓練出的region proposal作為輸入,用Fast RCNN訓練出一個分離的檢測網絡,這個網絡同樣使用預訓練的Image Net模型進行初始化,這一步中,兩個網絡之間并未共享卷積層;然後使用檢測網絡初始化RPN,但是固定共享的卷積層,隻對獨屬于RPN的layer進行微調,這一步中,兩個網絡共享卷積層;最後保持共享卷積層不變,隻對獨屬于Fast RCNN中的layer進行微調。這樣的話就實作了再兩個網絡之間共享卷積層并形成了一個統一的網絡。本文用的就是這個算法。
- approximate joint training (近似聯合訓練):在訓練時,RPN和Fast RCNN被結合在一個網絡中,每個SGD的疊代過程中,前向傳播(forward)在訓練Fast RCNN檢測器時,生成固定尺寸的、預計算好的候選區域,反向傳播(back forward)把RPN的loss和Fast RCNN 的loss 的反向傳播信号結合在一起。這種算法易于實作,結果是近似的,但是比altering training減少了25%-50%的訓練時間,但是忽略了候選邊界左邊衍生的w,r,t 同樣是網絡的結果,是以結果是近似的。
- Non-approximate joint training (非近似聯合訓練):RPN預測的邊界框是輸入的一部分,而Fast RCNN中的ROI 池化層把卷積特征和邊界框作為輸入,是以理論上反向傳播解答器應該包含梯度w, r, t 和邊框坐标。但是近似聯合訓練忽略了這些梯度。在這個方法中,需要使用ROI 池化層區分w,r,t和邊界坐标。
Faster RCNN的實作步驟:
- 使用卷積網絡生成特征圖;
- 使用RPN生成region proposal,使用softmax判斷anchor屬于正樣本或負樣本,再使用bound-box 回歸修正anchor以獲得更精确的anchor;
- 在最後一個共享卷積層輸出的特征圖上生成固定尺寸的小型特征圖;
- 使用softmax損失和smooth L1損失對分類機率和bound box 回歸進行聯合處理。
FPN(Feature Pyramid Networks for Object Detection)
根據原本圖像金字塔轉化為特征金字塔的方法,通過使用1×1的卷積層減少通道維數,通過側向連接配接結合自下而上和自頂向下的特征圖,形成一個語義資訊豐富、分辨率高且定位準确的特征圖。即彌補了特征金字塔需要大量記憶體和時間處理的短闆,又解決了低分辨率圖像中語義資訊較少但定位準确、高分辨率圖像語義資訊豐富但定位困難的問題。
FPN的實作步驟:
- 自底向上的路徑:是卷積網絡的前向運算的結果,通過對特征圖的集合進行補充和豐富,形成自底向上的特征金字塔,得到的特征圖雖然語義資訊較少,但因為多次進行下采樣,是以定位準确。
- 自頂向下的路徑和側向連接配接:首先對分辨率粗糙但語義資訊豐富的特征圖進行上采樣得到高分辨率的特征,這些特征使用自底向上的特征金字塔對應層次的特征圖,通過側向連接配接進行增強。使用分辨率粗糙的特征圖,對空間分辨率進行2倍的上采樣,得到的特征圖與自底向上特征金字塔對應的特征圖(已經過1×1的卷積層減少channels維數)進行合并。重複該過程直至生成最高分辨率圖像(為了開始疊代,在conv5附加一個1×1的卷積層來生成分辨率最粗糙的特征圖)。
One State Method
YOLO(You Only Look Once: Unified, Real-Time Object Detection)
在YOLO出現之前,為了檢測目标,都是為每個目标專門訓練一個分類器,并在測試圖像中從不同的位置和不同的大小對其進行評估。
YOLO把之前檢測網絡中分離的各個功能部件放在一個網絡中實作,利用整幅圖像的特征,通過網絡在預測多尺寸(multi-scale)邊框的同時生成對應的類别機率。因為是對整個網絡進行端到端的訓練,是以可以在訓練過程中更新網絡的參數,進而得到較高的準确率。
YOLO的實作步驟:
- 把整幅圖像分割成S×S個網格。如果某個網格中有目标對象,則該網格在檢測該目标的過程中将起到重要作用。
-
在每一個網格中生成B個邊界框,對這些邊界框對應生成置信度(confidence score置信度:反映了模型對該邊框包含目标的信心和該邊框預測的準确率,置信度的計算公式為 P (object)× IOU,P(object)是該邊框包含目标對象的機率,IOU是預測的邊界框與ground-troth的IOU值;如果該邊框内不含有目标,則置信度為0)。一般是把置信度等于IOU。
每個邊界框包含五個預測值(x, y, w, h, confidence),(x, y)是邊框中心點的坐标,(w, h)是寬和高,confidence是ground-truth與預測的邊界框的IOU值。
- 每個網格同時得到C個條件機率P(classi | object),這些條件機率表示該網格包含目标對象的機率(因為資料集中共C類,是以需要預測C個條件機率)。因為每個網格僅預測一組(C個)類别機率,而不是考慮B個邊界框,進而速度更快。
YOLO方法的優勢:
- 速度快。因為把檢測任務視為回歸問題,進而不需要複雜的流程,可以對流媒體進行低于25ms延遲的實時處理。除此之外,YOLO具有比其他實時處理的系統高兩倍的平均精度。
- 因為YOLO針對整個圖檔進行處理,是以比其他的方法擁有更多的關于類别的上下文資訊。正是因為Fast RCNN不能擷取到大面積的上下文,是以會在圖像上産生大量錯誤背景正樣本(把背景區域識别為目标對象的正樣本),YOLO方法比Fast RCNN減少近一半數量的背景正樣本錯誤。
- YOLO學習的都是樣本的通用表現形式。正是因為高度的generalizable使得YOLO在遇到新類型的對象或unexcepted 輸入時不會輕易break down。
- 除此之外,YOLO準确率也比其他方法高很多。
YOLO存在的問題:
- 對精确定位某些對象,尤其是針對一些小尺寸的對象很吃力
- YOLO會産生較多的定位錯誤。
SSD(Single Shot MultiBox Detector)
SSD是一個正向傳播的卷積網絡,首先産生一個固定大小的邊框集合以及對每個邊框記憶體在的類别分别進行打分的結果。然後使用非極大值抑制來産生最終的檢測結果。
卷積網絡的前半部分是标準的分類網絡(在分類層之前截斷,隻保留網絡前半部分,被稱為base network),然後在base network的基礎上添加不同的附加結構來實作不同的功能産生檢測結果:
- 多尺寸特征圖:在base network的最後面添加卷積層,這些卷積層的尺寸逐漸減小,使得網絡可以對多尺寸的輸入進行預測。這個檢測網絡對不同的特征層是不同的。
- 卷積預測器:每一個附加的特征layer通過一組卷積濾波器的處理生成一組固定的檢測預測結果。對一個m×n大小、通道數為p的特征layer,使用3×3×p的卷積核進行處理,生成針對每個類别的分數或關于邊框坐标值的偏移量。
- 預設邊框和長寬比:因為對每個邊框,在給定的位置輸出k個值,需要計算c個類别分别對應的分數和4個坐标值的偏移量,故特征圖的每個位置要使用 ( c + 4 ) ∗ k (c+4)*k (c+4)∗k個濾波器進行處理。也許預設邊框看起來像是anchor,但是SSD是把預設邊框上應用在多個分辨率不同的特征圖上,正是因為預設邊框含有不同的尺寸,是以才可以對邊框形狀進行有效的離散化。
因為是對每個尺寸大小的特征圖的每個位置使用 ( c + 4 ) ∗ k (c+4)*k (c+4)∗k個濾波器進行計算,故對每個類别,有 38 ∗ 38 ∗ 4 + 19 ∗ 19 ∗ 6 + 10 ∗ 10 ∗ 6 + 5 ∗ 5 ∗ 6 + 3 ∗ 3 ∗ 4 + 1 ∗ 1 ∗ 4 = 5776 + 2166 + 600 + 150 + 36 + 4 = 8732 38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=5776+2166+600+150+36+4=8732 38∗38∗4+19∗19∗6+10∗10∗6+5∗5∗6+3∗3∗4+1∗1∗4=5776+2166+600+150+36+4=8732個檢測結果,然後使用非極大值抑制處理得到最終的檢測結果。
SSD的特點:
- 去除了proposal的生成過程和後續的像素或特征重采樣步驟,把包含的所有計算步驟都放在一個網絡中,這使得SSD易于訓練、在保持高準确率的前提下處理速度加快,直接可以進行內建到檢測系統中;
- 使用小的卷積濾波器預測目标類别和邊框位置的偏移,對不同比例的檢測目标使用不同的檢測器,為了進行多尺度的檢測,把這些來自網絡最後一層的檢測器應用在多個特征圖上;
- 使用多個layer來預測不同大小的目标,可以在保持高準确率的情況下擁有較高的速度;
- SSD比同是單步方法的YOLO更準确,且與使用proposal和池化操作的方法如Faster R-CNN一樣準确,即便實在低分辨率的輸入圖像上同樣可以有效權衡準确率和速度;
- SSD的核心是在特征圖上使用消息卷積濾波器來擷取預測類别分數和邊框偏移量;
- 對小型目标具有更高的準确率。
Other Method
R-FCN(Object Detection via Region-based Fully Convolutional Networks)
R-FCN方法是基于區域的檢測器,是一個全卷積網絡且大部分的計算在整個圖像上共享。使用位置敏感分數圖(positive-sensitive score map)來解決圖像分類中的平移不變性(transform-invariance)和目标檢測中的平移變換(transform-variance)這兩個問題。
R-FCN是通過位置敏感分數圖來把平移變換加入FCN中,每個分數圖都對 相對空間位置的位置資訊進行編碼。在FCN的最後面,添加一個位置敏感的ROI池化層處理來自分數圖的資訊。整個結構進行端到端的訓練,所有的可學習層都是卷積層,且共享整幅圖像的參數。
R-FCN的實作步驟(R-FCN的結構可以看作ResNet-101卷積部分+一個1024維的卷積層+一個位置敏感的ROI池化層,不過需要一個額外的RPN進行輔助):
- 先使用ResNet-101中的卷積層部分對整個圖像進行卷積,得到特征圖(對于原本的ResNet-101網絡結構,删除其中的池化層和全連接配接層,隻保留其卷積部分);
- 再使用R-FCN中附加在ResNet-101卷積部分後的一個卷積層對特征圖進行卷積,對每個類和背景都産生 k 2 k^2 k2個位置敏感分數圖(position-sensitive score map),是以結果是 k 2 k^2 k2個(c+1)維(c是類别數)的圖。這 k 2 k^2 k2個位置敏感分數圖對應一個直接描述相對位置的k×k網格(當k=3時,這9個位置敏感分數圖分别對應網格中的top-left,top-center,top-right,…,bottom-left,bottom-center,bottom-right處的網格,詳情見下方圖像);
- 使用RPN對特征圖進行處理,生成候選區域,并将候選區域ROIs與R-FCN共享**(**R-FCN的作用就是對滅個ROI進行分類)
- 使用一個位置敏感ROI池化層對每一個ROI**,**聚合各個位置敏感分數圖對應位置的特征(k×k個子結果聚合成一個),并輸出對應ROI的分數,緊接着進行vote和softmax操作,得到最終檢測結果。
R-FCN實作的一些細節
- ROI池化操作的實作: r c ( i , j ) r_c(i,j) rc(i,j)是位置 ( i , j ) (i,j) (i,j)對應的分數圖對第c個類别池化的結果, z i , j , c z_{i,j,c} zi,j,c是不屬于 k 2 k^2 k2(c+1)分數圖的一個分數圖, ( x 0 , y 0 ) (x_0,y_0) (x0,y0)是一個ROI的左上角, Θ \Theta Θ代表網絡中的所有學習參數。
- vote操作:平均所有的分數,對每個ROI産生一個 ( C + 1 ) (C+1) (C+1)維的向量 r c ( Θ ) = ∑ i , j C r c ( i , j ∣ Θ ) r_c(\Theta)= \sum^C_{i,j}r_c(i,j| \Theta) rc(Θ)=∑i,jCrc(i,j∣Θ),然後使用softmax( s c ( Θ ) = e r c ( Θ ) / ∑ c ′ = 0 C e r c ′ ( Θ ) s_c(\Theta)=e^{r_c(\Theta)}/ \sum^C_{c^{\prime}=0}e^{r_c^{\prime}(\Theta)} sc(Θ)=erc(Θ)/∑c′=0Cerc′(Θ))進行處理得到最終的檢測結果。
- 關于模型的訓練:損失函數為 其中 c ∗ c^* c∗是ground_truth的類别, L c l s ( s c ∗ ) = − l o g ( s c ∗ ) L_{cls}(s_{c^*}) = -log(s_{c^*}) Lcls(sc∗)=−log(sc∗), L r e g ( t , t ∗ ) = R ( t , t ∗ ) L_{reg}(t,t^*) = R(t,t^*) Lreg(t,t∗)=R(t,t∗)(其中R(·)是L1正則函數)是邊框回歸損失, t ∗ t^* t∗是ground_truth的邊框。平衡權重 λ = 1 \lambda=1 λ=1。
R-FCN的特點:
利用位置敏感分數圖把平移變換引入了目标檢測過程,使得檢測速度和準确率都有一定程度的提升,但中間仍涉及大量的卷積計算,是以速度上還有提升的空間。
視訊目标檢測方法
CBNet(A Novel Composite Backbone Network Architecture for Object Detection)
因為在基于CNN的檢測方法中,骨幹網絡(backbone network)對特征的提取非常重要,且檢測器的性能主要依賴于骨幹網絡,而突出新的、具有更高性能優勢的骨幹網絡需要大量的裝置且耗費大量的時間,是以提出一個連結現有骨幹網絡來增強性能的方法——CBNet。
CBNet把前面步驟中骨幹網絡(Assistant Backbone)生成的特征進行疊代,作為後續骨幹網絡輸入的一部分,最後一個骨幹網絡(Leap Backbone)輸出的特征圖用于進行檢測。
CBNet的幾種骨幹網絡組合方式及其結果對比:
- Adjacent Higher-Level Composition(AHLC):使用Assistant Backbone來增強Lead Backbone的特征(疊代K-1個Assistant Backbone的輸出結果來作為Lead Backbone輸入的一部分)。Lead Backbone第L步的輸入融入了Lead Backbone前L-1的輸出結果(XL-1K)和相鄰的Assistant Backbone(BK-1)的輸出結果(XLK-1): 其中g(·)表示複合連接配接——由1×1的卷積層和批量正則化層組成,用于減少通道數和上采樣操作;
- Same Level Composition(SLC):一個簡單直接的組合方式就是把不同骨幹網絡同一步驟的輸出特征圖進行組合;
- Adjacent Lower-level Composition(ALLS):與AHLC方法相反,把相鄰的低層次步驟的輸出作為後續骨幹網絡的輸入(如下Bk的輸入為Bk第l-1步的輸出加上相鄰骨幹網絡Bk-1的複合輸出):
- Dense Higher-Level Composition(DHLC):DenseNet網絡中每一層與後續的網絡都會建立連結,以便在某一部建立密集的連結。根據該方法,本文在CBNet結構中使用了密集組合連接配接:
(a)為AHLC (b)為SLC (c)為ALLC(d)為DHLC
幾種方法的結果對比:
其中,第一行的baseline是FPN ResNet101的結果,DB是Dual-Backbone,ADLC是Adjacent Dense Level Composition。
CBNet是一個複合連結多個骨幹網絡的方法,與單骨幹網絡的方法相比可以擷取更多有代表性的特征,進而彌補了為靜态圖像目标檢測而設計的方法移植到視訊檢測所産生的問題,對現有的FPN、Mask RCNN、Cascade RCNN等方法均可以增強其mAP值。
TCNN(Object Detection from Video Tubelets with Convolutional Neural Networks)
在TCNN提出之前,視訊目标檢測使用的方法都是之前為靜态圖像目标檢測而設計的,因而對視訊中出現的運動模糊、視訊虛焦、目标遮擋等檢測準确率不夠高,且可能導緻跟蹤框偏移到非目标對象上。
是以把目标檢測和目标跟蹤功能進行合并,提出了TCNN。TCNN包含兩個子產品,一個是tubelet(tubelet是指目标移動的大緻路徑)目标物體建議子產品,合并了目标檢測和跟蹤方法;另一個是tubelet分類和re-scoring子產品,使用空間最大池化進行處理,并對邊框進行打分,利用時間卷積網絡來結合視訊幀的時間一緻性。
TCNN的實作步驟:
- image object proposal:使用類似Selective Search等方法生成2000個左右候選邊框,因為2000個邊框中大部分都是負樣本邊框,是以使用在ImageNet預訓練的AlexNet網絡對ImageNet中包含的200個類别分别設定一個特定的門檻值,來消除易于分辨的負樣本。
- object proposal scoring:因為VID資料集包含的30個大類别内涵蓋了DET資料集包含的200個小類别,是以可以直接使用為DET資料集設計的檢測方法——使用一個在ImageNet上預訓練并為DET資料集微調的GoogleNet網絡,與RCNN類似,對每個類别需要一個使用conv5生成的特征圖應用困難負樣本挖掘方法(hard negative mining method)訓練出的SVM,是以對VID來說需要30個SVM來區分是目标是背景還是30個類别之一,對一個邊框來說,其SVM得分越高,則其置信度分數越高。
- high-confidence tracking:使用文章《Visual tracking with fully convolutional networks》中的跟蹤器,把置信度最高的邊框作為跟蹤的起點,反向跟蹤到視訊第一幀,正向跟蹤到最後一幀,然後把兩個軌迹合并為一個(因為跟蹤是把最高置信度的邊框作為起點,是以可能會導緻結果偏移到背景或其他對象上,是以設定一個門檻值,當目前跟蹤的邊框的置信度低于門檻值則停止跟蹤)。在得到一個跟蹤軌迹後,在剩餘的邊框中找到置信度最高的邊框對新的對象進行跟蹤(但是因為高置信度邊框一般聚集在一起,聚集在同一物體上,是以使用類似NMS的方法——當某邊框和之前已處理的邊框的重複率高于某一門檻值,則該邊框不會被再次選擇),跟蹤方法反複進行疊代,直至剩餘邊框的置信度均低于某一門檻值(測試得該門檻值0)。
- tubelet box perturbation and maxpooling:該步驟的主要目的是使用高置信度的邊框替代tubelet邊框。首先在現有的tubelet邊框周圍,使用随機擾動(random perturbation)方法生成新的邊框(具體方法是針對坐标進行随機采樣,得到新邊框的左上角和右下角坐标);然後使用與tubelet邊框重複率高于某一門檻值的原始檢測結果替代tubelet邊框(重複率越高置信度越高),同時進行傳統的NMS處理,消除有着低分數的正邊框;最後使用步驟2中的檢測器對剩餘的邊框(增強後的邊框和原始的tubelet邊框)進行打分,通過最大池化方法隻保留最大檢測分數的邊框,
- temporal convolution and re-scoring:因為檢測分數的波動,是以會導緻性能的損失。TCNN使用時間卷積網絡TCN(4層的一維全卷積網絡,對每個tubelet邊框生成時間密集預測)——把一維連續特征(檢測分數、跟蹤分數、anchor offset)作為輸入,輸出0或1(判斷标準是與ground-truth的重複率高于0.5則為1),測試時使用連續的分類分數替代二進制預測值。
TCNN通過對靜态圖像的目标檢測和目标跟蹤方法進行合并,使用時間卷積網絡TCN将時間資訊納入卷積計算,實作了對視訊目标的檢測功能,在一定程度上消除了視訊中出現的稀奇古怪姿勢、視訊虛焦、部分被遮擋、運動模糊等産生的影響,但效果不夠好。
DFF(Deep Feature Flow for Video Recognition)
DFF是把正向回報卷積網絡分解為兩個連續子網絡——第一個是特征網絡(feature network),是一個全卷積網絡,輸出大量中間特征圖(intermediate feature map);第二個是任務網絡(task network),主要負責在特征圖上進行目辨別别和語義分割。
DFF的實作步驟:
- 使用随機梯度下降(SGD)進行訓練,在每個小批量中,一組鄰近幀(關鍵幀Ik,非關鍵幀Ii)被随機采樣(0<= i - k <=9);
- 在前向傳播中,在關鍵幀Ik使用特征網絡進行處理得到特征fk;
- 使用flow網絡處理關鍵幀Ik、非關鍵幀Ii,通過估計得到flow field和scale field。當i>k時,fk被傳到fi(關鍵幀的特征傳播到非關鍵幀的特征中);
-
任務網絡處理fi得到結果yi及其導緻的損失,該損失的誤差梯度被反向傳播以更新全部元件。
值得注意的是,當i=k時,隻使用per-frame network進行訓練。
DFF因為隻需要對稀疏幀進行标記,是以訓練速度很快。per-frame 網絡隻能使用被标記的資料,而DFF可以在幀Ii被标記的情況下使用所有的資料。
關鍵幀的選取——在固定間隔l個連續幀内必有一個關鍵幀。
一些細節部分:
- 關于Flow Network:把标準的FlowNet的結構作為預設,并提出兩個變形以減少複雜度——①FlowNet Half,把FlowNet每層的卷積核減半使得複雜度降為原本的1/4;②FlowNet Inception使用Inception結構使得複雜度降為原本的1/8。三種flow network都在Flying Chairs進行預訓練,輸出stride為4,輸入的圖像是half-size,flow field的分辨率為原始分率的1/8,因為特征網絡的特征stride為16,是以通過雙線性插值将flow field和scale field尺寸縮小一半以适應特征圖的分辨率;
- 關于Feature Network:把在ImageNet上預訓練的ResNet-50和ResNet-100作為預設。特征的stride由32減為16來生成更加密集的特征圖,conv5的第一個子產品的stride改為1,在conv5的所有3×3卷積核上應用holing 算法(dilation=2)以保持視野。在conv5附加一個随機初始化的3×3卷積來把特征的channel減少為1024,并使用holing算法(dilation=6)。得到的1024維的特征圖是後續步驟的中間特征圖;
- 關于Semantic Segmentation:使用随機初始化的1×1的卷積層進行中間特征圖生成C+1分數圖(C個類别+背景),然後使用softmax生成每個像素的機率,是以task網絡隻有一個可學習權重layer;
- 關于Object Detection:使用R-FCN作為預設。兩個部分全卷積網絡為了生成候選區域的子任務和檢測任務,分别在前512維和後512維的中間特征圖上應用。①在生成後續區域的分支,使用RPN。使用9個anchor,兩個1×1的滑動卷積生成18維的客觀分數和36維的邊框回歸值,使用NMS在每個proposal生成300個候選區域,IoU的門檻值設定為0.7 。②在檢測任務分支,兩個1×1的滑動卷積生成位置敏感分數圖和邊框回歸圖,它們的次元分别為(C+1)×K²和4K²(K是分類器/回歸器的數量)。在得到的特征圖上使用ROI池化分别得到每個區域的分類分數和邊框回歸值,最後,在IoU門檻值為0.3的情況下,用NMS生成檢測結果。
DFF的優勢:
- 因為隻在稀疏的關鍵幀進行特征提取,把關鍵幀的特征warp操作後傳播到鄰近的非關鍵幀,是以與之前的視訊目标檢測方法相比速度有了明顯的提升;
- 因為DFF的訓練是對整個模型進行端到端的訓練,可以在訓練過程中更新網絡參數,是以識别準确率也有大幅提升。
DFF存在的不足之處:
- 關鍵幀是通過每l幀選取一個關鍵幀的方法得到的,l是一個固定值。然而當視訊内目标對象的appearance發生劇烈變化時,l的長度也應該随之變化。
- 因為非關鍵幀的特征不是經過CNN計算得到的,而是通過關鍵幀的特征warp後賦予的,是以非關鍵幀特征的representation不如CNN計算得到的特征,其檢測效果也不如CNN得到的特征。
FGFA(Fast Object Detection in Compressed Video)
現有的視訊目标檢測方法都是使用box-level的時間資訊進行檢測,沒有進行端到端的訓練(box-level方法:在單幀中應用檢測器得到候選邊框,在後續步驟中利用時間資訊把檢測得到的邊界框進行合并。一般是依賴現成的光流、手動描述的邊框關聯資訊實作,整體的檢測品質的無法進行提升)。
FGFA是利用時間資訊聚合鄰近幀的特征進而增強目前幀特征的代表性,屬于feature-level方法。
FGFA的實作步驟:
- 對單獨的幀提取特征,生成每幀的特征圖;
- 使用光流網絡估計目前幀及其鄰近幀之間的動作;
- 鄰近幀的特征根據動作流warp到目前幀;
- 把鄰近幀的特征圖和目前幀的特征圖使用自适應權重網絡進行聚合;
- 聚合的特征圖輸入到檢測網絡生成檢測結果。
FGFA利用視訊中短暫時間内對同一物體有多個快照這一特點,對快速移動的物體有較好的檢測效果,但在目标對象的外觀發生劇烈變化,如被遮擋時檢測效果就不那麼理想,不準确的流估計會導緻錯誤的結果。
因為FGFA方法提出的主要目的是增強特征和提升識别的準确率,是以把box-level方法作為後處理方法可以大幅提升輸出結果的準确率。
FMAN(Fully Motion-Aware Network)
目前的主流方法都是通過聚合鄰近幀的特征來增強目前幀的特征,但因為相機和物體的運動,導緻物體的特征通常不能被空間校準(spatial calibration)。
FMAN的實作步驟:
- 把目前幀t及其鄰近幀t-r和t+r作為輸入,輸入到特征提取器,生成三個特征ft-r、ft、ft+r;
- 先在ft-r和ft+r上進行像素級的校準,生成flow field 估計——ft-r→t和ft+r→t,把他們聚合為fpixel ,然後把fpixel 被輸入到RPN生成proposal;
- 在基于區域的檢測器(region-based detector)生成的位置敏感分數圖(position-sensitive score map)上進行執行個體級的校準——在ft-r、ft、ft+r上使用特制的卷積層,生成一組k²(k是鄰近幀數量的取值)個位置敏感分數圖st-r、st和st+r。對st中的第i個proposal,使用執行個體級的方法來遞減st-r中的第i個proposal和st+r中的第i個proposal的對應位置。鄰近幀中的特征和被預測出的proposal被ROI池化,最後聚合為siinsta。
- 因為fpixel也會被基于區域的檢測器處理為第i個proposal的位置敏感分數圖sipixel,根據動态運動路徑把sipixel和siinsta結合在一起。
(執行個體級的方法為:
- 首先使用ROI池化操作生成第i個proposal在(xit,yit,hit,wit)位置的特征mit-r: 其中ROI池化是使用最大池化把特征轉化到一個擁有固定空間範圍的小型特征圖内。
- 然後使用回歸網絡R(·),通過mit-r估計幀t-r和幀t的第i個proposal的movement:
左側的為相關的movement,且R(·)在全連接配接層實作。
值得注意的是,隻有正proposal才能在連續幀内學習到回歸movement。
- 一旦獲得了相關的movement,則可進行特征的校準來增強目前幀的特征。幀It-r的proposal為: FMAN網絡同時在像素級pixel-level和執行個體級instance-level對目标對象進行校準(像素級的校準對細微的運動、柔性運動進行模組化操作非常靈活,執行個體級的校準通過獲得更多的全局運動路徑進而對被遮擋物體檢測具有較高的魯棒性),進而提升了檢測的準确率。
STM(Object Detection with an aligned spatial temporal memory)
STMN是一個RNN結構的網絡,同時學習如何對目标的長期外觀(long-term appearance)運動動力學進行模組化和對齊。核心是STMM——一個卷積循環計算單元,包含在靜态圖像中學習到的權重。因為是使用靜态圖像資料庫的權重,是以對視訊資料集缺少标記資訊的情況不敏感。
為了說明二維空間的視覺資料的本質,STMM在記憶體中存儲每幀的空間資訊;為了實作像素級準确的空間對齊,使用MatchTrans子產品來顯式地模拟跨幀運動引起的位移(詳細過程見下方——時空存儲對齊)。
因為每幀的卷積特征在空間存儲中被對齊和聚合,且存儲中包含多幀的資訊,是以任何目标對象的特征都易于定位。除此之外,每個區域的特征都可以通過存儲中的ROI池化操作而輕易的擷取到。
STMN的實作步驟:
- 将長度為T的視訊序列中的每一幀傳入卷積網絡,得到對應的特征圖F1,F2…FT;
- 每一幀的特征都分别傳入STMM,位于t的STMM的輸入為特征圖Ft和一個時空存儲(spatial-temporally memory)M→t-1(其中内包含前t-1幀的資訊),輸入M→t;
- 為了使目前幀可以使用前後幀的資訊,使用兩個STMM分别擷取M→和M←,把他們連結形成每幀的時間調制存儲(temporally modulated memory)M;
- 因為M中也存儲着空間資訊,是以可以使用後續的卷積層和全連接配接層進行分類和邊框回歸操作;
STMM的實作細節:
- 每一個時間點,STMM都是把Ft和Mt-1作為輸入并進行計算: 其中 ⨀ \bigodot ⨀表示對應元素相乘, ∗ * ∗表示卷積計算, U , W , U r , W r , U z , W z U,W,U_r,W_r,U_z,W_z U,W,Ur,Wr,Uz,Wz都是二維卷積核,門(gate) r t r_t rt掩膜 M t − 1 M_{t-1} Mt−1的元素(即允許其忘記之前的狀态)來生成後續存儲器 M ~ t \tilde{M}_t M~t,門 z t z_t zt指出如何對 M t − 1 M_{t-1} Mt−1和 M ~ t \tilde{M}_t M~t進行權重和合并;
- 為了生成 r t r_t rt和 z t z_t zt,STMM對Ft和Mt-1進行仿射變換,然後使用ReLU進行處理得到最終結果。因為 r t r_t rt和 z t z_t zt是gate,其值隻能為0或1,是以需要進行BatchNorm,這裡使用零均值和機關标準偏差來替代傳統的BatchNorm方法;
- 和标準ConvGRU的兩點差別:①.為了更好的利用權重,需要確定循環單元的輸出和預訓練的權重互相相容,因為标準ConvGRU的輸出值位于[-1,1],與輸入範圍不比對。為了解決這個問題,把标準ConvGRU内的Sigmoid和Tanh替換為ReLU;②使用卷積層的權重對 W z W_z Wz, W r W_r Wr和 W W W進行初始化,而不是随機初始化。從概念上講,這可以看作是一種使用預先訓練的靜态卷積特征映射初始化記憶體的方法。
時空存儲對齊(spatial-temporal memory align)的實作細節:
不使用空間對齊的話,存儲會在目标移動後缺無法忘記它之前的位置,導緻原來的位置會與後續的memory map疊加在一起,參數錯誤的結果産生多個識别框,産生假陽性檢測結果(false positive detection)和不準确的定位,如下圖:
為了緩和這種情況,提出了MatchTrans子產品來對齊幀間的時空存儲。
因為 F t F_t Ft中的(x,y)對應 F t − 1 F_{t-1} Ft−1中(x,y)附近的一塊區域,是以利用這個對應關系可以實作存儲的對齊,來消除沒對齊時産生的錯誤檢測邊框。
為了将時空存儲 M t − 1 M_{t-1} Mt−1進行轉換來與幀t對齊,使用MatchTrans計算特征 F t F_t Ft内位置(x,y)的特征塊 F t ( x , y ) F_t(x,y) Ft(x,y)和其鄰近幀 F t − 1 F_{t-1} Ft−1相同位置特征塊 F t − 1 ( x , y ) F_{t-1}(x,y) Ft−1(x,y)的親和性(affinity),轉換系數 Γ \Gamma Γ:
然後使用 Γ \Gamma Γ将未對齊的空間存儲 M t − 1 M_{t-1} Mt−1轉換為對齊的 M t − 1 ′ M^{\prime}_{t-1} Mt−1′:
MatchTrans與之前的對齊方法相比,因為不需要計算和存儲光流是以更加高效,而轉換系數的擷取過程與之前的方法相比,沒有使用轉換系數去跟蹤和連結檢測結果,而是用來随時間對齊存儲以在每個候選區域産生個呢個好的特征。
最後使用Seq_NMS來確定鄰近幀檢測結果的空間平滑性。
STMN的特點:
- STMN直接在訓練時學習如何整合運動資訊和時間依賴性,因為模型是端到端的訓練,是以速度快。
- STMN隻需要計算一個幀級空間存儲,且它的計算獨立于任何proposal。
- STMN聚合鄰近超過兩幀的資訊,當計算鄰近幀之間的互相關系時,會為了對齊而warp整個特征圖,不僅僅是使用它來預測邊框的偏移。
- 因為STMN使用在圖像資料集訓練得到的權重,是以針對目前視訊資料集标準資訊少的問題不太敏感。
MMNet(Fast Object Detection in Compressed Video)
基于CNN的視訊目标檢測方法都是使用圖像識别網絡提取特征,然後通過特征聚合或邊框分數來利用時間一緻性。盡管這些方法最終提升了檢測效果,但是都伴随着大量的計算,這在視訊長度越來越長的現在變得不再适用。
為了減少計算量,後續的方法如DFF,隻在稀疏的關鍵幀進行特征提取,把關鍵幀的特征warp操作後傳播到鄰近的非關鍵幀。這類方法的關鍵是使用FlowNet進行像素間的位移,但是這類方法花費了額外的時間在FlowNet,因為FlowNet由卷積層組成(卷積計算需要消耗大量時間)。
以上的方法都是把視訊看作是由連續圖像組成,卻忽略了視訊通常是由壓縮格式存儲和傳輸的。把視訊看作一系列連續的靜态圖像并使用不同的方法來恢複運動軌迹是非常耗時且備援的。
MMNet(motion aided memory network )——對視訊中的一組連續圖像(GOP),在參考幀上應用使用特征提取器生成金字塔型特征(pyramidal feature);MMNet把上述的特征作為輸入,利用運動向量和殘差錯誤生成後續幀的特征。與之前方法隻能傳播進階特征不同,因為memory network由金字塔特征組成,是以可以處理不同尺寸大小(multi-scale)的對象。雖然伴随微量的準确度下降,但MMNet比R-FCN快3倍,比MANet快10倍。
MMNet的實作步驟:
- 在參考幀It應用特征提取器,得到金字塔型特征flt(l是網絡的index);
- flt作為輸入(一般隻選取f3t、f4t、f5t作為輸入),通過memory network中的pyramid feature attention子產品生成ftatten;
- memory network中的motion-aided LSTM子產品利用ftatten和運動向量mt+1、殘差錯誤rt+1生成幀It+1的特征圖ct+1和隐層特征ht+1;
- 對後續的幀It+j(j∈[2,n]),利用上一幀的特征圖ct+j-1、隐藏層特征ht+j-1和目前幀的運動向量mt+j、殘差錯誤rt+j,通過motion-aided LSTM子產品得到相應的特征圖和隐藏層特征,重複該操作,直至得到GOP内所有幀的特征圖;
- 把GOP内所有的特征圖聚合并傳入檢測網絡R-FCN中,同時得到檢測邊框。
MMNet直接可以在壓縮視訊上使用,在視訊流中使用運動資訊存儲和傳播而不是建立其他的模型來恢複運動路徑,是以速度比之前的方法速度要快。
MMNet的優勢:利用了編碼解碼器處理過程中存在的運動信号和殘差錯誤,無需額外計算;因為特征金字塔的原因,是以memory network可以處理不同大小的對象;明顯的提升了處理速度,但伴随少量準确率下降。
Conclusion
總體來說,視訊目标檢測方法的發展為——首先移植靜态圖像目标檢測方法到視訊目标檢測領域進行檢測,但是對視訊中獨有的運動模糊、視訊虛焦、稀奇古怪的姿勢等非常敏感,導緻其檢測效果并不理想;然後專為視訊目标檢測設計了新的算法,如TCNN、DFF、MMNet等,雖然它們的檢測效果比原本的靜态圖像目标檢測方法好很多,但也都存在自己的缺陷,如準确率還不夠高或計算量大、速度慢等。目前的視訊目标檢測算法的準确率已經很高了,但是準确率和速度之間的權衡做的還不夠(速度快的準确率不夠高,準确率高的速度不夠快,或者是模型的訓練十分耗時),在我看來,視訊目标檢測領域接下來的研究方向應該是在保持準确率的前提下,再對模型的處理速度進行提升,或對模型的訓練速度進行提升——找到新的辦法來減少卷積計算、提取更具代表性的特征等。