# 2019 AIGO 童綜合程式碼說明
###### tags: `AIGO 2019`
By AISpecial Foreces 團隊
Created: 2019-10-14
Revised: 2019-10-16
## 一、程式公開位置
**程式網址:**
https://drive.google.com/drive/u/0/folders/1ZWJO6UA6LicFfNed-T_3ZeSBUj8-24EU
---
## 二、程式架構說明
主要分為兩個資料夾 cvp(中央靜脈導管) 與 pace maker(心律調節器),如下圖:

---
### A. CVP(中央靜脈導管) 辨識
CVP 內有 5 個資料夾,分別為:
- 1.data_preprocessing
- 2.hdf5
- 3.training
- 4.熱度圖
- datasets

#### 1. data_preprocessing
- 程式「圖片預處理範例.ipynb」功能說明
- Resize圖片尺寸為指定的長寬,過多的像素部分切除,維持原圖的像素比例。
- 各channel減去該channel的像素平均值,在圖像處理當中也是很常見的預處理方式。
- 使用隨機的圖片裁切產圖片,在產生訓練資料時可以減少overfitting。
- 使用隨機的圖片裁切產生10張圖片,在產生訓練資料時可以減少overfitting。
- 將圖片改成同樣長寬的正方形圖片,有時候我們想要保留整張圖片的特徵取代將圖像多餘部分的切除,我們可以使用填充像素來補足不夠的像素。
- 有時候圖片的特徵不夠明顯,因為像素的分布並不均勻,使用梯度值方圖的正規化能夠讓不明顯的特徵變得清楚。
- 程式「cvp表格資料處理.ipynb」功能說明
- 對 cvp 資料檔內容做處理。主要是將「有」轉成「1」,「無」轉成「0」。
#### 2. hdf5
大量存取圖片的特徵值與local features的龐大資料量,經常會讓我們面臨儲存與處理的問題。hdf5 可讓我們方便且快速的存取巨大的檔案,不受限於記憶體及避免讀取巨大檔案的緩慢問題,且可支援其它OS的讀取。
- 程式「build_cvp_hdf5_dataset.ipynb」功能說明
- 以下三項定義的地方是資料夾 config 內的 cvp_config.py 這個檔內。
- 定義train set的hdf5路徑
- 定義validation set的hdf5路徑
- 定義test set的hdf5路徑
#### 3. training
- 程式「bayesian_opt.ipynb」功能說明
- 以貝式優化搜尋較佳參數
- 建模之前,先以貝式優化搜尋模型之較佳參數,作為之後模型參數
- 假設對一函式輸入參數dropout_rate, l1, l2, lr..等等,能得到模型之準確度,則我們可以說此函式是一未知的模型準確度函式。我們能夠以貝式優化來建立參數的搜尋,以期待我們能夠取得一參數組合最大化此模型準確度函式的值
```text=
'最佳的參數組合':
程式碼快結束處的 optimizer.max 返回的結果,是一個python 字典:
Final result: {'target': 0.9729076190476191, 'params': {'expC': 1.9995039247312532, 'expGamma': -2.347205448551982}}
'target' 是最高分數,'params' 就是最佳的參數組合
```
- 程式「gridsearch.ipynb」功能說明
- 利用 gridsearch 找出一組最佳參數,並使用測試集,來測試模型的泛化能力.
#### 4. 熱度圖 heatmap
- 程式「熱度圖以及預測分析.ipynb」功能說明
- 利用熱度圖的顯示,來瞭解模型可以改進的方向
- 熱度圖圖例
第一排最右邊的圖,熱度圖顯示 cvp 是在腹部的位置。但這個位置,一般的狀況,應該不是 cvp 該在的位置。

產生 False Positive 的圖例:超像cvp,但實際上不是 cvp 的圖例。

#### 5. datasets
- 童綜合醫院所提供的 NIH 測試用資料集。
---
### B. Pace maker(心律調節器) 辨識
程式「README.ipynb」功能說明
- 1. Data Format
- 所有圖片之pixel size皆為 1024 x 1024
- 圖片之分類golden label分為3種: 有、無、無法判別
- 2. Data Preprocessing
- 刪除重複標示label的列(見csv資料夾中之'pace_maker之label_csv欄位問題.xlsx'檔案), 將整理後之檔案存為新的csv檔(見csv資料夾中之'label.csv'檔, 此為刪除重複列後之版本)
- 將圖片檔名重新命名為'label.image_uid.png'之格式, 再將檔名加入dataframe作為一個新的column, 再存為另一個新的csv檔(見csv資料夾中之'label_filename.csv'檔)
- 3. Training model construction
- 3-1. Reorder the image files by the renaming file names
- 3-2. Image file preprocessing
- 先使用以下程式碼將圖片resize至224 x 224, 作等化以及normalization
- 再於dataset之資料夾下, 新增 train/ 及 valid/ 兩個資料夾, 並在此兩個資料夾中各新增3個資料夾: 有/ 無/ 無法判別/ , 將各類別之所有圖片隨機分為70%與30%, 移動至train/與valid/資料夾中的3個子資料夾裡(見dataset資料夾中,各類別範例圖片之數量)
- 註: 在linux下可使用 shuf -zn8 -e *.jpg | xargs -0 cp -vt /path/to/your/target/directory/ 將檔案移至其他資料夾中, 其中數字8表示欲隨機選取8張圖片至目標資料夾中)
- 3-3. training model之建立與執行
- 4. 對所有圖片進行training model之testing
- 5. Results
