---
# System prepended metadata

title: 2023/06/28
tags: [meeting]

---

---
title: 2023/06/28  # 簡報的名稱
tags: meeting   # 簡報的標籤
slideOptions:        # 簡報相關的設定
  theme: black   # 顏色主題
  transition: 'fade' # 換頁動畫
  spotlight:
    enabled: true
---

# 本周進度

1. 閱讀 AdaBoost CNN paper 與 source code 
2. 實作 baseline 資料 (CIFAR 10)
3. 閱讀 ViG 相關文章

## Adaboost CNN

Adaboost CNN 作者透過改變每個樣本的權重來結合多個弱分類器，其中對於弱分類器的權重更新方法如下

![](https://hackmd.io/_uploads/HkDMUm_dh.png)

- 當 one hot labels $Y$ 與模型輸出 $P(X)$ 的相關性 $(Y^TP(X))$ 低時，$d_i$ 會上升，也就是我們會增對於模型輸出與真實標籤錯誤分類樣本的權重，該權重用於 Loss function 的訓練

$$
\text{Total CE Loss}=\sum_{i=1}^nd_i * \text{CrossEntropyLoss}(Y, P(X))
$$

由於 boosting 方法的每個弱分類器是序列相關的，因此，作者使用遷移學習的方法去初始化下一輪模型的餐數

![](https://hackmd.io/_uploads/S1djwQ_Oh.png)

在測試階段，我們會綜合 $M$ 個分類器的結果作為最後模型的輸出

![](https://hackmd.io/_uploads/rJnNuX_On.png)

上式的判斷準則是基於 SAMME.R Algorithm

- 在判斷準則中，對於每一個分類器，我們會把類別的概似機率做平均 ($(K-1)$ 其實不影響模型預測)

### In Practice

作者在實現方面講的不詳細，各個資料集的超參數都沒有申明，也沒有對應的程式，對於復現有些難度。另外，對於主幹程式 (Adaboost CNN)，作者使用了 Keras 實現，這並不是一個很彈性的方法，所以我另外使用 pytorch 實現 adaboost CNN 的訓練過程。在閱讀作者原始代碼時，我發現了以下幾點

- $\alpha$ 作為權重更新的學習率，作者的預設值為 1
- 實作上的權重更新方式為 $d_i = \frac{1}{Z}d_i$，其中 $Z$ 為標準化因子，保證了 $\sum_i d_i=1$

## CIFAR 10

作者普遍使用了最基本的資料集，對於模型表現也不要求做到最好，因此該方法的實用性有待商榷。為了復現作者方法，我使用的 CIFAR 10 資料

- NUM CLASSES: 10
- TRAIN SIZE: 50000 (5000 for each class)
- TEST SIZE: 10000 (1000 for each class)
- IMAGE SIZE: 32*32

我使用了兩種 baseline 方法訓練

1. densenet121 with higher resolution
2. resnet18 with origin resolution

**DenseNet121**

我們先把影像 resize 到 224*224，在使用 densenet121 的 ImageNet 權重初始化，訓練 5 個 epoch，以下是 testing set 表現

**ResNet18**

我們直接使用原始影像訓練

| Method | DenseNet121 | ResNet18 |
| -------- | -------- | -------- |
| Single     | 0.9537     | 0.83    |
| KFold | 0.9572 | 0.8586 |
| TTA | 0.9504 | 0.8357 |
| AdaBoost CNN | NA | NA |

表中數值表示該方法的 ACC，由於我復現上有些問題尚未解決，所以先不放上 AdaBoost CNN 的結果，但我們可以從 KFold 的方法看出，集成學習的方法不一定會顯著上升，由於 DenseNet121 的訓練時常與代價太大，所以之後的實驗會基於 ResNet18 進行

## ViG (https://arxiv.org/pdf/2206.00272.pdf)

ViG (Vision Graph) 網路架構是去年在華維 Noah 實驗室的研究成果，他仿照了 Vision Transformer 的方法，並引入 GraphConv 來學習比 Attention 更複雜的拓樸結構

![](https://hackmd.io/_uploads/rJd6n7ud3.png)

![](https://hackmd.io/_uploads/r1oA37__2.png)

ViG 概念其實與 ViT 相似，我們會執行下列步驟

1. 將影像分成 N 個 patches
2. 通過 Stem 模塊獲得 patches 的向量表示
3. 每個 patches 加上 relative position embeddings
4. 計算當前 patchese 的 K 個最鄰近的鄰居
5. 根據最鄰近的 K 個鄰居更新當前 patch 的向量
6. 合併 N 個 patches 的資訊做下游任務

具體而言，向量的迭代方法如下

![](https://hackmd.io/_uploads/BJz5Cm_O2.png)

其中

![](https://hackmd.io/_uploads/rkR9Cm_uh.png)

- $g$ 為聚合函數，根據當前節點 $x_i$，合併與他最近的 K 個鄰居中距離最大的向量
- $W_{update}$ 為更新函數

我們把上面的過程稱為 GraphConv 模塊，實作上，完整的方法如下:

![](https://hackmd.io/_uploads/r1VJeNdd2.png)

我們會透過在 GraphConv 前後做一個線性變換保證資料多樣性 (這是因為 GraphConv 的數學立論是基於 Laplacian 矩陣，而 Laplacian 矩陣 K 次方中最大特徵直對應的特徵向量會主導整個模型輸出)

在實作上面，作者汲取了 Pyramid 的概念，提出 Pyramid 的 ViG 架構

## VIGU: VISION GNN U-NET FOR FAST MRI (https://arxiv.org/pdf/2302.10273.pdf)

![](https://hackmd.io/_uploads/ry8De4uu3.png)

這個就只是基於 AE 架構，把 Encoder 和 Decoder 換成 ViG 而已，不過對於 ViG 這種新領域以及新模型來講，相關的方法還是很有前瞻性的








