본문 바로가기

인공지능 AI/논문리뷰 and 재구현

(논문리뷰&재구현) YOLACT 설명 및 정리 - (2)

<Introduction>

 

이전 글 : (논문리뷰&재구현) YOLACT 설명 및 정리 - (1)

 

(논문리뷰&재구현) YOLACT 설명 및 정리 - (1)

Image segmentation은 각 object에 대해 localization을 수행해야하므로 translation variance를 만족해야한다. (Image segmentation과 translation variance에 대한 설명은 아래 게시글에서 설명..

ganghee-lee.tistory.com

이전 글에서 YOLACT의 Prototype branch까지 설명을 했었다. 간단히 이전까지의 내용을 요약하자면 다음과 같다.

 

Image segmentation을 위해서는 translation variance를 만족하기 위한 Localization이 수행되어야 한다. 

2-stage detector에서는 RPN을 이용해서 Localization을 수행한 후 RoI영역에 대해서 Classification을 수행하므로 문제가 되지 않는다.

그러나 1-stage detector의 경우 Localization과 Classification을 병렬로 수행한다. 따라서 동일 class의 object가 겹쳐져있는 경우 이 둘을 구분해야하는 작업을 잘 수행하지 못한다.

(2-stage는 object 1개가 포함된 RoI영역을 먼저 추출한 다음 classification을 수행하지만 1-stage는 전체 이미지에 대해서 병렬로 classification을 수행하기 때문이다.)

 

따라서 YOLACT는 이를 해결하기 위해 두 개의 subtask로 나누어 병렬로 수행하는데

그것이 바로 Protonet branchPrediction Head branch이다.

Protonet에서는 padding을 이용해서 feature map(channel)의 특정 지역만 activate시키는, 즉 localization을 하는 방법을 학습한다. 그러나 각 Prototype mask가 공간적으로 특정 지역을 activate하고는 있지만 2-stage에서처럼 하나의 object만 activate된 상태는 아니다. 

즉, 아래 그림과 같이 각각 다른 특징점들을 activate하고는 있지만 하나의 object만 activate 하고있지는 않다.

K=6) Prototype mask

이를 해결하기 위해 Mask coefficient를 생성하는 Prediction Head가 필요하다.

간단히 설명하자면, 위 그림에서 d에 해당하는 image의 prototype을 볼때

2는 초록 우산과 빨간 우산이 비교적 많이 activate되고있고 3은 빨간 우산만 activate하고 있다. 따라서 2에서 3을 "빼면"

초록우산만 activate된 feature map을 얻을 수가 있다. 

 

즉, 생성된 k개의 prototype mask들을 서로 빼고, 더하는 연산을 통해서 2-stage처럼 하나의 instance에 대해서만 activate(localization) 시킬 수가 있다.


<Prediction Head>

 

YOLACT의 전체적인 Architecture를 다시 한 번 살펴보면 아래 그림과 같다.

YOLACT Architecture

Protonet에서는 이전 글에서 설명했듯이 Backbone에 의해서 생성된 P3, .. P7 5개의 feature map에서 가장 deep하고 resolution이 제일 높은 P3를 input으로 받는다. 그러나 Prediction Head에서는 위 그림에서 확인할 수 있듯이 5개의 feature map 모두를 input으로 받는다.

 

Prediction Head의 Architecture는 아래와 같다.

Prediction Head

Input으로는 (nxnx256) shape의 feature map이 들어온다. 여기서 n은 P3, .. P7의 feature map size에 해당하는 n으로써 (69, 35, 18, 9, 5) 중 하나의 값을 갖는다. 3x3 conv 연산을 한 번 거친 후 각각 class, box, coef branch로 나뉘게된다.


class branch

먼저 YOLACT에서는 feature map의 각 pixel마다 3개의 anchor box를 생성한다. FPN을 이용해서 여러 scale의 feature map을 생성했으므로 size는 1종류에 ratio를 3종류로 하는 3개의 anchor box를 생성하는 것이다.

(anchor box에 대해 잘 모른다면 Faster RCNN글에서 자세한 설명을 확인할 수 있다.)

2020/01/14 - [인공지능 AI/논문리뷰] - (논문리뷰) Faster R-CNN 설명 및 정리

 

(논문리뷰) Faster R-CNN 설명 및 정리

이전글 : (논문리뷰) Fast R-CNN 설명 및 정리 Fast R-CNN 설명 및 정리 이전글 : Object Detection, R-CNN 설명 및 정리 Object Detection, R-CNN 설명 및 정리 컴퓨터비전에서의 문제들은 크게 다음 4가지로 분..

ganghee-lee.tistory.com

 

class branch에서는 각 anchor box마다 총 81(80개의 class label + background 1개) 개의 class에 대한

confidence를 계산한다.

각각의 class에 대해 해당 class에 해당할 확률(score)를 계산하는 것이다. (ex. class 1 : 0.78, class 2 : 0.56 , ....)

따라서 feature map에서 각 pixel 마다 anchor box를 3개 생성하고 anchor box마다 81개의 class confidence를 계산하므로 총 243개의 confidence값을 계산하는 것이다. 이를 3x3 conv 연산을 통해서 계산하며 padding=same으로 하여 feature map에 있는 모든 pixel에 대해서 계산한다. 

결국 class branch의 output은 243xnxn(243개의 confidence값, feature map의 pixel개수 : nxn) shape을 갖는다.


box branch

위에서 설명했듯이 feature map의 각 pixel마다 3개의 anchor box가 생성되고 각 anchor box마다 4개의 좌표값을 갖는다.

따라서 box branch에서는 각 pixel 마다 12개의 값을 계산해야한다. 

