潘楊帆 吳濤 顏二惠 胡奇奇 蔣鵬飛
摘要:目前,深度學(xué)習(xí)已經(jīng)應(yīng)用到醫(yī)學(xué)圖像識別領(lǐng)域,相關(guān)學(xué)者研究并開發(fā)深度學(xué)習(xí)算法,實(shí)現(xiàn)計(jì)算機(jī)對醫(yī)學(xué)圖像的識別與處理,診斷病因,為醫(yī)生提供輔助診斷決策。本文介紹了卷積神經(jīng)網(wǎng)絡(luò)(cNN)背景及相關(guān)重要理論知識,基于TensorFlow框架,采用Python作為編程語言,在Anaconda平臺搭建卷積神經(jīng)網(wǎng)絡(luò),采集醫(yī)學(xué)圖像,對其進(jìn)行處理并進(jìn)行識別操作,實(shí)驗(yàn)表明,通過CNN訓(xùn)練的網(wǎng)絡(luò)能成功識別出不同分類的圖片。
關(guān)鍵詞:卷積神經(jīng)網(wǎng)絡(luò);醫(yī)學(xué)圖像識別;TensorFlow;Python;Anaconda
中圖分類號:TP18 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)31-0206-03
現(xiàn)今,卷積神經(jīng)網(wǎng)絡(luò)的算法已經(jīng)被應(yīng)用于多個(gè)領(lǐng)域中,如手寫體識別、人臉檢測、車輛檢測等。同時(shí),世界各地的醫(yī)學(xué)圖像分析組織正在迅速進(jìn)入該領(lǐng)域,并將CNN和其他的深度學(xué)習(xí)算法應(yīng)用于醫(yī)學(xué)診斷,圖像分析和機(jī)器學(xué)習(xí)等工具給醫(yī)生提供輔助決策,提高病情診斷的效率和準(zhǔn)確率。本文在卷積神經(jīng)網(wǎng)絡(luò)的理論基礎(chǔ)之上,使用python語言搭建卷積神經(jīng)網(wǎng)絡(luò),并利用目前已有的醫(yī)學(xué)數(shù)據(jù)集對搭建好的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,實(shí)現(xiàn)對醫(yī)學(xué)圖像的識別與分類。
1卷積神經(jīng)網(wǎng)絡(luò)
1.1卷積神經(jīng)網(wǎng)絡(luò)的背景
卷積神經(jīng)網(wǎng)絡(luò)(Convolution Neural Network,CNN)是一種特殊的多層神經(jīng)網(wǎng)絡(luò),它是受生物自然視覺認(rèn)知機(jī)制啟發(fā)而形成的一種常見的深度學(xué)習(xí)體系結(jié)構(gòu)。
卷積神經(jīng)網(wǎng)絡(luò)是采用前向傳播計(jì)算輸出值,反向傳播調(diào)整權(quán)值和偏置,卷積神經(jīng)網(wǎng)絡(luò)與普通神經(jīng)網(wǎng)絡(luò)的區(qū)別在于卷積神經(jīng)網(wǎng)絡(luò)由卷積層和子采樣層組成的特征提取器組成。卷積層采用共享權(quán)重的技術(shù),目的為減少網(wǎng)絡(luò)層之間的連接,同時(shí)降低過擬合的風(fēng)險(xiǎn)。子采樣也稱為池化(Pooling),通常有兩種形式:均值池化(Mean Pooling)和最大值池化(Max Pooling)。卷積操作和子采樣操作的結(jié)合使用極大地簡化了模型的復(fù)雜度,減少了模型的參數(shù)。
1.2卷積層的計(jì)算
圖1是對一個(gè)輸入圖像,使用一個(gè)filter進(jìn)行卷積,得到一個(gè)Feature Map的過程。
在進(jìn)行卷積計(jì)算過程之前,首先對圖像中的元素以計(jì)算過程中的出現(xiàn)的參數(shù)進(jìn)行預(yù)定義。用xij表示圖像的第i行第j列元素;用Wm,n表示第m行第n列權(quán)重;用wb表示filter的偏置項(xiàng);用aij表示FeatureMap的第i行第j列元素;用f表示激活函數(shù)。然后,使用公式1計(jì)算卷積:
1.3池化層的計(jì)算
池化層(pooling層)的輸入一般來源于上一個(gè)卷積層,其主要作用就是下采樣,即:保留主要的特征,同時(shí)減少下一層的參數(shù)和計(jì)算量,防止過擬合;同時(shí)又保持某種不變性,包括平移(Translation),旋轉(zhuǎn)(Rotation),尺度(Scale)。
下采樣的方法通常有均值下采樣和最大值下采樣,兩種子采樣均可以看成特殊的卷積操作,如圖3所示:
(1)左邊采用的最大值下采樣方法。卷積核中為1的位置對應(yīng)輸入圖像對應(yīng)卷積核部分的最大值的位置,卷積核在原圖上的每次移動步長為2,池化后效果表現(xiàn)為將原圖縮減到原來的1/4,并且保留每個(gè)2*2區(qū)域的最強(qiáng)輸入。
(2)右邊采用的是相對簡單的均值下采樣方法。卷積核中每個(gè)權(quán)重都是0.25,卷積核在原輸人圖像上每次移動的步長也是2。池化后的輸出圖片同樣可以減至原來的1/4。
1.4全連接層的計(jì)算
全連接層的輸人數(shù)據(jù)來自于其前面的池化層,由于池化層的結(jié)果是一個(gè)二維圖像結(jié)果,通常需要經(jīng)過形狀轉(zhuǎn)變操作轉(zhuǎn)換成一維矩陣作為全連接層的輸入。圖4是全連接層輸出的計(jì)算過程。
獲得了所有的梯度之后,就可以更新每個(gè)權(quán)重。
池化層中通常有均值下采樣和最大值下采樣兩種方法,但是無論是均值下采樣還是最大值下采樣都沒有需要學(xué)習(xí)的參數(shù),因此在卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中池化層只需計(jì)算出誤差項(xiàng)并傳遞給上一層,不需要進(jìn)行梯度的計(jì)算。
2實(shí)驗(yàn)數(shù)據(jù)
2.1cifar10數(shù)據(jù)集
實(shí)驗(yàn)采用的數(shù)據(jù)集為cifar10數(shù)據(jù)集,它是一個(gè)用于識別物體圖像的深度學(xué)習(xí)數(shù)據(jù)集,它包含60000張彩色圖片,總共有10個(gè)分類。其中,包括50000張用于訓(xùn)練集,10000張用于測試集。
2.2醫(yī)學(xué)數(shù)據(jù)集
采用已經(jīng)處理過的視網(wǎng)膜圖片,根據(jù)病變的特征圖片做出標(biāo)記,選取其中的兩類做分類設(shè)計(jì),在代碼中以0和1作為分類標(biāo)簽,0代表P特征下的視網(wǎng)膜圖片,1代表S特征下的視網(wǎng)膜圖片。
3實(shí)驗(yàn)步驟
3.1搭建CNN神經(jīng)網(wǎng)絡(luò)
Tensorflow中包含有卷積層和池化層等各種神經(jīng)網(wǎng)絡(luò)的計(jì)算函數(shù),在Python代碼中導(dǎo)入Tensorflow庫,即可調(diào)用庫中的函數(shù)搭建CNN模型,以下是模型搭建過程中的核心代碼:
3.2訓(xùn)練步驟
在開始訓(xùn)練前,還需要定義損失函數(shù)和優(yōu)化器,以減低分類出現(xiàn)的誤差,提高圖像識別精準(zhǔn)度。本次實(shí)驗(yàn)使用cifar10中的訓(xùn)練集訓(xùn)練過程1000次,每訓(xùn)練100次打印出當(dāng)前數(shù)據(jù)損失概率以及識別精度。代碼實(shí)現(xiàn)如下:
4總結(jié)
本文基于深度學(xué)習(xí)理論,搭建卷積神經(jīng)網(wǎng)絡(luò)模型,首先將cifar10數(shù)據(jù)集作為模型的數(shù)據(jù)輸入,對訓(xùn)練集進(jìn)行1000次的訓(xùn)練,再使用測試集對其進(jìn)行測試,得出的識別精度達(dá)到0.7558。在成功實(shí)現(xiàn)cifar10數(shù)據(jù)集的識別操作后,又采集了醫(yī)學(xué)圖像,對其進(jìn)行處理并進(jìn)行分類操作,成功實(shí)現(xiàn)對不同分類圖片的識別。但由于采集的視網(wǎng)膜圖片,特征相差不是很明顯,造成識別較為困難,后續(xù)的研究中仍需進(jìn)一步優(yōu)化搭建的網(wǎng)絡(luò)及算法。