인프런 커뮤니티 질문&답변

otsthkim님의 프로필 이미지
otsthkim

작성한 질문수

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

Faster RCNN의 이해 03 - RPN과 Faster RCNN Training 및 성능 비교

질문 다시 올립니다!

작성

·

301

0

제가 이해한 faster r-cnn 입니다. 제가 잘못 이해한 부분이 있으면 지적 부탁드리겠습니다. (논문을 참고하여 공부했습니다.)

1. anchor box 배정

2. GT 를 통해 anchor box 의 positive, negative, non 배정.

3. 임의로 선정된 positive, negative box 를 통해 rpn 학습.

- 3.1. cls layer 을 통해 objectness score, classification score 학습

-3.2. reg layer 을 통해 transformation function 학습

4.  positive anchor box 를 통한 fast r-cnn 의 classification 학습

 

질문

1. Anchor box 는 하나의 target box 와 대응되나요? 여러 GT 와 높은 IOU 를 보인다면 어떻게 되나요?

2. ROI pooling 이란 3.1 단계를 뜻하는 건가요?

3. Test 단계에서는 GT 가 없는 상태이기 때문에 모든 anchor box 의 objectness score 와 regression score 을 계산하나요? 아니면 Test 단계에서는 cls layer 를 통해 positive, negative, non 을 정한 후 reg layer 에 투입되어야 하지 않나요? Training 과 Testing 단계 순서의 차이를 제대로 이해하지 못한 것 같습니다.

4. 3번 질문과 비슷한 맥락에서 loss function 을 보면 regression loss 을 계산할 때 positive box 에 대한 loss 만을 고려하기 위해 ground-truth label 을 곱해주는데, 애초에 negative box 에 대한 regression 은 왜 이루어지는 건가요? cls layer 와 reg layer 간의 순서 없이 동시에 학습된다는 게 잘 이해가 되지 않습니다.

5. 논문을 보면 학습 방법으로 세가지를 제시하는데 (alternating training, approximate joint training, non-approximate joint training) alternating training 부분에서 RPN 을 먼저 train 하고, RPN 의 proposal 들을 사용하여 Fast R-CNN 을 train  한 후, tuning 된 Fast R-CNN 을 RPN initialization 에 사용한다고 하는데, 어떻게 더 뒤에 있는 Fast R-CNN 을 통해 앞에 있는 RPN 을 initialize 한다는 건가요?

6. Anchor box 객체의 변수로 center x, center y, width, height, classes 와 같이 anchor box 자체와 관련된 변수들 밖에 없는데, positive anchor box 와 해당 anchor box 의 target box 는 어떻게 매칭되는 건가요? 또, negative, non 인 anchor box 와 positive anchor box 모두 같은 변수들을 가지고 있어, positive 하지 않아도 class 에 대한 초기값을 가지나요? (밑바닥부터 구현을 시도하던 중 궁금증이 생겨 질문드립니다.)

답변 2

0

otsthkim님의 프로필 이미지
otsthkim
질문자

좋은 답변 감사드립니다.

제가 공부를 하던 중 모델의 단계 별 순서에 대해서 헷갈렸던 것 같습니다.

감사합니다.

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

적어주신 1 ~ 4까지는 alternating training 기법을 중점적으로 이해하신 Faster RCNN같습니다만...  

강의 내용대로 RPN을 요약 드리면, 

1. RPN Network을 Anchor box 기반으로 구성(별도의 모델 구성) 

2. ROI Pooling을 포함한 Main Network 구성(별도의 모델 구성)

3. RPN Network과 Main Network을 합쳐서 전체 Network 구성. 

3. 전체 학습은 배치마다 RPN학습하고, 학습된  오브젝트 및 좌표를 기반으로 ROI Pooling 및 Main Network에 값을 전달하고 Main Network을  학습. 순차적 학습함. RPN 학습->Main Network 학습 -> 전체 Network 학습

전체 Network은 rpn loss + Main Network loss를 모두 줄이는 방향성으로 진행.   

질문

1. Anchor box 는 하나의 target box 와 대응되나요? 여러 GT 와 높은 IOU 를 보인다면 어떻게 되나요?

=>하나의 TARGET box로만 대응됩니다. 여러 GT중에 가장 높은 IOU만 선택합니다. 

2. ROI pooling 이란 3.1 단계를 뜻하는 건가요?

=> 3.1 단계는 RPN으로 보입니다만. ROI Pooling은 Main Network 단계 입니다. RPN의 예측 Object 위치를 Pooling 형태로 Mapping 하는 것입니다. 

3. Test 단계에서는 GT 가 없는 상태이기 때문에 모든 anchor box 의 objectness score 와 regression score 을 계산하나요? 아니면 Test 단계에서는 cls layer 를 통해 positive, negative, non 을 정한 후 reg layer 에 투입되어야 하지 않나요? Training 과 Testing 단계 순서의 차이를 제대로 이해하지 못한 것 같습니다.

=> 질문을 잘 이해하지 못했습니다. 이미 학습이 완료된 모델은 anchor box 및 다른 모든 layer에  classification과 regression을 위한 weight가 설정되어 있습니다. 이미지만 입력하면 자동으로 weight를 기반하여 object를 예측합니다. 

4. 3번 질문과 비슷한 맥락에서 loss function 을 보면 regression loss 을 계산할 때 positive box 에 대한 loss 만을 고려하기 위해 ground-truth label 을 곱해주는데, 애초에 negative box 에 대한 regression 은 왜 이루어지는 건가요? cls layer 와 reg layer 간의 순서 없이 동시에 학습된다는 게 잘 이해가 되지 않습니다.

=> 이것도 질문을 잘 이해하지 못했습니다. cls layer와 reg layer간의 순서없이 동시에 학습된다는게 논문에 나와 있는건가요?  loss는 rpn과 main network 모두 cls loss와 reg loss를 합쳐서 구합니다. 

5. 논문을 보면 학습 방법으로 세가지를 제시하는데 (alternating training, approximate joint training, non-approximate joint training) alternating training 부분에서 RPN 을 먼저 train 하고, RPN 의 proposal 들을 사용하여 Fast R-CNN 을 train  한 후, tuning 된 Fast R-CNN 을 RPN initialization 에 사용한다고 하는데, 어떻게 더 뒤에 있는 Fast R-CNN 을 통해 앞에 있는 RPN 을 initialize 한다는 건가요?

=>  Faster RCNN을 통해 앞에 있는 RPN을 초기화 한다기 보다는 Main Network + RPN loss 모두를 최소 loss로 하는 방향으로 optimizer가 움직인다 정도로 이해하시면 될 것 같습니다. 

6. Anchor box 객체의 변수로 center x, center y, width, height, classes 와 같이 anchor box 자체와 관련된 변수들 밖에 없는데, positive anchor box 와 해당 anchor box 의 target box 는 어떻게 매칭되는 건가요? 또, negative, non 인 anchor box 와 positive anchor box 모두 같은 변수들을 가지고 있어, positive 하지 않아도 class 에 대한 초기값을 가지나요? (밑바닥부터 구현을 시도하던 중 궁금증이 생겨 질문드립니다.)

=>이건 로직을 돌려서 매칭을 해야 합니다. GT box 별로 어떤 anchor에 mapping되는지 별도의 array로 지정되어야 합니다. 

 

제 생각엔 구현을 하시려면 구현되어 있는 github을 보시는게 좋을 것 같습니다.  아래 URL 추천 드립니다. 

https://github.com/kentaroy47/frcnn-from-scratch-with-keras

 

 

otsthkim님의 프로필 이미지
otsthkim

작성한 질문수

질문하기