運用深度學(xué)習(xí)技術(shù)進行圖像和視頻分析,并將它們用于自動駕駛汽車、無人機等多種應(yīng)用場景中已成為研究前沿。近期諸如《A Neural Algorithm of Artistic Style》等論文展示了如何將藝術(shù)家的風(fēng)格轉(zhuǎn)移并應(yīng)用到另一張圖像中,而生成新的圖像。其他如《Generative Adversarial Networks》(GAN)以及「Wasserstein GAN」等論文為開發(fā)能學(xué)習(xí)生成類似于我們所提供的數(shù)據(jù)的模型做了鋪墊。因此,它們在半監(jiān)督學(xué)習(xí)領(lǐng)域打開了新世界的大門,也為將來的無監(jiān)督學(xué)習(xí)奠定了基礎(chǔ)。
盡管這些研究領(lǐng)域處于通用圖像層面,但我們的目標(biāo)是將它們應(yīng)用于醫(yī)學(xué)圖像以輔助醫(yī)療。我們需要從基礎(chǔ)開始。本文第一部分將從圖像處理的基礎(chǔ)、醫(yī)學(xué)圖像格式化數(shù)據(jù)的基礎(chǔ)以及一些可視化的醫(yī)療數(shù)據(jù)談起。而后一部分文章將深入探究卷積神經(jīng)網(wǎng)絡(luò),并使用 Keras 來預(yù)測肺癌。
圖像處理庫有很多,但 OpenCV(開源計算機視覺庫,open computer vision)憑借其廣泛的支持且可用于 C++、java 和 python 的優(yōu)點而成為主流。而我更偏向于使用 jupyter notebook 導(dǎo)入 OpenCV。
你可以使用 pip install opencv-python,也可以從 opencv.org 網(wǎng)站直接進行安裝。
安裝 opencv
現(xiàn)在打開 Jupyter notebook 并確認能夠?qū)?cv2。你還需要 numpy 和 matplotlib 庫來在 notebook 內(nèi)查看圖片。
現(xiàn)在來檢查能否打開并通過鍵入下述代碼在筆記本上查看圖像。
通過 OpenCV 進行圖像加載的示例
基本人臉識別
我們來做點有意思的事情吧,比如人臉識別。我們將使用一種最初由 Rainer Lienhart 開發(fā)的正面人臉識別器,它使用了基于開源 xml 殘基(stump-based)的 20x20 柔和 adaboost 算法。
關(guān)于 Haar-cascade 檢測的詳細范例:http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html
使用 OpenCV 進行人臉識別
在文檔區(qū)使用 opencv 進行圖像處理的例子不勝枚舉。
我們已經(jīng)了解了圖像處理的基礎(chǔ),下面來了解醫(yī)學(xué)圖像格式吧。
醫(yī)學(xué)圖像數(shù)據(jù)格式
醫(yī)學(xué)圖像以數(shù)字成像和通信(DICOM)為存儲與交換醫(yī)學(xué)圖像數(shù)據(jù)的標(biāo)準(zhǔn)解決方案。該標(biāo)準(zhǔn)的第一版發(fā)布于 1985 年,之后有少許修改;它使用了文件格式和通信協(xié)議如下。
文件格式:所有患者的醫(yī)療圖像都以 DICOM 文件格式進行保存。該格式不僅具有與圖像相關(guān)的數(shù)據(jù)(如用于捕獲圖像的設(shè)備和醫(yī)療處理情境),還具有關(guān)于患者的 PHI (受保護的健康信息,protected health information),如姓名、性別、年齡等。醫(yī)療影像設(shè)備可以創(chuàng)建 DICOM 文件,而醫(yī)生可以使用 DICOM 查看器以及可顯示 DICOM 圖像的計算機應(yīng)用程序來讀取并診斷從圖像獲得的結(jié)果。
通信協(xié)議:DICOM 通信協(xié)議用于搜索檔案中的成像研究,并將成像研究恢復(fù)到工作站來顯示。連接到醫(yī)院網(wǎng)絡(luò)的全部醫(yī)學(xué)成像應(yīng)用程序都使用 DICOM 協(xié)議來交換信息,其中大部分信息是 DICOM 圖像,但還包括患者和手術(shù)信息。此外還有更先進的網(wǎng)絡(luò)命令用于控制并跟蹤治療、調(diào)整進程、報告狀態(tài),并在醫(yī)生和成像設(shè)備之間共享工作負載。
現(xiàn)有篇博文很細致地描述了 DICOM 標(biāo)準(zhǔn),此處為鏈接:http://dicomiseasy.blogspot.com/
分析 DICOM 圖像
Pydicom 是一個 python 包,它很適合分析 DICOM 圖像。本節(jié)將闡述如何在 Jupyter notebook 上呈現(xiàn) DICOM 圖像。
安裝 Pydicom 使用:pip install pydicom。
安裝 pydicom 包之后,回到 Jupyter notebook 進行操作。在 notebook 中導(dǎo)入 dicom 包以及其他包,如下所示:
我們也能使用 pandas、scipy、skimage 以及 mpl_toolkit 等其他的包來進行數(shù)據(jù)處理與分析。
你可以在線獲得很多免費的 DICOM 數(shù)據(jù)集,但下述數(shù)據(jù)集在入門階段定能有所幫助:
Kaggle Competitions and Datasets:它是我的最愛。請查閱肺癌競爭和糖尿病視網(wǎng)膜病變的數(shù)據(jù):https://www.kaggle.com/c/data-science-bowl-2017/data
Dicom Library:面向教育和科學(xué)的 DICOM 庫,其提供免費的在線醫(yī)療 DICOM 圖像或視頻文件共享服務(wù)。
Osirix Datasets:提供通過各種成像模式獲取的大量人類數(shù)據(jù)集。
Visible Human Datasets:在這里可視化人類計劃的一部分?jǐn)?shù)據(jù)可以免費利用,這很奇怪,因為獲取這些數(shù)據(jù)既不免費也不輕松。
The Zubal Phantom:該網(wǎng)站免費提供 CT 和 MRI 這兩種男性的多個數(shù)據(jù)集。
請下載 dicom 文件并加載到 jupyter notebook 中。
現(xiàn)在將 DICOM 圖像加載到列表中。
第一步:在 Jupyter 中進行 DICOM 圖像的基本查看操作
在第一行加載第一個 DICOM 文件來提取元數(shù)據(jù),這個文件將賦值為 RefDs,其文件名會列在 lstFilesDCM 列表的頂端。
然后來計算 3D NumPy 數(shù)組的總維度,它等于在笛卡爾坐標(biāo)軸中(每個切片的像素行數(shù)*每個切片的像素列數(shù)*切片數(shù))。最后,使用 PixelSpacing 和 SliceThickness 屬性來計算三個軸之間的像素間距。我們將把數(shù)組維度儲存在 ConstPixelDims 中,把空間儲存在 ConstPixelSpacing [1] 中。
第二步:查看 DICOM 格式的細節(jié)
CT 掃描中的測量單位是亨氏單位(Hounsfield Unit,HU),它是輻射強度的度量。CT 掃描儀經(jīng)過高度校準(zhǔn)以精確測量。
每個像素都被分配了一個數(shù)值(CT 號),它是包含在相應(yīng)體素(corresponding voxel)中的所有衰減值的平均數(shù)。將這個數(shù)字與水的衰減值進行比較,并以任意單位中的亨氏單位(HU)為刻度進行顯示。
這個刻度將水的衰減值(HU)標(biāo)為 0。CT 數(shù)量的范圍是 2000HU,但一些現(xiàn)代掃描儀具有較高的 HU 范圍,最高可達 4000。每個數(shù)字表示在光譜的其中一端會出現(xiàn)+1000(白色)和-1000(黑色)的灰色陰影。
一些掃描儀具有圓柱形掃描范圍,但其輸出圖像卻是矩形。落在這些邊界之外的像素具有-2000 的固定值。
第一步通常是將這些值設(shè)置為 0。接著,通過與重新縮放的斜率相乘并添加截距來返回到亨氏單位(斜率和截距均很方便地存儲在掃描的元數(shù)據(jù)中?。?/span>
下部分將會用到 Kaggle 的肺癌數(shù)據(jù)集,并使用 Keras 卷積神經(jīng)網(wǎng)絡(luò)進行建模;它將以上文所提供的的信息為基礎(chǔ)。
在上一部分文章中,我們介紹了一些使用 OpenCV 進行圖像處理的基礎(chǔ)知識,以及 DICOM(醫(yī)學(xué)數(shù)字影像和通訊)圖像基礎(chǔ)。下面我們將從卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Nets)的視角來談一談深度學(xué)習(xí)基礎(chǔ)。在第三部分文章里,我們將以 Kaggle 的肺癌數(shù)據(jù)集為實例,來研究一下在一個肺癌 DICOM 圖像中要尋找的關(guān)鍵信息,并使用 Kera 開發(fā)出一個預(yù)測肺癌的模型。
卷積神經(jīng)網(wǎng)絡(luò) (CNN) 基礎(chǔ)
為了理解卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ),我們首先要搞清楚什么是卷積。
什么是卷積?
那么在泛函分析中,卷積(Convolution)是通過兩個函數(shù) f 和 g 生成第三個函數(shù)的一種數(shù)學(xué)算子,表征函數(shù) f 與 g 經(jīng)過翻轉(zhuǎn)和平移的重疊部分的面積。所以在簡單定義下,設(shè) f(x)、g(x) 是 R 上的兩個可積函數(shù),作積分:
則代表卷積。理解這個定義的簡單方式就是把它想象成應(yīng)用到一個矩陣上的滑動窗方程。
有著 3×3 過濾器的卷積
在上面的圖片中,應(yīng)用到矩陣上的滑動窗是綠色,而滑動窗矩陣則是紅色。輸出就是卷積特征矩陣。下面的圖片顯示了兩個矩形脈沖(藍色和紅色)的卷積運算及其結(jié)果。
Jeremy Howard 在他的 MOOC 上用一個電子表格解釋了卷積,這是理解基礎(chǔ)原理的一種很好的方式?,F(xiàn)在有兩個矩陣,f 和 g。f 和 g 進行卷積運算的結(jié)果,是第三個矩陣「Conv layer 1」,它由兩個矩陣的點積給出。如下所示,這兩個矩陣的點積是一個標(biāo)量。
兩個矩陣的點積
現(xiàn)在讓我們按照 Jeremy 的建議用電子表格來演示一下,輸入矩陣是函數(shù) f(),滑動窗矩陣是過濾器方程 g()。那么這兩個矩陣元素的乘積和就是我們要求的點積,如下所示。
讓我們把這個擴展到一個大寫字母「A」的圖片。我們知道圖片是由像素點構(gòu)成的。這樣我們的輸入矩陣就是「A」。我們選擇的滑動窗方程是一個隨機的矩陣 g。下圖顯示的就是這個矩陣點積的卷積輸出。
什么是卷積神經(jīng)網(wǎng)絡(luò) (CNN) ?
在我看來,一個簡單的卷積神經(jīng)網(wǎng)絡(luò) (CNN) 就是一系列神經(jīng)網(wǎng)絡(luò)層。每一層都對應(yīng)著一個特定的函數(shù)。每個卷積層是三維的(RGB),所以我們用體積作為度量。更進一步的,CNN 的每一層都通過一個微分方程向另一層傳遞一個體積量的激活。這個微分方程被稱為激活函數(shù)或傳遞函數(shù)。
CNN 的實體有多種:輸入,濾波器(或核函數(shù))、卷積層、激活層、池化層、以及批量歸一化層。這些層在不同排列和不同規(guī)則下的組合形成了不同的深度學(xué)習(xí)算法。
輸入層:通常一個 CNN 的輸入是一個 n 維陣列。對于一個圖像來說,就是三個維度的輸入——長度,寬度和深度(即顏色通道)。
過濾器或核函數(shù):正如下面這張來自 RiverTrail 的圖像所示,一個過濾器或核函數(shù)會滑到圖像的每個位置上并計算出一個新的像素點,這個像素點的值是它經(jīng)過的所有像素點的加權(quán)和。在上面的電子表格例子中,我們的過濾器就是 g,它經(jīng)過了 f 的輸入矩陣。
卷積層:輸入矩陣和過濾器的點積形成的一個新矩陣,稱為卷積矩陣或卷積層。
下面的網(wǎng)址中有一個很好的解釋填補、跨步和轉(zhuǎn)置是如何工作的視覺圖表。
激活層:
激活函數(shù)可根據(jù)是否飽和分為兩種類型。
飽和激活函數(shù)都是雙曲型和雙曲正切型,而非飽和激活函數(shù)都是修正線性單元(ReLU)及其變體函數(shù)。使用非飽和激活函數(shù)有兩方面的優(yōu)勢:
雙曲函數(shù):把一個實數(shù)值輸入擠壓到 [0,1] 區(qū)間范圍內(nèi)
σ(x) = 1 / (1 + exp(?x))
雙曲正切函數(shù):把一個實數(shù)值輸入擠壓到 (-1,1)區(qū)間內(nèi)
tanh(x) = 2σ(2x) ? 1
ReLU
ReLU 代表單調(diào)線性單元(Rectified Linear Unit)。它是輸入為 x 的最值函數(shù) (x,0),比如一個卷積圖像的矩陣。ReLU 接著把矩陣 x 中的所有負值置為零,并保持所有其他值不變。ReLU 是在卷積之后計算出來的,因此會出現(xiàn)一個非線性的激活函數(shù),如雙曲正切或雙曲函數(shù)。Geoff Hinton 在他的 nature 論文里第一次討論這個問題。
ELUs
指數(shù)線性單元(Exponential linear units)試圖使平均激活接近于零,這樣就能加速學(xué)習(xí)。ELUs 也能通過正值認定避免消失梯度的出現(xiàn)。研究顯示,ELUs 比 ReLUs 有更高的分類準(zhǔn)確性。
來源:http://image-net.org/challenges/posters/JKU_EN_RGB_Schwarz_poster.pdf[(1×96×6, 3×512×3, 5×768×3, 3×1024×3, 2×4096×FC, 1×1000×FC) 層 × 單元 × 接受域或完全連接(FC)的堆疊構(gòu)成的 15 層 CNN。2×2 的最大池化,每次堆疊后有 2 步幅,第一個 FC 之前有 3 層的空間金字塔池。]
來源:維基百科
滲漏 ReLU
ReLU 中的負值部分完全被拋棄,與之相反,滲漏 ReLU 給負值部分賦了一個非零斜率。滲漏修正線性激活在聲子模型(Maas et al., 2013)中第一次被引入。數(shù)學(xué)上,我們有
來源:卷積網(wǎng)絡(luò)中修正激活的經(jīng)驗主義演化
其中 ai 是在 (1, 正無窮) 區(qū)間內(nèi)的固定參數(shù)。
參數(shù)化修正線性單元 (PReLU)
PReLU 可被視為滲漏 ReLU 的一個變體。在 PReLU 中,負值部分的斜率是從數(shù)據(jù)中學(xué)習(xí)得來的,而非預(yù)先定義好的。PReLU 的創(chuàng)作者們聲稱它是 ImageNet 歸類(Russakovsky et al., 2015) 任務(wù)中(機器)超越人類水平的關(guān)鍵因素。它與滲漏 ReLU 基本相同,唯一的區(qū)別就是 ai 是通過反向傳播訓(xùn)練學(xué)習(xí)到的。
隨機滲漏修正線性單元 (RReLU)
隨機滲漏單調(diào)線性單元 (RReLU) 也是滲漏 ReLU 的一種變體。在 RReLU 中,負值部分的斜率是在給定訓(xùn)練范圍內(nèi)的隨機取值的,然后在測試中固定下來。RReLU 最顯著的特征是在訓(xùn)練過程中,aji 是一個從一致分布 U(l,u) 上取樣得到的隨機數(shù)。正式數(shù)學(xué)表達如下:
下面顯示了 ReLU, 滲漏 ReLU, PReLU 和 ReLU 的對比。
ReLU, 滲漏 ReLU, PReLU 和 ReLU,對于 PReLU,ai 是學(xué)習(xí)到的;而對于滲漏 ReLU,ai 是固定的。對于 RReLU,aji 是一個在給定區(qū)間內(nèi)取樣的隨機變量,在測試中保持不變。
噪聲激活函數(shù)
這些都是拓展后包括了 Gaussian 噪聲(Gaussian noise)的激活函數(shù)。
來源:維基百科
池化層
池化層的目標(biāo)是逐漸地減少矩陣的尺寸,以減少網(wǎng)絡(luò)中參數(shù)的數(shù)量和計算,這樣也就能控制過擬合。池化層在輸入的每個深度切片上獨立操作,并使用最大化和平均運算來重置其空間尺寸。最常見的形式,一個采用了步幅 2,尺寸 2x2 過濾器的池化層,同時沿著寬度和高度,以幅度 2 將輸入中的每個深度切片向下取樣,丟棄了激活值的 75%。在此情況下,每個最大值運算都取了 4 個數(shù)字(某些深度切片中的小 2x2 區(qū)域)的最大值。深度方向的維度保持不變。更一般的來說,池化層就是:
注意:這里我們把 2 x 2 window 滑動了兩個細胞(也被叫做步幅),并取了每個區(qū)域的最大值。
批歸一化層:
批歸一化是歸一化每個中間層的權(quán)重和激活函數(shù)的有效方式。批歸一化有兩個主要的好處:
1. 對一個模型加入批歸一化能使訓(xùn)練速度提升 10 倍或更多
2. 由于歸一化極大降低了偏遠輸入的小數(shù)字過度影響訓(xùn)練的能力,它也能降低過擬合。
全連接層:
全連接層是一個傳統(tǒng)的多層感知器(Multi Layer Perceptron),它在輸出層使用了一個Softmax 函數(shù)?!溉B接」這個術(shù)語就說明了前一層和后一層的每個神經(jīng)元都是連接起來的。Softmax 函數(shù)即對數(shù)函數(shù)(logistic function)的一般化情況,它把一個取值區(qū)間為任意實數(shù)的 K 維向量「擠壓」成一個取值區(qū)間在(0,1)內(nèi)且和為1的 K 維向量。
Sofxmax 激活一般被用于最終的完全連接層,隨著它的值在 0 和 1 之間不停變化,得到概率。
現(xiàn)在我們對 CNN 中不同的層次都有了一定的概念。運用這些知識我就能開發(fā)出肺癌探測所需的深度學(xué)習(xí)算法。
第三部分
在最后一部分中,我們將透過卷積神經(jīng)網(wǎng)絡(luò)討論一些深度學(xué)習(xí)的基礎(chǔ)知識。在本文中,我們將側(cè)重于使用 Keras 和 Theano 的基礎(chǔ)深入學(xué)習(xí)。我們將給出兩個范例,一個使用 Keras 進行基本預(yù)測分析,另一個使用 VGG 的圖像分析簡單樣例。
我已經(jīng)意識到這個話題的廣度和深度,它需要更多的文章來解讀。在之后的文章中,我們將討論處理中 DICOM 和 NIFTI 在醫(yī)學(xué)成像格式中的不同,進一步擴大我們的學(xué)習(xí)范圍并對如何對 2 維肺分割分析使用深度學(xué)習(xí)進行討論。然后轉(zhuǎn)到 3 維肺分割。我們同樣會討論如何在深度學(xué)習(xí)之前進行醫(yī)學(xué)圖像分析以及我們現(xiàn)在可以如何做。我非常開心也非常感謝我的新合作伙伴將這一切聚在一起——Flavio Trolese(4Quant 的合作伙伴)、 Kevin Mader(4Quant 的聯(lián)合創(chuàng)始人)以及 Cyriac Joshy(瑞士蘇黎世聯(lián)邦理工的講師)。
在本文中,我們將要討論 Keras 并使用兩個范例來展示如何使用 Keras 進行簡單的預(yù)測分析任務(wù)以及圖像分析。
什么是 Keras?
Keras 網(wǎng)站是這么介紹的——Keras 是 Theano 和 TensorFlow 的深度學(xué)習(xí)庫。
Keras API 在 Theano 和 TensorFlow 之上運行
Keras 是高級的神經(jīng)網(wǎng)絡(luò) API,由 Python 編寫并可以在 TensorFlow 和 Theano 之上運行。其開發(fā)目的是使快速實驗成為可能。
什么是 Theano 和 TensorFlow?
James Bergstra 博士等人在 Scipy 2010 發(fā)布的 Theano 是一個 CPU 和 GPU 數(shù)學(xué)表達式編譯器。它是一個 Python 庫,允許你有效地定義、優(yōu)化和評估涉及多維數(shù)組的數(shù)學(xué)表達式。Theano 由 Yoshua Bengio 等一些高級研究員和蒙特利爾學(xué)習(xí)算法研究所(MILA)共同完成。在 Scipy 2010 上一個非常棒的 Theano 教程。下圖顯示了截至 2010 年,Theano 在 GPU 和 CPU 與其他工具的對比。該結(jié)果最初在《Theano: A CPU and GPU Math Compiler in Python》一文中發(fā)表。
還有一些在 Theano 之上的建立其它的庫,包括 Pylearn2 和 GroundHog(同樣由 MILA 開發(fā))、Lasagne、Blocks 和 Fuel.
TensorFlow 由 Google Brain 團隊的研究員與工程師開發(fā)。其被開發(fā)用于進行機器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)研究,但是該系統(tǒng)也足以適用于其它領(lǐng)域。如其網(wǎng)站介紹的那樣,TensorFlow 是一個使用數(shù)據(jù)流圖的數(shù)值計算開源軟件庫。圖中的節(jié)點表示數(shù)學(xué)運算,圖的邊表示在其之間傳遞的多維數(shù)據(jù)數(shù)組(張量)。代碼的可視化如下圖所示。
TensorFlow:在異構(gòu)分布式系統(tǒng)上的大規(guī)模機器學(xué)習(xí)
使用 Keras 的預(yù)測分析示例
在這個示例中,我們將使用 UCI 網(wǎng)站的 Sonar 數(shù)據(jù)集構(gòu)建一個簡單的預(yù)測模型。在下面的代碼中,我們將會直接從 UCI 網(wǎng)站中得到數(shù)據(jù)并以 60:40 的比例將其分為訓(xùn)練集與測試集。我們在預(yù)測模型中使用 Keras 并在標(biāo)簽編碼中使用 sklearn。
在下一段代碼中,我們讀取數(shù)據(jù)集,并使用上面定義的函數(shù)查看數(shù)據(jù)。我們打印數(shù)據(jù)集,并找出需要編碼的因變量。
我們使用 scikit-learn 中的 LabelEncoder 進行標(biāo)簽編碼,將 R 和 M 隱藏到數(shù)字 0 和 1 中。這樣的操作被稱為 one-hot 編碼。one-hot 編碼可將分類特征轉(zhuǎn)換為對算法更友好的格式。在這個示例中,我們使用使用「R」值 和「M」值分類我們的 Y 變量。使用標(biāo)簽編碼器,它們分別被轉(zhuǎn)換為「1」和「0」。
scikit-learn 中的 LabelEncoder
然后使用 Keras 創(chuàng)建模型:
無預(yù)處理的簡單模型的精確度為 81.64%
使用 Keras 的圖像分析示例
為了用 Keras 解釋圖像處理,我們將使用來自 Kaggle 比賽的數(shù)據(jù)——狗和貓(https://www.kaggle.com/c/dogs-vs-cats)。該比賽的目的在于開發(fā)一種算法以區(qū)分圖像是否包含狗或貓。這個任務(wù)對人、狗和貓來說很簡單,但是計算機卻很難做到。在該項挑戰(zhàn)中,有 25,000 張標(biāo)記狗和貓的照片可用于訓(xùn)練,并且在測試集中有 12,500 張照片,我們必須在挑戰(zhàn)中嘗試為其加上標(biāo)簽。根據(jù) Kaggle 網(wǎng)站,當(dāng)該項比賽開始時(2013 年底):
當(dāng)前最佳:目前的文獻顯示,機器分類器在該任務(wù)上可以達到 80% 以上的準(zhǔn)確度。那么如果我們能夠超過 80%,我們將在 2013 年處于最前沿?!?/span>
我強烈推薦觀看 Fast.ai 的 MOOC 以了解更多的細節(jié),學(xué)習(xí)下一步和深度學(xué)習(xí)的前沿研究。我已經(jīng)在下列代碼中引用 fast.ai,這是一個很好的起點,鏈接:http://www.fast.ai/
步驟 1:設(shè)置
從 Kaggle 網(wǎng)站下載狗和貓的數(shù)據(jù),并存入你的筆記本電腦。本文中的示例均在 Mac 上運行。
基礎(chǔ)設(shè)置
Jeremy Howard 在他的班上提供了一個實用的 Python 文件,該文件有助于封裝基本函數(shù)。對于開始部分,我們將使用此實用文件。點擊下載:https://github.com/fastai/courses/blob/master/deeplearning1/nbs/utils.py。當(dāng)我們深入到更多細節(jié)時,我們將解壓該文件并查看其背后的內(nèi)容。
步驟 2:使用 VGG
我們的第一步簡單地使用已經(jīng)為我們創(chuàng)建好的模型,它可以識別許多類別的圖片(1,000 種)。我們將使用『VGG』,它贏得了 2014 年 ImageNet 比賽,是一個非常簡單的創(chuàng)造理解的模型。VGG ImageNet 團隊創(chuàng)造了更大、更慢、準(zhǔn)確性略有提高的模型(VGG 19)和更小、更快的模型(VGG 16)。我們將使用 VGG 16,因為 VGG 19 過慢的性能與其在準(zhǔn)確度上的微小提升不對等。
我們創(chuàng)建了一個 Python 類,Vgg16,這使得使用 VGG 16 模型非常簡單。Vgg 16 同樣可從 fast.ai 的 GitHub 中獲得:https://github.com/fastai/courses/blob/master/deeplearning1/nbs/vgg16.py
步驟 3:實例化 VGG
Vgg16 構(gòu)建在 Keras 之上(我們將在短時間內(nèi)學(xué)到更多內(nèi)容),Keras 是一個靈活易用的深度學(xué)習(xí)庫,該軟件庫是基于 Theano 或 Tensorflow 的一個深度學(xué)習(xí)框架。Keras 使用固定的目錄結(jié)構(gòu)在批量讀取圖像和標(biāo)簽組,每個類別的圖像必須放在單獨的文件夾中。
我們從訓(xùn)練文件夾中獲取批量數(shù)據(jù):
步驟 4:預(yù)測狗 vs 貓
步驟 5:總結(jié)并編碼文件
總結(jié)一下這篇文章,我推薦的狗和貓分類方法為:
總結(jié)
如果讀者跟著我們走到了這一步,那么其實已經(jīng)實現(xiàn)了上一部分文章中討論過的理論,并做了一些實際的編程工作。如果讀者們按照上述說明實現(xiàn)了這兩個案例,那么就已經(jīng)完成了使用 Keras 的第一個預(yù)測模型,也初步實現(xiàn)了圖像分析。由于代碼的長度,我們不在這里討論細節(jié)只給出了鏈接。如果你查看鏈接有任何疑問,請聯(lián)系 fast.ai。
至此,我們從最開始的數(shù)據(jù)庫安裝到醫(yī)學(xué)圖像數(shù)據(jù)格式的解釋,已經(jīng)有了醫(yī)學(xué)影像處理的基本知識。隨后我們從卷積的定義到 CNN 的詳細構(gòu)架與原理,進一步實踐的理論基礎(chǔ)已經(jīng)完成了累積。最后一部分對前面的理論知識進行實踐,用 Python 實現(xiàn)了這一令人激動的模型。因此,我們希望讀者朋友能在這一循序漸進的過程中真正感受到醫(yī)學(xué)影像處理的樂趣。
-
醫(yī)療器械
+關(guān)注
關(guān)注
19文章
823瀏覽量
51460 -
人工智能
+關(guān)注
關(guān)注
1791文章
47314瀏覽量
238653 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8420瀏覽量
132687 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121207 -
深度圖像
+關(guān)注
關(guān)注
0文章
19瀏覽量
3509
發(fā)布評論請先 登錄
相關(guān)推薦
評論