陳 超 ,吳 斌
(1.西南科技大學 信息工程學院,四川 綿陽 621010;2.四川省高等學校數值仿真重點實驗室,四川 內江 641000)
圖像識別的應用在現代社會的應用越發廣泛,其重要程度越發明顯。圖像識別是計算機視覺中的一個重要環節,屬于有監督學習類別,即在圖片集或者視頻中快速識別出其類別。近些年來一直是研究熱點。傳統的圖像識別的方法是基于人工設置的一些特征進行匹配,然而識別速度較低,且對于多目標,遮擋,擁擠等場景中的目標識別效果很差。VGG[1]是牛津大學的Visual Geometry Group的組提出的。該網絡是在ILSVRC 2014上的相關工作,主要工作是證明了增加網絡的深度能夠在一定程度上影響網絡最終的性能。VGG有兩種結構,分別是VGG16和VGG19,兩者并沒有本質上的區別,只是網絡深度不一樣。使用了3個3×3卷積核來代替7×7卷積核,使用了2個3×3卷積核來代替5×5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網絡的深度,在一定程度上提升了神經網絡的效果。在VGG[1]將ImageNet的top-1分類準確率提高到70%以上后,在使卷積高性能變得復雜方面有了很多創新。此時提升網絡性能最直接的辦法就是增加網絡深度會引發諸多問題[2]:比如網絡層數太多,一般計算機或者手持設備無法勝任,因為網絡越深、參數越多,計算復雜度越大,難以應用;增加網絡深度同時引入全連接變成稀疏連接來減少參數量。但在實現時計算所消耗的時間卻很難減少。Google研究人員提出了Inception的方法[2],如當代GoogLeNet[2]和后來的Inception模型[3-5]采用了精心設計的多分支架構,Inception模塊中并列提供多種卷積核的操作,網絡在訓練的過程中通過調節參數自己去選擇使用,同時,由于網絡中都需要池化操作,所以此處也把池化層并列加入網絡中,使得網絡的寬度得到了前所未有的擴展,因而得到了更為全面的特征提取網絡結構,效果明顯好于VGG。何凱明的ResNet[6]提出了簡化的殘差架構,在寬度和深度上都同時擴展了網絡結構,尤其是增加了恒等連接,使得網絡提取的特征始終不低于淺層特征,保證了網絡可以加深加寬,在當年的圖像識別,圖像檢測上取得了壓倒式的成就。DenseNet[7]通過將低層與大量的高層連接起來,使得拓撲結構更加復雜,各層之間的特征進行了融合,保證了特征的豐富性。除了實現上的不便外,復雜的模型可能會降低并行度[8],從而降低推理速度。提出了一種初始化方法[9]來訓練極深普通卷積網絡,保證了網絡的魯棒性。最近的工作[10-11]結合了幾種技術,包括Leaky_ReLU和max-norm等操作,保證了網絡特征圖提取的自然過渡,使得提取的特征更為真實。然而,Resnet 50網絡不能提取重疊目標、擁擠目標、小目標的某些特征。相反,改進算法的目標是建立一個具有合理深度和良好的精度-速度權衡的優秀模型,它只涉及最常見的組件(例如:卷積,批歸一化和激活函數)。Resnet50結構僅由3×3卷積、1×1卷積和sigmod激活函數的堆棧組成。可以取得更好的效果受近年殘差模塊、1×1卷積[2-6],[11]等思想,在第一個殘差模塊后再增加了1×1短接分支來提取更多的原始特征和調整與之深層匹配的通道數。以上網絡中各層次之間的特征圖沒有信息的交互[13-15],于是引入convolutional block attention module (CBAM)表示卷積模塊的注意力機制模塊,是一種結合了空間(spatial)和通道(channel)的注意力機制模塊[16-19]。但是現實圖像中的特征彼此之間有位置,領域等信息,CBAM提取空間注意力是用局部卷積,只能捕獲局部的信息,無法獲得長程依賴,基于此作者提出了CA,充分利用了位置信息,而且控制了計算開銷[20]。充分利用 channel 和 spatial 之間的關系,有人提出提出了shuffle attention注意力機制,首先將輸入的特征分為g組,然后每一組的特征進行split,分成兩個分支,分別計算 channel attention 和 spatial attention,兩種attention 都使用全連接結合sigmoid的方法計算[20]。受多種注意力機制的啟發,在CNN的第一個殘差塊層特征之后引入了空間_通道注意力機制,并修改了激活函數,從而增強了特征的表示,貢獻總結如下。
首先,為融合更多的原始特征,在7×7卷積特征FeatureMap1后添加一個1×1卷積殘差,提取特征FeatureMap2。
其次,在Resnet50的第一個殘差塊層特征之后,嵌入CBAM模塊,使得CNN獲得交互特征FeatureMap3。繼而綜合融合3個特征,即:
(FeatureMap1+FeatureMap2+FeatureMap3)。
第三,在CBAM模塊中,為了融合顯著特征和緩解梯度消失,將CBAM模塊中的激活函數ReLU修改為激活函數ReLU6。
最后,在FashionMNIST數據集和Cifar10數據集上進行了實驗,改進后的Resnet50達到了較好的識別精度和檢測速度,用實驗結果展示改進的Resnet50在分類方面的有效性和效率。
Resnet50將靠前若干層的某一層數據輸出直接跳過多層引入到后面數據層的輸入部分。保證后面的特征層的特征圖含有的信息至少不會比前一層差,因此是最常用的殘差結構的深度神經網絡結構,這種深度殘差網絡的設計就很好地克服由于網絡深度加深而產生的學習效率變低與準確率無法有效提升的問題[6]。Resnet50比起Resnet34來說,深度更深,提取的特征更優質。比起Resnet101,Resnet152深度更淺,但是效果相差不是很大。根據FashionMNIST數據集和Cifar10數據集的特性以及訓練模型的實際GPU性能,本文選擇對Resnet50作為基礎算法進行改進。為了更好地識別這兩個數據集中的目標,首先要保證淺層特征的完整,然后進行多特征的融合,最后嵌入空間_通道注意力機制模塊(CBAM)進行多層特征之間的信息交互。于是在此進行相關模塊的介紹。
因為淺層卷積提取最淺層的特征,也是最真實,最能反映圖像的底層特征,所以就要更好地保留原始特征,為后期的關鍵特征提取,提供的良好的特征層。此時由何凱明提出的殘差網絡很好的解決了梯度消失的問題,結構如圖1所示[6,11]。

