인프런 커뮤니티 질문&답변
안녕하세요 선생님 질문입니다!
작성
·
381
0
4:34를 보면서 질문드리고 있는데 이해하고 있는 부분이 맞는지 모르겠습니다
- 첫번째 300* 300* 3의 이미지가 첫번째 conv를 통과하여 생성된 38*38*512의 feature map에서 3*3 4(anchor box개수)*(pascal data set이라면 20 + 1+ 4: 바운딩박스 좌표)를 해서 마지막 detection 단으로 보내서 학습을 하는 것 까지 이해를 하겠는데, 3*3 과 같은 컨볼루션을 통해 바운딩박스가 학습되는 원리를 모르겠습니다. 
- 여기서 2가지 conv연산이 들어가는데 그 중 하나는 앵커박스를 통하여 바운딩박스를 학습하고 다른 하나는 컨볼루션 연산을 통해서 feature map의 사이즈를 줄이는(정보를 압축?) 하는 쪽으로 하는게 맞는지요.. 
글 주변이 없어서 죄송합니다.
답변 1
0
안녕하십니까,
- 음, 어떤 부분이 어떻게 이해가 안되는지 적어주시면 더 좋을 것 같습니다만, 일단 제가 추측해 보건데.. - 먼저, Object detection 모델은 이미지 classification과 다르게 Object detection 모델은 보통 최종 예측 단계에서 Dense layer를 이용하지 않고 Conv Layer를 이용해서 학습하는 방식으로 발전해 왔습니다. - 예측을 object 좌표와 class 명을 하기 때문에 이렇게 Conv layer를 사용하면 효과적으로 학습하고 결과를 도출할 수가 있습니다. - SSD는 VGG등의 Backbone을 통해서 만들어진 feature map과 이 feature map을 다시 축약한 여러개의 feature map들을 만들게 됩니다. 여러개의 Feature map은 3x3 Conv와 Stride를 적절히 적용하여 크기가 작은 feature map들을(좀 더 큰 object들을 Detect할 수 있도록) 여러개 만들게 됩니다. - 이렇게 만들어진 개별 feature map들을 3x3 Conv 연산을 적용 그러니까 서로 다른 크기의 feature map들에 3x3 conv를 적용하여 예측을 수행하게 됩니다. - 강의에서는 이들 feature map들에 3x3 Conv를 적용해서 bbox의 좌표와 object class를 학습한다고 말씀드렸는데, 이걸 상세히 설명드리면 좀 내용이 깁니다. 먼저 feature map 별로 anchor box에 따른class의 종류 갯수와 좌표 갯수로 Channel 수를 정해서 3x3 Conv 연산을 합니다. 그러니까 3x3 Conv의 채널에 box별 class의 종류와 좌표를 학습할 수 있도록 하는 것입니다. - 글로 적기에는 좀 이해가 안되실 수 있어서, Github에서 SSD를 구현한 사례를 첨부합니다. 318 라인 부터 보시면 될 것 같습니다. - https://github.com/pierluigiferrari/ssd_keras/blob/master/models/keras_ssd300.py 
- 먼저 VGG를 통과한 Feature map을 3x3 Conv와 Stride를 적용해서 축약적인 feature map들을 다 만든 다음에 개별 feature map들에 예측을 3x3 Conv를 다시 적용합니다. - 감사합니다. 







질문의 설명이 부족함에도 불구하고 너무 잘 설명해주셔서 놀랍고 감사할따름입니다..!! 다시 정리하자면 3*3 컨볼루션을 적용을 box별 class의 종류와 좌표로 학습하여 채널로 만든다는 말씀이십니까?