论文阅读之Siamese RPN以及一些其他内容的补充
siameseRPN
是在fc的基礎上 多了尺度檢測能力RPN的引入,使得Siamese網絡自然擁有了多尺度檢測的能力(通過anchor機制cover各種size),并且可以準確地回歸出目標的位置及大小。
是在離線訓練的基礎上不更新模型,利用一種端到端的輸出其實本質上是一種rnn模式,關于尺度的大小變化可根據圖像金字塔得到。圖像金字塔具體是怎么進行的?是在檢測分支中添加了rpn結構其中利用了元學習以及一次性學習問題。相對于之前的siamesefc和cenet是添加了邊界框回歸的方法。且利用了圖像對輸入視頻進行單目標追蹤,對于很多初級CVer會直接認為目標追蹤就是對每一幀的detection。其實這是不準確的,這樣做一來運算速度慢(實時性不好),二來performance也難以理想,三來只能針對你能識別的目標進行tracking。
1,VOT單目標追蹤是有規則的:給你一段視頻,然后在視頻的第一幀給一個bbox(框住你要tracking的對象),然后要在視頻播放的過程中一直tracking這個對象。整個tracking過程是一個offline(線下)的,也就是local one-shot detection tas。也就是元學習。 ————————————————
2,元學習就是學會學習,這樣就可以快速學習,利用元學習的算法一次性學習。是訓練一個核心指導網絡。每一個訓練任務我們都構造一個行動網絡(Actor Network),但是我們只有一個核心指導網絡(Meta-Critic Network),這個網絡包含兩部分:一個是核心價值網絡(Meta Value Network),另一個則是任務行為編碼器(Task-Actor Encoder)。我們用多個任務同時訓練這個Meta Critic Network。訓練方式可以是常見的Actor-Critic。訓練時最關鍵的就是Task-Actor Encoder,我們輸入任務的歷史經驗(包括狀態state,動作action,和回饋reward),然后得到一個任務的表示信息z,將z和一般價值網絡的輸入(狀態state和動作action)連接起來,輸入到Meta Value Network中
其中利用了元學習的方法也就是learn to learn 。
3,關于元學習,基于記憶的方法,網絡的輸入與上此的標簽y作為輸入,并且也儲存了上次的x輸入,在下一次輸入時可以進行反向傳播,也可以添加監督機制使得標簽y和x建立了聯系使得之后的x能夠通過外部記憶獲取相關圖像進行比對來實現更好的預測。
本文加入的元學習的方法是基于預測梯度的方法,實現快速學習,而快速學習的關鍵一點是神經網絡的梯度下降要準,要快,那么是不是可以讓神經網絡利用以往的任務學習如何預測梯度,這樣面對新的任務,只要梯度預測得準,那么學習得就會更快。其實關于讓神經網咯更快的方法也可以利用加入注意力機制的方法,一直將注意力集中在感興趣的位置。訓練一個attition模型。
構造一個attention機制,也就是最后的label判斷是通過attention的疊加得到的
attention a則通過g和f得到。基本目的就是利用已有任務訓練出一個好的attention model。
4,平移不變性(translation invariant)指的是對于同一張圖及其平移后的版本,都能輸出同樣的結果。這對于圖像分類(image classification)問題來說肯定是最理想的,因為對于一個物體的平移并不應該改變它的類別。而對于其它問題,比如物體檢測(detection)、物體分割(segmentation)來說,這個性質則不應該有,原因是當輸入發生平移時,輸出也應該相應地進行平移。這種性質又稱為平移等價性(translation equivalence)。這兩個概念是比較混淆的,但確實是兩個不同的東西。
一般來說,一個神經網絡的性質,要么是從它本身使用的結構得到的,要么是從它在數據集中學到的參數得到的。
(1)卷積層:在信號處理中,卷積操作(以及相關操作)的性質包含了平移等價性。對于共享權值的卷積層來說,只在平移量為stride的整數倍時平移等價性才嚴格成立。池化層:普通池化層中,均值池化等價于固定卷積核的卷積層。全局池化層有一點的位移不變性,整個cnn結構其實不具有平移不變性,但是當只有當位移是整個網絡的降采樣倍數的整數倍才存在,所以對于平移不變性概率很難存在,所以可以用來分類的平移不變性主要來源于參數。對于其中用到的crop就是對應的patch之間的變換平移,也沒有周圍的黑邊padding。會經常用stride為2的卷積層來替代池化層(等價降采樣)針對池化弱的平移不變性損失的信息。
就是CNN的平移不變性主要是通過數據學習來的,結構只能帶來非常弱的平移不變性,而學習又依賴于數據增強中的裁切,裁切相當于一種更好的圖像平移。
4,經過第一幀給出的bbox也就是邊界框框住tracking的對象),然后要在視頻播放的過程中一直tracking這個對象。整個過程一直是線下的即local one-shot detection task。首先得找到這個對象的訓練集,才能對每一幀可以跟蹤。對于SIAMfc是利用了互相關的操作,就是卷積核提取第一幀的特征。卷積操作就在檢測幀中找到與首幀目標相似的目標,通過輸出的FeatureMap的score來體現。可以看到最后的輸出是一張17x17的score map。其中的z是模板圖像時bbox框住的范圍中的x,y,w,h參數預處理之后變成的z。中間的fai變換就是;利用卷積層和padding,將原始圖像處理是一個提取函數,訓練出來就是FC訓練目標。后面的卷積操作兩個特征映射的卷積操作。
5,但是bbox不變 所以RPN加入了多尺度預測。提取的特征圖像只有第一幀太單一。https://blog.csdn.net/leviopku/article/details/80875368 這個時RPN的解釋。
不同的是SiamFC把輸出直接用來進行相關濾波(圖1中的??),而SiamRPN接入的是一個RPN(有2個分支:分類、回歸)。回歸就是利用的bbox回歸,利用給出的偏移量(dx, dy, dw, dh)。
關于bbox的回歸?這個是關于fasterd的解釋:https://www.cnblogs.com/wangyong/p/8513563.html。
其實是一種基于CNN的目標檢測方法,Faster RCNN首先使用一組基礎的conv+relu+pooling層提取input image的feature maps,該feature maps會用于后續的RPN層和全連接層。
RPN網絡主要用于生成region proposals,首先生成一堆Anchor box,對其進行裁剪過濾后通過softmax判斷anchors屬于前景(foreground)或者后景(background),即是物體or不是物體,所以這是一個二分類;同時,另一分支bounding box regression修正anchor box,形成較精確的proposal(注:這里的較精確是相對于后面全連接層的再一次box regression而言)。
Roi Pooling:該層利用RPN生成的proposals和VGG16最后一層得到的feature map,得到固定大小的proposal feature map,進入到后面可利用全連接操作來進行目標識別和定位
Classifier: 會將Roi Pooling層形成固定大小的feature map進行全連接操作,利用Softmax進行具體類別的分類,同時,利用L1 Loss完成bounding box regression回歸操作獲得物體的精確位置。
1,卷積層:faster RCNN首先是支持輸入任意大小的圖片的,比如上圖中輸入的PQ,進入網絡之前對圖片進行了規整化尺度的設定,如可設定圖像短邊不超過600,圖像長邊不超過1000,我們可以假定MN=1000600(如果圖片少于該尺寸,可以邊緣補0,即圖像會有黑色邊緣)
① 13個conv層:kernel_size=3,pad=1,stride=1;
卷積公式:
所以,conv層不會改變圖片大小(即:輸入的圖片大小=輸出的圖片大小)
② 13個relu層:激活函數,不改變圖片大小
③ 4個pooling層:kernel_size=2,stride=2;pooling層會讓輸出圖片是輸入圖片的1/2
經過Conv layers,圖片大小變成(M/16)(N/16),即:6040(1000/16≈60,600/16≈40);則,Feature Map就是6040512-d(注:VGG16是512-d,ZF是256-d),表示特征圖的大小為6040,數量為512。
2,RPN:Feature Map進入RPN后,先經過一次33的卷積,同樣,特征圖大小依然是6040,數量512,這樣做的目的應該是進一步集中特征信息,接著看到兩個全卷積,即kernel_size=11,p=0,stride=1;
如上圖中標識:
① rpn_cls:6040512-d ⊕ 1151218 ==> 604092
逐像素對其9個Anchor box進行二分類
② rpn_bbox:6040512-d ⊕ 1151236==>604094
逐像素得到其9個Anchor box四個坐標信息(其實是偏移量,后面介紹)
https://www.cnblogs.com/wangyong/p/8513563.html
滑窗 前景分類和回歸層
(2.1)、Anchors的生成規則
前面提到經過Conv layers后,圖片大小變成了原來的1/16,令feat_stride=16,在生成Anchors時,我們先定義一個base_anchor,大小為1616的box(因為特征圖(6040)上的一個點,可以對應到原圖(1000600)上一個1616大小的區域),源碼中轉化為[0,0,15,15]的數組,參數ratios=[0.5, 1, 2]scales=[8, 16, 32]
先看[0,0,15,15],面積保持不變,長、寬比分別為[0.5, 1, 2]是產生的Anchors box
如果經過scales變化,即長、寬分別均為 (168=128)、(1616=256)、(16*32=512),對應anchor box如圖
綜合以上兩種變換,最后生成9個Anchor box
上面是一個特征圖產生的anchor
其中iou是兩個bbox的重疊度,
關于樣本的標記:
① 去除掉超過1000*600這原圖的邊界的anchor box
② 如果anchor box與ground truth的IoU值最大,標記為正樣本,label=1
③ 如果anchor box與ground truth的IoU>0.7,標記為正樣本,label=1
④ 如果anchor box與ground truth的IoU<0.3,標記為負樣本,label=0
剩下的既不是正樣本也不是負樣本,不用于最終訓練,label=-1
這個anchor通俗來講就是設定的框不會隨物體的變大變小而變動。把anchor框的位置(x, y)和大小(w, h)進行調整,所以只需要得到偏移量
(dx, dy, dw, dh),原參數加上偏移量就可以得到最后的bbox了。
本文的文章沒有padding,利用了修改后的alexnet,修改了stride,使得網絡輸出特征圖的高度和寬度與以上相匹配,conv1的目的是對來自template的特征進行通道數提升。將其變為(2kX256)個通道后,再經過切分,變成四維的變量(4X4X2kX256),才能作為卷積核。為了與template保持一致,圖中對detection也進行了相應操作(即conv2),但保持detection的維度不變。
CNN中所謂的“卷積”絕大多數情況下指的是互相關操作),相當于用template在detection進行搜索。圖中的k表示anchor的數量(論文中取k=5)。在RPN中,分類分支的輸入應當具有2k個通道,分別表示k個anchor是前景還是背景的模型預測與Faster-RCNN差不多,添加了一些tricks。具體步驟如下:
1、對于coutput,首先扔掉其邊緣,即僅保留與中心距離小于某閾值的輸出。由于相鄰的幀變化不大,故這一步可過濾掉outliers;
2、使用cosine window。cosine window的本質也是對遠離邊緣的數據進行抑制。
3、使用下圖所示的penalty。這一步的目的是對相鄰兩幀之間過大的形狀和尺度變化進行抑制
5,對coutput的各個位置的score進行比較,從而得到coutput最大值所在的位置。然后一方面得到了該位置所對應的anchor,另一方面根據該位置得到routput中的相應元素,確定該anchor的四個偏移量(dx, dy, dw, dz),根據anchor的坐標及偏移量就能得到預測框。這一過程其實就是構造rlabel的逆過程。
6,EAO:是指所有幀重合率的平均值。
準確率(Accuracy):成功跟蹤時的幀占總幀數的比例。所謂“成功跟蹤”是指重疊率大于某個閾值的那些幀。
失敗率(Failure):一定長度的幀數之內,重合率小于某個閾值的次數。在VOT或OTB數據集上,每當重合率小于某個閾值時,會進行復位,所謂“復位”也就是把ground truth告訴模型。
EFO:表示歸一化后的跟蹤速度。具體做法是在同一臺設備上用《跟蹤算法處理每幀圖像的時間》除以《用30*30的窗口對600×600的圖像做濾波操作的時間》。
7,對于cnn網絡用的vgg用于跟蹤的層數和參數量特別少,因為VGG這些網絡是學到的每一類物體的特點,故測試時可以輸出物體的類別,但是siamese學到的并不是物體的特點,而是通過這些物體來學習物體形變的特點,只學習了物體形變的特點所以需要的層數比較少。本文最多也就用到了四層。強調的是一種動態的感覺。而不是這個物體的特征信息。
一點思考:
圖片上具有較大語義信息的都會被很好的區分,但是fc并不能區分不同的物體,是因為加了窗函數,將周邊的物體抑制掉了,猜測在跟蹤的評價數據集中,大部分也是目標物體周圍的其他物體較少,因此才能有不錯的表既然網絡所學習到的特征不夠好,那么只需要學習到好的特征好就行了,一個很容易想到的方法就是增大數據集,但是直接簡單粗暴的增大數據集會有用嗎?這里作者進行了分析,直接用訓練集中的視頻查看網絡提取特征的區分能力,發現在訓練集中網絡也不能區分開目標前景以及其他的干擾前景,然后得出結論直接加數據是不行的,這里我感覺,可就是因為訓練集中,目標物體附近的干擾物太少,網絡在學習的過程中,只學習目標物體與背景之間的區別就可以了,這樣就可以使loss降低了,因此我覺得,簡單的加數據沒有用,但是添加一些有干擾物的訓練集是不是會有用呢?后面
訓練集使用的是ILSVR2015和YOUTOBE 包含的種類有限,故又引入了COCO數據集,通過增強手段比如(平移、調整大小、灰度化等)來擴充了正樣本對的種類。為了提高判別能力,在負樣本中,作者發現有語義的背景和類內干擾物都很少,所以增加了不同類別的困難負樣本來避免跟蹤結果飄逸,以及增加了相同類別的困難負樣本來更加關注目標的細節表達。
在應對長時跟蹤問題時在短時跟蹤失敗時利用局部到全局的搜索策略重新檢測目標。
關于Siamse RPN原文閱讀筆記
http://openaccess.thecvf.com/content_cvpr_2018/papers/Li_High_Performance_Visual_CVPR_2018_paper.pdf
論文鏈接
摘要
視覺目標跟蹤在這些年來已經成為一個基礎的主題,許多基于深度學習的跟蹤器在多個跟蹤基準上已經取得了優越的性能。但是大多數人性能優越的跟蹤器很難有實時速度。在這篇文章中,作者提出了孿生候選區域生成網絡(Siamese region proposal network),簡稱Siamese-RPN,它能夠利用大尺度的圖像對離線端到端訓練。具體來講,這個結構包含用于特征提取的孿生子網絡(Siamese subnetwork)和候選區域生成網絡(region proposal subnetwork),其中候選區域生成網絡包含分類和回歸兩條支路。在跟蹤階段,作者提出的方法被構造成為單樣本檢測任務(one-shot detection task)。作者預先計算孿生子網絡中的模板支路,也就是第一幀,并且將它構造成一個檢測支路中區域提取網絡里面的一個卷積層,用于在線跟蹤。得益于這些改良,傳統的多尺度測試和在線微調可以被舍棄,這樣做也大大提高了速度。Siamese-RPN跑出了160FPS的速度,并且在VOT2015,VOT2016和VOT2017上取得了領先的成績。
————————————————
現代的跟蹤器分為兩個分支,一個是基于相關濾波的,通過探索卷積操作和在傅里葉域的操作訓練一個回歸,可以進行在線跟蹤和更新濾波器的權重,最近的相關濾波是利用深度特征來提高精度,但是很大的損失了模型更新的速度。另外一個分支是借用強烈的深度特征并且不更新模型。此方法不更新模型,所以性能方面不如基于相關濾波的方法。當然,如果微調網絡的話,速度會變得非常慢。
本文是離線訓練好的基于深度學習跟蹤器,主要是提出了Siamese-RPN結構,不同于標準的RPN,作者在相關特征圖譜上提取候選區域,然后作者將模板分支上的目標外觀信息編碼到RPN特征中來判別前景和背景。
在跟蹤階段,作者將此任務視為單目標檢測任務(one-shot detection),什么意思呢,就是把第一幀的BB視為檢測的樣例,在其余幀里面檢測與它相似的目標。
綜上所述,作者的貢獻有以下三點:
提出了Siamese region proposal network,能夠利用ILSVRC和Youtube-BB大量的數據進行離線端到端訓練。
在跟蹤階段將跟蹤任務構造出局部單目標檢測任務。
在VOT2015, VOT2016和VOT2017上取得了領先的性能,并且速度能都達到160fps。
2.相關工作
2.2 RPN
說了這么多,那到底什么是RPN呢?
RPN即Region Proposal Network,首先是在Faster-RCNN中提出的,用于目標檢測。分為兩個支路,一個用于分類前景和背景,一個用于邊界框回歸。
通俗來講,就是用RPN來選擇感興趣區域的,即proposal extraction。例如,如果一個區域的p>0.5,則認為這個區域中可能是我們想要的類別中的某一類,具體是哪一類現在還不清楚。到此為止,網絡只需要把這些可能含有物體的區域選取出來就可以了,這些被選取出來的區域又叫做ROI (Region of Interests),即感興趣的區域。當然了,RPN同時也會在feature map上框定這些ROI感興趣區域的大致位置,即輸出Bounding Box。
這篇文章有詳細的講解:http://lib.csdn.net/article/deeplearning/61641
不得不去了解的幾個知識有:
anchor box
翻譯為錨點框,就是通過RPN對每個錨點上的k個矩形分類和回歸,得到感興趣區域。每個anhcor box要分前景和背景,所以cls=2k;而每個anchor box都有[x, y, w, h]對應4個偏移量,所以reg=4k
Bounding Box Regression
對每個錨點上預定義的k個框進行邊界框回歸,來更好的框住目標,具體操作會在后文講。
2.3 One-shot learning
最常見的例子就是人臉檢測,只知道一張圖片上的信息,用這些信息來匹配出要檢測的圖片,這就是單樣本檢測,也可以稱之為一次學習,可以觀看吳恩達的相關視頻課上有講解.https://mooc.study.163.com/learn/2001281004?tid=2001392030#/learn/content?type=detail&id=2001728700
另一方面,元學習方法旨在獲得學習的能力,也就是說,意識到并控制自己的學習。利用神經網絡預測目標網絡在反向傳播過程中的梯度。
雖然這些基于元學習的方法取得了較好的效果,但這些方法往往是基于分類任務進行評價的,很少有擴展到跟蹤任務的。
3.Siamese-RPN framework
左邊是孿生網絡結構,上下支路的網絡結構和參數完全相同,上面是輸入第一幀的bounding box,靠此信息檢測候選區域中的目標,即模板幀。下面是待檢測的幀,顯然,待檢測幀的搜索區域比模板幀的區域大。中間是RPN結構,又分為兩部分,上部分是分類分支,模板幀和檢測幀的經過孿生網絡后的特征再經過一個卷積層,模板幀特征經過卷積層后變為2k*256通道,k是anchor box數量,因為分為兩類,所以是2k。下面是邊界框回歸支路,因為有四個量[x, y, w, h],所以是4k.右邊是輸出。
3.1 孿生特征提取子網絡
在siam網絡中采用一個沒有padding的全卷積網絡,讓lt表示轉換操作 (L τ x)[u] = x[u?τ],然后所有的padding操作滿足以下全卷積的步長~
h(L kτ x) = L τ h(x)
利用alex網絡修正,從第二層以及第四層修正。
3.2 候選區域提取子網絡
分類支路和回歸支路分別對模板幀和檢測幀的特征進行卷積運算:
如果有k個錨,網絡需要輸出2k個信道進行分類,4k個信道進行回歸。
首先兩兩相關的部分增加?的chan -內爾(z)兩個分支(?(z)] cls和[?(z)] reg 2 k和4 k次通道分別由兩個康沃變頻器——全局層
4k通道向量代表了dx dy dw dh 來度量在錨和groundtruth的距離。
在訓練網絡時。采用用于快速rcnn的損失函數。分類損失為交叉熵損失,采用具有歸一化坐標的光滑l1損失進行回歸。設A x, A y, A w, A h表示錨盒的中心點和形狀,T x, T y, T w, T h表示真值框的中心點和形狀。故歸一化距離公式見上 上面一行四個的那個。
對損失函數優化:
啦木塔是超參數 為了平衡這兩部分,然后LCLS是交叉熵 ,
3.3 訓練階段:端到端訓練孿生RPN
因為跟蹤中連續兩幀的變化并不是很大,所以anchor只采用一種尺度,5中不同的長寬比[0.33, 0.5, 1, 2, 3]
當IoU大于0.6時是前景,小于0.3時是背景.。
且在仿射變換中采用了一些數據填充。
4. Tracking as one-shot detection
在本節中,我們首先將跟蹤任務定義為局部一次檢測任務。然后,對該解釋下的推理階段進行了詳細的分析,并對推理階段進行了仿真,以提高推理速度。最后介紹了一些具體的策略,使該框架適合于跟蹤任務。
4.1. Formulation
它的目的是找到最小的參數W - 最小化預測函數ψ的平均損失L (x; W)。它是計算n樣本x和對應的數據集- ing標簽?
平均損失函數為:
我們提出了一種基于元學習過程的單模板學習預測器參數W的方法
一個相應圖的前饋函數,zi是模板樣本,
z 表示模板分支,x是檢測分支,函數fai是孿生特征提取子網絡,并且函數kesai 是區域生成網絡,故一次性檢測任務可由一下方程表示:
這張圖直觀的表示出了將跟蹤當做的單樣本檢測任務,模板幀在RPN中經過卷積層, φ(x)reg \varphi(x){reg}φ(x)
reg
?
和φ(x)cls \varphi(x){cls}φ(x)
cls
?
當做檢測所用的核。
中心距離為7,仔細看圖可以看出,每個網格都有k個矩形。
第二步,用余弦窗和尺度變化懲罰來對proposal進行排序,選最好的。余弦窗是為了抑制距離過大的,尺度懲罰是為了抑制尺度大的變化。具體公式可看論文。
用這些點對應的anchor box結合回歸結果得出bounding box:
an就是anchor的框,pro propro是最終得出的回歸后的邊界框
至此,proposals set就選好了。
然后再通過非極大抑制(NMS),顧名思義,就是將不是極大的框都去除掉,去除冗余的重疊框,具體操作就是先選擇一個置信度最高的框,其余的框與之的IoU大于某個閾值,就剔除掉,從未處理的框中繼續選一個得分最高的,重復上述過程。
最后得出最終的跟蹤目標BB。
實驗
總結
以上是生活随笔為你收集整理的论文阅读之Siamese RPN以及一些其他内容的补充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取MapString,sitemap中的
- 下一篇: Matlab增加块注释