【導讀】:本文從unet的算法原理到模型代碼,詳細介紹了unet的模型架構以及如何使用已有的unet項目代碼(pytorch實作)訓練基于unet的顯微鏡細胞圖像分割模型;保姆級的模型訓練教程,即使無任何項目經驗,按照文中步驟也可将模型跑通。文末附項目代碼連結和手動翻譯中文unet論文擷取方式。
▍目錄
- 論文摘要
- 算法簡述
- 代碼介紹
- 資料準備
- 模型訓練
- 模型使用
- 資源擷取(附項目源碼和unet中文翻譯論文)
▍論文摘要
人們普遍認為,深度神經網絡的成功訓練需要數千個帶标注的訓練樣本。在本文中,我們提出了一種網絡和訓練政策,該政策依賴于大量使用資料增強,以便更有效地使用獲得的标注樣本。該網絡結構由捕獲上下文的收縮路徑和支援精确定位的對稱擴充路徑組成。我們證明了這樣的網絡可以從非常少的圖像中進行端到端的訓練,并且在電子顯微鏡堆棧中分割神經元結構的ISBI挑戰賽上優于先前的最佳方法(滑動視窗卷積網絡)。使用在透射光顯微鏡圖像(相差和DIC)上訓練的相同網絡,我們在這些類别中以較大優勢赢得了2015年ISBI細胞跟蹤挑戰賽。而且網絡速度快。在最新的GPU上,512x512圖像的分割隻需不到一秒鐘。
▍算法簡述
UNet的算法架構主要由編碼器和解碼器兩個部分組成。
編碼器使用卷積層和池化層來逐漸減小特征圖的尺寸和次元,同時增加特征圖的通道數,以便提取輸入圖像的進階别特征。
解碼器則使用反卷積層(或上采樣)和卷積層來逐漸還原特征圖的大小和次元,最終輸出與原始圖像大小相同的特征圖。
在編碼器和解碼器之間,UNet還引入了跳連機制,将編碼器中相應層的特征與解碼器相應層的特征進行連接配接,以幫助保留更多的空間資訊和細節特征。這種跳連機制使得UNet可以利用來自不同層次的特征資訊,進而提高圖像分割的準确性和魯棒性。
▍代碼介紹
本項目使用unet算法,訓練顯微鏡神經元細胞前景和背景的語義分割圖。将神經元細胞的紋理作為前景,其它作為背景。前景使用黑色像素表示,背景使用白色像素表示。
項目目錄結構如下:
【data】:存放原始資料
data目錄下存放兩個檔案夾:train檔案夾和test檔案夾。train檔案夾分别存放原始訓練圖檔和對應的語義标簽,test檔案夾隻存放用于測試的圖檔。其目錄結構如下所示。
test檔案夾:測試資料集
train\image檔案夾:訓練資料集
train\label檔案夾:訓練資料集的語義分割标簽
【model】:定義unet網絡結構
unet-model.py:模型主幹網絡
unet-part.py:組測unet網絡結構的若幹卷積子產品
【utils】:定義工具檔案
dataset.py:加載data檔案夾下的圖檔和标簽
unet:
best_model.pth:模型訓練後儲存的權重檔案
train.py:模型訓練
predict.py:模型預測
requirements.txt:項目相關依賴包
▍資料準備
将原始圖檔和圖檔對應語義标簽按如下目錄結構存放在data目錄下。
data
|_train
|_image # 原始圖檔
|_label # 語義标簽圖檔
|_test
|_image
▍模型訓練
- 環境安裝
指令行執行如下指令,安裝正常項目依賴庫和pytorch以及對應的cuda
pip install -r requirements.txt
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
指令行驗證pytorch和cuda是否安裝成功,列印torch.cuda.is_avaible()為True即安裝成功,False則安裝失敗。
- train.py檔案參數設定
指定訓練資料路徑:train.py第51行
指定模型權重的儲存路徑:train.py第53行
- 啟動訓練
點選train.py檔案直接運作代碼,或者指令行執行:
cd unet
python train.py
▍模型使用
- predict.py參數設定
指定測試圖檔路徑:predict.py第40行
指定測試結果儲存路徑:predict.py第41行
指定用于測試的模型權重:predict.py第44行
- 推理預測
點選predict.py檔案直接運作代碼,或者指令行執行:
cd unet
python predict.py
▍資源擷取
關注慕課python,實時掌握精彩文章推送,文章中有任何問題歡迎評論區讨論交流。項目資源包括本文的unet源碼和unet人工翻譯論文。該代碼按上文方式運作在windows和linux下均無bug,代碼跑不通可評論區留言解決。掃碼自動彈出項目資源的百度網盤連結和提取碼,永久有效。