圖1 殘差結構
受近年殘差模塊、1×1卷積[2-6,11]等思想激發,在殘差網絡的第一個大模塊之后增加一個1×1短接分支來保留原始特征,也避免了梯度消失。添加1×1短接分支后的Resnet50結構如圖2所示。

圖2 添加短接分支的Resnet50結構
為了加強各空間特征層之間的相互作用。對圖像中的空間域信息做相應的空間變換,從而提取出關鍵信息。空間注意模塊強調空間像素的重要程度;同樣每個通道上的信號添加一個權重,以表示通道與關鍵信息的相關性。權重越大,相關性越高。生成channel的掩碼并得分。代表作有《SENET》和《Channel Attention Module》。注意機制表示特征數據中各部分的臨界程度,并對其進行學習和訓練。注意機制的本質是利用相關的FeatureMap進行權值學習,然后將學習權值應用于原始FeatureMap進行加權求和,得到增強的FeatureMap。根據注意域的不同,CV中的注意機制可分為空間域和通道域兩類,本文采用二者結合后的CBAM注意機制進行提取特征,具體如圖3所示。

圖3 兩個注意力模塊圖
CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)兩個子模塊,分別進行通道和空間上的注意。能夠節約參數和計算力,同時保證了其能夠做為即插即用的模塊集成到現有的網絡架構中去。因為小目標本來像素就很少,假如多次卷積與池化會丟失大量的信息,此時通道注意力模塊就可以提取更為顯著的特征,主要表現在:通道維度不變,壓縮空間維度。該模塊關注輸入圖片中有意義的信息,保證后期的識別效果更佳。空間注意力機制更加關注空間層面更需要注意的地方。二者對應的注意力機制通過神經網絡的操作生成一個掩碼,然后在掩碼上給出評價的得分,然后指導后期卷積提取特征的側重點。
CBAM是一個輕量級的通用模塊,可以集成到任何經典的CNN骨干網中,可以利用骨干網進行端到端的訓練。CBAM模塊的主要結構如圖3所示,CBAM中通道注意力機制主要涉及的公式如式(1)所示。
Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=
(1)
其中:W0∈C/r×C,W1∈C×C/r。
將輸入的特征圖,分別經過全局最大池化和全局平均池化,然后分別經過MLP。將MLP輸出的特征進行基于點加操作,再經過sigmoid激活操作,生成最終的channel attention featuremap與輸入的特征圖做點乘操作,生成spatial attention模塊需要的輸入特征。
CBAM中空間注意力機制主要涉及的公式,如式(2)所示,其中,σ為sigmoid操作,7×7表示卷積核的大小,7×7的卷積核比3×3的卷積核效果更好,可以提取更多的空間信息。
Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))=
(2)
在第一卷積模塊層layer1(即:BottleNeck Block *3)后添加了通道間注意機制和空間注意機制來融合通道和空間的重要顯著信息,如圖6所示。
為了更好地保留原始特征,替換了原來的ReLU激活函數。因為sigmoid函數比ReLU6計算昂貴得多;ReLU6比ReLU激活函數也有一個很好的緩沖,可防止梯度消失。將ReLU6函數作為激活函數,可以很好的保留圖像的原始特征。常用激活函數及其導數曲線圖如圖4~5所示(因為激活函數曲線有重疊的部分,為顯示所有函數,在此把ReLU,ReLU6,Swish函數橫坐標平移了1個像素)。

