논문 리뷰/ComputerVision
[논문리뷰] Vision Mamba: Efficient Visual Representation Learning with BidirectionalState Space Model
리미61
2024. 9. 2. 12:15
https://arxiv.org/abs/2401.09417
Abstract
SSM이 Visual data를 사용하는 것에 문제가 있음
position-sensitivity 이해와 전체 맥락에 대한 이해가 필요함
기존 mamba의 문제점
단방향 모델링 및 위치 인식 부족
⇒ 전역 시각적 컨텍스트 모델링을 위한 양방향 SSM과 위치 인식을 위한 position embedding을 통합한 Vision Mamba(Vim) 모델 제안
먼저 input image를 patch로 분할하고 Vim에 선형 투영
- 이미지 패치는 Vim 블록에서 시퀀스 데이터로 취급
- 제안된 양방향 선택적 상태 공간을 통해 시각적 표현을 효율적으로 압축
- position embedding은 공간적인 정보를 제공
Vision Mamba

Preliminaries
Mamba는 연속 시스템에서 영감을 받아 개발됨
기본적으로 모델들은 연속적인 시간 축을 따라 시퀀스 데이터를 처리
1. 연속 시스템
- $x(t)$ 는 시간 $t$에 따라 변함
- hidden state $h(t)$로 변환 후 다시 출력 $y(t)$로 매핑
- 이떄, $A$는 상태의 진화를 결정하는 행렬, $B,C$는 입력과 출력을 상태로 투영(projection)하는 역할
$$ h'(t)=Ah(t)+Bx(t)$$
$$y(t)=Ch(t) $$
2. 이산화
- 연속적인 시스템을 이산적으로 표현하여 컴퓨터에서 계산
- 시간 척도 파라미터 $Δ$ 를 사용해 이산적인 $A,B$로 변환
- Zero-Order Hold (ZOH) 방법을 사용
$$ A=exp(ΔA) $$
$$ B=(ΔA)−1(exp(ΔA)−I)⋅ΔB $$
3. 이산 시스템
- $t$라는 시간 스텝을 따라 진행되며, $h_t$와 $y_t$는 이전 상태와 입력에 의해 결정됨
- 마지막으로 출력은 전역 컨볼루션을 통해 계산
- 컨볼루션 커널 $K$는 입력 시퀀스의 길이 $M$에 따라 결정
$$ K=(CB,CAB,...,CAM−1B) $$
$$ y=x∗K $$
Vision Mamba
표준 Mamba는 1차원 시퀀스를 위해 설계됨
1. 이미지 패치 변환
- 2차원 이미지 $t∈R^{H×W×C}$ 를 2차원 패치로 변환 $xp∈R^{J×(P2⋅C)}$
- $(H,W)$ 입력 이미지의 크기
- $C$ 채널 수 / $P$ 이미지 패치의 크기
2. 선형 투영 및 위치 임베딩
- 평탄화된 패치 $x_p$는 학습 가능한 투영 행렬 $W$를 통해 크기 $D$의 벡터로 변환
- 모든 패치를 동일한 크기의 벡터로 변환하여 모델의 입력 크기를 일관되게 유지
- 그 후, 위치 임베딩 $E_{pos}$가 추가되어, 각 패치의 위치 정보가 인코딩
$$ T0=[t_{cls};t_1pW;t_2pW;⋅⋅⋅;t_JpW]+E_{pos}, $$
3. 토큰 시퀀스
- 패치 시퀀스 전체를 나타내기 위해 클래스 토큰(class token)을 사용 > $t_{cls}$
4. Vim 인코더
- 토큰 시퀀스 $T_{l-1}$는 Vim 인코더의 각 레이어에 입력되고, $T_l$을 생성
$$ T_l=Vim(T_{l−1})+T_{l−1} $$
- 출력 클래스 토큰 $T^L_0$ 정규화
$$ f=Norm(T^0_L) $$
- 다층 퍼셉트론(MLP) 헤드로 전달해 최종 예측 $\hat{p}$를 얻음
$$ \hat{p}=MLP(f) $$
Vim Block


1. 정규화
- 입력 토큰 시퀀스 $T_{l-1}$ 는 먼저 정규화 레이어를 통해 정규화됨
T'_{l-1} : (B, M, D) ← Norm(T_{l-1})
2. 선형 투영
- 정규화된 시퀀스는 두 개의 벡터 $x$ 와 $z$로 선형 투영
x : (B, M, E) ← Linear_x(T'_{l-1})
z : (B, M, E) ← Linear_z(T'_{l-1})
3. 전방향 및 역방향 처리
- $x$는 전방향과 역방향으로 처리됨
- 양방향 시퀀스 모델링을 통해 데이터의 모든 방향에서 정보를 활용
for o in {forward, backward} do
4. 1차원 컨볼루션
- 각 방향에서 $x$에 대해 1차원 컨볼루션을 적용해 $x’_o$를 얻음
x'_{o} : (B, M, E) ← SiLU(Conv1d_o(x))
5. 선형 투영
- $x’_o$ 는 선형 투영되어 $B_o, C_o, \Delta_o$
B_o : (B, M, N) ← Linear_B_o(x'_{o})
C_o : (B, M, N) ← Linear_C_o(x'_{o})
6. 변환
- $\Delta_o$는 $B_o, C_o$ 를 변환하는 데 사용
- 상태 공간 모델(SSM)의 파라미터를 이산화(discretize)하여 처리 가능
A_o : (B, M, E, N) ← Δ_o @ Parameter_A_o
B_o : (B, M, E, N) ← Δ_o @ B_o
7. SSM 계산 & 게이팅 및 합산
- SSM을 통해 전방향 출력 $y_{forward}$와 역방향 출력 $y_{backward}$를 계산
y_o : (B, M, E) ← SSM(A_o, B_o, C_o)(x'_{o})
- $z$에 의해 게이팅
y'_{forward} : (B, M, E) ← y_{forward} ⊙ SiLU(z)
y'_{backward} : (B, M, E) ← y_{backward} ⊙ SiLU(z)
- 입력의 중요성을 조절하는 역할을 하며, 이 두 출력을 더하여 최종 출력 토큰 시퀀 $T_l$ 생성
T_l : (B, M, D) ← Linear_T(y'_{forward} + y'_{backward}) + T_{l-1}
Return: T_l
Vim 블록의 구조는 비전 작업에서의 공간 인식을 향상시키고, 양방향 시퀀스 처리를 통해 데이터를 효과적으로 분석하게 함