이 논문을 선택한 이유
- 물체의 종류와 상태 그리고 물체 간의 관계를 파악하고 기억할 수 있는 지각 모듈을 개발하고 싶기 때문.
- 이러한 지각 모듈이 있다면, 오랫동안 수행해야 하는 작업에 대한 계획을 수립할 때 유용할 것.
- 이 모듈은, 일차적으로 현재 이미지에서 인식된 물체가 이전에 인식된 물체인지 아니면 새로운 물체인지 파악할 수 있어야 한다. 이를 다루기에 앞서 객체를 end to end로 인식하는 방법을 공부하고자 한다.
풀어내는 문제
- NMS (Non Maximum Suppression)와 같은 후처리 작업이 필요하지 않은, end to end 물체 인식
- 물체의 경계를 나타내는 경계 상자와 물체의 종류를 출력으로 갖는다
- 경계 상자는 (x중앙,y중앙,가로,세로)로 나타낸다.
용어
- 패치/토큰
- DETR과 Deformable DETR은 CNN을 백본 네트워크로 갖는다. CNN의 출력 텐서의 한 "픽셀"을 토큰 혹은 패치라 부른다. 만약 출력 텐서의 차원이 (채널, 세로, 가로)라면, 차원이 채널인 토큰이 세로∗가로 만큼 존재하게 된다.
모델 구조
- DETR과 동일하게 인코더와 디코더를 갖는 트랜스포머.
- 디코더의 self attention, 인코더의 self attention 그리고 디코더의 cross attention으로 나눠 정리하겠다.
- Deformable DETR 디코더의 self attention은 DETR 디코더의 self attention 계층과 동일하다.
- 인코더의 self attention은 아래와 같다.
- 한 개의 토큰이 다른 모든 토큰에 attend 하지 않고 N개의 토큰에만 attend 한다.
- attend할 토큰을 선택하고 가중치를 정하기 위해 쿼리 벡터가 입력이고, (xoffset,yoffset,attention 가중치)가 출력인 완전 연결 계층을 사용한다.
- 실수 xoffset,yoffset은 attend 할 패치의 좌표를 나타낸다. 구체적으로 attend할 패치의 좌표는 쿼리 패치의 좌표에 위의 offset을 더한 것이 된다.
- 패치의 수는 이산적인데 반해, xoffset,yoffset은 연속적인 실수이다. 실수를 좌표로 갖는 패치는 없기 때문에, 이중선형 보간법을 사용해 실수 좌표에 대응되는 밸류 벡터를 계산한다.
- 수식: (px,py) where px,py∈R가 attend할 토큰의 좌표라 하자. 그러면 좌표 (px,py)에 대응되는 밸류 벡터 값은 다음과 같다.
- vpx,py=∑qg(qx,px)∗g(qy,py)∗vqx,qy
- g(x1,x2)=max(0,1−∣x1−x2∣)
- qx,qy는 정수. 즉 실제로 존재하는 패치의 좌표.
- vqx,qy는 좌표 qx,qy에 대응되는 밸류 벡터 값.
- 굳이 이중선형 보간법을 사용하면서까지 xoffset,yoffset을 실수로 두는 이유:
- 이 두 값이 이산적이면 미분 불가능하기 때문이다. 다만 이는 이론적인 내용이고, sparse MoE 에서는 이산적으로 전문가 네트워크를 선택해도 학습에 문제가 발생하지 않았음을 고려하면, 꼭 위의 두 offset을 실수로 둬야 하는지 의문이다.
- attention 가중치
- 키 벡터를 전혀 고려하지 않고 쿼리 벡터만 고려하여 attention 가중치를 계산한다.
- 기존의 attention은 key 값을 고려하여 얼마나 attend 할지 정한다. 하지만 Deformable DETR은 attend할 패치의 내용에 대한 고려없이 가중치를 계산하는 특이한 구조.
- 이미지의 경우, 쿼리 벡터만 고려해도 어디쯤 얼마만큼 attend 할지 정할 수 있다는 게 직관적으로 와닿기는 한다. 예시로 오른쪽을 바라보는 개의 머리가 한 이미지 패치에 위치해 있다고 가정하자. 이 패치를 선형 변환하여 query 벡터를 계산한 뒤, 어디에 attend 할지 정하는 것은 충분히 가능할 것으로 보인다. 개의 머리 크기를 고려하여, 몸통과 다리가 얼마나 클지 짐작할 수 있고 오른쪽을 바라보고 있으니 몸통은 아래 왼쪽에 위치할 것이라 짐작할 수 있다.
- 다만 비디오의 객체를 인식하기 위해 위의 방법을 사용하면 문제가 생길 수도 있다.
- 물론 최근 이미지에서 인식한 객체를 현재 이미지에서 다시 인식할 때에는 위 방법이 문제가 될 거라 믿기 어렵다.
- 이유: 비디오는 "연속적"이기에, 현재 이미지에서 인식한 객체와 동일한 객체는 최근 이미지에서 서로 비슷한 위치에 있을 것이라 기대할 수 있다. 이런 편향을 학습할 수 있다면 최근 이미지의 어느 패치에 얼마만큼 attend 할지 충분히 정할 수 있을 것이다.
- 하지만 10분 15분 전에 인식했던 객체를 현재 이미지에서 다시 인식할 때, 위의 편향은 전혀 쓸모없다. 쓸모있는 편향이 무엇일지 짐작조차 되지 않는다. 그렇기에 attend 할 토큰의 내용을 고려하여 attention weight를 정하는 것이 합리적일 것이다.
- 디코더의 cross attention
- 다른 부분은 인코더의 self attention과 동일한데, 쿼리 패치의 좌표를 계산하는 방법이 다르다.
- 이유: 인코더의 쿼리 패치의 좌표는 직관적이다. 입력 텐서에서의 좌표를 파악하면 되기 때문이다. 하지만 디코더 쿼리 패치의 좌표를 이렇게 파악할 수 없다.
- 방법: 쿼리 토큰이 입력이고 쿼리 패치의 좌표가 출력인 완전 연결 계층을 사용한다.
- 쿼리 패치의 좌표는 0≤좌표≤1로 로지스틱 함수를 통해 normalize 시킨다.
- Multi-scale deformable attention
- 바닐라 DETR은 각 토큰이 모든 토큰에 attend 하므로 토큰의 수가 증가함에 따라 요구 연산량이 급격하게 증가함에 주목하자. 여러 scale의 feature map을 사용하면 토큰의 수가 증가하기에, multi-scale attention이 비효율적이다. 하지만 Deformable DETR은 모든 토큰에 attend 하지 않기에 여러 scale의 feature map에 attend 하기 용이하다.
- Deformable DETR의 한 쿼리 토큰은, 한 scale feature map의 N 개 토큰에 attend 한다. 그렇기에 연산량은 scale feature map 수에 대해 선형적으로 증가함.