圖4 4種常用激活函數

圖5 4個激活函數對應的導數
從圖4、圖5可以看出,ReLU6比ReLU激活函數有一個很好的緩沖,更符合特征的變換過程。
結合以上3個有效的模塊,在此設計了一個改進的Resnet50。將第一個7×7卷積中的激活函數修改為ReLU6函數;再在第一個大型殘差塊后,添加了一個1×1卷積來融合顯著特征。在Resnet50的第一層特征之后,再添加CBAM,最后再與原始的第一個大模塊的特征圖進行大融合,可以獲得更多的判別特征。CBAM是一個輕量級的通用模塊,可直接放在CNN骨干網任意層,但需保證輸出通道數和下一層的特征圖通道數匹配,為此添加通道間注意機制和空間注意機制,改進后Resnet50的框架,如圖6所示。

圖6 改進算法的流程圖
改進后的算法融合了三路特征(CBAM特征、前一層特征Identity,新增的1×1卷積特征),這樣加強了淺層和深層特征的交互信息,很好的保留了顯著特征,也避免了梯度消失。后面依次保留Resnet50網絡原來的三個大型卷積模塊。最后通過平均池化和十分類的Softmax進行物體的識別,輸出對應的類別和概率。
3.1.1 FashionMNIST數據集
為了驗證算法的識別速度和識別精度,在FashionMNIST數據集上做了對比性實驗,Fashion-MNIST樣品圖片如圖7所示。

圖7 FashionMNIST的樣本圖片
與MNIST數據集相比,FashionMNIST數據集有以下差異:
1)FashionMNIST的圖像尺寸也為28×28,但特征明顯多于MNIST。
2)與MNIST數據集相比,FashionMNIST包含現實世界中的真實物體,不僅有大量的噪聲,而且物體的比例和特征也不同,給識別帶來很大的困難。
3)60 000張圖片用于訓練,10 000張用于測試。模型的規模擴大了。
4)同時FashionMNIST不再是抽象符號,而是更加具象化的人類必需品(服裝),共10大類,具體如表1所示。

表1 FashionMNIST對應類別
綜上所述,對Fashion-MNIST數據集進行識別要難得多,所以正好用來檢驗改進算法的有效性。
3.1.2 Cifar10數據集
Cifar10是由亞歷克斯·克里日夫斯基和伊利亞·薩斯克弗整理的一個小數據集,用于識別普遍存在的物體。共有10種RGB顏色圖像:飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船、卡車。圖像大小為32×32,數據集包括50 000訓練圖像和10 000個測試圖像。Cifar10的示例圖片如圖8所示。

