# 胃試鏡疾病判斷系統

## 項目概述

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