---
# System prepended metadata

title: 2023/07/05
tags: [meeting]

---

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




