/* 版權(quán)聲明:可以任意轉(zhuǎn)載悬槽,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必標(biāo)明文章原始出處和作者信息 .*/
faiculty: 機(jī)器學(xué)習(xí)、計(jì)算機(jī)視覺(jué)后裸、語(yǔ)音識(shí)別算法學(xué)習(xí)筆記
微信公眾號(hào)旋讹、知乎專(zhuān)欄殖蚕、簡(jiǎn)書(shū),請(qǐng)搜索: faiculty
1. 前言
VGG是牛津大學(xué)計(jì)算機(jī)視覺(jué)組(Visual Geometry Group)和Google DeepMind公司研究員一起研發(fā)的深度卷積神經(jīng)網(wǎng)絡(luò)沉迹。
VGGNet 探索了卷積神經(jīng)網(wǎng)絡(luò)的深度與其性能之間的關(guān)系睦疫,通過(guò)反復(fù)堆疊3x3的小型卷積核和2x2的最大池化層,VGGNet 成功地構(gòu)筑了16~19層深的卷積神經(jīng)網(wǎng)絡(luò)鞭呕。VGGNet 相比之前 state-of-the-art 的網(wǎng)絡(luò)結(jié)構(gòu)蛤育,錯(cuò)誤率大幅下降,并取得了 ILSVRC 2014 比賽分類(lèi)項(xiàng)目的第2名和定位項(xiàng)目的第1名。
同時(shí) VGGNet 的拓展性很強(qiáng)缨伊,遷移到其他圖片數(shù)據(jù)上的泛化性非常好摘刑。VGGNet 的結(jié)構(gòu)非常簡(jiǎn)潔,整個(gè)網(wǎng)絡(luò)都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)刻坊。到目前為止枷恕,VGGNet 依然經(jīng)常被用來(lái)提取圖像特征(!L放摺P炜椤)。VGGNet 訓(xùn)練后的模型參數(shù)在其官方網(wǎng)站上開(kāi)源了灾而,可用來(lái)在 domain specific 的圖像分類(lèi)任務(wù)上進(jìn)行再訓(xùn)練(相當(dāng)于提供了非常好的初始化權(quán)重)胡控,因此被用在了很多地方。
2. 網(wǎng)絡(luò)結(jié)構(gòu)
下圖就是VGG-net家族的網(wǎng)絡(luò)結(jié)構(gòu)圖旁趟。
2.1 結(jié)構(gòu)解讀
==基本參數(shù)==:
- 一共有A昼激、A-LRN、B锡搜、C橙困、D、E耕餐,6個(gè)網(wǎng)絡(luò)凡傅。其中的D、E也就是我們常說(shuō)的VGGNet-16肠缔、VGGNet-19
- conv(receptive field size) - (number of channels)
- 論文中全部使用了3x3的卷積核 和 2x2的池化核,卷積步長(zhǎng)為1
- 都采用Relu作為激活函數(shù)
==卷積核采用3x3 夏跷?==
VGGNet 擁有5段卷積,每一段內(nèi)有2~3個(gè)卷積層明未,同時(shí)每段尾部會(huì)連接一個(gè)最大池化層用來(lái)縮小圖片尺寸槽华。每段內(nèi)的卷積核數(shù)量一樣,越靠后的段的卷積核數(shù)量越多:64 – 128 – 256 – 512 – 512趟妥。其中經(jīng)常出現(xiàn)多個(gè)完全一樣的3x3的卷積層堆疊在一起的情況硼莽,這其實(shí)是非常有用的設(shè)計(jì)。如下圖所示煮纵,兩個(gè)3x3的卷積層串聯(lián)相當(dāng)于1個(gè)5x5的卷積層懂鸵,即一個(gè)像素會(huì)跟周?chē)?x5的像素產(chǎn)生關(guān)聯(lián),可以說(shuō)感受野大小為5x5行疏。而3個(gè)3x3的卷積層串聯(lián)的效果則相當(dāng)于1個(gè)7x7的卷積層匆光。除此之外,3個(gè)串聯(lián)的3x3的卷積層酿联,擁有比1個(gè)7x7的卷積層更少的參數(shù)量终息,只有后者的一半夺巩。最重要的是,3個(gè)3x3的卷積層擁有比1個(gè)7x7的卷積層更多的非線(xiàn)性變換(前者可以使用三次 ReLU 激活函數(shù)周崭,而后者只有一次)柳譬,使得 CNN 對(duì)特征的學(xué)習(xí)能力更強(qiáng)。
[圖片上傳失敗...(image-904a64-1515727838537)]
==C中采用了1x1的卷積核续镇?==
我想是用來(lái)做對(duì)比試驗(yàn)美澳,1x1的卷積核可以在沒(méi)有改變、影響卷積感受野的情況下增加線(xiàn)性變換次數(shù)摸航,而保持輸入通道數(shù)和輸出通道數(shù)不變制跟,沒(méi)有發(fā)生降維。
2.2 訓(xùn)練
文章中將224x224作為網(wǎng)絡(luò)的training scale
1. 小批梯度下降方法
論文中的原話(huà)為: the training is carried out by optimising the multinormial logistic regression objective using mini-batch gradient descent(based on bp) with momentum.
翻譯: 使用加動(dòng)量的隨機(jī)梯度下降方法來(lái)優(yōu)化Logistic回歸(SGD+momentum)
- 動(dòng)量: 0.9
- 批數(shù): 256
- 權(quán)值衰減:5x10^-4酱虎,(weight decay)
- 前兩個(gè)全連接層使用dropout為: keep_prob = 0.5
- 學(xué)習(xí)速率為: 0.01雨膨,當(dāng)驗(yàn)證集準(zhǔn)確度停止提升的時(shí)候以10倍速度衰減
2. 權(quán)重初始化
訓(xùn)練A網(wǎng)絡(luò):
- W: 服從(0, 0,01)的高斯分布
- Bias: 0
后續(xù):
把A的前4個(gè)卷積層和最后的全連接層的權(quán)值當(dāng)做其它網(wǎng)絡(luò)的初始值,未賦值的中間層隨機(jī)初始化读串。
3. Multi-Scale
在訓(xùn)練中聊记,VGG使用了Multi-Scale的方法做數(shù)據(jù)增強(qiáng),將原始的圖像縮放到不同尺寸S恢暖,然后在隨機(jī)裁切224x224的圖片甥雕,這樣可以增加很多數(shù)據(jù)量,對(duì)于防止過(guò)擬合有很不錯(cuò)的效果胀茵。
初始對(duì)原始圖片進(jìn)行裁剪時(shí),原始圖片的最小邊不宜過(guò)小挟阻,這樣的話(huà)琼娘,裁剪到224x224的時(shí)候,就相當(dāng)于幾乎覆蓋了整個(gè)圖片附鸽,這樣對(duì)原始圖片進(jìn)行不同的隨機(jī)裁剪得到的圖片就基本上沒(méi)差別脱拼,就失去了增加數(shù)據(jù)集的意義,但同時(shí)也不宜過(guò)大坷备,這樣的話(huà)熄浓,裁剪到的圖片只含有目標(biāo)的一小部分,也不是很好省撑。
針對(duì)上述問(wèn)題赌蔑,文章提出了兩種方法:
- 固定尺寸為S=256 和 S=384, 訓(xùn)練后取均值
- multi-scale training,訓(xùn)練數(shù)據(jù)隨機(jī)從[256, 512]的確定范圍進(jìn)行抽樣竟秫,這樣原始圖片尺寸不同娃惯,有利于訓(xùn)練。
==訓(xùn)練數(shù)據(jù)尺寸不同肥败,如何訓(xùn)練趾浅?最簡(jiǎn)單的是直接Resize==
2.3 測(cè)試
給出一個(gè)訓(xùn)練后的網(wǎng)絡(luò)模型 和 一張圖像愕提,進(jìn)行預(yù)測(cè)。測(cè)試的時(shí)候皿哨,圖片的尺寸不一定要與訓(xùn)練圖片的尺寸相同浅侨,而且不需要裁剪。
首先將全連接層轉(zhuǎn)換到卷積層证膨,==第一個(gè)全連接層轉(zhuǎn)換到一個(gè)7x7的卷積層如输,后面兩個(gè)轉(zhuǎn)換到1x1的卷積層==,這不僅僅讓全連接層應(yīng)用到整個(gè)未裁剪的原始圖像上椎例,而且能得到一個(gè)類(lèi)別的得分圖(class score map)挨决,它的通道數(shù)等于類(lèi)別數(shù),還有一個(gè)取決于圖片尺寸的可變空間分辨率(variable spatial resolution)订歪。具體的操作如下所示:
文章中訓(xùn)練輸入圖像尺寸均為224x224脖祈,這樣網(wǎng)絡(luò)的參數(shù)就已經(jīng)固定了。圖像尺寸只會(huì)與pool層相關(guān)刷晋,經(jīng)過(guò)5層pool層后盖高,最后輸出為7x7x512的尺寸。現(xiàn)在我們假設(shè)有一張測(cè)試圖像的尺寸為256x256眼虱,這樣經(jīng)過(guò)卷積喻奥、池化后,最后輸出的為8x8x512捏悬,這個(gè)時(shí)候最后三個(gè)全連接層是怎樣工作的呢撞蚕?
# ImgIn shape: (?, 8, 8, 512)
# FC1 參數(shù)個(gè)數(shù): 7x7x512x4096, 訓(xùn)練結(jié)果过牙,參數(shù)已經(jīng)固定
# 將FC1 轉(zhuǎn)換為 卷積層甥厦, 卷積核大小7x7x512,通道數(shù)4096,步長(zhǎng)為1
conv: -> (?, 8, 8, 4096), kernel_size=(7,7,512,4096), stride=1
# ImgIn shape: (?, 8, 8, 4096)
# FC2 參數(shù)個(gè)數(shù):4096x4096寇钉,也是訓(xùn)練結(jié)果刀疙,已經(jīng)固定的
# 將FC2 轉(zhuǎn)換為 卷積層, 卷積核大小1x1x4096扫倡, 通道數(shù)4096谦秧, 步長(zhǎng)1
conv: -> (?, 8, 8, 4096), kernel_size(1,1,4096,4096), stride=1
# ImgIn shape: (?, 8, 8, 4096)
# FC3 參數(shù)個(gè)數(shù):4096x1000,也是訓(xùn)練結(jié)果撵溃,已經(jīng)固定的
# 將FC2 轉(zhuǎn)換為 卷積層疚鲤, 卷積核大小1x1x4096, 通道數(shù)1000缘挑, 步長(zhǎng)1
conv: -> (?, 8, 8, 1000), kernel_size(1,1,4096,1000), stride=1
由此就得到了一個(gè)class score map石咬, 然后取均值即可。
測(cè)試數(shù)據(jù)尺寸不同卖哎,如何測(cè)試鬼悠?
3. 分類(lèi)實(shí)驗(yàn)
3.1 單尺度評(píng)估
[圖片上傳失敗...(image-80f29d-1515727838537)]
得到如下結(jié)論:
- LRN并不能改善A網(wǎng)絡(luò)性能
- 分類(lèi)誤差隨著深度增加而降低
- 在訓(xùn)練的時(shí)候采用圖像尺度抖動(dòng)(Scale Jittering)可以改善圖像分類(lèi)效果
3.2 多尺度評(píng)估
[圖片上傳失敗...(image-d87b7c-1515727838537)]
- 相對(duì)于單一尺度評(píng)估删性,多尺度評(píng)估提高了分類(lèi)精度
- 在訓(xùn)練的時(shí)候采用圖像尺度抖動(dòng)(Scale Jittering)可以改善圖像分類(lèi)效果
3.3 多裁剪評(píng)估
[圖片上傳失敗...(image-dfcf87-1515727838537)]
多裁剪(multi-crop)評(píng)估比起密集(dense)評(píng)估,效果更好焕窝。而且兩者具有互補(bǔ)作用蹬挺,結(jié)合兩種方式,效果更好它掂。
3.4 卷積網(wǎng)絡(luò)融合
[圖片上傳失敗...(image-4b2cc6-1515727838537)]
如果結(jié)合多個(gè)卷積網(wǎng)絡(luò)的softmax輸出巴帮,分類(lèi)結(jié)果會(huì)更好。