圖8 Cifar10數據集中的樣本圖像
與MNIST數據集相比,Cifar10有以下區別:Cifar10是一個三通道的彩色RGB圖像,而MNIST是一個灰度圖像。Cifar10的圖像尺寸為32×32,而MNIST的圖像尺寸為28×28,略大于MNIST。與手寫字符相比,Cifar10包含現實世界中的真實物體,不僅噪聲大,而且物體的比例和特征不同,識別存在很大困難,正好可用來檢驗改進算法的優劣。
實驗環境為百度AI Studio云計算平臺,具體參數如下,CPU:4核,內存:32 GB;GPU:V100 32 GB;硬盤:100 GB;編程語言:python 3.7;框架:Paddle Paddle2.0.2。
在此選擇Resnet50作為模型的基礎網絡架構。通過對FashionMNIST做簡單的預處理,主要包括:隨機調整裁剪,Color Jitter,隨機水平翻轉,Normalize等操作,不使用過多的數據增強,主要更能體現改進算法的魯棒性和通用性。
本次在FashionMNIST和Cifar10數據集上分別訓練了90輪和100輪,即:epoch = 90(100),bitchsize =128,base_lr=1e-2,boundaries= [60,70],wamup_steps = 2,momentum= 0.9,weight_ decay = 5e-3,延遲學習率learning_rate = paddle.optimiz er.lr. piece wise Decay(boundaries = boundaries,values = values),學習率learning_ rate = paddle.optimizer.lr.Linear Warmup.paddle.Optimizer。優化方法為Adam,損失函數設置為交叉熵CrossEntropyLoss,每輪評價檢驗一次:eval_ freq=1。
最常用的分類問題使用的是交叉熵損失,計算如式(3)所示:
(3)
正確率(acc)是指使用測試集正確分類的記錄占分類記錄總數的比例,計算如式(4)所示:
(4)
其中:TP表示正確分類的記錄數,FP表示錯誤分類的測試數據數。ImageNet大約有1 000個類別,當模型預測某一張圖片時,它會給出概率從高到低的1 000個類別排名。所謂top-1 Accuracy是指排名中第一類與實際結果一致的正確率。top-5 Accuracy指在前5個類別中包含實際結果的準確性。在此加載在ImageNet數據集上的預訓練模型。
時間復雜度就是模型的運算次數,可用FLOPs衡量,也就是浮點運算次數(Floating-point Operations),卷積網絡的時間復雜度如式(5)所示。
(5)
D是神經網絡所具有的卷積層數,也即網絡的深度。d表示神經網絡第d個卷積層;Cd神經網絡第d個卷積層的輸出通道數Cout,也即該層的卷積核個數。對于第d個卷積層而言,其輸入通道數Cin,就是第d-1個卷積層的輸出通道數。
空間復雜度嚴格來講包括兩部分:總參數量+各層輸出特征圖。參數量:模型所有帶參數的層的權重參數總量;特征圖:模型在實時運行過程中每層所計算出的輸出特征圖大小,具體如式(6)所示。
(6)
總參數量只與卷積核的尺寸K、通道數C、層數D相關,而與輸入數據的大小無關。
輸出特征圖的空間占用比較容易,就是其空間尺寸M2和通道數C的連乘。增加了1×1卷積知識常數級別的復雜度,但保證了梯度始終不消失,為保證后期的關鍵特征保留做出了準備。時間復雜度決定了模型的訓練/預測時間。如果復雜度過高,則會導致模型訓練和預測耗費大量時間,既無法快速的驗證想法和改善模型,也無法做到快速的預測。本輪著重在時間復雜度和空間復雜度、識別準確度、檢測速度等指標之間找到一個折中的臨界點。即:時間復雜度和空間復雜度增加的成本,可以使用識別速度和精度的提升。
3.5.1 FashionMNIST數據集的實驗結果
為表示簡便,以此使用代號如下。a表示Resnet50網絡;b表示Resnet50在第一個大模塊后增加一個CBAM模塊的網絡;c表示在Resnet50網絡只增加1×1短接分支;d表示Resnet50網絡只增加了1個CBAM模塊,同時也增加了1×1的短接分支,修改了ReLU6激活函數的CBAM模塊。FashionMNIST數據集上檢驗的損失如圖9所示。

