胃試鏡疾病判斷系統
項目概述
本項目是一個基於深度學習的胃試鏡疾病自動診斷系統,主要用於檢測和分類胃部疾病,特別是胃癌(CA)。系統採用了分割和分類的兩階段方法,首先對胃試鏡圖像進行分割以識別可疑區域,然後對這些區域進行分類以確定是否存在疾病。
- 資料集類別: 3分類(胃癌、非胃癌但有病、正常資料)
- 基礎模型: Xception
主要功能
- 圖像預處理:包括直方圖均衡化、自適應直方圖均衡化、銳化、HSV調整、伽馬校正等多種圖像增強方法
- 數據增強:通過圖像生成器擴充訓練數據集
- 疾病分割:使用GastroSegNet模型對胃試鏡圖像中的可疑區域進行分割
- 疾病分類:使用修改版Xception模型對分割後的區域進行分類,分為正常(Normal)、胃癌(CA)和待確認(Have_Question)三類
- 結果可視化:提供混淆矩陣、訓練曲線等可視化工具
系統架構
系統採用了兩階段的處理流程:
- 分割階段:使用GastroSegNet模型對輸入圖像進行分割,識別可疑區域
- 分類階段:
- 第一組分類器:區分正常(Normal)和其他(Others)
- 第二組分類器:區分胃癌(CA)和待確認(Have_Question)
環境要求
- Python 3.8+
- PyTorch 1.8+
- CUDA(推薦用於加速訓練)
- 其他依賴庫:torchvision, numpy, opencv-python, scikit-image, pandas等
使用方法
數據準備
- 將訓練數據放置在
../Dataset/Training目錄下 - 將測試數據放置在
../Dataset/Testing目錄下 - 標註數據(XML格式)放置在
../Label_Image目錄下
訓練模型
uv run main.py
訓練過程將自動執行以下步驟:
- 數據預處理和增強
- 訓練分割模型(GastroSegNet)
- 使用分割模型處理圖像
- 訓練分類模型(修改版Xception)
結果查看
訓練結果將保存在../Result目錄下,包括:
- 訓練曲線圖:
../Result/Training_Image - 混淆矩陣:
../Result/Matrix_Image - 訓練結果數據:
../Result/Training_Result - 最佳模型:
../Result/save_the_best_model
項目結構
main.py:程序入口點experiments/:實驗相關代碼experiment.py:實驗主流程Training/:訓練相關代碼Models/:模型定義
Image_Process/:圖像處理相關代碼Model_Loss/:損失函數定義Training_Tools/:訓練工具utils/:工具函數和配置
配置說明
系統配置在utils/Stomach_Config.py中定義,主要包括:
Image_Enhance:圖像增強方法Loading_Config:數據加載配置Training_Config:訓練參數配置Model_Config:模型參數配置Save_Result_File_Config:結果保存路徑配置
模型說明
分割模型(GastroSegNet)
用於識別胃試鏡圖像中的可疑區域,輸出分割掩碼。
分類模型(修改版Xception)
基於Xception架構,針對胃試鏡圖像分類任務進行了修改,主要用於區分正常、胃癌和待確認三類。
- 主執行檔: main.py
load_process
負責讀取影像檔案、分割獨立資料(測試、驗證)、讀取獨立資料、一般檔案的操作
- File_Process : 檔案操作的主程式,包含開檔、創立檔案、判斷檔案是否存在等都是他負責的範圍。是一般物件也是LoadData的父物件
- LoadData : 讀檔主程式,一切讀檔動作由他開始。繼承File_Process(子物件)
- Cutting_Indepentend_Image : 讀取獨立資料(testing、Validation)的物件
Calculate_Process
計算模型的評估指標的內容
- Calculate: 計算模型的評估指標的平均跟標準差,並將結果儲存到檔案中
Image_Process
負責進行資料擴增、影像處理等的操作
- Image_Generator : 負責製造資料擴增的資料,並將資料存到檔案中。
- image_enhancement : 負責進行影像處理將資料強化。
all_models_tools
模型的調控細節,如early stop、降低學習率和儲存最佳模型
- all_model_tools: call back的方法
Model_Tools
負責進行模型的基礎架構,包含Convolution、Dense、以及其他模型的配件
-
All_Model_Tools : 所有模型的附加工具,是所有的父類別
CNN
包含所有CNN的工具與應用架構
- CNN_Tools : 為卷積層的工具,包含一維、二維、三維捲積。CNN_Application的父類別,繼承All_Model_Tools(子類別)
- CNN_Application : 為Convolution的應用架構。繼承CNN_Tools(子類別)
Dense
包含所有Dense的應用
- Dense_Application : 為全連階層工具,包含一般Dense layer與增加正則化之Dense layer。繼承All_Model_Tools()
Model_Construction
包含所有要進行實驗的模型架構
- Model_Constructions : 所有模型的實驗架構
Data_Merge
負責進行資料的合併
- Merge : 負責合併Dict、List到List並匯出
initalization
負責初始化特定物件
- Img_initalization : 針對影像資料的初始化
- Data_Initalization : 針對數據資料的初始化
Validation_Program
負責驗證程式碼內的資料型態或輸入錯誤等問題
- Validation : 驗證程式碼錯誤
draw_tools
負責畫圖的工具
- draw : 畫出混淆矩陣、走勢圖的工具
- Grad_CAM : 畫出模型可視化的熱力圖的工具
Experiment
執行實驗的主程式
- Experiment : 負責執行讀檔、設定模型與實驗的細節、執行訓練、驗證結果等功能
- Model_All_Step : 執行模型的訓練流程設定與細節參數設定
- pytorch_Model: 設定模型的架構
Description
Languages
Jupyter Notebook
93.5%
Python
6.5%