본문 바로가기

Computer Vision

HydraPlus-Net: Attentive Deep Features for Pedestrian Analysis

HydraPlus-Net: Attentive Deep Features for Pedestrian Analysis


한줄요약

Attention module을 multi-scale level에서 각각 뽑아내서 이걸 하나로 잘 합쳐서 comprehensive attention module을 구하는 방법을 제안함


기존의 CNN에서 attention module이라고 하면, conv. filter에 반응하는 영역으로, 주어진 task를 해결하기 위해 discriminative한 영역에 모델이 주의를 기울이게 되는 모듈을 의미함. 예를 들어, 개와 고양이를 검출하는 검출기의 attention module을 살펴보면 동물의 얼굴에 attention이 집중되는 현상을 확인할 수 있음.

이러한 attention을 comprehensive하게 구하는 것은 아직까지 open problem.
comprehensive하게 구할 수 있으면, 이를 이용해서 fine-grained task를 푸는데 사용할 수 있음.
해당 논문에서는 person re-identification과 pedestrian attribute recognition 2가지의 task에 제안한 방법을 적용해봄.

전체적인 framework는 아래 그림과 같음.


Main net이 있고, multi-scale에서 attention modlue을 구하기 위한 AF-net(붉은박스)가 있음. AF-net의 architecture는 Main-net과 완전 동일하며, 각 scale-level에서 attention map(feature map)을 뽑아내고(검은 실선), 뽑아낸 attention map을 각각의 scale-level에 해당되는 모듈의 feature map에 element-wise로 곱한다. 그리고 모든 모듈(Main-net까지 포함)의 output들을 채널 축으로 concatenate하고 global average pooling(GAP)로 합치고 뒤에 fc layer를 붙인 형태다.

각 inception blocl의 output을 F^i라 하고, 해당 block의 attention map은 eq(1)로 구한다. 1x1 conv with BN.
attention map은 L channel을 가짐.
앞서 구한 block의 attention map을 각각 다른 block에 masking하기 위해 eq(2)처럼 elem-wise multiplication한다. 여기서 attention map의 각 channel 별로 각각 수행함.
예를 들어 attiotion map을 block 2에서 구했다고 가정하고, block 1의 output을 F^1이라고 하면 F^1의 모든 channel에 a^2_1을 곱한다. 그리고 또 F^1의 모든 channel에 a^2_2를 곱한다. 이걸 a^2_L만큼 반복. 이렇게 구한 feature map을 F^i,k_l로 표기함. 그리고 이렇게 구한 feature map을 다음 forwarding pass로 넘김.

학습은 stage-wise fashion으로 수행함. 먼저 Main-net을 학습시키고, 이걸로 3개를 복사해서 위의 framework 같은 AF-net을 만듬. 그리고 같은 각각의 AF-net의 MDA 모듈을 fine-tune시키고, 마지막으로 GAP와 fc 레이어를 학습시킬 때, Main-net과 AF-net을 모두 fine-tuen시킨다.

실험내용은 데이터셋을 잘 몰라서 자세히 읽어보진 않음. 그리고 분석도 그냥 이렇게 multi-scale의 요소를 다 합쳐서 하나의 comprehensive attention map을 만드니깐 더 잘된다는 말임.

FPN에서는 multi-scale의 feature map의 정보를 합칠때 elt-wise sum을 했음. 그런데 여기서는 곱을 해서 masking 개념으로 접근함. 즉, FPN에서는 low-levle의 feature map에 high-level의 모든 정보를 잘 녹일려고 했었고, 여기서는 각각의 scale의 feature map에 정보를 더 보강해서 더 잘 구하려고 한 것 같음. 즉, 제안한 방법으로 low-level feature map을 뽑더라도 해당 feature map에 high-level정보가 덧씌워지는게 아님.
이렇게 각각 scale에서 attention map을 잘 구하고 그걸 concat해서 정보를 합쳤다고 볼 수 있음.
FPN에도 동일한 컨셉으로 접근시킬 수 있을 것 같은데, 그러면 최종 output feature map이 특정 resolution을 가진 하나의 feature map이 나올텐데 scale이 작은 object도 찾으려면 충분한 resolution을 가지고 있어야 될 것 같고, anchor도 scale 공간에서 dense하게 설정하려면 음....쉽진 않을 것 같긴한데, 시도는 해볼 수 있을 듯.