--- 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 作者透過改變每個樣本的權重來結合多個弱分類器,其中對於弱分類器的權重更新方法如下  - 當 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 方法的每個弱分類器是序列相關的,因此,作者使用遷移學習的方法去初始化下一輪模型的餐數  在測試階段,我們會綜合 $M$ 個分類器的結果作為最後模型的輸出  上式的判斷準則是基於 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 更複雜的拓樸結構   ViG 概念其實與 ViT 相似,我們會執行下列步驟 1. 將影像分成 N 個 patches 2. 通過 Stem 模塊獲得 patches 的向量表示 3. 每個 patches 加上 relative position embeddings 4. 計算當前 patchese 的 K 個最鄰近的鄰居 5. 根據最鄰近的 K 個鄰居更新當前 patch 的向量 6. 合併 N 個 patches 的資訊做下游任務 具體而言,向量的迭代方法如下  其中  - $g$ 為聚合函數,根據當前節點 $x_i$,合併與他最近的 K 個鄰居中距離最大的向量 - $W_{update}$ 為更新函數 我們把上面的過程稱為 GraphConv 模塊,實作上,完整的方法如下:  我們會透過在 GraphConv 前後做一個線性變換保證資料多樣性 (這是因為 GraphConv 的數學立論是基於 Laplacian 矩陣,而 Laplacian 矩陣 K 次方中最大特徵直對應的特徵向量會主導整個模型輸出) 在實作上面,作者汲取了 Pyramid 的概念,提出 Pyramid 的 ViG 架構 ## VIGU: VISION GNN U-NET FOR FAST MRI (https://arxiv.org/pdf/2302.10273.pdf)  這個就只是基於 AE 架構,把 Encoder 和 Decoder 換成 ViG 而已,不過對於 ViG 這種新領域以及新模型來講,相關的方法還是很有前瞻性的
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up