# 胃試鏡疾病判斷系統 ## 項目概述 本項目是一個基於深度學習的胃試鏡疾病自動診斷系統,主要用於檢測和分類胃部疾病,特別是胃癌(CA)。系統採用了分割和分類的兩階段方法,首先對胃試鏡圖像進行分割以識別可疑區域,然後對這些區域進行分類以確定是否存在疾病。 * 資料集類別: 3分類(胃癌、非胃癌但有病、正常資料) * 基礎模型: Xception ## 主要功能 - **圖像預處理**:包括直方圖均衡化、自適應直方圖均衡化、銳化、HSV調整、伽馬校正等多種圖像增強方法 - **數據增強**:通過圖像生成器擴充訓練數據集 - **疾病分割**:使用GastroSegNet模型對胃試鏡圖像中的可疑區域進行分割 - **疾病分類**:使用修改版Xception模型對分割後的區域進行分類,分為正常(Normal)、胃癌(CA)和待確認(Have_Question)三類 - **結果可視化**:提供混淆矩陣、訓練曲線等可視化工具 ## 系統架構 系統採用了兩階段的處理流程: 1. **分割階段**:使用GastroSegNet模型對輸入圖像進行分割,識別可疑區域 2. **分類階段**: - 第一組分類器:區分正常(Normal)和其他(Others) - 第二組分類器:區分胃癌(CA)和待確認(Have_Question) ## 環境要求 - Python 3.8+ - PyTorch 1.8+ - CUDA(推薦用於加速訓練) - 其他依賴庫:torchvision, numpy, opencv-python, scikit-image, pandas等 ## 使用方法 ### 數據準備 1. 將訓練數據放置在`../Dataset/Training`目錄下 2. 將測試數據放置在`../Dataset/Testing`目錄下 3. 標註數據(XML格式)放置在`../Label_Image`目錄下 ### 訓練模型 ```bash uv run main.py ``` 訓練過程將自動執行以下步驟: 1. 數據預處理和增強 2. 訓練分割模型(GastroSegNet) 3. 使用分割模型處理圖像 4. 訓練分類模型(修改版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: 設定模型的架構