Stomach_Cancer_Pytorch/README.md

155 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 胃試鏡疾病判斷系統
## 項目概述
本項目是一個基於深度學習的胃試鏡疾病自動診斷系統主要用於檢測和分類胃部疾病特別是胃癌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: 設定模型的架構