# 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)