圖9 FashionMNIST數據集上檢驗損失
在迭代的eval過程中,可以看到改進后的Resnet50對應的損失在不斷下降,沒有反彈現象,且收斂速度比其他4種算法都快。優勢就很好的體現出來了,可以在一些手持設備或者野外監控設備上得到更好的應用。可在resnet 50網絡中增加了1×1的短接分支后,增加的恒等映射可以保證以后提取的特征總是在當前最好的特征圖基礎上提取的,實驗結果也證實增加了一個恒等分支后確實提取了更多的原始特征,保證了算法的魯棒性和收斂性。改進后的算法對應的實驗評價指標之損失是最先趨于收斂的,在后期也是較穩定的。
同時,為了切實比較改進后算法對于FashionMNIST數據集較為適用,選擇國際上公認的排名第一的和排名前五的類別來評價算法的優劣,在此展現了準確率top1和top5曲線的實際效果,如圖10~11所示。

圖10 檢驗的top1準確度

圖11 檢驗的top5準確度
在迭代的eval過程中,改進后Resnet50的acc_top1和acc_top5繼續以相對穩定的趨勢上升。它的精度超過了Resnet 50,Resnet50_ CBAM等算法。模型的參數決定了數量空間復雜度,具體來說還分析了權重等參數、浮點計算量等相關參數詳見表2。

表2 4種算法的相關參數比較
由表2可以看出,改進后的模型的訓練和評估時間減少了2分鐘。相關參數僅增加4.8%,FLOPs僅增加2%。實際準確率和檢測速度如表3所示。

表3 4種算法的比較結果
其中,比起Resnet50,acc_top1的準確率提高了約4.3%,但批量(batch=128)訓練和測試時間分別只增加2 ms和3 ms。即使與先進的模型如Res-net50_CBAM相比,準確性和速度都有優勢。在處理圖像識別時,可提高識別速度。
3.5.2 Cifar10數據集的實驗結果
為了提高Cifar10的實際效果,將圖像歸一化為32×32,修改了部分實驗參數bitchSize=256,訓練輪數epoch=100,shuffle=True,Drop_last=True,Cifar10的損失值如圖12所示。

圖12 Cifar10檢驗損失
在迭代過程中,可以看出,與Resnet50相對應的損失持續下降,收斂速度比其他4種算法都快。通過識別度觀察實際效果,如圖13和圖14。

圖13 Cifar10檢驗top1的準確度

圖14 Cifar10檢驗top5的準確度
在迭代的過程中,Resnet50的acc_top1和acc_ top5繼續以相對穩定的趨勢上升。它接近了Resnet 50的精度,并且明顯優于其他3種算法,因為訓練時長減短了。在精度方面,它明顯優于另一個Resnet 50。同時分析了對比效果的參數數量、計算等方面。具體詳見表4。為表示的簡便,在此假設:(a:Resnet50,b:Resnet 50_ CBAM,c:Resnet50 _ 1mul1,d:Our Resnet50)。
從表4中可以看到,改進后的算法與經典的Resnet50模型相比,效果不理想。而僅僅增加1×1卷積的模型在Cifar10數據集上訓練的時間有所增加,PARAM參數是最小的,FLOPs稍微增加了。但是仍然體現出1×1卷積的明顯作用,即從深度神經網絡的淺層特征中提取了原始的特征,可以促進深層網絡特征之間的信息交互,最終完成多層特征的融合,保證最終多目標的實際識別效果,本次實驗的最終的acc_ top1和acc_ top5 精度和檢測速度詳見表5。

表4 Cifar10數據集的訓練模型相關參數大小

表5 4種算法訓練Cifar10’數據集的對比結果
從表5中可以看到,與經典的Resnet50模型相比,而僅僅增加1×1卷積的模型在Cifar10數據集上,達到了超過85.77%的acc_top1精度。運算量減少的同時,還提高了acc_top1的識別準確度0.3%。
為了更好地識別多目標,首先,在第一個卷積殘差塊layer1后增加一個1×1的短接分支盡可能多的保留原始特征,保證了淺層特征的完整;然后與layer1特征進行融合,進行了多特征的融合;最后再嵌入一個修改激活函數ReLU6的空間_通道注意力機制模塊(CBAM),從而增強特征圖的特征表達能力。對比實驗表明在FashionMNIST數據集和Cifar10數據集上準確率有一定的提高,同時也保持良好的檢測速度。在未來,可能會對新的骨干網絡進行修改以提取更好的特征,或者對損失函數進行修改以找到最優值。在未來可能會在引入新的注意力機制,新的激活函數、優化網絡結構等來改進殘差深度網絡,保證當前空間復雜度和時間復雜度的基礎上,類別識別準確度方面還能有一定的提高。