--- title: 2023/07/05 # 簡報的名稱 tags: meeting # 簡報的標籤 slideOptions: # 簡報相關的設定 theme: black # 顏色主題 transition: 'fade' # 換頁動畫 spotlight: enabled: true --- # 本周進度 本周進度包含兩個不同的任務 1. E-DA CXR Image Classification 2. Polyp Segmentation **Image Clasification:** 1. 實作 Adaboost-CNN 在 E-DA 資料上面 2. Propose 一些可以增進模型表現的想法 3. 閱讀 Model Multi-Label Correlation 相關的 Paper **Polyp Segmentation:** 1. 實作 FCBFormer 在 Kvasir 資料上 2. 建立 ViG-Unet 模型與提出 ViG-MetaFormer 模型 ## CXR Image Classification 承接上次進度,實作 adaboost-CNN 在 E-DA image 上 ### Adaboost CNN 由於在 [adaboost CNN](https://www.sciencedirect.com/science/article/pii/S0925231220304379) 的論文中,只提到了怎麼去判斷 test data 屬於哪個類別,並未提到如何得到資經過 boosting 後的機率,因此只根據該篇文章的內容無法計算模型的 AUC 以衡量模型表現,因此,下周或後續工作會建立在檢驗 SAMME.R 演算法如何去計算機率 ### Multi-Label Image Recognition with Graph Convolutional Networks [Multi-Label Image Recognition with Graph Convolutional Networks](https://arxiv.org/pdf/1904.03582.pdf) 這篇文章講述了對於 Multi-label 如何考慮多個標籤之間的相關性,作者使用了圖神經網路建構標籤之間的相關性 ![](https://hackmd.io/_uploads/BJ88nZgF3.png) 如何引入圖神經網路來考慮標籤之間的相關性,對於該問題的難點,我想有以下兩點 1. 如何去建構圖的鄰接信息 2. 如何去 embedding 標籤 #### Adjacency Matrix 對於建構圖的鄰接信息,作者使用了 co-occurrence patterns matrix,簡單來講,他是一個 C * C 的矩陣,$(i,j)$ 位置表示 $P(C_i|C_j)$ - $P(C_i|C_j):$ 在 $C_j$ 類別出現的情況下,$C_i$ 類別出現的概率,其概率估計是用 $M_{ij}/N_i$,$M_{ij}$ 表示 $(ij)$ 類別共同出現的數量,$N_i$ 表示 $i$ 類別出現的數量 #### Embedding 那如何得到標籤的向量呢? 作者的方法是用 word embedding 的方式去得到向量 #### Limititation 再稍微檢閱該 paper 之後,我認為還有一些問題尚待解決 1. 作者只 model 了兩個標籤出現的互相影像,並未解決類似於 $P(C_i|C_j,C_k)$ 之類的問題 2. 對於基本的類別,例如人或狗這樣常見的標籤,BERT 可以做到給出一個合理的 embeddings,但是對於醫學的疾病名稱,我不認為 BERT 可以有效的給出一個好的 embeddings ### Proposal Method 以下是我認為可以作為研究方向的想法 1. Ensemble Network with Auxiliary Loss 2. ROI-based Aux. training to focus on importance region #### Ensemble Network with Auxiliary Loss 汲取 FCBFormer 的概念,我認為如下這種模型架構或許可以提升偵測效能 ![](https://hackmd.io/_uploads/rkW_IMxY2.png) 我們預先訓練 k 個 backbone 用來提取特徵,我們再把 k 個 backbone 結果合併,進行計算,Prediction Head 可以是 GNN,來結合 K 個 backbone 的結果,最後計算主要的 loss,但是這過程並不能保證每個 backbone 提取到的特徵都是我們有興趣的,所以我在原先的基礎上加上了輔助分類器來對每個 backbone 做限制,計算出 aux loss,最後模型學習的方向就包含 aux loss 和 main loss #### ROI-based Aux. training to focus on importance region 另外一種是把網路認為比較重要的部分 crop 出來後再訓練一個網路 ![](https://hackmd.io/_uploads/HycLoflKn.png) 具體過程為 1. 訊練一個 baseline 模型 2. 得到模型的 heatmap 3. 將 heatmap 做 binarilize 得到 mask 4. mask 與原本影像相乘得到 crop 影像 5. 將原影像的向量與 crop 向量合併輸出分類器得到結果 #### Conclusion 以上兩種方案只是我的一些想法,具體表現會如何還不知道 ## Polyp Segmentation 息肉分割(Polyp Segmentation)是一種在醫學影像中用於檢測和分割大腸息肉(結腸內部的異常生長物)的技術。大腸息肉是大腸內壁的腫瘤或腫塊,通常是結腸癌的前體病變。 Polyp Segmentation 的目標是從結腸影像中精確且自動地檢測和定位所有的大腸息肉,以協助醫生在早期檢測和診斷大腸癌的過程中提供幫助。這項技術可以應用於虛擬結腸鏡檢查(Virtual Colonoscopy)和結腸攝影(Colonography)等醫學影像模式 以下是 Polyp Segmentation 的代表性資料 1. Kvasir-SEG 2. CVC-ClinicDB 3. ColonDB 4. CVC300 5. Etis 前兩個最為著名,因此我們稍微簡介 Kvasir-SEG 和 CVC-ClinicDB ### Kvasir-SEG 包含 1000 張息肉影像以及對應的標籤 - 影像大小不固定 - pixel 類別 - 0: 背景 - 1: 息肉 - ![](https://hackmd.io/_uploads/HJFeehqu3.png) ### CVC-ClinicDB 包含 612 張息肉影像以及對應的標籤 - 影像大小 288 * 384 - pixel 類別 - 0: 背景 - 1: 息肉 ## In practice 實務上,受惠於算力的大幅提升,Polyp Segmentation 在近幾年的發展異常迅速,以下是該資料目前 SOTA 模型的排行 [Paper with code](https://paperswithcode.com/sota/medical-image-segmentation-on-kvasir-seg) 我閱讀了該網站中第一與第五名方法的論文 FCBFormer 和 Meta-Polyp,以下稍微簡介這兩篇文章 ### FCBFormer 該方法架構如下 ![](https://hackmd.io/_uploads/SJt4Pnc_2.png) 主要把影像通過兩個不同的 encoder 得到特徵圖,在通過 PH (Prediction Head) 預測結果 在我看來,FCBFormer 有幾個特點 1. Ensemble (結合 CNN (FCB) 與 Transformer (TB)) 2. 在 Transformer Block 並沒有一個明顯的 Decoder 結構 ### Training script 作者分別在兩筆資料上面訓練,分別是 Kvasir-SEG 和 CVC-ClinicDB,以下是訓練的 configuration - Resolution: 352*352 - Train:Val:Test --> 8:1:1 - Augmentation - Resize(anti-aliasing) - Gaussian Blur (25*25 kernel) with $\sigma\sim\text{Unif}(0.001,2)$ - ColorJitter([0.6,1.4],[0.5,1.5],[0.75,0.125],[0.99,1.01]) - HorizontalFlip/VerticalFlip (p=0.5) - AffineTransformation - BatchSize: 16 - Epochs: 200 - Optimizer: AdamW - Learning Rate: 1e-4 - ReduceLROnPleatu(factor=0.5, patience=10) - LossFunction: BCELoss + DiceLoss ## Meta-Polyp 該方法架構如下 ![](https://hackmd.io/_uploads/ryrI035u3.png) 在我看來,Meta-Polyp 有幾個特點 1. 透過 Upsample 結合 Multi-scale data 2. 有一個明顯的 Decoder 結構 ### Training script 作者在 Kvasir-SEG 和 CVC-ClinicDB 合併的資料上面訓練,以下是訓練的 configuration - Resolution: NA - Train:Val:Test --> 6:2:2 - Augmentation - CenterCrop - RandomRotate - GridDistortion - HorizontalFlip/VerticalFlip (p=0.5) - CutOut - CutMix - BatchSize: 128 - Epochs: 300 - Optimizer: Adam - Learning Rate: 1e-4 - CosineAnnealing - LossFunction: JaccardLoss($\alpha=0.7$) ## Experimental 本章節紀錄本周的實驗結果 ### FCBFormer 我嘗試復現 FCBFormer 作者的結果,以下為作者結果 ![](https://hackmd.io/_uploads/r1B9W6quh.png) 下表為我復現作者的結果 | TestDataset | Kvasir | | -------- | -------- | | Val mDice | 0.937248 | | Test mDice | 0.919316 | | Test mIoU | 0.870825 |