결국 box branch의 output은 class branch에서와 같이 3x3 conv연산을 통해서

12xnxn(12개의 box 좌표값, feature map의 pixel개수 : nxn) 의 shape을 갖는다.


coef branch

위의 class branch와 box branch는 1-stage, 2-stage에서와 동일하며 딱히 다를 것이 없다.

YOLACT는 여기에 coefficient branch를 추가하였다. Protonet과 더불어 YOLACT의 핵심이다.

Protonet에서 k개의 prototype mask를 생성했지만 각 mask는 특정 instance 1개를 activate(localize)하고있지 않다.

따라서 k개의 prototype mask를 서로 더하고 빼는 연산을 통해 1개의 instance만 activate하도록 feautre map을 조정한다.

feature map에서의 각 anchor box는 k개의 coefficient값을 갖게 되고 이를 prototype mask와 연산하여

결국 각 anchor box마다 1개의 instance만 activate(localize)하도록 한다. 

총 k개의 prototype mask가 각각 coefficient값을 갖게 되므로 coef branch의 output은 '3k'xnxn의 shape을 갖는다.

이때 비선형성을 위해서 활성함수는 tanh를 적용한다.

 

다시 한 번 강조하자면 feature map의 anchor box가 1개의 instance만 activate 시킬 수 있도록 하기위해

k개의 prototype mask를 더하고 빼는 연산을 진행해야하고 이를 위해 각 mask마다 coefficient값을 계산해야한다.

 

이때 핵심은 "Subtract" 연산이다.

 

mask를 서로 더하는 연산만을 가지고는 특정 instance 1개를 activate 시킬 수가 없다. 아래의 예를 보자.

Linear combination

위 그림은 4개의 prototype mask를 각각 mask가 갖는 coefficient값을 이용해서 더하고 빼는 연산을 하는 과정을 보여준다.

결과로 첫번째 줄은 테니스라켓을 들고있는 사람의 그림에서 사람만 activate되었고 두번째 줄라켓만 activate되었다.

이때 만약 k=2로 prototype mask가 아래와 같이 생성되었다고 가정해보자.

k=2) prototype mask

첫번째 mask는 사람만 activate되어있고 두번째 mask는 사람, 라켓 둘다 activate되어있다.

이때 라켓만 activate된 feature map을 만들기 위해서는 두번째 mask에서 첫번째 mask를 빼줘야한다.

만약 coefficient값의 범위가 0보다 커서 mask들을 서로 더할 수 밖에 없다면 두번째 mask에 coefficient값 0을 줘서

[첫번째 mask*1 + 두번째 mask*0 = 첫번째 mask] 다음 식처럼 연산한다면 사람만 activate된 feature map을 만들 수 있다. 그러나 두 mask 모두 사람이 activate된 feature map이기에 각각 어떤 coefficient 값을 적용한다 하더라도 사람을 제외하고 라켓만 activate 시키기는 불가능하다. 따라서 coefficient값이 "음수값"도 가질 수 있도록 하여

[-첫번째 mask + 두번째 mask*1] 식으로 라켓만 activate시킬 수 있다.

 

"따라서 tanh와 같이 음수값도 지닐 수 있는 활성함수를 이용해야한다"


<Summary>

 

지금까지 Protonet과 Prediction Head에 대해서 살펴보았다.

요약하자면 Protonet에 의해 생성된 k개의 prototype mask가 특정 local을 activate하고 있는데 하나의 instance만 activate시키기 위해서 mask끼리 더하고 빼는 연산을 하게 된다. 이때 각 mask가 갖게되는 coefficient값을 

Prediction Head에서 계산을 한다.

 

이때 위에서 설명했듯이 총 5개의 feautre map(P3, ... P7)에서 각 pixel별로 anchor box를 3개 생성한다.

그러면 Backbone이 ResNet-101라는 조건하에 총 19248개의 anchor box가 생성된다. 

이때 일반적으로 아래 그림과 같이 여러 anchor box가 겹쳐져 있는 상태로 동일한 1개의 instance를 focus하고있다.

Left) NMS 전,   Right) NMS 후

따라서 동일 instance를 focus하는 anchor box 중 confidence가 가장 높은 anchor box만 남기고

다른 중복 anchor box는 제거하는 Non-maximum suppression을 적용한다.

(NMS에 관한 설명은 아래 글에서 찾아 볼 수 있다.)

컴퓨터비전에서의 기본 용어 및 개념 정리

 

컴퓨터비전에서의 기본 용어 및 개념 정리

CNN, R-CNN, Object Detection, HOI 등.. 과 관련한 논문들에서 흔히 나오는 용어들을 정리한 글입니다. 이미지를 비교하기 위해 동일한 방법을 통해 어떤 특징을 하나의 비교 대상으로 만드는 것을..

ganghee-lee.tistory.com

YOLACT에서는 NMS 대신 Fast NMS라는 새로운 기법을 제시하는데 이는 NMS보다 성능은 거의 떨어뜨리지 않으면서

더 높은 속도를 보인다. 다음 글에서는 이 Fast NMS를 통해 중복 anchor box를 제거하는 과정부터 설명하겠다.

 

다음 글 : (논문리뷰&재구현) YOLACT 설명 및 정리 - (3)

 

(논문리뷰&재구현) YOLACT 설명 및 정리 - (3)

이전 글 : (논문리뷰&재구현) YOLACT 설명 및 정리 - (2) (논문리뷰&재구현) YOLACT 설명 및 정리 - (2) 이전 글 : (논문리뷰&재구현) YOLACT 설명 및 정리 - (1) (논문리뷰&재구현) YOLACT 설명..

ganghee-lee.tistory.com