本文介紹 萬字長文盤點2021年paper大熱的Transformer(ViT)git
This article was original written by Jin Tian, you are welcomed to repost, first publish at blog.tsuai.cn. Please keep this copyright info, thanks, any question could be asked via wechat:
jintianiloveu
github
好久未寫文章了,在這以前,請容許我打個廣告,因爲github.io再也沒法溫馨的訪問了(由於你懂得緣由),我將博客指向了個人國內域名:blog.tsuai.cn , 不按期的會更新一些技術文章,感興趣的朋友能夠了解一下,固然你也能夠關注個人知乎帳號,我也會不定義的再知乎更新.算法
這篇文章主要是一篇Medium文章的翻譯,但我會加入一些我本身的理解和查閱的資料補充知識點,但願給你們一個transformer使用的全貌,水平有限,若有不足還請友情指點.原文地址在最下方參考連接處.markdown
不少時候提到transformer你們確定會想到facebook的那篇DETR,而我更想從這篇文章開始,也就是來自谷歌大腦團隊的這篇:一張圖片值16x16個字:網絡
爲何想從這篇文章開始呢?由於這是谷歌大佬的論文.這篇文章講的不是注意力機制簡單的嵌套改改模型骨幹去跑benchmark, 也不是講如何將transformer用在某個特定的任務,而是探究了視覺任務自己,如何將其從傳統的CNNs當中剝離,而且達到現有的高度,是一篇2021年必看的論文.在講解谷歌大腦團隊如何牛逼以前,咱們先來作一個總結吧.看看過去的一年中,在視覺領域(包括3D點雲)你們都用它來幹啥了.架構
開始以前,仍是回顧一下transformer在NLP領域的巨大成功吧!相比搞NLP的同窗應該或多或少都認同一個觀點:Transformer已經成了NLP的標配,有多標配?就好比我3年前搞NLP的時候LSTM統一天下通常.大名鼎鼎的GPT-3也是基於transformer的巨大模型,並得到了NIPS2020最佳論文獎.app
那麼在2021年的視覺領域,transformers也會像在NLP領域同樣如日中天嗎?事實上,使用transformer進行視覺任務的研究已經成了一個新的熱點,你們爲了更低的模型複雜度以及訓練的效率,都在研究如何將這一技術應用在視覺任務上.ide
在過去的一年裏,至少這幾篇論文是頗有用的工做,他們就是在於transformer構建的模型,而且在各方面的指標上超越了許多領先的傳統方法:oop
一般來講,有兩個比較大的架構,在全部的關於transformer的論文以及工做中,其中一個就是傳統的CNNs加transformer組合而成的結構,另外一種是純粹的Transformers.post
其中ViT那篇論文,也就是開頭講到的谷歌大腦的那篇,使用的就是純粹的transformer去完成視覺任務,也就是說,它沒有使用任何的CNNs. 我知道你如今很想知道這句話是什麼意思,爲何說沒有用到任何CNNs,彆着急,我會在本文的最後一個內容講解這個東西,有時間我會作一塊兒視頻,結合谷歌開源的代碼來和你們一行代碼一行代碼去推敲,爲何.但如今你們只要知道它是一個純粹的transformer就能夠了.
那什麼東西是混合的transformer呢?好比DETR這篇論文,它其實是採用了transformer的一個思想,但在特徵提取的骨幹網絡上,並無太多的變化.咱們能夠稱之爲混合型的transformer.
寫到這裏,不少好奇的寶寶就會產生不少問題了:
很好,你已經學會了問問題,而這些問題都將不是本文要解答的內容,由於過於硬核.但我會嘗試深刻谷歌大腦的ViT,去和你們一塊兒弄清楚這些問題的答案.事實上,要弄清楚其中一個和很基礎的問題,咱們須要把場景切換一下,先來看看如何展現以一個transformer,而且知道注意力機制爲何有用.
關於講解transformer的視頻,我這裏推薦一個YoutuberUP主的視頻,可是因爲你懂得緣由,你可能沒法觀看,因而我廢了九牛二虎之力將其搬運到了Bilibili,就充這個嚴謹,你們能夠給我可憐的B站帳號點個贊,同時關注一波,如今只有5個粉絲,可憐.
言歸正傳了,關於注意力機制,仍然是主推這篇論文:attention is all you need, 連接請看腳註.有童鞋可能會問,你發的貌似都是講NLP的視頻和論文,和視覺怎麼聯繫起來呢?沒錯,咱們如今討論的transformer, 其實就是NLP裏面的transformer.
接下來咱們就進一步的講解一下ViT.
這是谷歌大腦那篇論文中的一張圖.回到文章一開始提出來的問題,爲何我要拿這篇文章來說解transformer.如同我在上一節提到的,transformer分爲純粹與混合,而這篇文章,是第一篇純粹討論並使用transfomer來進行視覺基礎任務(分類)的論文.
這也是它的價值所在,谷歌大腦團隊在幾乎沒有修改任何基於NLP的transformer的結構基礎之上,只是將輸入進行了一個適配,將圖片切分紅許多的小格,而後將這些做爲序列輸入到模型,最終完成了分類任務,而且效果能夠直追基於CNNs的SOTA.
他們的作法也十分的簡單,將圖片切分能夠完美的構形成一個序列的輸入,幾乎能夠無縫的接入到transformer的輸入中.而爲了進一步的保持這些小格子之間的局部與總體關係,對於每個patch都保持着和原圖對應的編號.這能夠很好的保持空間和位置的信息,即使在打亂他們的順序以後這些信息也能夠獲得保留.固然在論文的源文中,他們也作了使用和不使用這個空間編碼方式的對比實驗,感興趣的同窗能夠仔細閱讀原文看看.
這篇論文也直接和傳統的CNNs進行了對比,他們在不一樣的數據集上進行了預訓練, 好比:
這些數據集之大,達到了史無前例的地步,以致於他們訓練時間單位不是Days, 而是k days:
2.5k天,若是不是谷歌大佬誰能作這樣的論文,哎.咱們來看看ViT的效果,事實上,ViT的模型也和BERT同樣,我甚至認爲谷歌其實一直想作一個和BERT同樣的工做,在視覺領域,兩者的確也被谷歌的研究者們很好的結合在了一塊兒.他們的模型分爲,Large, Base, Huge. 在Large的模型上,它的精確度已經超越了Resnet152x4. 並且看起來訓練的時間更短.
這篇文章的一個有趣的結論,也是咱們的直覺,transformer在數據的尺度不大的時候,表現是很差的.話句話說,訓練一個transformer須要一個足夠大的數據集.
這張圖能夠看出,當數據的數量不夠的時候,它的精確度也不夠好.
咱們以前講到,對於transformer的結構,咱們有徹底替代CNNs的ViT, 咱們也有部分替代的DETR這樣的結構,那麼到底什麼樣的架構是最優的呢?谷歌的這張圖,也給咱們揭示了一些答案:
這篇文章是第一篇使用transformer作目標檢測的論文,固然它是咱們前面所述的混合類型的模型.放到今天來看,DETR也存在一些缺點,儘管它在指標上能夠達到FasterRCNN這樣的水準,好比它在小物體檢測上表現出一些能力不足的跡象,而現現在也有一些論文去改進它,好比DeformableDETR, 感興趣的同窗能夠仔細看看他們,但這些改進不是本文的核心要點,咱們仍是來回顧一下DETR裏面使用transformer的思想.
這個模型的特色是:
這樣的結構,相好比傳統的目標檢測,至少終結掉了achor的設定,而且去掉了冗餘的NMS. 這些手工的操做被摒棄,儘管他們在現現在的目標檢測算法中仍然發揮出巨大的做用.
DETR真正牛逼的地方,其實不是它在目標檢測的效果,而是當咱們把它擴展到全景分割上所展現出來的驚人效果:
那麼他們是怎麼作的呢?全景分割其實是兩個任務,一個是語義分割,這個任務將類別和每一個pixel對應起來,另外一個是實例分割,這個任務會檢測每一個目標,而且將這些目標區域分割出來.而DETR將這兩者結合到了一塊兒,而且展現出了使人驚奇的效果.
在這篇論文中,一個有趣的boners是來自於這個算法對於重疊目標的區分能力,這其實也反映出了注意力機制的巨大做用,而transformer自己就是一個巨大的注意力機制引擎.好比他們能夠很好的區分這些高度重疊在一塊兒的物體:
回到咱們一開始講到的OpenAI的DELL-E, 這個工做展現了transformer的強大能力,然而在這以前,他們就已經作了一些相關的工做,其中的Image GPT就是一個基於GPT-2構建的圖片填補模型.在這裏我須要插一句,正如同Le-CUN所說,transformer真的很擅長來作填補的工做,彷彿他們天生就是如此.
Image GPT使用圖片的像素序列來生成圖片,它能夠遞歸的來預測圖片中的下一個像素.Image GPT的工做亮點是:
事實上,OpenAI可能就是基於這一工做,再結合文本的GPT-3, 完成了使人經驗的DELL-E.
咱們在這篇文章中回顧了一些比較著名經典的transformer的工做,它展現了一個全新的視覺方向.這可能也是2021的一個重要的主線之一.
寫這篇文章還有一個目的,不只僅是總結,更多的是啓發你們一個方向,這個結構徹底不一樣於傳統的CNNs,它賦予模型的是全新的表達局部與總體,甚至是時域和空間的關係,GPT3的成功也暗示咱們這個方向可能如同CNNs同樣,開啓一個全新的視覺時代,由於它可以讓超大規模訓練成爲可能,而且能夠像BERT同樣成爲全部其餘任務的預訓練基石. 在我寫這篇文章的時候,OpenAI剛剛發佈他們的新一代文本到圖片生成模型,DELL-E,這個模型展現了模型如何深入學習到天然語言與圖形的關係,而且兩者完美的融合與應用,也進一步啓發咱們:也許基於這個全新的架構,將來的視覺學習到的不只僅是紋理等的特徵,而可能進一步的學習更高階的信息,好比和天然語言聯繫起來的模型,試想如今的目標檢測只告訴你這裏是0 or 1 or 2 or 3, 之後的目標檢測可能直接告訴你這是table, 這是apple, 剩下的讓模型來推理.
總而言之,對於一些新的技術熱點,咱們仍是要充滿想象力的.在不遠的將來,或許視覺任務也能夠像GPT3同樣,真正的接近人的推理特徵,這或許是技術迭代的轉折點.
關於更多的transformer的細節以及代碼解讀,我會在後面的章節中繼續爲你們講解,以爲有用的老鐵能夠關注一波個人知乎帳號,並點個贊,牛年快樂.