논문정보
ResNeSt : Split-Attention Networks
<code>
어텐션을 적용하는게 맞나 싶긴 하지만 일단 지금 성능이 실패한 이유는 내가 vit에서 scaled dot attention하는 부분만 가져와서 이를 제대로 활용하지 못한 게 아닌가싶다.
ViT전체를 이용하기에는 pretrained된 모델이 필요한데 그렇게되면 그냥 resnet과 vit를 각각써서 결과를 concat한 것 뿐인 것 같아 혹시 여기서 괜찮은 아이디어가 나올까 싶어서 읽어봄
논문정리
Abstract
이미지 인식 분야에서 특징맵 어텐션과 Multi-path 표현이 중요하다.
본 논문에서는 채널별 어텐션을 다른 네트워크에 적용하여 특징 간 상호작용을 포착하고 다양한 표현을 학습하는 데 성공했던 구조를 제안한다.
설계가 간단하고 통일된 연산 블록으로 되어있으며 몇가지의 매개변수만을 필요로한다.
본 모델, ResNeSt는 이미지 분류 작업에서 정확도-지연간의 균형 측면에서 EfficientNet을 능가한다
또한, 여러 공식 벤치마크에 대해서 우수한 전이학습 결과를 얻어냈으며 COCO-LVIS challenge에서 우승 항목으로 채택되었다.
전체 시스템에 대한 소스코드와 사전학습된 모델은 공개적으로 제공된다. (위 깃허브 참고)
Introduction
심층 컨볼루션 신경망 (CNNs)는 이미지 분류와 컴퓨터 비전 내 기타 전이학습 작업을 위한 기본 접근법이 되었다.
CNN의 주요 요소인 컨볼루션 층은 공간적이나 채널별로 이웃된 정보를 축약하는 필터를 학습한다.
이 연산으로 각각의 입력 채널과 밀접하게 연결된 출력 채널간 연관된 특징들을 포착할 수 있다.
인셉션(Inception) 모델은 multi-path representation을 사용하여 독립적인 특징들을 학습하는데, 이때 입력이 더 작은 차원의 임베딩으로 쪼개졌다가, 각기 다른 컨볼루션 필터에 의해 변형되고, concatenation을 통해 합쳐진다.
시각 피질(visual cortex)의 뉴런 연결은 지난 수십년 동안 CNN 발전의 기반이 되었다.
(대충 인공신경망이 신경망을 기반으로 시작되었다는 말인 것 같음)
이미지 표현학습의 주된 주제는 주어진 작업에 대해 두드러진 특징을 발견하는 것이다.
이전의 연구는 공간/채널 의존성과 통합된 어텐션 구조를 모델링 하였다.
SE(Squeeze-Excitation)같은 채널별 어텐션은 전역풀링을 사용하여 채널 특성을 압축(squeeze)하고, 기존의 특징맵으로 채널별 곱셈을 적용하기 위해 어텐션 요인들을 예측한다.
이 구조는 특징맵 채널 간의 상호의존성을 모델링한다.
전역 컨텍스트 정보를 사용하여 특징들을 선택적으로 강조하거나 중요시하지 않는다.
이 어텐션 구조는 객체를 인식하기 위해 중요한 부분을 찾아내는 인간의 1차 시각 피질의 어텐션 선택 단계와 유사하다.
인간과 동물은 다양한 시각적 특징에 반응하는 각각의 영역에서 피질을 사용하여 다양한 시각 패턴을 인지한다.
이는 신경 지각 시스템에서 비슷한 대상들 간 미묘하지만 중요한 차이점을 발견하기 쉬워진다.
이와 유사하게 우리가 각기 다른 이미지 특징에 대해 개별적인 두드러진 속성을 포착하는 CNN 구조를 설계한다면, 이미지 분야에서 네트워크 표현을 향상시킬 수 있을 것이다.
본 논문에선, 채널별 어텐션 전략과 multi-path network layout을 결합하는 간단한 구조를 제안한다.
이 방법은 meta 구조에서 독립적인 표현을 유지하면서 채널 간 특징 상관 관계를 포착한다.
본 네트워크의 모듈은 저차원 임베딩으로의 일련의 변환을 거친 후, multi-path network에서처럼 이 출력들을 연결(concatenate)한다.
각 변환(transformation)은 채널별 어텐션 전략을 통합하여 특징 맵의 상호 의존성을 포착한다.
이 구조를 더 단순화하여서 각 변환이 동일한 topology를 공유하도록 한다. (그림 2 오른쪽 참조)
Topology
네트워크 구성 방식, 뉴런 간의 연결 구조(패턴)
- 레이어의 개수
- 네트워크 내 정보의 역방향 이동 가능성
- 네트워크의 각 레이어 노드 개수
몇가지 변수만으로 네트워크 구조를 매개변수화 할 수 있다.
이런 설정으로 통일된 CNN 연산과 동일한 구현을 사용하여 훈련을 가속화할 수 있다.
이 연산 블럭을 Split-Attention Block이라 칭한다.
이미지넷 데이터셋에 대한 ResNeSt 네트워크의 성능을 벤치마킹한다.
제안된 ResNeSt는 여러 SOTA CNN모델에 비해 속도-정확도 간 trade-off가 더 좋음 (표2 참조)
또한 객체 탐지, 객체 분할, 의미분할에 대한 전이학습 결과도 보여준다.
ResNeSt는 백본 네트워크의 역할을 할 때 여러 벤치마크에 대해 우수한 성능을 달성하였음
ResNeSt-101을 백본으로 사용한 Cascade-RCNN은 MS-COCO데이터셋 객체 분할 작업에서 48.3%의 box mAP, 41.56%의 mask mAP를 달성하였음
ResNeSt-101을 백본으로 사용한 DeepLabV3또한 ADE20K scene parsing validation set에 대해 46.9%의 mIoU를 달성하여 이전의 달성된 최고 성능보다 1% 높아짐
게다가 ResNeSt는 2020 COCO-LVIS 대회에서 우승 항목으로 채택되었음
Related Work
<CNN architectures>
pass
<Multi-path and featuremap Attention>
multi-path 표현은 GoogleNet에서 성공적이었다.
각각의 네트워크 블럭이 다른 컨볼루션 커널로 구성되어 있다.
ResNeXt는 ResNet bottle block에서 그룹 컨볼루션을 채택한다.
multi-path 구조를 통합된 작업(unified operation)으로 변환한다.
SE-Net은 채널 특징 반응값을 적응적으로 recalibration하는 채널 어텐션 방법을 도입하였다.
즉, 채널에 대한 가중치 weight를 만들고 이를 기존 특징맵에 적용하여 중요한 채널을 더 중요하게 만든다.
SK-Net은 두개의 네트워크 브랜치를 이용하여 채널 어텐션을 얻는다.
이전의 방법들을 참고하여 본 네트워크는 채널 어텐션과 multi-path 네트워크 표현을 합쳤다.
<Neural Architecture Search>
연산능력이 증가하면서 연구 관심사도 손수 설계한 구조에서 체계적으로 연구된 구조로 넘어가기 시작했다.
최근 연구는 파라미터 공유를 통해 효율적인 구조를 연구하여 지연이 적고 복잡도가 낮은 CNN 모델을 성공적으로 달성하였다.
하지만 다른 구조와 파라미터 공유를 통해 높은 GPU 메모리를 사용하게 되면서 대규모 신경망에 대한 연구는 여전히 어려운 일이다.
(파라미터를 공유하는데 GPU 메모리 사용량이 높아진다고..? 내가 잘못 이해한건가)
EfficientNet은 처음에는 작은 설정에서 연구한 후 네트워크 복잡성을 체계적으로 확장하였다.
이처럼, 본 연구진은 ResNet meta구조를 더 깊은 버전의 네트워크로 확장하여 모델을 구성하였다
50에서 269개의 레이어로
Split-Attention Networks
3.1에서는 다른 특징맵 그룹간의 특징맵 어텐션을 가능하게 했던 Split-Attention 블럭을 소개하고
3.2에서는 네트워크 인스턴스를 설명하고 어떻게 CNN 연산으로 이 구조를 가속화하였는지 설명한다.
<Split-Attention blolck>
Split-Attention 블럭은 특징맵 그룹과 split attention연산으로 이뤄진 computational unit이다.
그림 2의 오른쪽에서 Split-Attention 블럭의 구조를 확인할 수 있다.
그림 3은 Split-Attention unit의 세부적인 구조
Featuremap Group
ResNeXt 블럭에서 처럼 특징맵이 여러 그룹으로 나뉘며, 특징맵 그룹의 수는 cardinality라는 하이퍼 매개변수 $K$로 주어진다.
이 특징맵 그룹을 cardinal그룹이라고 지칭한다.
본 논문에선 새로운 radix라는 하이퍼 파라미터 $R$을 도입하였고 이는 cardinal 그룹에서의 분할횟수를 의미한다.
즉, 특징 그룹의 총 갯수 $G=KR$
각 그룹에 대해 변환$\{\mathcal{F_1, F_2, \cdots, F}_G\}$을 거쳐 각 그룹이 $U_i = \mathcal{F}_i(X)$로 표현되게 한다.
이때 $i \in {1,2,\cdots,G}
Split Attention in Cardinal Groups
각 cardinal 그룹의 결합된 표현은 여러 분할들 간 element-wise 합을 통해 얻을 수 있다.
$k$번째 cardinal 그룹에 대한 표현은 $\hat{{U}^k} = \sum^{Rk}_{j=R(k-1)+1}U_j$
$k\in 1,2,\cdots,K$에 대해 $\hat{{U}^k}=\in\mathbb{R}^{H\times W\times C/K}$
$H,W,C$ : 블럭의 출력 특징맵 크기
$s^k \in \mathbb{R}^{C/K}$차원에 대해 전역 평균 풀링(GAP)을 통해 채널 별 통계정보가 담긴 global contextual information을 뽑아낼 수 있다.
이때 $c$번째 global contextual information은 식 1을 통해 계산한다.
cardinal group representation인 $V^k \in \mathbb{R}^{H\times w\times C/K}$의 weighted fusion은 채널 별 소프트 어텐션을 통해 얻어지고 이때 각 특징맵 채널은 여러 분할들의 weighted combination에 의해 생성된다.
식 2를 통해 $c$번째 채널을 구한다.
이때 $a_i^k(c)$는 (soft) assignment weight
$\mathcal{G}$^c_i는 global context representation $s^k$을 기반으로 한 $c$번째 채널의 각 분할에 부여하는 가중치
즉, soft attention을 통해 채널 가중치 $a^k_i$를 얻으면 (식 3) 여러 분할들에 이 가중치를 적용해서 weighted combination을 생성하면 특징맵 채널을 얻을 수 있다
⇨ split-attention
ResNeSt Block
cardinal group representation은 채널 차원을 따라 concatenate된다.
$V = Concat\{V^1, V^2, \cdots, V^k\}$
기존의 residual 블럭에서와 같이, Split-Attention Block의 최종 출력 Y에도 shorcut(skip) connection을 적용한다
$Y = V+X$ (입력과 출력 차원이 같을 때)
stride가 적용된 블럭은 적절하게 변형($\mathcal{T}$)하여 출력 차원과 맞춰준 후 shortcut connection을 진행한다.
$Y = V+\mathcal{T}(X)$
$\mathcal{T}$은 스트라이드가 적용된 컨볼루션이나 컨볼루션과 풀링을 결합한 것이 될 수 있다.
Instantiation and Computational Costs
그림 2의 오른쪽에서는 Split-Attention 블럭의 인스턴스를 확인할 수 있다.
그룹에 적용하는 변형 $\mathcal{F}_i$는 $1\times 1$ 컨볼루션을 거친 후 $3\times 3$ 컨볼루션을 적용한다. 이후, 어텐션 가중치 함수 $mathcal{G}$ 2개의 완전연결층과 ReLU 활성화로 이뤄진다.
Split-Attention block의 파라미터와 FLOPS 수는 같은 채널수와 cardinality를 가진 기존의 residual block와 거의 똑같다.
Relation to Existing Attention Methods
SE-Net에서 처음 소개 되었던 squeeze-and-attention (기존 논문에선 excitation)의 개념은 채널 별 어텐션 요인을 예측하기 위해 global context를 사용하는 것이다.
$radix=1$이면, Split-Attention block은 각각의 cardinal group에 대해 squeeze-and-attention연산을 적용하겠지만, SE-Net은 여러 그룹과는 관계 없이 전체 블록에 대해 연산한다.
SK-Net은 두 네트워크 stream간 특징 어텐션을 소개한다.
$radix=2$이면, Split-Attention block은 각 cardinal group에 대해 SK와 같은 어텐션을 적용하는 셈이다.
본 연구 방법은 이전의 특징맵 어텐션에 관한 연구를 cardinal group을 설정하면서 일반화하였고 연산 효율적이다.
그림 2에서 SE-Net과 SK-Net을 비교할 수 있다.
<Efficient Radix-major Implementation>
이전 섹션에서 다뤘던 레이아웃을 cardinality-major implementation이라 지칭한다.
그림 2에서처럼 같은 cardinal index가 있는 특징맵 그룹이 물리적으로 옆에 있는 경우
cardinality-major implementation은 간단하고 직관적이지만 기존의 CNN연산을 사용해서 모듈화하고 가속하기는 힘들다.
따라서, 이와 같은 radixd-major implementation을 소개한다.
그림 4는 Split-Attention block에서 radix-major layout의 전체적인 개요를 보여준다.
먼저 입력 특징맵이 RK개의 그룹으로 나눠지는데 이때 각 그룹은 cardinality index와 radix index를 가지고 있다.
이 레이아웃에서는 같은 radix-index를 가진 것들이 옆에 붙어있다.
이후 각기 다른 분할 간 summation을 진행하게 되면, cardinality index는 같지만 radix index가 다른 특징맵 그룹들이 융합된다.
전역 풀링 층은 채널 차원은 분리한 채로 공간 정보를 집계하는데, 이는 각 개별 기본 그룹에 글로벌 풀링을 수행한 후 결과를 concatenate하는 것과 같다.
이후 cardinality와 동일한 그룹 수를 가진 완전연결(FC)층 2개가 풀링레이어 뒤에 붙어 각 분할의 어텐션 가중치를 예측한다.
그룹화된 FC층을 사용하면 기본 그룹 각각의 맨위에 각각의 FC층들을 연결할 수 있다.
기존 그룹이 있고 FC도 그룹화되어있으면 각 그룹별로 FC를 할당할 수 있다는 얘기같다
이를 구현하기 위해 먼저 $1\times 1$ 컨볼루션층은 하나의 레이어로 통합하고, $3\times 3$ 컨볼루션 층을 RK의 그룹 수를 가진 그룹화된 컨볼루션을 사용하여 구현
따라서 Split-Attention block은 기본적인 CNN연산을 이용하여 모듈화할 수 있다.
Network Training
<Network Teaks>
Average Downsampling
detection이나 segmentation같이 빽빽하게(? 아무래도 픽셀단위로 예측하니까) 예측하는 작업에서 전이학습을 하는 경우 공간 정보를 보존하는 것이 중요하다.
최근에는 ResNet 구현에서 기존의 $1\ times 1$ 컨볼루션 대신 스트라이드를 적용한 $3\times 3$ 컨볼루션을 적용하였을 때 공간 정보를 더 잘 보존할 수 있었다.
컨볼루션층은 zero-padding으로 특징맵 경계를 처리해야 하는데 위의 작업에서는 좋지않을 때가 있다.
따라서 transitioning block(공간 해상도가 downsampling되는 곳)에서 스트라이드 컨볼루션을 사용하는 대신, $3 \times 3$ 커널의 평균 풀링층을 사용하기로 한다.
(그런데 classification은 dense prediction task가 아닌데 굳이?)
Tweaks from ResNet-D
단순하지만 효과적이게 ResNet 구조를 변경하였다.
- 처음에 나오는 $7 \times 7$ 컨볼루션층을 3개의 연속적인 $3 \times 3$을 쌓아 대체한다. 이렇게 해도 기존에서와 같은 수용장 크기와 연산량을 갖게 된다.
- $2\times 2$크기의 평균 풀링층을 스트라이드 2인 trainsition block에 대한 $1\times 1$ 컨볼루션 전단계의 shortcut connection에 추가한다.
<Training Strategy>
Large Mini-batch Distributed Training
심층 CNN 모델을 효과적으로 학습하기 위해 8개의 서버(총 64개 GPU ,,미쳤나 ㄷㄷ)를 사용하여 병렬로 모델을 학습한다.
학습률은 cosine schedule을 따라 적용하고 미니배치 크기에 맞게 초기 학습률을 선형적으로 scaling-up한다.
초기 학습률은 $\eta = \frac{B}{256} \eta_{base}$로 설정하고 이때 $B$는 미니배치 크기, $\eta_{base}$=0.1$ 이다.
warm-up은 5에폭까지만 진행하며 이후엔 0cosine schedule을 따라 선형적으로 증가한다.
배치 정규화(BN) 파라미터 각 블록의 마지막 BN연산에서 $\gamma$는 0으로 초기화.
Label Smoothing
라벨 스무딩은 Inception-V2에서 훈련을 향상시키기 위해 사용되었다.
ground truth 정보 $p$에 대한 네트워크 클래스 예측 확률 $q$가 주어질때 크로스 엔트로피 손실은 다음과 같이 계산한다.
$K$ : 클래스 개수
$p_i$ : i번째 클래스에 대한 gt 확률
$q_i$ : i번째 클래스에 대한 네트워크 예측 확률
기존의 이미지 분류작업에서는 $q_i = \frac{exp(z_i)}{\sum^K_{j=1} exp(z_j)}$이며 이때 $z_i$는 네트워크 출력 레이어의 로짓값이다. 제공된 라벨이 클래스 확률이 아니라 클래스로 주어질 경우 (hard label), $i$가 gt 클래스인 $c$와 같을 때 $p_i=1$이다. 반대의 경우는 $p_i=0$
즉, $l_{hard}(p,q) = -log q_c = -z_c+log(sum^K_{j=1} exp(z_j))$
훈련의 마지막 단계에서는, $j\neq c$인 경우 로짓 $z_j$값은 굉장히 작은 값이 될거고 $z_c$는 무한대(최적값)에 가까워지도록 하는데 이로 인해 과적합이 유도될 수 있다.
따라서 타겟값으로 hard label을 주는 것보다 label smoothhing을 써서 smooth한 gt 확률을 제공한다.
$\epsilon$은 0보다 큰 작은 상수
이를 통해 네트워크의 과잉확신(overconfidence)과 과적합(oerfitting)을 방지할 수 있다.
Auto Augmentation
Auto-augmentation은 훈련 데이터를 변형하여 증강하는 전략이다.
16개의 다른 종류의 이미지 왜곡 변형이 있고, 이를 통해 shift, rotation, color jittering 등의 변형 2개를 연속으로 적용하여 데이터를 증강한다.
변형 크기는 파라미터(회전 각도)를 통해서 조절할 수 있고, 변형을 skip할수도 있다.
Mixup Training
Mixup은 훈련 데이터에서 임의의 이미지 쌍으로 weighted combination을 생성하는 데이터 증강기법이다.
두가지의 이미지와 gt인 $(x^{(i)}, y^{(i)}), (x^{(j)}, y^{(j)})$가 주어지면 생성된 훈련샘플 $(\hat{x}, \hat{y})$는 식 6,7과 같다.
이때 $\lambda \sim \mbox{Beta}(\alpha=0.2)$는 증강된 예제에 대해 독립적으로 샘플링 됨
Large crop size
이미지 분류 연구는 일반적으로 동일하게 크롭된 이미지에서의 네트워크 성능을 비교한다.
ResNet 변종들은 훈련 크롭 사이즈를 224로 고정하여 사용하며 Inception-Net군은 229로 크롭한다.
EfficientNet 방법이 입력 이미지 크기를 증가하면 정확도 - Flop간의 trade-off 가 더 좋아진다고 보여주었다.
따라서, 비교를 위해 ResNet 변종모델에 대해서는 224를 사용하고 다른 접근법을 사용할때는 256로 크롭하여 사용한다.
Regularization
심층 모델의 경우엔 대용량 데이터셋에 대해서도 과적합되는 경향이 있다.
이를 막기위해 dropout regularization으로 훈련과정에서만 랜덤하게 적용하여 네트워크 앙상블을 형성한다.
드롭아웃 층의 드롭아웃 확률은 0.2를 적용하고 200개이상의 레이어가 있는 네트워크에 FC 레이어 앞에 적용된다.
또한 DropBlock 레이어를 마지막 컨볼루션 층 2개에 적용한다.
DropBlock은 local 블록 영역을 임의로 마스킹하고, 드롭아웃보다 효과적이다.
최종적으로 weight decay (i.e., L2 정규화)로 훈련을 안정화한다.
weight decay는 컨볼루션과 FC 층에만 적용한다.