新智元推薦
來源:極市平臺&知乎
編輯:SF
【新智元導讀】Transformer有可能替換CNN嗎?本文總結了來自於知乎問題:「如何看待Transformer在CV上的應用前景,未來有可能替代CNN嗎?」下的3個精華回答,對Transformer在CV領域的未來發展提出了有價值的觀點。
目前已經有基於Transformer在三大圖像問題上的應用:分類(ViT),檢測(DETR)和分割(SETR),並且都取得了不錯的效果。那麼未來,Transformer有可能替換CNN嗎,Transformer會不會如同在NLP領域的應用一樣革新CV領域?後面的研究思路可能會有哪些?
湃森:要從方法提出的動機來剖析
回答這個問題,筆者認為可以從方法提出的動機來剖析比較合適,即為什麼我們需要它;而不是簡單的「存在即合理」,大家皆用我也用的風向標。
Why CNN?
首先我們應該了解為什麼CNN會在圖像領域被大規模應用,我們可以從三個主要點說起,比如基於傳統的方法,基於模式識別的方法,基於深度學習的方法。
1. 傳統方法在視覺任務上的應用絕大多數都依賴於在某個領域具有豐富經驗的專家,去針對具體的任務設計出一組最具有代表性的數據表示來作為輸入特徵進行處理,使得特徵之間具備可區分性,典型的有SIFT。
其次,一些特徵提取的方法也需要人為的參與,手工設計出一些特徵提取算子,比如一些經典的邊緣檢測算子,水平檢測,垂直檢測等。
然而, 一方面需要依賴專家手動設計特徵的方式所需要的先驗知識多,模型的的性能也極其依賴於其所設計出來的數據表示 ,這樣一來不僅費時費力,而且也很難針對實際場景中複雜多變的任務去設計出一種合適的算子,不具備泛化性。
另一方面,受制於數據採集的環境,設備等影響,比如光照,拍攝視角,遮擋,陰影,背景等等,這些因素會嚴重製約模型的性能,即手工設計的特徵並不具備魯棒性。
2. 基於模式識別的方法大多數是一些與機器學習相關的技術,比如隨機森林,支持向量機,感知機等。
機器學習較傳統方法的一個顯著優勢就是,可以避免人為進行純手動設計特徵 ,它能夠學習出一組從輸入的數據表示到輸出的映射這一套規則。
比如AutoEncoder便能夠從一組輸入中學習出另一組數據的表示,雖然生成的結果基本是模糊的。儘管這些方法具有以上的優勢,但是如何學習高效的學習出一組更合適的映射規則是關鍵。
對於高效性來說,以感知機為例, 它利用多個MLP來進行特徵的學習從而來表徵輸入數據 。但是這樣有很明顯的缺陷,一方面計算量是非常龐大的,另一方面直接將輸入flatten為一個列向量,會破壞圖像中目標原有的結構和上下文聯繫。
在此基礎上,我們可以繼續優化它,把它推廣到更一般的表示——CNN,MLP其實是CNN的一種特例。
3. 基於深度學習的方法在圖像識別領域最典型的應用便是CNN 。CNN是一種分層(hierarchical)的數據表示方式,高層的特徵表示依賴於底層的特徵表示,由淺入深逐步抽象地提取更具備高級語義信息的特徵。
比如第一層更傾向於提取邊緣,角點,線條等low-level的特徵,第二層提取顏色,紋理等mid-level的特徵,第三層提取更具抽象語義的high-level的特徵。網絡的深度有助於模型提取更抽象地高級特徵,網絡的寬度有利於模型提取更豐富的特徵表示。
這種連接主義 (connectionism)本質上是一種解決問題很好的思路,每一層都學習各自簡單的表示,但最後通過連接起來,卻形成了強大的(powerful)的特徵表徵能力!
此外,CNN還具有一個非常重要的特性,它是通過共享卷積核來提取特徵,這樣一方面可以極大的降低參數量來避免更多冗餘的計算從而提高網絡模型計算的效率,另一方面又結合結合卷積和池化使網絡具備一定的平移不變性(shift-invariant)和平移等變性(equivariance)。
當然,對於分類任務來說,我們是希望網絡具備平移不變性的特點,而對於分割任務來說我們則更希望其具備平移等變性,不過這些都是後話,在這裡不展開闡述。因此,這便是CNN如何學習高效的學習出一組更合適的映射規則的關鍵。
雖然CNN具備如此多的優點,但不是一開始就一蹴而就,也並不是完美無瑕的。
以圖像分割為例,在全卷積神經網絡FCN提出以前,大多數基於CNN的方法都是基於Patch-wise即將圖像塊作為輸入輸入到CNN中去進行相應類別預測,這種方式一來計算非常冗餘,二來也缺乏充足的上下文信息。
所以為什麼FCN會這麼有影響力,甚至可以稱為是一個mile-stone的網絡,就在於它真正意義上將patch-wise做到了pixel-wise,這對於語義分割這種密集型任務來說是至關重要的。
當然,FCN也存在許多的缺點,諸如分割結果粗糙等,當這並不妨礙我們基於它的思想去進行很多的拓展。
比如最近幾年提出的很多分割論文都是針對它去進行改進,有人提倡改善編碼器利用更強大的卷積模塊去提取更具備代表性的特徵。
有人熱衷於改善解碼器,比如引入跳躍連接操作來彌補編碼器下採樣過程中空間細節信息的丟失從而來實現更精準的定位,關於如何跳躍又是一個問題,有直接連線的Unet。
繼而 有人又藉助語義鴻溝(semantic gap)或者背景噪聲幹擾這些口去突破 ,利用多個卷積去消除,結合高級特徵的強語義和低級特徵豐富的細節信息去指導融合的也有,另外還有藉助注意力方式去消除歧義和抑制背景噪聲的也大有人在。
除了編解碼器之外,我們借用特徵金字塔的思想還可以結合多層的結果去融合輸出,得到一個更加細化的特徵表示。在拋掉模型本身,也可以從任務本身下手,從全監督到半監督,自監督,few-shot learning,ome-shot learning,甚至是無監督域等等也有很多方向可以突破。
其他視覺任務如分類,檢測或者low-level的任務如超分,去噪等也可以此類比,很多人寫不來論文或者解決不了問題的關鍵點在於根本沒發現問題在哪裡,又何談解決問題。
Why transformer?
目前為止,我們已經簡要的總結了CNN為什麼會被提出以及它的優勢在哪。
儘管CNN存在以上優勢,比如它利用卷積核或濾波器不斷地提取抽象地高級特徵,理論上來說其感受野應該能覆蓋到全圖, 但許多研究表明其實際感受野遠小於理論感受野,這不利於我們充分的利用上下文信息進行特徵的捕獲 ,雖然我們可以通過不斷的堆疊更深的卷積層,但這顯然會造成模型過於臃腫計算量急劇增加,違背了初衷。
而transformer的優勢就在於利用注意力的方式來捕獲全局的上下文信息從而對目標建立起遠距離的依賴,從而提取出更強有力的特徵。
因此,我們並不需要說一味的拋棄CNN,或許可以轉換下思路把兩者結合起來,將transformer當做是一種特徵提取器利用起來,再結合CNN的一些優勢去解決現有的問題。
對於接下來這個方向的思考,筆者推測當過了這把trasformer的新鮮勁,即在各個任務上都利用transformer替代一遍後, 未來的工作更多的是結合這兩者 ,來實現一個更優或者說是一個更reasonable的結果,讓我們拭目以待。
總的來說,每一種技術的提出,都會受到當時所處環境或多或少的影響,然後通過不斷地發現問題,提出問題,再到解決問題這樣一步步不停地迭代。
從宏觀角度上來看, 一個學科技術要發展的更快更好,其中的一個很重要原因便是具備普適性。
個人認為這一點非常重要,普適性意味著入門門檻低,這樣湧入這個圈子的人就多,形成的「泡沫」就大,資本才會為其買單,真正意義上潛心研究的專家才能更被凸顯出來,才能有更充足的經費和動力去研究,去突破現有的技術將知識的邊界不斷的拓寬,利用科技造福人類。
當然,這裡面必定夾雜著許多魚龍混雜的人或物,但是只要宏觀方向把握得當,制度制定得比較完善,就能夠避免「泡沫」的幻滅,整體維持一個健康向上的發展。畢竟,任何事物都具備兩面性,發展是一把雙刃劍。
唯有寄希望於巨頭公司和機構有更大的擔當,當好這個時代的領頭羊和風向標,在制度的籠子下引領著這個時代朝著健康向上的道路去發展,而不是諸如一窩蜂的跑到菜市場去搞「社區團購」之類的割韭菜活動,而是應該做到真正意義上的「科技向善」。
齊國君:CNN和Transformer在處理視覺信息上各有優缺點
CNN網絡在提取底層特徵和視覺結構方面有比較大的優勢。這些 底層特徵構成了在patch level 上的關鍵點、線和一些基本的圖像結構 。這些底層特徵具有明顯的幾何特性,往往關注諸如平移、旋轉等變換下的一致性或者說是共變性。
比如,一個CNN卷積濾波器檢測得到的關鍵點、物體的邊界等構成視覺要素的基本單元在平移等空間變換下應該是同時變換(共變性)的。CNN網絡在處理這類共變性時是很自然的選擇。
但當我們檢測得到這些基本視覺要素後, 高層的視覺語義信息往往更關注這些要素之間如何關聯在一起進而構成一個物體,以及物體與物體之間的空間位置關係如何構成一個場景 ,這些是我們更加關心的。目前來看,transformer在處理這些要素之間的關係上更自然也更有效。
從這兩方面的角度來看,將CNN在處理底層視覺上的優勢和transformer在處理視覺要素和物體之間關係上的優勢相結合,應該是一個非常有希望的方向。
小小將:足夠大的參數+好的訓練方法,三層神經網絡可以逼近任何一個非線性函數
先簡單來看一下transformer在分類,檢測和分割上的應用:
(1)分類 ViT: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
把圖像分成固定大小的patchs,把patchs看成words送入transformer的encoder,中間沒有任何卷積操作,增加一個class token來預測分類類別。
(2)檢測 DETR:End-to-End Object Detection with Transformers
先用CNN提取特徵,然後把最後特徵圖的每個點看成word,這樣特徵圖就變成了a sequence words,而檢測的輸出恰好是a set objects,所以transformer正好適合這個任務。
(3)分割 SETR:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
用ViT作為的圖像的encoder,然後加一個CNN的decoder來完成語義圖的預測。
當然,目前基於transformer的模型在分類,檢測和分割上的應用絕不止上面這些,但基本都是差不多的思路。
比如ViT-FRCNN:Toward Transformer-Based Object Detection這個工作是把ViT和RCNN模型結合在一起來實現檢測的。
關於transformer更多在CV上的工作,可以看最新的一篇綜述文章:A Survey on Visual Transformer
這裡來談一下自己幾點粗鄙的認識:
(1)CNN是通過不斷地堆積卷積層來完成對圖像從局部信息到全局信息的提取,不斷堆積的卷積層慢慢地擴大了感受野直至覆蓋整個圖像;但是transformer並不假定從局部信息開始,而且一開始就可以拿到全局信息,學習難度更大一些,但transformer學習長依賴的能力更強。
另外從ViT的分析來看,前面的layers的「感受野」(論文裡是mean attention distance)雖然迥異但總體較小,後面的layers的「感受野「越來越大,這說明ViT也是學習到了和CNN相同的範式。
(2)CNN對圖像問題有天然的inductive bias,如平移不變性等等,以及CNN的仿生學特性,這讓CNN在圖像問題上更容易;相比之下,transformer沒有這個優勢,那麼學習的難度很大,往往需要更大的數據集(ViT)或者更強的數據增強(DeiT)來達到較好的訓練效果。
好在transformer的遷移效果更好,大的數據集上的pretrain模型可以很好地遷移到小數據集上。還有一個就是ViT所說的,transformer的scaling能力很強,那麼進一步提升參數量或許會帶來更好的效果(就像驚豔的GPT模型)。
(3)目前我們還看到很大一部分工作還是把transformer和現有的CNN工作結合在一起,如ViT其實也是有Hybrid Architecture(將ResNet提出的特徵圖送入ViT)。
而對於檢測和分割這類問題,CNN方法已經很成熟,難以一下子用transformer替換掉,目前的工作都是CNN和transformer的混合體,這其中有速度和效果的雙重考慮。
另外也要考慮到如果輸入較大解析度的圖像,transformer的計算量會很大,所以ViT的輸入並不是pixel,而是小patch,對於DETR它的transformer encoder的輸入是1/32特徵這都有計算量的考慮,不過這肯定有效果的影響,所以才有後面改進工作deform DETR。
短期來看,CNN和transformer應該還會攜手同行 。最新的論文Rethinking Transformer-based Set Prediction for Object Detection,還是把現有的CNN檢測模型和transformer思想結合在一起實現了比DETR更好的效果(訓練收斂速度也更快):
(4)這我想到了神經網絡的本質:一個複雜的非線性系統來擬合你的問題。無論是CNN,RNN或者transformer都是對問題一種擬合罷了,也沒有孰優孰劣。
就一個受限的問題來看,可能有個高低之分,但我相信隨著數據量的增加,問題的效果可能最終取決於模型的計算量和參數,而不是模型是哪個,因為之前的工作已經證明:一個三層神經網絡可以逼近任何一個非線性函數,前提是參數足夠大,而且更重要的是你找到一個好的訓練方法。
未來雖然很難說,但依然可期!
【1】https://www.zhihu.com/question/437495132/answer/1656908750
【2】https://www.zhihu.com/question/437495132/answer/1658559732
【3】https://www.zhihu.com/question/437495132/answer/1656610825