基於深度學習的目標跟蹤演算法是否可能做到實時?
1、基於DL的tracker主要慢在哪裡?
2、真的有必要放棄finetune,從而犧牲精度,像GOTURN一樣追求100FPS嗎?
基於深度學習的演算法的實時性是可以解決的。但是需要注意幾個問題。
1、必須運行在GPU上。單純那些主流演算法的網路在CPU上跑一次前向運行都在100ms這個級別。裁剪網路不是跟蹤領域解決的問題。
2、千萬不能採用粒子濾波框架,使用這個框架,就註定了你不可能實時。粒子數再少也要幾十個,這時候抽特徵,gpu都扛不住。你可以說使用ROI pooling,但你有沒有發現上ROI pooling的演算法(SINT)不在線學習(是他不能在線學習)。ROI存在的對齊問題是跟蹤無法容忍的(這可以在Mask RCNN放出代碼後部分解決)。MDNet升級到TCNN都沒有採用ROI pooling我認為原因就在這。
3、使用超快速的學習演算法。BP用來做實時演算法不現實,finetune就算再怎麼優化,也需要幾個前後向傳播,那就是幾倍的時間。常用的技巧是稀疏的更新策略,最開始第一幀迭代的多一些,後面只做少量更新。但,只要更新,就會很慢。此外,哪怕是ECO,進行了那麼多優美的優化還是離實時差一個數量級(CNN特徵的版本)。
總結,
1.需要gpu
2.不能用粒子濾波
3.finetune不能用bp。只能用確定性的快速方法實現。
下面簡單看一下一些思路去做加速和改進思路。
MDNet的加速實現,一次抽取特徵,然後使用ROIAlign: ,這個特徵抽取的過程能提速不少,後面的沒法加速。尤其是在線還要去優化後面的三個fc,想想都爆炸。
GOTURN,這個速度已經沒法優化了,甚至只能複雜化(沒有記憶,所以賦予它記憶,或者多模版策略搞起來),只能工程化的優化網路。還有一點就是,誰要能想到一種方式去優化他的訓練過程,我覺得也是很好的,他的訓練是存在偏見的,此外後面的fc過多,容易過擬合。
SiameseFC,這篇不用說了,必然是大熱。至少我覺得影響力可以在擴展很多,最近我對他的分析表明,這個演算法非常適合固定場景下的跟蹤,他可以學習到什麼是背景。想像一下,那個cross correlation是一種距離度量,在他的嵌入空間內,實際上有上億張子圖像去拉伸這個嵌入空間,得到的很大程度都可以理解為前景metric learning,後景直接剔除。所以感官上認為非常適合固定場景,這也是為什麼深度學習不能再類似的庫上訓練的原因之一吧,你直接記下了哪些是背景,相類似的測試庫場景差不多。前景就算有區分,背景都知道了,也算過擬合(對背景的過擬合)。這個演算法如果硬要找缺陷,存在幾個問題,第一點是網路的結果沒有對齊,我不能理解為什麼要乘以16,乘以stride是正確的,本身相關操作的起點就不是crop的左上角,真正的起點是以左上角為起點的小區域(exemplar)的中心。此外就是cross correlation是對於每個位置貢獻一樣的,例如左上角和右下角以及中心的貢獻都是相同的,這就是問題。
寫了這麼多當然是想宣傳下自己的工作,去年看到第一時間看到SiameseFC,便覺得,這個方法甚好,想到上述的一起缺陷後就想著的如何改進。當然,作者肯定要比我快的多,第一時間做了改進CFNet,發表在CVPR2017上了。不談介紹工作,光是講下這樣做的初衷,以及我的做法的初衷。CFNet的初衷就是改進濾波器,把直接用範例的特徵作為濾波器換成CF學習出來的濾波器,這樣也就解決了貢獻一致的問題。至此這篇文章的核心已經結束,其他都是為了這個目的包裝服務的。作者的實驗態度和數學功底都是我們應該學習的。
這樣做的優點。
1.end-to-end的學習;
2.使用學習得到的濾波器;
3.可以在線更新濾波器(finetune)。這部分證明了想要在線finetune是可能的,但是必須依託在一個快速的學習演算法的基礎上。
不足
性能比不過SiameseFC,這個已經在我的DCFNet上面被解決了。但是本質問題可能會在我後面的工作中解決。或者別人發表了,我會在zhihu上做更新。
DCFNet生下來就是一個悲劇的作品,和CFNet撞車。
下面說工作,這裡就不說不同點了,直說初衷。大家已經感受到被KCF統治的跟蹤領域了可怕了。今年CVPR有12篇單目標跟蹤文章,其中的8篇是使用相關濾波的方法。
從深度學習的角度考慮,這種方法就是一個尺度為crop大小的1channel的卷積核或者一個輸出的fc。更新的參數遠少於GOTURN,MDNet等方法,而且居然還是線性的,那。。。overfitting的概率要遠低於3層fc的。
同時,這傢伙太完美了,竟然有閉式解,而且還是超快速的解,作為網路來學習就太爽了,一個字就是快。因此,這也是可以end-to-end學習的最核心因素。
說一些論文裡面沒有的,我做這篇的起點和Luca完全不同,他是siamesefc的作者,想的是如何改進siamesefc。我就單單只想改進KCF,所以我最初的設想是end-to-end的學習,然後學習一個比HOG要好的特徵。想想看,網路可以擬合一切,HOG特徵不照樣可以學習,我先設計一個小網路學習出完美的HOG(用無窮多的樣本供學習),有了這樣的網路,我的模型起點就是KCF的結果,下限有保證。然後利用這個網路在跟蹤數據上訓練,肯定會有提升,這樣就很輕鬆的得到一個優於HOG的特徵。論文前後都想好怎麼撰寫了。。。。然而訓練HOG處就卡殼了,訓練不出來。想的很簡單,當時各種感受野什麼的設計都就計算的非常精確,但就是訓練發散,卡了很久。。。再到後來看到牛津組如何使用神經網路來替代HOG的文章。Orz。
這步跳過之後我就直接去推後面的過程了,枯燥,跳過。
再說一個關於網路的理解的問題,因為比不過MDNet就沒有寫在文章里,但實際上是我非常想表達的,也是一定的乾貨。既然CF可以理解為網路的最後一層,那麼我們實際上得到的是一個MultiDomain的學習,為什麼這麼說,想想MDNet是如何做的,每個視頻作為一個Domain,然後學習從中抽取大量的樣本,標號正負訓練一個。共享前面的卷積特徵,每個Domain單獨使用後面的fc。那對於DCFNet呢。我是兩個圖片pair做訓練,但是別忘了,CF方法實際上是循環樣本,這樣子就產生了一樣的大量樣本,同樣是共享卷積特徵,也同樣的是每個Domain單獨的fc。只是,我的最後一個fc是快速的閉式解,這可以讓我在上百萬個Domain上做訓練,學習到更加通用的特徵。
奈何性能不如MDNet,所以就沒法把這種理解寫到論文裡面,希望有人可以解決。我甚至可以告訴你大概要怎麼做,成也KCF,敗也KCF,循環樣本使得學習到的特徵和最後的檢測都不理想,如果可以用 BACF的方法去end-to-end學習,那我認為有理由取得類似MDNet的性能。但是,沒有閉式解,誤差也就很難回傳了。唉,也許可以被解決,但是我還沒有想到。
最後,在推一下我的項目 ,GPU上可以達到100FPS,性能要好於CFNet以及SiameseFC。
DCFNet: Discriminant Correlation Filters Network for Visual Tracking
foolwood/DCFNet以及我的跟蹤領域最近發展的主頁,
foolwood/benchmark_results基於深度學習的目標跟蹤演算法是可以做到實時的,比如像SiameseFC, GOTURN等的確是做到實時了,不過不要忘記這裡的實時是在GPU的條件下。
1. 基於DL的Tracker主要慢在哪裡?
這個問題我的看法是慢在兩個點,第一個是前向提取特徵(網路結構大小),像GOTURN,前向conv層用的是CaffeNet的conv層,是個比較小的網路,SiameseFC用的是類似AlexNet的conv層,也是小網路。而且他們每幀只前傳一張圖片。MDNet也是一個小網路,但是它一次前傳256proposals,這就比前傳一張慢了。
第二點是fintune。這點毋庸置疑,畢竟一個網路的參數量很大,更新起來需要時間。
2. 真的有必要放棄finetune,從而犧牲精度,像GOTURN一樣追求100FPS嗎?
這點關鍵看演算法的側重點了。像GOTURN 和SiameseFC這兩個演算法就是沖著速度去的,那麼肯定不會做finetune。MDNet,C-COT等是沖著精度去的,自然要做finetune。
是否要為了速度放棄精度,具體任務具體對待。
上面大家都回答的很好了,我再說一點(一本正經臉~~~~)
1、基於DL的tracker主要慢在哪裡?
①訓練,數據量小的話效果不好,數據量大的話訓練時間長,不過有硬體支持之後還好點。
②特徵提取,深度tracker除了end-to-end這些,其他都是深度提取特徵,使用其他tracker跟蹤,時間都浪費在特徵提取上面了,真正跟蹤時間還是很快的。
③為了精度不要速度是現在大多數paper的共性,這個也是一個原因(哈哈)
2、真的有必要放棄finetune,從而犧牲精度,像GOTURN一樣追求100FPS嗎?
首先解釋一下finetune有什麼用吧,finetune就是用別人訓練好的模型,加上我們自己的數據,來訓練新的模型。finetune相當於使用別人的模型的前n層來提取淺層特徵,然後加上我們的東西不管是分類還是檢測等。好處就是不需要完全重新訓練模型,從而提高效率,當數據量不夠大的時候,這會是一個很好的選擇。
所以,finetune是在訓練過程使用的,訓練網路使用的,如果網路訓練的很好了,那你就不需要了啊,像GOTURN這些他們感覺訓練很好了,而且需要速度,不會再去做這些耗時間的事了。
還有一點就是,考慮速度和精度,當然是看你要做什麼了,你要做的事情對速度沒有要求,他是100FPS和0.1FPS對你所做的事情沒有影響,只要精度能達到預設要求,管他幹嘛;但是你要是做的事情比如車流量檢測或者安保這方面的話,肯定是速度要高啊,別犯罪分子都跑了幾天了,你這結果出來了,那就沒什麼用了啊。
———————————————————————————————————————————
說的不好,大家理解~~~~有不對的地方歡迎大家指出交流,及時修改,以免誤人子弟。
完全可以,工程實踐的時候,往往會針對應用場景做優化,第一步的裁剪網咯結構,修改數據精度。就能降200M的模型精簡到10M內,然後再加上一個好的平台,跑起來比傳統檢測更好,更輕鬆
可以做到實時~
1. 慢在哪裡??深度網路前向計算提特徵並不慢啊
2. 放棄finetune? 不理解這個問題。 finetune是在訓練過程中用到的,而網路一旦訓練完畢,在用於測試時速度還是很快的~至於快到什麼程度,取決於網路結構和硬體平台,但是肯定沒你想的那麼慢
不知道回答清楚了沒~( ̄▽ ̄~)~
以上如果攝像頭是不動的話,那就很容易了。我的畢業論文就做了類似的東西,思路是background subtraction,然後聚類出有運動的區域,用一個深度網路對這些區域進行分類,整理一下結果就可以了。
這個之所以能達到實時,是因為它的候選區域變得很少,只有K個,這個K視運動場景而定。而faster rcnn卻要1000-2000個(另,我不熟悉用深度學習做跟蹤的,只了解做檢測的,不過檢測做得好,也等價於跟蹤了),YOLO的候選區域也很多。慢在採樣和更新。SiameseFC和GOTURN都是沒有在線更新,是實時的深度學習跟蹤演算法,在線更新網路的參數肯定會很慢,而且容易過擬合,CVPR17的CFNet結合相關濾波器做在線更新,網路模型小到幾百k,效果也還不錯。
連秒拍都做到實時了,國內至少5家可以做到實時tracking人臉,和身體輪廓。。。
而且連iphone6都不用,就1000+的國產手機就可以實時。。。
主要靠砍網路,說出來你可能不信,VGG19你砍掉10層,一大半參數,相對性能下降5%都不到
NVIDIA jetson tx2滿足你
像ssd、yolo多目標檢測都能做到實時,檢測速度也能達到50幀以上,如果在優化一下程序、加上硬體提升,速度還可以提高很多。還是要看目的是什麼,準確率和速度達到一個最優配比可能是最好的!
推薦閱讀:
※如何評價谷歌的xception網路?
※怎麼看今天Amazon發布的16 GPU的p2.16xlarge EC2實例?
※深度學習中為什麼普遍使用BGR而不用RGB?
※支持多label的caffe,有比較好的實現嗎?
※如何評價谷歌最近在人臉數據集上取得驚人效果的BEGAN模型?
TAG:機器學習 | 計算機視覺 | 深度學習DeepLearning |