---
# System prepended metadata

title: Involution 算法介紹
tags: [' ML']

---

---
title: Involution 算法介紹
tags: Deeplearning, Computer Vision, AI
---
# Involution 介紹
> 我是不怎麼專業但喜歡研究papper的工程師，以下是我研究關於 Involution 的過程

## 論文來源
[Involution: Inverting the Inherence of Convolution for Visual Recognition](https://arxiv.org/pdf/2103.06255.pdf)

## 計算過程
1. input 需要先經過 FC BN ReLU FC 最後 reshape [引用](https://zhuanlan.zhihu.com/p/358183591)，然而在實作上看到的經過了 AvgPool -> ConV -> BN -> ReLU -> ConV -> reshape，差異在於原本的 FC 由 AvgPool 與 Conv 取代掉
![](https://i.imgur.com/qXMZ11p.jpg)
1-1 即是 FC BN ReLU FC，1-2 是 reshape，出來的就會是 w => 待會會用到，此處的生成是可以重新設計的，主要是希望能夠達到 (channel-to-space) 的效果
2. 將原 input unfold(這塊我也看了一陣子，之後再補充上來)
3. 將 unfold 後的 input 與 w 做相乘並且在第四個維度做相加也就是kernel的維度做相加，將資訊綜合起來後重新 reshape 獲得最終的 feature map=> 這個部分在 papper 中也被稱作為 Multiply-Add

## shape 的變化
![](https://i.imgur.com/YRrrLkK.png)
>[name=引用至上面的引用]

## 各層的作用
1. 第一層的 ConV
    - kernel size = 1，將同一通道的資訊集中，也可以視為 channel 的合成
2. 第二層的 ConV
    - kernel size = 1，合成非線性轉換後的 channel 資訊，並且將output channel 的 size 轉換成 KxKxG => 讓之後的 reshape 與 Multiply-Add 可以順利計算
3. UnFold

## 與 ConV 差異
### ConV
#### 通道特異性 (channel-specific)
之前已經有一些研究低秩近似的工作認為卷積核在通道維度是存在著冗餘的，那麼卷積核在通道維度的大小就可能可以有所縮減，而不會明顯影響表達能力。代表其中存在很多的 kernel是近似線性相關的。
#### 空間不變性 (spatial-agnostic)
- 在同個 channel 中，所有的 pixel 共享相同的 kernel，優點具有參數共享、平移等變性
### InV
> 反轉 ConV 的特性 invere ConV 蠻好記得
#### 通道不變性 (channel-agnostic)
#### 空間特異性 (spatial-specific)

## 實作參考
[大神實作](https://github.com/xmu-xiaoma666/External-Attention-pytorch)
[目前我的版本](https://github.com/henry3556108/data_science/tree/master/involution)
> 之後會轉換成 tensorflow2 可用版本，code內有附大神連結