關(guān)于安裝、編譯、使用步驟等不在贅述, 官網(wǎng) 有很詳細(xì)文檔
創(chuàng)新互聯(lián)公司是一家專業(yè)提供肥西企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為肥西眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
使用caffe模型的時(shí)候,input部分一定要寫成規(guī)范格式:
千萬(wàn)別圖省事寫成如下格式,caffe可以運(yùn)行沒(méi)問(wèn)題,但是轉(zhuǎn)化無(wú)法識(shí)別,這個(gè)ncnn數(shù)據(jù)結(jié)構(gòu)導(dǎo)致?。?!
網(wǎng)絡(luò)定義的層千萬(wàn)別出現(xiàn)重復(fù)情況,一定要規(guī)范定義:
千萬(wàn)別寫成如下網(wǎng)絡(luò),在caffe可以穩(wěn)定運(yùn)行,但是ncnn會(huì)讀取上第一次出現(xiàn)的top層?。?!
第一層輸出是 concat_out1 ,第二層輸出也是 concat_out1 ,當(dāng)使用 ncnn.extract 會(huì)出現(xiàn)錯(cuò)誤?。?!
這貌似是算作 caffe 的問(wèn)題,在筆者使用的過(guò)程忽略了這一點(diǎn),干脆算 NCNN 操作里面了。
Batch Normalization 層有個(gè) use_global_stats 參數(shù),這個(gè)操作的作用是: 是否使用caffe內(nèi)部的均值和方差
換句話的意思就是:
--------- true :使用caffe內(nèi)部的均值和方差,其中方差和均值都是固定的,模型訓(xùn)練好之后,這兩個(gè)值就固定了。
--------- false :使用當(dāng)前層計(jì)算的方差和均值,這個(gè)是不固定的,是在訓(xùn)練過(guò)程一直改變,訓(xùn)練好的時(shí)候達(dá)到最優(yōu)。
其中 NCNN 默認(rèn)使用 true 狀態(tài),不管是 false 還是 true ,最終都是算作 true
caffe 測(cè)試的時(shí)候得手動(dòng)設(shè)置為 true
正常來(lái)說(shuō) ncnn 和 caffe 原版的誤差范圍在 0.001 左右,我的數(shù)據(jù)在 0.000X 范圍徘徊,如果你的數(shù)據(jù)精確不到第三個(gè)有效數(shù)字,那就得檢查網(wǎng)絡(luò)輸入精度了。
輸入的 substract_mean_normalize 得盡量精確,尤其是歸一化的值?。?!
假設(shè) 0-255 的圖像需要?dú)w一化到 0-1 :
千萬(wàn)不要寫成下面這樣,讀者可以自己測(cè)試,精度差別較大。
這里沒(méi)有錯(cuò)誤點(diǎn),只有心得點(diǎn)。
看了NCNN的官網(wǎng)給的例子,它是將輸出轉(zhuǎn)化為一行數(shù)據(jù),然后一個(gè)一個(gè)的進(jìn)行處理:
個(gè)人感覺(jué)使用這種處理小數(shù)據(jù)還是可以的,本人使用網(wǎng)絡(luò)輸出 100 × 100 × 10 ,這種情況該如何處理?
本人使用處理如下:
NCNN官網(wǎng)有個(gè)人問(wèn)能不能輸入和輸出多個(gè)通道數(shù)據(jù),后者已經(jīng)在上文實(shí)現(xiàn),以下看前者。
我的理解如下:
首先,第一個(gè)CNN只能包含Conv和Pooling層,否則輸出的格式是不能當(dāng)做下一個(gè)CNN的輸入的。其次,如果第一個(gè)CNN每層的Conv filter數(shù)量大于1的話(假設(shè)最后一層的filter數(shù)為N),第一個(gè)CNN的輸出shape為 (N, W', H'), 那么下一個(gè)CNN的 Conv filter的通道數(shù)量必須也是N。所以,這兩個(gè)CNN從結(jié)構(gòu)原理上其實(shí)是同一個(gè)CNN,其反向傳播的機(jī)制跟正常的CNN相同。但是,這里“第一個(gè)”CNN是不能用于圖像裁剪的,只能做常用的卷積操作來(lái)提取特征。
如果要做裁剪的話建議用RPN(Region Proposal Network)+CNN的結(jié)構(gòu)。RPN部分實(shí)際上是個(gè)回歸模型,其目的是裁剪圖片提取有效物體(訓(xùn)練目的是使該網(wǎng)絡(luò)選取和物體大小、實(shí)際所在區(qū)域無(wú)線接近的區(qū)域)再輸入到CNN進(jìn)行識(shí)別。而RPN和CNN是可以放在一起訓(xùn)練的,具體的可以參考Faster RCNN文獻(xiàn)。
你可以這么想:現(xiàn)在有n個(gè)球要放到左右兩個(gè)盒子里,有多少中放法。首先可以這么算:左面的盒子里可能裝0個(gè),那就是C0n,也可能裝1個(gè),那么就從n個(gè)里選一,是C1n......還可能選n個(gè),就是Cnn,由加法原理,加起來(lái)就是c0n+c1n+c2n+...+cnn
還可以換一種算法:上面的算法是盒子選球,現(xiàn)在我們讓球去選盒子,每個(gè)球都有兩種選法,由乘法原理,n個(gè)球共有2^n種選法
因?yàn)橥}必同解,所以c0n+c1n+c2n+...+cnn=2^n
論文: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
目標(biāo)檢測(cè)網(wǎng)絡(luò)大多依靠 區(qū)域生成 (region proposal)算法來(lái)假設(shè)目標(biāo)的位置。 R-CNN 是采用 Selective Search 算法來(lái)提取(propose)可能的 RoIs(regions of interest) 區(qū)域,然后對(duì)每個(gè)提取區(qū)域采用標(biāo)準(zhǔn) CNN 進(jìn)行分類。選擇性搜索(Selective Search )方法就是在目標(biāo)對(duì)象周圍設(shè)定2000個(gè)形狀大小位置不一的候選區(qū)域,目標(biāo)物體在候選區(qū)域的可能性還是比較大的。然后對(duì)這些區(qū)域卷積,找到目標(biāo)物體,雖然大多數(shù)區(qū)域都是無(wú)用的。與尋找?guī)缀鮽€(gè)區(qū)域比起來(lái),這種方法要高效的多。
Fast R-CNN ,不在原始圖像生成備選區(qū)域,而是先整張圖片通過(guò)卷積網(wǎng)絡(luò)得到特征圖,然后在特征圖上使用備選區(qū)域算法得到感興趣的區(qū)域在特征圖的映射,之后使用 Rol Pool將所有區(qū)域變成同樣尺寸,大大減少了這些目標(biāo)檢測(cè)網(wǎng)絡(luò)的運(yùn)行時(shí)間,但是區(qū)域生成的計(jì)算成為整個(gè)檢測(cè)網(wǎng)絡(luò)的瓶頸。
Faster R-CNN 引入了一個(gè) 區(qū)域生成網(wǎng)絡(luò)(Region Proposal Network,RPN) ,該網(wǎng)絡(luò)與檢測(cè)網(wǎng)絡(luò)共享輸入圖像的卷積特征,從而使接近零時(shí)間成本的區(qū)域生成成為可能。 RPN是一個(gè)全卷積網(wǎng)絡(luò),可以同時(shí)在每個(gè)位置預(yù)測(cè)目標(biāo)邊界和目標(biāo)分?jǐn)?shù)。RPN經(jīng)過(guò)端到端的訓(xùn)練,可以生成高質(zhì)量的區(qū)域候選框,然后提供給Fast R-CNN用于檢測(cè)。
Faster R-CNN 由兩個(gè)模塊組成:第一個(gè)模塊是區(qū)域生成的深度全卷積網(wǎng)絡(luò),第二個(gè)模塊是使用備選區(qū)域的Fast R-CNN檢測(cè)器。整個(gè)系統(tǒng)是一個(gè)單個(gè)的,統(tǒng)一的目標(biāo)檢測(cè)網(wǎng)絡(luò)。使用最近流行的“注意力”機(jī)制的神經(jīng)網(wǎng)絡(luò)術(shù)語(yǔ),RPN模塊告訴Fast R-CNN模塊在哪里尋找目標(biāo)。
針對(duì)一張圖片,需要獲得的輸出有:
Faster R-CNN 第一步是采用基于分類任務(wù)(如ImageNet)的 CNN 模型作為特征提取器。輸入圖片表示為 H × W × D 的形式,經(jīng)過(guò)預(yù)訓(xùn)練 CNN 模型的處理,得到卷積特征圖(conv feature map)。
Faster R-CNN 最早是采用在 ImageNet 訓(xùn)練的 ZF 和 VGG ,其后出現(xiàn)了很多其它權(quán)重不同的網(wǎng)絡(luò).。如 MobileNet 是一種小型效率高的網(wǎng)絡(luò)結(jié)構(gòu),僅有 3.3M 參數(shù);而ResNet-152 的參數(shù)量達(dá)到了 60M;新網(wǎng)絡(luò)結(jié)構(gòu),如 DenseNet 在提高了結(jié)果的同時(shí),降低了參數(shù)數(shù)量。
以 VGG16 為例:
VGG16 圖片分類時(shí),輸入為 224×224×3 的張量(即,一張 224×224 像素的 RGB 圖片)。網(wǎng)絡(luò)結(jié)構(gòu)最后采用 FC 層(而不是 Conv 層)得到固定長(zhǎng)度的向量,以進(jìn)行圖片分類.。對(duì)最后一個(gè)卷積層的輸出拉伸為1維的向量,然后送入 FC 層。官方實(shí)現(xiàn)中是采用的卷積層 conv5/conv5_1 的輸出。
在深度上,卷積特征圖對(duì)圖片的所有信息進(jìn)行了編碼,同時(shí)保持相對(duì)于原始圖片所編碼 “things” 的位置。例如,如果在圖片的左上角存在一個(gè)紅色正方形,而且卷積層有激活響應(yīng),那么該紅色正方形的信息被卷積層編碼后,仍在卷積特征圖的左上角。因此利用特征圖檢測(cè)目標(biāo)所在的位置是可行的。
ResNet 結(jié)構(gòu)逐漸取代 VGG 作為基礎(chǔ)網(wǎng)絡(luò),用于提取特征。ResNet 相對(duì)于 VGG 的明顯優(yōu)勢(shì)是,網(wǎng)絡(luò)更大,因此具有更強(qiáng)的學(xué)習(xí)能力.。這對(duì)于分類任務(wù)是重要的,在目標(biāo)檢測(cè)中也應(yīng)該如此。另外,ResNet 采用殘差連接(residual connection) 和 BN (batch normalization) 使得深度模型的訓(xùn)練比較容易。
然后,RPN(Region Propose Network) 對(duì)提取的卷積特征圖進(jìn)行處理,尋找可能包含 目標(biāo)的 預(yù)定義數(shù)量的區(qū)域(regions,邊界框) 。為了生成候選區(qū)域,在最后的共享卷積層輸出的卷積特征圖上做 3x3 卷積,卷積核共有512個(gè)(VGG),后面是ReLU,這樣每個(gè) 3x3 區(qū)域會(huì)得到一個(gè)512維的特征向量。然后這個(gè)特征向量被輸入到兩個(gè)全連接層——一個(gè)邊界框回歸層(reg)和一個(gè)邊界框分類層(cls)。
下面解釋 k, 2k, 4k 的含義。
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)中,可能最難的問(wèn)題就是生成長(zhǎng)度不定(variable-length)的邊界框列表(bounding-boxes),邊界框是具有不同尺寸(sizes)和長(zhǎng)寬比(aspect ratios )的矩形。在構(gòu)建深度神經(jīng)網(wǎng)絡(luò)時(shí),最后的網(wǎng)絡(luò)輸出一般是固定尺寸的張量輸出(采用RNN的除外)。例如,在圖片分類中,網(wǎng)絡(luò)輸出是 (C, ) 的張量,C是類別標(biāo)簽數(shù),張量的每個(gè)位置的標(biāo)量值表示圖片是類別的概率值。
在 RPN 中,通過(guò)采用 anchors(錨) 來(lái)解決邊界框列表長(zhǎng)度不定的問(wèn)題,即在原始圖像中統(tǒng)一放置固定大小的參考邊界框。上面說(shuō)到RPN對(duì)特征圖做3x3的卷積,假設(shè)每一次卷積需要預(yù)測(cè) k 個(gè)候選區(qū)域,因此,reg層具有 4k 個(gè)輸出,編碼 k 個(gè)邊界框的坐標(biāo),cls層輸出 2k 個(gè)分?jǐn)?shù),估計(jì)每個(gè)區(qū)域是目標(biāo)或是背景的概率。這 k 個(gè)區(qū)域就是 被 k 個(gè)參考邊界框初始化, k 個(gè)參考框就是 k 個(gè)錨點(diǎn),作為第一次預(yù)測(cè)目標(biāo)位置的參考 boxes。錨點(diǎn)的中心位于卷積核滑動(dòng)窗口的中心。默認(rèn)情況下每個(gè)滑動(dòng)位置使用3個(gè)不同尺度(128 2 , 256 2 , 512 2 )3個(gè)不同長(zhǎng)寬比(1:2, 1:1, 2:1)的錨點(diǎn),k=9。對(duì)于大小為W×H(通常約為2400)的卷積特征圖,總共有 W×H×k 個(gè)錨點(diǎn)。對(duì)于RPN的最后兩個(gè)全連接層,參數(shù)的個(gè)數(shù)為 512×(4+2)×k.
不同于直接檢測(cè)目標(biāo)的位置,這里將問(wèn)題轉(zhuǎn)化為兩部分。對(duì)每一個(gè) anchor 而言:
有一種簡(jiǎn)單的方法來(lái)預(yù)測(cè)目標(biāo)的邊界框,即學(xué)習(xí)相對(duì)于參考邊界框的偏移量。假設(shè)參考 box:( ),待預(yù)測(cè)量:( ),一般都是很小的值,以調(diào)整參考 box 更好的擬合所需要的。
雖然 anchors 是基于卷積特征圖定義的,但最終的 anchos 是相對(duì)于原始圖片的.
由于只有卷積層和 pooling 層,特征圖的維度是與原始圖片的尺寸成比例關(guān)系的. 即,數(shù)學(xué)地表述,如果圖片尺寸 w×h,特征圖的尺寸則是w/r×h/r. 其中,r 是下采樣率(subsampling ratio). 如果在卷積特征圖空間位置定義 anchor,則最終的圖片會(huì)是由 r 像素劃分的 anchors 集。在 VGG 中, r=16。
RPN 利用所有的參考邊界框(anchors),輸出一系列目標(biāo)的良好的 proposals。針對(duì)每個(gè) anchor,都有兩個(gè)不同的輸出:
RPN是全卷積網(wǎng)絡(luò)。
對(duì)于分類層,每個(gè) anchor 輸出兩個(gè)預(yù)測(cè)值:anchor 是背景(background,非object)的 score 和 anchor 是前景(foreground,object) 的 score.
對(duì)于回歸層,也可以叫邊界框調(diào)整層,每個(gè) anchor 輸出 4 個(gè)預(yù)測(cè)值:
(Δxcenter,Δycenter,Δwidth,Δheight),用于 anchors 來(lái)得到最終的 proposals。根據(jù)最終的 proposal 坐標(biāo)和其對(duì)應(yīng)的 objectness score,即可得到良好的 objects proposals.
RPN 有兩種類型的預(yù)測(cè)值輸出:二值分類和邊界框回歸調(diào)整。
為了訓(xùn)練RPN,我們?yōu)槊總€(gè)錨點(diǎn)分配一個(gè)二值類別標(biāo)簽(是目標(biāo)或不是目標(biāo))。我們給兩種錨點(diǎn)分配一個(gè)正標(biāo)簽:(i)具有與實(shí)際邊界框的重疊最高交并比(IoU)的錨點(diǎn),或者(ii)具有與實(shí)際邊界框的重疊超過(guò)0.7 IoU的錨點(diǎn)。注意,單個(gè)真實(shí)邊界框可以為多個(gè)錨點(diǎn)分配正標(biāo)簽。通常第二個(gè)條件足以確定正樣本;但我們?nèi)匀徊捎玫谝粋€(gè)條件,因?yàn)樵谝恍O少數(shù)情況下,第二個(gè)條件可能找不到正樣本。對(duì)于所有的真實(shí)邊界框,如果一個(gè)錨點(diǎn)的IoU比率低于0.3,我們給非正面的錨點(diǎn)分配一個(gè)負(fù)標(biāo)簽。既不正面也不負(fù)面的錨點(diǎn)不會(huì)有助于訓(xùn)練目標(biāo)函數(shù)。
然后,隨機(jī)采樣 anchors 來(lái)生成batchsize=256 的 mini-batch,盡可能的保持 foreground 和 background anchors 的比例平衡。
RPN 對(duì) mini-batch 內(nèi)的所有 anchors 采用二分類交叉熵來(lái)計(jì)算分類 loss。然后,只對(duì) mini-batch 內(nèi)標(biāo)記為 foreground 的 anchros 計(jì)算回歸 loss。為了計(jì)算回歸的目標(biāo)targets,根據(jù) foreground anchor 和其最接近的 groundtruth object,計(jì)算將 anchor 變換到 object groundtruth 的偏移值 Δ。
Faster R-CNN沒(méi)有采用簡(jiǎn)單的 L1 或 L2 loss 用于回歸誤差,而是采用 Smooth L1 loss. Smooth L1 和 L1 基本相同,但是,當(dāng) L1 誤差值非常小時(shí),表示為一個(gè)確定值即認(rèn)為是接近正確的,loss 就會(huì)以更快的速度消失.
由于 Anchors 一般是有重疊,因此,相同目標(biāo)的候選區(qū)域也存在重疊。
為了解決重疊 proposals 問(wèn)題,采用 NMS 算法處理,丟棄與一個(gè) score 更高的 proposal 間 IoU 大于預(yù)設(shè)閾值的 proposals.
雖然 NMS 看起來(lái)比較簡(jiǎn)單,但 IoU 閾值的預(yù)設(shè)需要謹(jǐn)慎處理. 如果 IoU 值太小,可能丟失 objetcs 的一些 proposals;如果 IoU 值過(guò)大,可能會(huì)導(dǎo)致 objects 出現(xiàn)很多 proposals。IoU 典型值為 0.7。
NMS 處理后,根據(jù) sore 對(duì)topN 個(gè) proposals 排序. 在 Faster R-CNN 論文中 N=2000,其值也可以小一點(diǎn),如 50,仍然能的高好的結(jié)果.
當(dāng)獲得了可能的相關(guān)目標(biāo)和其在原始圖像中的對(duì)應(yīng)位置之后,問(wèn)題就更加直接了,采用 CNN 提取的特征和包含相關(guān)目標(biāo)的邊界框,采用 RoI Pooling 處理,并提取相關(guān)目標(biāo)的特征,得到一個(gè)新的向量。
RPN 處理后,可以得到一堆沒(méi)有分類得分的目標(biāo) proposals。待處理問(wèn)題為,如何利用這些邊界框并分類。
一種最簡(jiǎn)單的方法是,對(duì)每個(gè) porposal,裁剪,并送入pre-trained base 網(wǎng)絡(luò),提取特征;然后,將提取特征來(lái)訓(xùn)練分類器. 但這就需要對(duì)所有的 2000 個(gè) proposals 進(jìn)行計(jì)算,效率低,速度慢。Faster R-CNN通過(guò)重用卷積特征圖來(lái)加快計(jì)算效率,即采用 RoI(region of interest) Pooling 對(duì)每個(gè) proposal 提取固定尺寸的特征圖。然后 R-CNN 對(duì)固定尺寸的特征圖分類。
目標(biāo)檢測(cè)中,包括 Faster R-CNN,常用一種更簡(jiǎn)單的方法,即:采用每個(gè) proposal 來(lái)對(duì)卷積特征圖裁剪crop,然后利用插值算法(一般為雙線性插值 bilinear)將每個(gè) crop resize 到固定尺寸14×14×ConvDepth. 裁剪后,利用 2×2 kernel 的 Max Pooling 得到每個(gè) proposal 的最終7×7×ConvDepth 特征圖.
之所以選擇該精確形狀,與其在下面的模塊(R-CNN)中的應(yīng)用有關(guān)。
R-CNN利用RoI Pooling提取的特征進(jìn)行分類,采用全連接層來(lái)輸出每個(gè)可能的 目標(biāo)類別的分類得分,是Faster R-CNN框架中的最后一個(gè)步驟。
R-CNN 有兩個(gè)不同的輸出:
R-CNN 對(duì)每個(gè) proposal 的特征圖,拉平后采用 ReLU 和兩個(gè)大小為 4096 維的全連接層進(jìn)行處理。然后,對(duì)每個(gè)不同目標(biāo)采用兩個(gè)不同的全連接層處理:一個(gè)全連接層有 N+1 個(gè)神經(jīng)單元,其中 N 是類別 class 的總數(shù),包括 background class;一個(gè)全連接層有 4N 個(gè)神經(jīng)單元,是回歸預(yù)測(cè)輸出,得到 N 個(gè)可能的類別分別預(yù)測(cè) Δcenterx,Δcentery,Δwidth,Δheight。
R-CNN 的目標(biāo)基本上是與 RPN 目標(biāo)的計(jì)算是一致的,但需要考慮不同的可能的 object 類別 classes.
根據(jù) proposals 和 ground-truth boxes,計(jì)算其 IoU。與任何一個(gè) ground-truth box 的 IoU 大于 0.5 的 proposals 被設(shè)為正確的 boxes。IoU 在 0.1 到 0.5 之間時(shí)設(shè)為 background。這里忽略沒(méi)有任何交叉的 proposals。這是因?yàn)?,在此階段,假設(shè)已經(jīng)獲得良好的 proposals。當(dāng)然,所有的這些超參數(shù)都是可以用于調(diào)整以更好的擬合 objects。
邊界框回歸的目標(biāo)計(jì)算的是 proposal 與其對(duì)應(yīng)的 ground-truth間的偏移量,只對(duì)基于 IoU 閾值設(shè)定類別后的 proposals 進(jìn)行計(jì)算。隨機(jī)采用一個(gè)平衡化的 mini-batch=64,其中,25% 的 foreground proposals(具有類別class) 和 75% 的background proposals.
類似于 RPNs 的 losses,對(duì)于選定的 proposals,分類 loss 采用 multiclass entropy loss;對(duì)于 25% 的 foreground proposals 采用 SmoothL1 loss 計(jì)算其與 groundtruth box 的匹配。
由于 R-CNN全連接網(wǎng)絡(luò)對(duì)每個(gè)類別僅輸出一個(gè)預(yù)測(cè)值,當(dāng)計(jì)算邊框回歸loss 時(shí)需謹(jǐn)慎,只需考慮正確的類別。
類似于 RPN,R-CNN 最終輸出一堆帶有類別分類的objects,在返回結(jié)果前,再進(jìn)一步進(jìn)行處理。
為了調(diào)整邊界框,需要考慮概率最大的類別的 proposals. 忽略概率最大值為 background class 的proposals.
當(dāng)?shù)玫阶罱K的 objects 時(shí),并忽略被預(yù)測(cè)為 background 的結(jié)果,采用 class-based NMS. 主要是通過(guò)對(duì) objects 根據(jù)類別class 分組,然后根據(jù)概率排序,并對(duì)每個(gè)獨(dú)立的分組采用 NMS 處理,最后再放在一起.
最終得到的 objects 列表,仍可繼續(xù)通過(guò)設(shè)定概率閾值的方式,來(lái)限制每個(gè)類的 objects 數(shù)量.
Faster R-CNN在論文中是采用分步方法,對(duì)每個(gè)模塊分別訓(xùn)練再合并訓(xùn)練的權(quán)重. 自此,End-to-end 的聯(lián)合訓(xùn)練被發(fā)現(xiàn)能夠得到更好的結(jié)果.
當(dāng)將完整的模型合并后,得到 4 個(gè)不同的 losses,2 個(gè)用于 RPN,2 個(gè)用于 R-CNN。4 種不同的 losses 以加權(quán)和的形式組織. 可以根據(jù)需要對(duì)分類 loss 和回歸 loss 設(shè)置權(quán)重,或者對(duì) R-CNN 和 RPNs 設(shè)置不同權(quán)重.
采用 SGD 訓(xùn)練,momentum=0.9. 學(xué)習(xí)率初始值為 0.001,50K 次迭代后衰減為 0.0001. 這是一組常用參數(shù)設(shè)置。
在七月初七情人節(jié),牛郎織女相見的一天,我終于學(xué)習(xí)了CNN(來(lái)自CS231n),感覺(jué)感觸良多,所以趕快記下來(lái),別忘了,最后祝大家情人節(jié)快樂(lè)5555555.正題開始!
CNN一共有卷積層(CONV)、ReLU層(ReLU)、池化層(Pooling)、全連接層(FC(Full Connection))下面是各個(gè)層的詳細(xì)解釋。
卷積,尤其是圖像的卷積,需要一個(gè)濾波器,用濾波器對(duì)整個(gè)圖像進(jìn)行遍歷,我們假設(shè)有一個(gè)32*32*3的原始圖像A,濾波器的尺寸為5*5*3,用w表示,濾波器中的數(shù)據(jù)就是CNN的參數(shù)的一部分,那么在使用濾波器w對(duì)A進(jìn)行濾波的話,可以用下面的式子表示:
其中x為原始圖像的5*5*3的一部分,b是偏置項(xiàng)置為1。在對(duì)A進(jìn)行濾波之后,產(chǎn)生的是一個(gè)28*28*1的數(shù)據(jù)。那么假設(shè)我們存在6個(gè)濾波器,這六個(gè)濾波器之間彼此是獨(dú)立的,也就是他們內(nèi)部的數(shù)據(jù)是不同的且沒(méi)有相關(guān)性的??梢岳斫鉃橐粋€(gè)濾波器查找整幅圖像的垂直邊緣,一個(gè)查找水平邊緣,一個(gè)查找紅色,一個(gè)查找黑色這樣。那么我就可以產(chǎn)生6個(gè)28*28*1的數(shù)據(jù),將它們組合到一起就可以產(chǎn)生28*28*6的數(shù)據(jù),這就是卷積層主要做的工作。
CNN可以看作一系列的卷積層和ReLU層對(duì)原始數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理的神經(jīng)網(wǎng)絡(luò),處理的過(guò)程可以用下面這幅圖表示
特別要注意的是濾波器的深度一定要與上一層傳來(lái)的數(shù)據(jù)的深度相同,就像上圖的第二個(gè)卷積層在處理傳來(lái)的28*28*6的數(shù)據(jù)時(shí)要使用5*5*6的濾波器.
濾波器在圖像上不斷移動(dòng)對(duì)圖像濾波,自然存在步長(zhǎng)的問(wèn)題,在上面我們舉的例子都是步長(zhǎng)為1的情況,如果步長(zhǎng)為3的話,32*32*3的圖像經(jīng)過(guò)5*5*3的濾波器卷積得到的大小是(32-5)/3+1=10, 注:步長(zhǎng)不能為2因?yàn)椋?2-5)/2+1=14.5是小數(shù)。
所以當(dāng)圖像大小是N,濾波器尺寸為F時(shí),步長(zhǎng)S,那么卷積后大小為(N-F)/S+1
我們從上面的圖中可以看到圖像的長(zhǎng)和寬在逐漸的減小,在經(jīng)過(guò)超過(guò)5層之后極可能只剩下1*1的空間尺度,這樣是十分不好的,而且也不利于我們接下來(lái)的計(jì)算,所以我們想讓卷積層處理完之后圖像在空間尺度上大小不變,所以我們引入了pad the border的操作。pad其實(shí)就是在圖像周圍補(bǔ)0,擴(kuò)大圖像的尺寸,使得卷積后圖像大小不變。在CNN中,主要存在4個(gè)超參數(shù),濾波器個(gè)數(shù)K,濾波器大小F,pad大小P和步長(zhǎng)S,其中P是整數(shù),當(dāng)P=1時(shí),對(duì)原始數(shù)據(jù)的操作如圖所示:
那么在pad操作后卷積后的圖像大小為:(N-F+2*P)/S+1
而要想讓卷積層處理后圖像空間尺度不變,P的值可以設(shè)為P=(F-1)/2
卷積層輸入W 1 *H 1 *D 1 大小的數(shù)據(jù),輸出W 2 *H 2 *D 2 的數(shù)據(jù),此時(shí)的卷積層共有4個(gè)超參數(shù):
K:濾波器個(gè)數(shù)
P:pad屬性值
S:濾波器每次移動(dòng)的步長(zhǎng)
F:濾波器尺寸
此時(shí)輸出的大小可以用輸入和超參計(jì)算得到:
W 2 =(W 1 -F+2P)/S+1
H 2 =(H 1 -F+2P)/S+1
D 2 =D 1
1*1的濾波器也是有意義的,它在深度方向做卷積,例如1*1*64的濾波器對(duì)56*56*64的數(shù)據(jù)卷積得到56*56的數(shù)據(jù)
F通常是奇數(shù),這樣可以綜合考慮上下左右四個(gè)方向的數(shù)據(jù)。
卷積層從神經(jīng)元的角度看待可以有兩個(gè)性質(zhì): 參數(shù)共享和局域連接 。對(duì)待一個(gè)濾波器,例如5*5*3的一個(gè)濾波器,對(duì)32*32*3的數(shù)據(jù)卷積得到28*28的數(shù)據(jù),可以看作存在28*28個(gè)神經(jīng)元,每個(gè)對(duì)原圖像5*5*3的區(qū)域進(jìn)行計(jì)算,這28*28個(gè)神經(jīng)元由于使用同一個(gè)濾波器,所以參數(shù)相同,我們稱這一特性為 參數(shù)共享 。
針對(duì)不同的濾波器,我們可以看到他們會(huì)看到同一區(qū)域的圖像,相當(dāng)于在深度方向存在多個(gè)神經(jīng)元,他們看著相同區(qū)域叫做 局域連接
參數(shù)共享減少了參數(shù)的數(shù)量,防止了過(guò)擬合
局域連接為查找不同特征更豐富的表現(xiàn)圖像提供了可能。
卷積就像是對(duì)原圖像的另一種表達(dá)。
激活函數(shù),對(duì)于每一個(gè)維度經(jīng)過(guò)ReLU函數(shù)輸出即可。不改變數(shù)據(jù)的空間尺度。
通過(guò)pad操作,輸出圖像在控件上并沒(méi)有變化,但是深度發(fā)生了變化,越來(lái)越龐大的數(shù)據(jù)給計(jì)算帶來(lái)了困難,也出現(xiàn)了冗余的特征,所以需要進(jìn)行池化操作,池化不改變深度,只改變長(zhǎng)寬,主要有最大值和均值兩種方法,一般的池化濾波器大小F為2步長(zhǎng)為2,對(duì)于最大值池化可以用下面的圖像清晰的表示:
卷積層輸入W 1 *H 1 *D 1 大小的數(shù)據(jù),輸出W 2 *H 2 *D 2 的數(shù)據(jù),此時(shí)的卷積層共有2個(gè)超參數(shù):
S:濾波器每次移動(dòng)的步長(zhǎng)
F:濾波器尺寸
此時(shí)輸出的大小可以用輸入和超參計(jì)算得到:
W 2 =(W 1 -F)/S+1
H 2 =(H 1 -F)/S+1
D 2 =D 1
將最后一層(CONV、ReLU或Pool)處理后的數(shù)據(jù)輸入全連接層,對(duì)于W 2 *H 2 *D 2 數(shù)據(jù),我們將其展成1*1*W 2 *H 2 *D 2 大小的數(shù)據(jù),輸入層共有W 2 *H 2 *D 2 個(gè)神經(jīng)元,最后根據(jù)問(wèn)題確定輸出層的規(guī)模,輸出層可以用softmax表示。也就是說(shuō),全連接層就是一個(gè)常見的BP神經(jīng)網(wǎng)絡(luò)。而這個(gè)網(wǎng)絡(luò)也是參數(shù)最多的部分,是接下來(lái)想要去掉的部分。完整的神經(jīng)網(wǎng)絡(luò)可以用下面的圖表示:
[(CONV-ReLU)*N-POOL?]*M-(FC-RELU)*K,SoftMax
1.更小的濾波器與更深的網(wǎng)絡(luò)
2.只有CONV層而去掉池化與全鏈接
最早的CNN,用于識(shí)別郵編,結(jié)構(gòu)為:
CONV-POOL-CONV-POOL-CONV-FC
濾波器大小5*5,步長(zhǎng)為1,池化層2*2,步長(zhǎng)為2
2012年由于GPU技術(shù)所限,原始AlexNet為兩個(gè)GPU分開計(jì)算,這里介紹合起來(lái)的結(jié)構(gòu)。
輸入圖像為227*227*3
1.首次使用ReLU
2.使用Norm layers,現(xiàn)在已經(jīng)拋棄,因?yàn)樾Ч淮?/p>
3.數(shù)據(jù)經(jīng)過(guò)預(yù)處理(例如大小變化,顏色變化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 參數(shù)0.9(SGD和Momentum見我的其他文章)
7.學(xué)習(xí)速率 0.01,準(zhǔn)確率不在提升時(shí)減少10倍,1-2次后達(dá)到收斂
8.L2權(quán)重減少0.0005
9.錯(cuò)誤率15.4%
改進(jìn)自AlexNet,主要改變:
1.CONV1的濾波器從11*11步長(zhǎng)S=4改為7*7步長(zhǎng)為2.
2.CONV3,4,5濾波器數(shù)量有384,384,256改為512,1024,512(濾波器數(shù)量為2的n次冪有利于計(jì)算機(jī)計(jì)算可以提高效率)
錯(cuò)誤率:14.8%后繼續(xù)改進(jìn)至11.2%
當(dāng)前最好的最易用的CNN網(wǎng)絡(luò),所有卷積層濾波器的大小均為3*3,步長(zhǎng)為1,pad=1,池化層為2*2的最大值池化,S=2。
主要參數(shù)來(lái)自全連接層,這也是想要去掉FC的原因。
具有高度的統(tǒng)一性和線性的組合,易于理解,十分方便有VGG-16,VGG-19等多種結(jié)構(gòu)。
錯(cuò)誤率7.3%
完全移除FC層,參數(shù)只有500萬(wàn),使用Inception模塊(不太理解,有時(shí)間繼續(xù)看)
準(zhǔn)確率6.67%
準(zhǔn)確率3.6%
擁有極深的網(wǎng)絡(luò)結(jié)構(gòu),且越深準(zhǔn)確率越高。是傳統(tǒng)CNN不具備的特點(diǎn),傳統(tǒng)CNN并非越深越準(zhǔn)確。需要訓(xùn)練時(shí)間較長(zhǎng)但是快于VGG
1.每個(gè)卷積層使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,準(zhǔn)確率不變減小10倍(因?yàn)锽atch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不適用失活(因?yàn)锽atch Normalization)
具體的梯度過(guò)程學(xué)完ResNet再說(shuō)吧。
1. [c,h,w] 這種布局不太適合在GPU上做IO:[c, h, w] --- [c/4, h, w, 4]
網(wǎng)站名稱:包含F(xiàn)lutterNcnn的詞條
轉(zhuǎn)載源于:http://aaarwkj.com/article24/dssgjce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、定制網(wǎng)站、微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)、定制開發(fā)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)