21.03.10 13:47 작성
·
206
0
안녕하세요 좋은 강의 너무나 진심으로 감사드립니다.
몇가지 질문이있습니다.
1. 3x3 convolution 하는 이유
앞선 질문에 대한 답변을 보면 padding 이 same 이므로
크기가 동일한데 이것이 단순 추가적인 연산인 것인지 궁금합니다.
2. 앵커박스
1번 질문에 대한 저의 이해가 맞다면,
학습시에는 단순히 40x50 x 2 x 9의 최종 결과가 각 픽셀에 대한 9개 앵커의 sigmoid값이 되므로
학습시에는 우리가 각 픽셀의 9앵커의 ground truth를 전부 알려주어서 loss를 구해 학습 시키는것 같은데, 맞습니까?
RPN기 학습하는 것은 결국 Feature map의 각 픽셀의 앵커박스별로 오브젝트가 있는지 없는지를 우리가 알려준 답에 맞춰 weight를 업데이트 하는 것이라고 이해했습니다.
(마치 image segmentation에서 픽셀 단위로 학습시키듯이)
즉 앵커의 모양대로 뭔가 연산을 하는 것이 아니라 채널만 1x1FC로 픽셀 별로 2x9개 만들어 놓고 정답만 제공하는 방식으로 학습시키는 단순한 로직이라고 생각했습니다.
이해가 잘못되었다면 지적 부탁드리겠습니다.
바쁘신 와중에 죄송하지만, 답변해 주시면 감사하겠습니다.
답변 2
1
2021. 03. 10. 19:06
답변 정말 감사드립니다.
3x3 conv이 Feature map의 주변 픽셀들의 각 512채널들을 이용하여 연산되므로
같은 사이즈의 주변 픽셀값을 반영한 새로운 Feature map을 만들어지고(padding = same이므로)
이걸 다시 1x1conv 시켜 학습하고자 하는 채널수에 맞게 feature들을 뽑아내어(분류는 2x9개, 회귀는 4x9개) 학습이 되게 되는 원리이군요
많은 공부가 되었습니다.
감사합니다!
0
2021. 03. 10. 18:52
안녕하십니까,
1. RPN은 속도등을 감안하여 매우 심플하게 설계되었습니다.
제 생각엔 입력 피처맵에 1x1(channel수는 anchor 수) conv를 바로 붙였다가는 특별히 학습할 것이 없어서, 먼저 입력 피처맵에 3X3 Convolution을 매우 많은 채널수(512)로 적용한 뒤에 다시 1x1을 적용한 것으로 보입니다.
개인적으로 이렇게 심플하게 구현해도 RPN이 잘 동작해서 딥러닝의 힘(?)에 살짝 놀라긴 했습니다.
2. 말씀하신 것이 거의 다 맞습니다.
정확히는 40x50 x 2 x 9는 Softmax의 경우이고, 오브젝트인가/아닌가로 sigmoid로 한다면 40x50x9 입니다.
RPN기 학습하는 것은 결국 Feature map의 각 픽셀의 앵커박스별로 오브젝트가 있는지 없는지를 우리가 알려준 답에 맞춰 weight를 업데이트 하는 것이라고 이해했습니다.
=> 네 맞습니다. 그리고 RPN이 학습을 수행 하면서 계산된 ROI값이 다시 Faster - Rcnn 전달되면서 Faster-RCNN의 학습을 도와주게 됩니다.
감사합니다.