# 2025 Image Processing, Computer Vision & Deep Learning Final Project [code](https://github.com/KyntonKCC/NCKU_114-1_IPCVDL_RepViT_Final_Project) ## Performance Evaluation ``` python -m streamlit run app.py ``` ### RepViT - repvit_m0_9 - 在 iPhone 12 上推論只需 0.9 ms - 家族裡最小、最快的 - 刷出最高的 FPS 數據,展示極致效能 - 最輕量的版本,論文數據顯示它在手機上只需 0.9 毫秒就能處理一張圖 - repvit_m1_1 - 在 iPhone 12 上推論只需 1.1 ms - 速度稍微慢一點點,但準確度提升 - 取得速度與準確度最佳平衡的型號 - 不需要犧牲太多速度,就能達到非常高的辨識率 - repvit_m2_3 - 在 iPhone 12 上推論只需 2.3 ms - 準確度最高,但速度較慢 - 為了追求極致準確度設計的,準確率高達 83.7% ### Challenger - vit_base_patch16_224 - Google 推出的標準版 Vision Transformer (ViT) - base: 代表標準大小(參數量約 86M),運算量非常大 - patch16: 代表它把圖片切成 16x16 的小方塊 (Patch) 進入 Transformer 處理 - 224: 輸入圖片解析度是 224x224 - 準確度高,但因為架構非常笨重,在沒有 GPU 的情況下跑起來非常慢 - swin_tiny_patch4_window7_224 - 微軟提出的 Swin Transformer,曾獲 ICCV 最佳論文 - 引入了「移動視窗 (Shifted Window)」機制,解決了傳統 ViT 看不懂不同尺寸物體的問題 - Swin Transformer 的結構雖然很先進,「移動視窗」機制涉及複雜的記憶體搬運,在 CPU 上非常吃力 - resnet50 - CNN 的經典代表,領域的工業標準 ResNet50 - 50 代表它有 50 層深 - 用來證明 RepViT 不只贏過 Transformer,在速度和準度上也雙殺 CNN ### Device - cpu - 筆電 CPU (Intel/AMD) 來運算 - 論文強調 "Mobile" (移動端)。大多數是便宜的物聯網設備 (IoT)、樹莓派、或是機器人,可能都沒有昂貴的顯卡,只能靠 CPU - 展示 CPU 模式,是因為真實的嵌入式系統往往沒有顯卡 - 受限的硬體下,RepViT 的架構優勢才能被最大化 - cuda - 使用 NVIDIA 顯卡加速 - 平行運算能力極強,通常會讓所有模型都變很快,導致差異不明顯 - 只適合伺服器端的應用       ### Conclusion - ViT Base vs. 所有 RepViT - 無論是追求速度還是追求精度,RepViT 家族在邊緣裝置上都全面碾壓了傳統的 ViT Base - RepViT-M0.9 vs. 所有挑戰者 - RepViT-M0.9 是目前邊緣運算的最佳解——它比舊模型快,比複雜模型順,比輕量模型準 我們過去認為 Vision Transformer (ViT) 比較強,是因為它的架構設計 (MetaFormer) 很先進 我們認為 CNN 比較快,是因為它的運算方式 (卷積) 很適合硬體 RepViT 做的事情,就是"將 ViT 的高效設計原則用跑得快的 CNN 來實作",它拿走了 ViT 優秀的架構設計,但丟棄了笨重的 Attention 機制,堅持用最高效的 CNN 來實作 ## Visual Interpretability by Heatmap ``` python -m streamlit run heatmap.py ``` ### Structural Re-paramterization 重參數化 - 訓練時 (Training): RepViT 有很多並行的分支 (Branches) 來幫助學習,這時候它其實不小 - 推論時 (Inference): 透過數學轉換,這些分支會「融合」成一個單一的 3 * 3 卷積核 現在電腦上跑的 repvit_m0_9_distill_300e.pth 檔,是已經最精華的骨幹 RepViT 捨棄了 ViT 全連接層 (Fully Connected),改用極致輕量的卷積結構,並透過「重參數化」技術,在推論階段把多餘的結構「融化」掉,實現了 1/15 的極致輕量化 - ViT-Base (對照組): 約 86M (8600萬) 參數 - RepViT-m0.9 (主角): 約 5M (500萬) 參數 - 差距: 確實是 1/15 甚至更小 雖然 RepViT 跑得很快,但我們必須確認:它是真的「看懂」了圖片,還是只是運氣好猜對? 我們使用 Grad-CAM 技術將模型的注意力可視化 ### Case A:拉布拉多 Labrador Retriever - ViT (77%): 熱力圖呈現塊狀分布,覆蓋頭部與身體 - RepViT (66%): 熱力圖高度集中於頭部與耳朵 - 證明 RepViT 具備 CNN 的特性——善於捕捉局部關鍵特徵 (Local Features) - 它不需要看全身,光看臉就能準確分類,這也是它高效的原因  ### Case B:義大利靈緹 Italian Greyhound - 兩個模型對這張圖的信心都不高 (約20%),這可能是因為拍攝角度或品種特徵不明顯 - 即便在信心不足的情況下,RepViT 的關注點依然非常合理——死死盯著狗的眼睛和額頭  ### Case C:米格魯 Beagle - ViT 信心度高 (87%),RepViT 信心度低 (32%),但兩者都答對了 - 這展示了邊緣運算 (Edge AI) 的真實權衡 (Trade-off) - 我們用 1/15 的參數量換取了極致速度,雖然信心分數下降,但依然保持了分類正確的實用性 - 這在資源受限的場景下是完全可以接受的  ### Conclusion ViT 傾向於透過「全局掃描 (Global Attention)」來看物體,導致熱力圖較分散且呈塊狀 而 RepViT 繼承了 CNN 的特性,傾向於捕捉「局部關鍵特徵 (Local Features)」,如眼睛、耳朵等,熱力圖更集中且平滑 RepViT 的熱力圖往往比 ViT 更乾淨,較少受到背景雜訊(如草地、天空)的干擾 這證明了加入標準化與正確訓練的 RepViT,具備優秀的前景背景分離能力 雖然在某些困難案例(如米格魯)中,RepViT 的信心分數低於 ViT,但它始終能做出正確分類 這證明了 RepViT 成功達成了一種平衡——犧牲一點點信心度,換取 5 倍的推論速度 與 1/15 的輕量化,這正是邊緣運算最需要的特質 ## Architecture ``` python -m streamlit run architecture.py ``` 為什麼 RepViT 可以同時達成「高準確率」與「極致速度」這兩個矛盾的目標? - 訓練時 (Training): 它是一個多分支網路(像 ResNet),擁有豐富的梯度流,確保模型能學到複雜的特徵(這解釋了為什麼我們的熱力圖這麼準) - 推論時 (Inference): 它變身為一個單路網路(像 VGG),沒有任何多餘的分支和加法運算,確保了極致的執行效率(這解釋了為什麼我們的FPS 這麼高) 這張圖展示了 RepViT 的靈魂——「訓練看重結構,推論看重速度」 它證明了我們不需要為了速度而犧牲模型的學習能力,只要透過巧妙的架構設計,就能讓普通的 CPU 跑出頂級 AI 的效能   ## Reference [source code](https://github.com/THU-MIG/RepViT) [RepViT: Revisiting Mobile CNN From ViT Perspective](https://openaccess.thecvf.com/content/CVPR2024/html/Wang_RepViT_Revisiting_Mobile_CNN_From_ViT_Perspective_CVPR_2024_paper.html)
×
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