摘要:大數據人工智能分析技術使得醫學影像診斷軟硬件變得更智能化。通過已訓練好的卷積神經網絡,能很快地搭建并訓練自己的深度學習系統。目前,典型的卷積神經網絡是一個多層的可訓練的體系結構。使用平均值操作的池化層被稱之為平均池化層。
來自 GitChat 作者:王曉明
更多IT技術分享,盡在微信公眾號:GitChat技術雜談
進入 GitChat 閱讀原文
前言醫學影像與人工智能的結合,是數字醫療領域較新的分支和產業熱點。醫學影像的解讀需要長時間專業經驗的積累,醫生的培養周期相對較長,很多程度上,深度學習和醫生的學習過程是一樣的,通過海量知識的學習理解和應用,而人工智能在對圖像的檢測效率和精度兩個方面,可以做得比專業醫生更快。
大數據與人工智能等前沿技術在醫療領域應用已經成為一種趨勢,將大數據驅動的人工智能應用于癌癥診斷中,無疑為患者僻出一線生機,不僅可以挽救無數患者的生命,而且對于緩解醫療資源和醫患矛盾也有重大意義。
一、醫學影像的簡要介紹醫學影像是指為了醫療或醫學研究,對人體或人體某部分,以非侵入方式取得內部組織影像的技術與處理過程。它包含以下兩個相對獨立的研究方向:醫學成像系統(medical imaging system)和醫學圖像處理(medical image processing)。前者是指圖像行成的過程,包括對成像機理、成像設備、成像系統分析等問題的研究;后者是指對已經獲得的圖像作進一步的處理,其目的是或者是使原來不夠清晰的圖像復原,或者是為了突出圖像中的某些特征信息,或者是對圖像做模式分類等等。
現代醫學影像學的高速發展,醫學影像技術已經由傳統單一普通X線加血管造影檢查形成包括UI、CT、CR、DR、MRI、PET、PET-CT、數字減影血管造影以及PACS等多種技術組成的醫學影像學體系。影像成像技術的不斷豐富使醫學影像從“輔助檢查手段”變為現代醫學最重要的臨床診斷和鑒別診斷方法。接下來醫學影像將向三個方向發展:(1)由單一形態學影像檢查設備向“形態+功能”的融合型影像發展;(2)由大型設備轉向小型、簡便的床邊化儀器,未來將越來越多地投入應用到重癥監護、家庭醫療、預防保健等領域;(3)現代醫學影像技術與放射治療手段結合,使診斷與治療一體化。我們認為,更先進和便利的影像診斷設備將使臨床診療將更加依賴于影像檢查,帶來影像需求增多,循環促進影像設備領域的發展。
大數據人工智能分析技術使得醫學影像診斷軟硬件變得更智能化。用深度學習技術分析醫學影像和視頻是一個新的研究方向。通過已訓練好的卷積神經網絡,能很快地搭建并訓練自己的深度學習系統。
二、用 Python 進行圖像處理的基礎用于圖像處理的庫有很多,其中 OpenCV(Open computer vision) 比較主流,基于C/C++,支持Linux/Windows/MacOS/Android/iOS,并提供了Python,Matlab和Java等語言的接口,因為其豐富的接口,優秀的性能和商業友好的使用許可,不管是學術界還是業界中都非常受歡迎。作為當前非常流行的動態語言之一,Python不僅使用非常簡單,而且功能強大。通過Python來學習OpenCV框架,可以讓你很快理解計算機視覺的基本概念以及重要算法。
安裝時,既可以用 pip install opencv-python,也可以從 opencv.org 下載源碼。本文簡單介紹pip安裝的方式。
pip install --upgrade setuptools pip install numpy Matplotlib pip install opencv-python
圖2-1 加載胃部病歷切片的Python代碼示例
1943年,心理學家W.S.McCulloch和數理邏輯學家W.Pitts建立了神經網絡和數學模型,稱為MP模型。他們通過MP模型提出了神經元的形式化數學描述和網絡結構方法,證明了單個神經元能執行邏輯功能,從而開創了人工神經網絡研究的時代。
卷積神經網絡是對人工神經網絡的進一步改進,是一種專門為了識別二維圖像而設 計的一種能夠自動提取圖像特征的特殊的多層感知器。原始圖像不需要太多的預處理就 可以較好的學習到圖像的不變性特征。目前,典型的卷積神經網絡是一個多層的、可訓練的體系結構。包括輸入、卷積層(局部連接層)、抽樣層、歸一化層、全連接層、邏輯回歸層和輸出層等等。如何提高卷積神經網絡對圖像的識別效果,需要識別的數據集 如何找到最合適的網絡結構和參數配置,以及對于不同的數據集都具有一定兼容性的網絡結構成為現在研究的熱點。
典型的卷積神經網絡的概念模型如圖 3-1 所示。每一層是由多個二維平面組成。網絡中包括卷積層和池化層,分別表示為 C 層和 S 層。網絡中間還包含著一些隱藏層,它們在全連接層。在網絡體系結構中,輸入層只有一個,它直接接收二維對象,對于樣本的特征提取過程是嵌套在卷積和池化過程中。在全連接層內包含多個隱含層,主要實現分類的過程。
圖3-1 卷積神經網絡通用模型
圖3-2中顯示了卷積層神經網絡結構中最重要的部分,這個部分被稱之為過濾器(filter)或者內核(kernel)。因為TensorFlow文檔中將這個結構稱之為過濾器(filter),所以我們將統稱這個結構為過濾器。如圖4所示,過濾器可以將當前層神經網絡上的一個子節點矩陣轉化為下一層神經網絡上的一個單位節點矩陣。單位節點矩陣指的是一個長和寬都為1,但深度不限的節點矩陣。
圖3-2 卷積層過濾器(filter)結構示意圖
在一個卷積層中,過濾器所處理的節點矩陣的長和寬都是由人工指定的,這個節點矩陣的尺寸也被稱之為過濾器的尺寸。常用的過濾器尺寸有3×3或5×5。因為過濾器處理的矩陣深度和當前層神經網絡節點矩陣的深度是一致的,所以雖然節點矩陣是三維的,但過濾器的尺寸只需要指定兩個維度。過濾器中另外一個需要人工指定的設置是處理得到的單位節點矩陣的深度,這個設置稱為過濾器的深度。注意過濾器的尺寸指的是一個過濾器輸入節點矩陣的大小,而深度指的是輸出單位節點矩陣的深度。如圖3-2所示,左側小矩陣的尺寸為過濾器的尺寸,而右側單位矩陣的深度為過濾器的深度。
TensorFlow對卷積神經網絡提供了非常好的支持,下面的程序實現了一個卷積層的前向傳播過程。從以下代碼可以看出,通過TensorFlow實現卷積層是非常方便的。
# 通過tf.get_variable的方式創建過濾器的權重變量和偏置項變量。上面介紹了卷積層 # 的參數個數只和過濾器的尺寸、深度以及當前層節點矩陣的深度有關,所以這里聲明的參數變 # 量是一個四維矩陣,前面兩個維度代表了過濾器的尺寸,第三個維度表示當前層的深度,第四 # 個維度表示過濾器的深度。 filter_weight = tf.get_variable( "weights", [5, 5, 3, 16], initializer=tf.truncated_normal_initializer(stddev=0.1)) # 和卷積層的權重類似,當前層矩陣上不同位置的偏置項也是共享的,所以總共有下一層深度個不 # 同的偏置項。本樣例代碼中16為過濾器的深度,也是神經網絡中下一層節點矩陣的深度。 biases = tf.get_variable( "biases", [16], initializer=tf.constant_initializer(0.1)) # tf.nn.conv2d提供了一個非常方便的函數來實現卷積層前向傳播的算法。這個函數的第一個輸 # 入為當前層的節點矩陣。注意這個矩陣是一個四維矩陣,后面三個維度對應一個節點矩陣,第一 # 維對應一個輸入batch。比如在輸入層,input[0,:,:,:]表示第一張圖片,input[1,:,:,:] # 表示第二張圖片,以此類推。tf.nn.conv2d第二個參數提供了卷積層的權重,第三個參數為不 # 同維度上的步長。雖然第三個參數提供的是一個長度為4的數組,但是第一維和最后一維的數字 # 要求一定是1。這是因為卷積層的步長只對矩陣的長和寬有效。最后一個參數是填充(padding) # 的方法,TensorFlow中提供SAME或是VALID兩種選擇。其中SAME表示添加全0填充, # “VALID”表示不添加。 conv = tf.nn.conv2d( input, filter_weight, strides=[1, 1, 1, 1], padding="SAME") # tf.nn.bias_add提供了一個方便的函數給每一個節點加上偏置項。注意這里不能直接使用加 # 法,因為矩陣上不同位置上的節點都需要加上同樣的偏置項。雖然下一層神經網絡的大小為 # 2×2,但是偏置項只有一個數(因為深度為1),而2×2矩陣中的每一個值都需要加上這個 # 偏置項。 bias = tf.nn.bias_add(conv, biases) # 將計算結果通過ReLU激活函數完成去線性化。 actived_conv = tf.nn.relu(bias)
在卷積神經網絡中,卷積層之間往往會加上一個池化層(pooling layer)。池化層可以非常有效地縮小矩陣的尺寸,從而減少最后全連接層中的參數。使用池化層既可以加快計算速度也有防止過擬合問題的作用。和卷積層類似,池化層前向傳播的過程也是通過移動一個類似過濾器的結構完成的。不過池化層過濾器中的計算不是節點的加權和,而是采用更加簡單的最大值或者平均值運算。使用最大值操作的池化層被稱之為最大池化層(max pooling),這是被使用得最多的池化層結構。使用平均值操作的池化層被稱之為平均池化層(average pooling)。
# tf.nn. max_pool實現了最大池化層的前向傳播過程,它的參數和tf.nn.conv2d函數類似。 # ksize提供了過濾器的尺寸,strides提供了步長信息,padding提供了是否使用全0填充。 pool = tf.nn.max_pool(actived_conv, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding="SAME")
我們通過一個圖像分類問題介紹卷積神經網絡是如何工作的。下面是卷積神經網絡判斷一個圖片是否包含“兒童”的過程,包括四個步驟:圖像輸入(InputImage)→卷積(Convolution)→最大池化(MaxPooling)→全連接神經網絡(Fully-ConnectedNeural Network)計算。
圖3-3 神經網絡判斷一個圖片是否包含“兒童”的過程
首先將圖片分割成如下圖的重疊的獨立小塊。接下來將每一個獨立小塊輸入小的神經網絡;這個小的神經網絡已經被訓練用來判斷一個圖片是否屬于“兒童”類別,它輸出的是一個特征數組。 標準的數碼相機有紅、綠、藍三個通道(Channels),每一種顏色的像素值在0-255之間,構成三個堆疊的二維矩陣;灰度圖像則只有一個通道,可以用一個二維矩陣來表示。
將所有的獨立小塊輸入小的神經網絡后,再將每一個輸出的特征數組按照第一步時77個獨立小塊的相對位置做排布,得到一個新數組。
第二步中,這個小的神經網絡對這77張大小相同的小圖片都進行同樣的計算,也稱權重共享(SharedWeights)。這樣做是因為,第一,對圖像等數組數據來說,局部數組的值經常是高度相關的,可以形成容易被探測到的獨特的局部特征;第二,圖像和其它信號的局部統計特征與其位置是不太相關的,如果特征圖能在圖片的一個部分出現,也能出現在任何地方。所以不同位置的單元共享同樣的權重,并在數組的不同部分探測相同的模式。數學上,這種由一個特征圖執行的過濾操作是一個離散的卷積,卷積神經網絡由此得名。
卷積步驟完成后,再使用MaxPooling算法來縮減像素采樣數組,按照2×2來分割特征矩陣,分出的每一個網格中只保留最大值數組,丟棄其它數組,得到最大池化數組(Max-PooledArray)。 接下來將最大池化數組作為另一個神經網絡的輸入,這個全連接神經網絡會最終計算出此圖是否符合預期的判斷。
在實際應用時,卷積、最大池化和全連接神經網絡計算,這幾步中的每一步都可以多次重復進行,總思路是將大圖片不斷壓縮,直到輸出單一的值。使用更多卷積步驟,神經網絡就可以處理和學習更多的特征。
四、胃癌病理切片的識別在醫學影像領域,病理圖片向來是醫療領域的“金標準”,病理診斷是對疾病下最終判斷的環節。人工讀片會有:主觀性高、重復性低、定量及信息利用度不足、耗時及勞動強度和知識經驗的傳承困難等問題。而人工智能病理切片識別系統的優勢在于能自動分析、分割、檢測感興趣區域、能夠定量地評估病變區域的變異程度,結果具有可重復性。
圖4-1 胃癌病理切片
圖4-1被橙色曲線所標注的區域是為此圖中可見的部分癌巢(細胞發生癌變的區域);癌巢與正常區域看起來十分不同,幾個藍色方框選取的區域即是正常區域的示例。這些不同主要是由于癌細胞的形態學特征和相互間的排列分布,與正常區域的細胞截然不同而造成的。
胃癌病理切片識別的目標是利于深度卷積神經網絡技術,使計算機能夠自動地將胃癌數字組織病理切片的局部視野中的癌巢快速精準地標識出來。
選取胃癌病理切片,為常規HE染色,放大倍數20×,圖片大小為2048×2048像素,tiff 格式。選取200個病人案例(80%癌癥、20%非癌癥),共計2000張病理切片圖片,訓練集數量1500張,測試集數量500張。
數據標注:
病理專家將數據標記(雙盲評估+驗證)為有無癌癥,并用線條畫出腫瘤區域輪廓,提供知識圖譜說明。
關于胃癌病理切片AI識別其實是2017中國大數據人工智能創新創業大賽的一個賽題。大賽官網:http://www.datadreams.org/rac... 我是2016年上海BOT大賽聊天機器人的參賽者,這里算是免費給他們打個廣告,有興趣的同學可以找我組團打比賽。
五、AI 技術在醫療領域的前景分析人工智能的最大特點就是高效的計算和精準的分析與決策,這一點剛好擊中現在的醫療痛點,或能從根本上解決醫療資源供不應求的局面。醫學影像的識別是人工智能切入醫療行業的一個切入點,因為病理科,放射科醫生讀片是醫療領域的一個明顯的痛點。未來醫療一定是向精準個性化醫療的方向發展,但是發展路途上也有很多障礙,比如電子病歷數據分散在各家醫院,數據的收集整理工作是一個漫長而艱難的任務。分析病歷文本的NLP技術目前也不是很成熟,在構建醫療知識圖譜的過程中,需要大量專業醫生的參與等等。人工智能+醫療,一定是需要人工智能人才+醫生通力合作才能研發出適合醫生的智能輔助診斷系統。
實錄:《王曉明:腫瘤醫療影像 AI 識別技術實戰解析》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19636.html
閱讀 3096·2021-02-22 17:12
閱讀 719·2019-08-30 15:55
閱讀 3079·2019-08-30 15:54
閱讀 1384·2019-08-29 16:56
閱讀 1862·2019-08-29 15:13
閱讀 1716·2019-08-29 13:19
閱讀 601·2019-08-26 13:40
閱讀 2822·2019-08-26 10:26