---
# System prepended metadata

title: 2019 AIGO 童綜合程式碼說明
tags: [AIGO 2019]

---

# 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(心律調節器)，如下圖：

![](https://i.imgur.com/MdpAzwd.png)


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

![](https://i.imgur.com/juHDr4N.png)

#### 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 該在的位置。
![](https://i.imgur.com/hHc4UVQ.jpg)

   產生 False Positive 的圖例：超像cvp，但實際上不是 cvp 的圖例。
![](https://i.imgur.com/bo52eRF.jpg)


#### 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
![](https://i.imgur.com/4UCerk0.png)