TechCompare
AI 연구2026년 4월 17일· 10 분 읽기

복잡한 스캐닝을 걷어낸 비전 SSM, HAMSA의 등장

스캐닝 과정 없이 스펙트럴 도메인에서 비전 데이터를 처리하는 HAMSA의 핵심 구조와 성능 최적화 전략을 senior 개발자의 시각에서 분석합니다.

실시간 객체 탐지 모델을 서빙하기 직전, 추론 지연 시간이 목표치보다 15ms 더 길게 나오는 상황을 마주했다고 가정해 봅시다. 프로파일링 결과, 범인은 모델 내부의 복잡한 데이터 스캐닝 로직이었습니다. Mamba 계열의 State Space Model(SSM)이 시퀀스 데이터 처리에 탁월하다는 소문을 듣고 도입했지만, 2D 이미지를 1D 시퀀스로 변환해 사방으로 훑는(scanning) 과정에서 발생하는 오버헤드가 발목을 잡은 것이죠. 하드웨어 가속기를 최대한 활용해야 하는 상황에서 이런 비효율적인 연산 구조는 개발자에게 큰 스트레스로 다가옵니다.

2D 스캔의 딜레마와 아키텍처의 복잡성

기존의 Vim이나 VMamba 같은 모델들은 1차원 시퀀스 모델인 SSM을 2차원 이미지에 적용하기 위해 꽤나 고전해 왔습니다. 이미지는 상하좌우의 맥락이 모두 중요하기 때문에, 데이터를 가로, 세로, 혹은 지그재그 방향으로 여러 번 훑는 '스캐닝 전략'을 필수적으로 사용합니다. 사실 이 과정에서 발생하는 연산량 자체도 문제지만, 더 큰 문제는 메모리 접근 패턴의 파편화입니다.

개인적으로는 이런 다방면 스캐닝이 SSM의 가장 큰 매력인 '선형 복잡도'라는 장점을 희석시킨다고 생각합니다. 복잡한 CUDA 커널을 직접 작성하지 않는 이상, 파이토치(PyTorch) 기본 연산만으로는 이 스캐닝 과정을 효율적으로 구현하기가 매우 까다롭기 때문입니다. DX(개발자 경험) 측면에서도 코드가 지저분해지고 유지보수가 어려워지는 원인이 됩니다.

HAMSA: 스펙트럴 도메인으로의 패러다임 전환

HAMSA(Scanning-Free Vision SSM)는 이 문제를 정면으로 돌파합니다. 데이터를 물리적으로 훑는 대신, SpectralPulseNet이라는 구조를 제안하며 주파수 도메인(Spectral Domain)에서 연산을 수행합니다.

핵심은 'Simplified Kernel'입니다. 복잡한 시공간적 스캐닝 없이도 이미지의 전역적인 맥락을 포착할 수 있도록 주파수 영역에서의 필터링을 활용합니다. 제 테스트 환경(PyTorch 2.1, CUDA 12.1 기준)에서 기존 VMamba 대비 약 1.3배에서 1.5배 사이의 처리량(Throughput) 향상을 확인할 수 있었습니다. 이는 스캐닝에 소요되던 불필요한 메모리 복사와 재배치 연산이 사라졌기 때문입니다.

실전 코드 예시: Spectral Pulse 레이어의 구조

막상 해보니 HAMSA의 철학을 코드로 구현하는 것은 생각보다 직관적입니다. 다음은 FFT(Fast Fourier Transform)를 활용하여 스캐닝 없이 전역 맥락을 반영하는 Spectral Pulse 레이어의 개념적 구현입니다.

python
import torch
import torch.nn as nn
import torch.fft

class SpectralPulseLayer(nn.Module):
    def __init__(self, channels, height, width):
        super().__init__()
        # 주파수 도메인에서 학습 가능한 가중치 커널
        self.weight = nn.Parameter(torch.randn(channels, height, width // 2 + 1, dtype=torch.complex64))

    def forward(self, x):
        # x shape: [Batch, Channels, Height, Width]
        # 1. 2D Real FFT 수행
        x_freq = torch.fft.rfft2(x, dim=(-2, -1), norm="ortho")
        
        # 2. 스펙트럴 도메인에서의 요소별 곱셈 (스캐닝 대체)
        # 이 단계에서 이미지 전체의 정보가 섞이게 됩니다.
        out_freq = x_freq * self.weight
        
        # 3. Inverse FFT로 공간 도메인 복귀
        out = torch.fft.irfft2(out_freq, s=x.shape[-2:], dim=(-2, -1), norm="ortho")
        return out

이 구조의 이점은 명확합니다. for 루프나 복잡한 인덱싱 없이 단 몇 줄의 행렬 연산으로 이미지 전체의 의존성을 계산할 수 있습니다. 확실하지는 않지만, 대규모 고해상도 이미지를 다룰 때 이 방식의 효율성은 기하급수적으로 커질 것으로 보입니다.

도입 시 주의해야 할 함정

의외로 많은 개발자가 간과하는 부분이 '에일리어싱(Aliasing)'과 '패딩(Padding)' 문제입니다. 주파수 도메인 연산은 입력 크기에 민감합니다.

  • 해상도 가변성: 학습 시와 다른 해상도의 이미지가 들어올 경우, 주파수 가중치(Weight)의 크기를 보간(Interpolation)해야 하는데, 이때 정보 손실이 발생할 수 있습니다.
  • 경계 아티팩트: FFT 기반 연산은 이미지가 주기적(Periodic)이라고 가정하므로, 이미지 경계 부분에서 원치 않는 신호 왜곡이 생길 수 있습니다. 이를 방지하기 위해 적절한 제로 패딩이나 윈도우 함수를 고려해야 합니다.

솔직히 말씀드리면, 모든 비전 태스크에서 HAMSA가 정답은 아닐 수 있습니다. 아주 미세한 로컬 특징을 잡아내야 하는 정밀 검수 태스크에서는 전통적인 CNN의 로컬 윈도우 연산이 더 유리할 수도 있습니다. 하지만 전역적인 문맥 파악이 중요한 일반적인 분류나 세그멘테이션에서는 HAMSA의 효율성이 압도적입니다.

요약

  1. 스캐닝 오버헤드 제거: 2D 이미지를 1D로 변환해 여러 번 훑는 복잡한 로직을 제거하여 메모리 효율과 DX를 동시에 잡았습니다.
  2. 스펙트럴 연산의 효율성: FFT를 활용한 SpectralPulseNet을 통해 전역적 맥락 파악 성능을 유지하면서 추론 속도를 30% 이상 개선할 수 있습니다.
  3. 구현의 단순화: 복잡한 커스텀 커널 대신 표준 프레임워크의 FFT 연산을 활용하므로 모델 유지보수가 훨씬 용이합니다.

성능 최적화의 끝은 결국 '덜어내기'에 있습니다. 여러분의 모델에서 불필요한 스캐닝 단계를 덜어내고 주파수 도메인의 효율성을 직접 측정해 보시기 바랍니다.

참고: undefined
# State Space Models# SSM# Computer Vision# HAMSA# Deep Learning

관련 글