????這一陣子源于好奇心,我把Google出的Inception系列文章粗略讀了一遍,當(dāng)然這中間還讀了這個(gè)算法的引子NiN,還有就是這中間有一篇叫做Xception的文章,不過這篇文章似乎是講深度可分離網(wǎng)絡(luò)的,之前在做實(shí)驗(yàn)和讀MobilenetV1的時(shí)候稍微接觸過,關(guān)于它以后再寫吧!
????首先來講講NiN(Network In Network),這篇文章不是來自Google,但它對(duì)Inception的產(chǎn)生起了非常重要的作用,打一個(gè)不恰當(dāng)?shù)谋确剑喈?dāng)于Selective Search 對(duì)RCNN系列文章的推動(dòng)一樣。好了,廢話不多說。NiN的創(chuàng)新點(diǎn)有2個(gè):
????1. 采用mlpconv的結(jié)構(gòu)來代替?zhèn)鹘y(tǒng)的卷積層。所謂mlpconv層其實(shí)就是傳統(tǒng)的卷積層后面加了兩個(gè)串聯(lián)的全連接層,在實(shí)際代碼中,全連接層是用1x1的卷積層實(shí)現(xiàn)的。所以mlpconv=傳統(tǒng)conv+1x1conv+1x1conv。再說地通俗點(diǎn)NiN就是在原來的2個(gè)傳統(tǒng)的卷積層中間又加了2個(gè)全連接層來提升網(wǎng)絡(luò)抽取特征的能力,因?yàn)閭鹘y(tǒng)的卷積層可以認(rèn)為是線性模型,局部接收域上的一小塊數(shù)據(jù)跟卷積核加權(quán)求和,再激活,它的抽取能力不夠;
????2. 將原來的最后的全連接層替換成了全局平均池化層。全連接層容易造成過擬合而且非常依賴Dropout技術(shù),再者就是參數(shù)量大,如今大部分高性能模型基本在最后放全局平均池化層。
講完引子NiN,正式進(jìn)入Inception系列算法,先來說說InceptionV1(GoogLeNet), Inception的文章其實(shí)不確切地講就是在兩個(gè)卷積層之間做手腳,V1最初的版本是拓寬了網(wǎng)絡(luò)的寬度,產(chǎn)生了4部分:1x1conv、3x3 conv、5x5 conv、3x3 max pooling,之所以拆成這么多是考慮到了抽取不同尺度特征的問題。隨后在V1上的改進(jìn)是引進(jìn)了1x1卷積,先來介紹一下它的作用:
????1. 實(shí)現(xiàn)跨通道的交互和信息整合;
????2.? 對(duì)輸出通道進(jìn)行升、降維。
在這里是用來降維減少計(jì)算量的,具體怎么減少參數(shù)量的我就不詳細(xì)介紹了,其他博客有很多講這個(gè)的,其實(shí)在NiN就已經(jīng)提出了1x1卷積的方法,只是到了InceptionV1才得到重視,1x1卷積在殘差網(wǎng)絡(luò)的殘差塊中也有大量使用,升降維都用到了。接下去的模型我就講重點(diǎn)部分,論文中的細(xì)節(jié)我就不多講了,主要是我自己有些細(xì)節(jié)也沒看懂。
? ? ?再就是InceptionV2,V2主要結(jié)合了當(dāng)時(shí)最新的批量歸一化技術(shù)(BN),防止過擬合,在訓(xùn)練時(shí)加速收斂,我首次接觸到BN是在當(dāng)時(shí)用Tensorflow做cafir10分類,效果的確很出色。V2就是將原來V1中的5x5conv換成了兩個(gè)3x3conv,主要是5x5conv計(jì)算量太大,因?yàn)閮蓚€(gè)3x3conv的感受野跟一個(gè)5x5conv的感受野是一樣的,但計(jì)算量小了從5x5→2x3x3。
????V3是在V2的基礎(chǔ)上運(yùn)用高數(shù)里矩陣相乘的原理對(duì)nxn又進(jìn)行了拆分,變成了1xn和nx1,然后組成了兩種并行和串行模塊,論文本身串行用的是n=7,并行是n=3,????? V3其他兩個(gè)改進(jìn)是把網(wǎng)絡(luò)開頭的7x7卷積改成了3個(gè)3x3卷積,目的還是在感受野不變的情況下降低計(jì)算量,然后就是把V2的模塊跟新改進(jìn)的2個(gè)模塊(并行、串行)堆疊起來形成一個(gè)新網(wǎng)絡(luò),反正Inception系列算法就是不斷拆,拆到滿意為止。還有就是提出了縮減模塊,通過減少特征圖大小來減少計(jì)算量,其里面的結(jié)構(gòu)跟Inception模塊相似。
????V4還有Resnet-InceptionV2 兩者性能差不多,但V4訓(xùn)練時(shí)收斂速度慢一點(diǎn),這兩個(gè)模型是在同一篇論文中提出來的,其實(shí)還有個(gè)Resnet-InceptionV1,不過它不是重點(diǎn),只是個(gè)過渡角色,這里我不講。先吐槽一下這篇文章,結(jié)構(gòu)圖真的是多,看其他文章我都嫌圖太少,這下真是滿足了。V4還有Resnet-InceptionV2的區(qū)別就是網(wǎng)絡(luò)的后半部分,后者用了恒等映射,前者沒用。兩者有一個(gè)共同的結(jié)構(gòu)是stem模塊,這個(gè)模塊挺復(fù)雜的,不過主要的思想是并行連接,其實(shí)這也是殘差網(wǎng)絡(luò)里殘差塊的思想,所以這也很好解釋V4的后半段沒有用恒等映射,卻跟用了恒等映射的Resnet-InceptionV2性能差不多。兩者后半段,其實(shí)跟V3差不多,V4的后半段起碼跟V3一樣,Resnet-InceptionV2因?yàn)榧恿撕愕扔成淙コ薎nception模塊里的max pooling。(其實(shí)我一直沒搞明白Inception模塊里面的max pooling是用來干嘛的?)
????總體Inception系列文章看下來收獲還是很大的,不過就是頭很大,留下的唯一印象就是拆拆拆。這個(gè)系列的文章主要以略讀為主,代碼我沒有去分析,我本身是做圖像的,經(jīng)常在論文中看到這些模型所以就找出來看看,如有講的不對(duì)的地方,懇請(qǐng)大家指正。