謝海聞,葉東毅,陳昭炯
(福州大學 數(shù)學與計算機科學學院,福州 350108)
卷積神經(jīng)網(wǎng)絡(luò) (Convolutional Neural Network,CNN)是一類用于處理圖像問題的神經(jīng)網(wǎng)絡(luò)模型,最初用于字符識別問題[1,2],而后擴展到自然圖像分類[3-5]、目標檢測[6-9]等更復雜的問題.CNN的主要結(jié)構(gòu)是卷積層和池化層,其中卷積層通過卷積得到一定數(shù)量的特征圖(feature map),池化層下采樣前一層的特征圖以獲得具有空間不變性的特征[10].CNN通過“卷積-池化”獲取空間不變特征時很好地捕獲了目標實體的共性,但與此同時目標實體的個性被逐步舍棄.
Sabour 、Frosst和 Hinton[11]提出 CapsNet用于目標識別任務(wù).CapsNet使用capsule表示一個特定的實體(entity),capsule包含一個編碼向量,向量的模表示實體的存在概率,即活躍度,向量的方向表示實體的存在形態(tài)(個性).這里所說的實體可以是一個完整的目標,也可以是目標的一部分.CapsNet通過動態(tài)路由(dynamic routing)的方式實現(xiàn)一致性路由(routing-byagreement)取代CNN使用的最大池化(max-pooling),使得只有活躍度高的capsule受到高層的關(guān)注,避免最大池化引起的位置信息缺失.具體而言,在低層級capsule中位置信息是不同區(qū)域capsule的活躍度,動態(tài)路由能夠?qū)⑽恢眯畔⑥D(zhuǎn)移到高層級capsule并以編碼向量的碼字表示,因此CapsNet在高層級仍然保持了位置信息.而且動態(tài)路由使得CapsNet在不增強或變形數(shù)據(jù)的情況下,能夠識別已知目標的新形態(tài).在輸出層,CapsNet輸出各個類別的編碼向量,級聯(lián)全部類別的編碼向量,然后屏蔽(mask out)低活躍度類別的編碼向量得到輸入圖像的編碼,即提取了輸入圖像中目標的表征.
為了促使表征能夠更好地表示輸入圖像中的目標,CapsNet在訓練過程中加入重構(gòu)損失.重構(gòu)損失由重構(gòu)圖像和原始圖像的L2范數(shù)(L2norm)刻畫.重構(gòu)圖像由解碼器根據(jù)表征得到.而且文獻[11]的實驗結(jié)果表明加入重構(gòu)損失提升了CapsNet的目標識別效果.
本文從新的角度思考該模型.將CapsNet視作編碼器,與文獻[11]重構(gòu)圖像的解碼器一同構(gòu)成一種可以完成目標識別和目標重構(gòu)的自編碼器模型.我們注意到CapsNet解碼器輸入層的規(guī)模隨類別數(shù)量的增加而增加,可延展性較差.
針對上述問題,本文提出多分支自編碼器.結(jié)構(gòu)上,多分支自編碼器的表征是一個二維矩陣,不屏蔽任何編碼向量;解碼器的輸入是單一類別的編碼向量而非全部類別編碼向量的級聯(lián),使解碼器規(guī)模獨立于類別數(shù)量,增強模型解碼器的可延展性.訓練方式上,加入新的優(yōu)化目標,使非標簽類別編碼向量的重構(gòu)圖像接近全零圖像.這種訓練方式減少低活躍度類別的編碼向量中所包含的噪聲,提升了正確類別編碼向量的表征能力,使重構(gòu)目標更加精確.MNIST[1]數(shù)據(jù)集的實驗結(jié)果表明,本文模型具有良好的識別能力且重構(gòu)能力明顯優(yōu)于CapsNet,因而具有更全面的表征能力.
設(shè)一組單目標圖像集合 X ={x1,x2,···},其對應(yīng)的類別CX={cx1,cx2,···},所有的類別構(gòu)成集合 C = {c1,c2,···}.現(xiàn)有一組復合圖像 Z ={z1,z2,···},其對應(yīng)的類別是CZ={Cz1,Cz2,···},其中Czi是C 中元素的集合.
本文研究目標是以單目標圖像集合 X 和對應(yīng)的類別 CX作為訓練數(shù)據(jù),求得多分支自編碼器的最優(yōu)參數(shù),使得編碼器的類別估計與真實類別 CZ一致并且使得重構(gòu)的復合圖像與原始復合圖像Z 一致.
CapsNet是用于目標識別的神經(jīng)網(wǎng)絡(luò)模型,其結(jié)構(gòu)如圖1所示.該模型首先利用一組卷積操作提取原始圖像的初級特征,然后利用編碼層將初級特征轉(zhuǎn)化為各個類別的編碼向量.其中,編碼層首先將卷積得到的初級特征整理成低層級capsule,然后利用動態(tài)路由的方式推斷出高層級capsule.每個高層級capsule對應(yīng)一個目標類別,其編碼向量是對應(yīng)類別的編碼向量.類別的存在概率是類別的編碼向量的模,即高級實體的活躍度.根據(jù)類別的存在概率判斷原始圖像包含的目標類別.
圖1 CapsNet及其相應(yīng)的解碼器
動態(tài)路由是一種確定低層級capsule與高層級capsule耦合系數(shù)(coupling coefficient)的一種迭代算法.這種算法使得與高層級capsule方向接近的低層級capsule具有更高的耦合系數(shù).相比CNN使用的最大池化,動態(tài)路由更好地保持了位置信息.低層級以capsule的空間活躍度表示的位置信息,由動態(tài)路由傳遞到高層級capsule編碼向量的碼字.同時,以capsule表征實體相比以標量表征實體而言,能夠更準確地識別出以新形態(tài)呈現(xiàn)的已知目標.
當原始圖像僅有一個類別時,類別的編碼向量經(jīng)過級聯(lián)后,屏蔽活躍度低的編碼向量,僅保留活躍度最高的一個編碼向量,得到原始圖像的編碼.編碼經(jīng)過解碼器得到原始圖像的重構(gòu)圖像.
當原始圖像包含多個類別時,根據(jù)活躍度保留高活躍度的編碼向量得到多個編碼,每個編碼對應(yīng)原始圖像中的一個類別.解碼器分別解碼每個類別的編碼,得到對應(yīng)類別的重構(gòu)圖像,即類別重構(gòu)圖像.疊加這些類別重構(gòu)圖像,得到原始圖像的重構(gòu)圖像.
上述對編碼的處理方式使編碼變得稀疏,可以用共同的解碼器重構(gòu)所有類別的編碼.但是這種級聯(lián)的處理方式,導致模型的可延展性較差,解碼器輸入層的規(guī)模隨類別數(shù)的增加而增加.當新增類別時,無法利用已有的解碼器,無法將已有的解碼器參數(shù)作為初始化信息.
本文提出的多分支自編碼器是用于目標識別和目標重構(gòu)的神經(jīng)網(wǎng)絡(luò)模型,該模型改進了CapsNet的結(jié)構(gòu)和訓練方式,克服了上節(jié)提到的不足,其結(jié)構(gòu)如圖2所示.多分支自編碼器在編碼部分與CapsNet相似,編碼層輸出各個類別的編碼向量.與CapsNet不同的是,本文模型分別處理每個類別的編碼向量,而不考慮其活躍度.每個類別的編碼向量分別激勵解碼器產(chǎn)生各自類別的重構(gòu)圖像.所有類別重構(gòu)圖像疊加起來獲得完整的重構(gòu)圖像.解碼器的輸入端神經(jīng)元數(shù)量獨立于類別數(shù),即解碼器的輸入層規(guī)模不隨類別的增加而增加,使得模型具有更好的可延展性.下面舉例說明,假設(shè)n類編碼向量的長度分別為a,則CapsNet的解碼器輸入層需要有n×a個神經(jīng)元,而本文模型的解碼器輸入層需要a個神經(jīng)元.當類別數(shù)增加n′類時,CapsNet解碼器輸入層需要 (n+n′)×a個神經(jīng)元,輸入層的規(guī)模增加;而本文模型的解碼器輸入層仍只需要a個神經(jīng)元,輸入層的規(guī)模不變.
圖2 多分支自編碼器流程
Capsule和動態(tài)路由機制,已經(jīng)能夠?qū)⒃紙D像的各類信息蘊含到類別編碼向量中,包括目標位置、形態(tài)和目標的類別信息.即使不采用屏蔽作為編碼稀疏化策略,也能激勵解碼器產(chǎn)生相應(yīng)類別的重構(gòu)圖像.
本文模型采用解卷積網(wǎng)絡(luò)替換文獻[11]采用的全連接網(wǎng)絡(luò)作為解碼器.因為數(shù)字圖像是二維空間中像素的集合,像素點之間存在二維空間上的關(guān)系,所以解卷積網(wǎng)絡(luò)相比全連接網(wǎng)絡(luò),更好地利用空間關(guān)系,能夠更精確地重構(gòu)圖像.
我們采用端到端的方式(end-to-end)訓練網(wǎng)絡(luò)模型.為了更清晰地表述,我們假設(shè)對于 ?x∈X多分支自編碼器生成一組編碼向量{r1,r2,···}.
為了實現(xiàn)目標識別,我們引入邊際損失(margin loss),促使編碼層輸出的類別編碼向量的活躍度(編碼向量的模){ | |r1||,||r2||,···},能夠反映相應(yīng)類別在原始圖像中的存在概率:
其中,當?shù)趉個類別存在時,Tk= 1,反之Tk=0,概率上限m+=0.9,概率下限m-=0.1.λ= 0.5防止最初的訓練過程抑制所有類別的活躍度[11].
為了實現(xiàn)按類別重構(gòu),標簽對應(yīng)的編碼向量(活躍的編碼向量)的重構(gòu)目標是原始圖像,其余編碼向量(不活躍的編碼向量)的重構(gòu)目標是全零圖像.我們引入L2范數(shù)度量重構(gòu)誤差:
其中,當?shù)趉個類別存在時,Tk= 1,反之是第k個類別的重構(gòu)圖像,x是原始圖像.相比CapsNet的訓練方式,本文的訓練方式不僅指導解碼器將活躍的編碼向量映射到原始圖像,而且進一步指導解碼器將不活躍的編碼向量映射到全零圖像.因此,從理論上說,如果能夠獲得極小化上述損失函數(shù)的最優(yōu)解,則可以促使活躍的編碼向量激勵解碼器產(chǎn)生與原始圖像一致的重構(gòu)圖像,而促使不活躍的編碼向量映射為全零圖像,亦即抑制不活躍的編碼向量激勵解碼器產(chǎn)生任何形式的圖形.所以我們采用的訓練方式更加全面,因而本文模型提取的編碼具有更強的表征能力,能夠更精確地重構(gòu)原始圖像.而且編碼向量表征能力的增強,使得編碼向量能夠更準確地反映相應(yīng)類別目標的存在形式,提升模型的目標識別效果.
為了同時優(yōu)化兩類目標,取兩類誤差的加權(quán)和作為整體的優(yōu)化目標
其中,α是權(quán)值系數(shù),用于調(diào)節(jié)分類損失和重構(gòu)損失的重要性.
因為每個輸入圖像所包含的目標類別數(shù)是不確定的,所以無法使用排序取最大若干項的方法判斷輸入圖像包含的目標類別.又因為實驗中輸入圖像的類別數(shù)小于類別總數(shù),所以對于多數(shù)不存在的類別而言,存在的類別是相對少數(shù).因此,考慮采用離群點檢測的方法實現(xiàn)類別估計.
記編碼器輸入的類別存在概率為pi(i=1~n),則概率均值為mp=E[pi].記各個類別存在概率與概率均值mp的距離為:
則距離均值為:
判決閾值為:
當pi>Thread時,第i類是離群點,認為輸入圖像中存在第i類;反之,第i類不是離群點,認為輸入圖像中不存在第i類.
實驗采用主流的深度學習框架Tensorflow[12]構(gòu)造多分支自編碼器.訓練使用的優(yōu)化器(optimizer)是Adam優(yōu)化器[13],優(yōu)化器的參數(shù)保持默認設(shè)置.模型參數(shù)初始化采用Xiao等人[14]提出的正交初始化方法.為了使實驗結(jié)果客觀公平,實驗中CapsNet和多分支自編碼器的編碼器部分采用相同的結(jié)構(gòu).
為了評價模型的目標識別能力,實驗采用查準率(P)、查全率(R)和F1-score作為客觀評價指標.查全率評價模型檢出部件的比例;查準率評價模型檢出部件中屬于真實部件的比例;F1-score是查全率和查準率的調(diào)和均值,F1-score高意味著模型既不傾向于將負類識別為正類以獲得更高的查全率,也不傾向于將使用過分嚴格的閾值以獲得更高的查準率.設(shè)測試樣例數(shù)N,Pi是測試樣例的類別估計,Yi是測試樣例的真實類別,則查準率、查全率和F1-score的計算方式如下:
為直觀展現(xiàn)估計和真實標簽之間的重合度,采用交并比(Intersection-Over-Union,IOU)展現(xiàn)模型識別的準確率:
模型的目標重構(gòu)能力可以通過直接觀察進行比較,此外,實驗采用峰值信噪比 (Peak Signal Noise Ratio,PSNR)作為評價指標,更加客觀地評價模型的重構(gòu)能力.
其中,MAX是圖像像素的最大值,MSE是重構(gòu)圖像與原圖像 Z的均方誤差
訓練數(shù)據(jù)是MNIST[11]的訓練集,其包含六萬幅有數(shù)字類別標記的圖像,其每幅圖像包含1類數(shù)字.原始的MNIST圖像尺寸是28×28,我們將28×28的數(shù)字隨機投入64×64的黑色背景中.測試數(shù)據(jù)由MNIST數(shù)據(jù)集的測試集制作.測試數(shù)據(jù)是多類別的圖像,由MNIST的測試集制成.測試圖像是在64×64的黑色背景中投入任意多個不同類別的數(shù)字,考慮到畫幅的容量,每張測試圖像至多包含5個不同類別的數(shù)字,至少有1個數(shù)字.
CapsNet和多分支自編碼器的卷積部分設(shè)置如表1所示,解碼部分設(shè)置如表2所示.
表1 MNIST 實驗卷積部分結(jié)構(gòu)參數(shù)
表2 MNIST 實驗解碼器結(jié)構(gòu)參數(shù)
圖3和圖4展示了模型對多類別圖像的重構(gòu)結(jié)果.圖3的第1行是原始圖像,第2行是本文模型的重構(gòu)結(jié)果,第3行是CapsNet的重構(gòu)結(jié)果,每組重構(gòu)結(jié)果的第1列是所有類別重構(gòu)圖像的疊加,第2列是僅疊加高活躍度類別的重構(gòu)圖像,說明本文模型和CapsNet的重構(gòu)能力不隨輸入圖像中包含的類別數(shù)量增加而降低,重構(gòu)能力較為穩(wěn)定.圖4的“按類別重構(gòu)”是對每個類別的編碼向量分別重構(gòu)的結(jié)果.當類別不存在時,本文模型提取的編碼向量不會激勵解碼器產(chǎn)生任何形狀,而CapsNet產(chǎn)生了較大的“迷霧狀”圖形.出現(xiàn)這種現(xiàn)象的原因是,CapsNet的訓練過程中,僅有活躍的編碼向量到原始圖像的訓練數(shù)據(jù)對,缺少不活躍的編碼向量到全零圖像的訓練數(shù)據(jù)對,使得其解碼器不知道應(yīng)該將不活躍的編碼向量映射為何種圖形,所以產(chǎn)生了“迷霧狀”圖形.而本文模型在訓練過程中增加了不活躍編碼向量到全零圖像的訓練數(shù)據(jù)對,使得解碼器不僅能夠?qū)⒒钴S的編碼向量映射到正確的圖形,而且能夠?qū)⒉换钴S的編碼向量映射到全零圖像.所以如果本文模型提取的編碼向量是低活躍度的,解碼器會將其映射到全零圖像,該編碼向量不會激勵解碼器產(chǎn)生任何形狀.由表3可得,在所有類別重構(gòu)圖像和僅活躍類別重構(gòu)圖像上,本文模型的PSNR明顯高于CapsNet,說明本文模型更好地還原了原始圖像.在所有類別重構(gòu)圖像和僅活躍類別重構(gòu)圖像上,本文模型的PSNR近似相等,說明本文模型產(chǎn)生的不活躍類別的重構(gòu)圖像是近乎純凈的全零圖像,進一步說明不活躍的編碼向量幾乎不會激勵解碼器產(chǎn)生任何圖形.由此可得,本文模型具有更強、更全面的表征能力,對目標的重構(gòu)能力優(yōu)于CapsNet.
圖3 輸入類別數(shù)為 1、2、3、4 和 5 時,本文模型和 CapsNet的重構(gòu)結(jié)果.每組的左側(cè)是所有類別重構(gòu)圖像,右側(cè)是僅活躍類別重構(gòu)圖像
表3同時展示了模型對多類別圖像的識別結(jié)果,說明本文模型和CapsNet在MNIST數(shù)據(jù)集的多目標識別任務(wù)上效果接近,具有良好的識別能力.
圖5展示了本文模型輸入不同圖像時,“數(shù)字3”類別編碼向量的重構(gòu)圖像.第1行是輸入圖像,第2行是“數(shù)字3”類別的重構(gòu)圖像,呈現(xiàn)的重構(gòu)圖像整體經(jīng)過歸一化.當輸入圖像中不含“數(shù)字3”時,該類別的編碼向量不會激勵解碼器產(chǎn)生任何圖形.一方面說明不論活躍度如何編碼向量的表征能力都很強;另一方面說明不采用屏蔽作為編碼稀疏化策略,類別重構(gòu)圖像也不會出現(xiàn)混淆.
圖4 輸入圖像包含 5 類數(shù)字時,按類別重構(gòu)圖像
表3 MNIST 實驗的結(jié)果
圖5 “數(shù)字3”對應(yīng)編碼向量在不同輸入情況的重構(gòu)結(jié)果
綜上所述,經(jīng)過單類別數(shù)字圖像訓練,在多類別MNIST數(shù)據(jù)集上,本文模型和CapsNet均展現(xiàn)出良好的識別能力而本文模型的重構(gòu)能力明顯優(yōu)于CapsNet.
針對CapsNet解碼器的輸入層規(guī)模隨類別數(shù)增加而增加,可延展性較弱的問題,本文提出多分支自編碼器.該模型的解碼器分別重構(gòu)每個類別的編碼向量,使得解碼器的規(guī)模獨立于類別數(shù)量,增強了模型的可延展性.此外在訓練方法上,增加全零圖像作為非標簽類別編碼向量的重構(gòu)目標,提升了編碼向量的表征能力,模型的表征能力更全面.實驗部分展示了模型經(jīng)過單一類別圖像的訓練,識別多類別圖像的能力.實驗結(jié)果表明在多類別MNIST數(shù)據(jù)集上,多分支自編碼器具有良好的識別能力而重構(gòu)能力明顯優(yōu)于CapsNet,說明本文對CapsNet的改進是有效的,使模型具有更全面的表征能力.
進一步工作,將研究如何將CapsNet應(yīng)用于漢字字符識別和漢字風格表征.