강의

멘토링

커뮤니티

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

송근영님의 프로필 이미지
송근영

작성한 질문수

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

SSD의 이해 03 - SSD 네트웍 구조와 Multi Scale Feature Map/Anchor box의 활용

Anchor box의 Positive 처리 위치

작성

·

36

0

안녕하세요 선생님.

오늘도 너무나 재밌게 잘 배우고 있습니다. 감사드립니다.

 

현재 시간 관계상,

섹션4(RCNN계열)까지 수강 후 섹션7(SSD)를 수강중입니다. 강의 내용을 누락시킨 채 질문을 드리는 것이 아니었으면 좋겠습니다.

 

제가 이해한 바

  • Faster-RCNN에서

  • RPN은 image 원본이 아닌 feature map을 입력을 받는다.

  • RPN 내에서 Positive Anchor들에 대해서만 학습을 수행한다.

     

일 때

 

학습 시에,
RPN내에서 특정 anchor의 Positive 판단이 된다면, 해당 anchor 위치에 어떤 객체 A의 GT가 IoU 기준에 부합하다는 것이 판단되어야 할텐데,

RPN 내에서는 feature map 을 입력으로 받고 있으니 내부에서 A 객체의 GT와 anchor 의 IoU를 계산하기 위해선 GT(image 좌표계), anchor(feature 좌표계)를 비교해야 할 텐데 이건 너무 번거로운 일이 아닌가 생각이들었습니다.

 

위 내용이 틀렸다면 RPN 이전 벌써 anchor 가 존재하고(혹은 설계 가정), 매 학습 이미지가 들어올 때마다 각 anchor 의 라벨정보를 미리 구해놓은 뒤 역전파 시점에서 해당 라벨 정보를 가지고 RPN의 손실 함수 계산에 해당 라벨정보를 포함시킬 수 있겠다라고 생각을 했습니다.

 

하지만 이런 경우 이 anchor의 positive 처리 과정이 network 내로 들어올 수 없고 Keras 와 같은 framework 구성으로 들어와야하지 않을까 하는 생각이 들었습니다. network 에는 처리 소스코드를 넣을 수 없으니까요. (특정 구조로 가능할런지는 모르겠습니다)

 

질문입니다.

RPN 내에서 Anchor Positive 처리가 이뤄지나요?

 

답변 2

1

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

안녕하십니까,

잘 듣고 계시다니, 저도 뿌듯합니다.

네, anchor positive가 처리 됩니다.

먼저

"RPN 내에서는 feature map 을 입력으로 받고 있으니 내부에서 A 객체의 GT와 anchor 의 IoU를 계산하기 위해선 GT(image 좌표계), anchor(feature 좌표계)를 비교해야 할 텐데 이건 너무 번거로운 일이 아닌가 생각이들었습니다."

말씀하신대로 그대로 적용을 하게 되면, 번거롭습니다. 그래서 거의 대부분의 Object Detection 모델에 원본 이미지를 학습 데이터로 입력하는 과정에는 크기 정규화 과정을 거칩니다. 정규화 방법은 모델별로 다를 수는 있지만,

예를 들어 원본 이미지가 224 x 224 의 크기이고 GT Object의 center 좌표가 (112, 112) 크기가 56 width, 56 height라면 이를 224x224를 1로 놓고 0 ~ 1 사이 값으로 변경해서 center 좌표가(0.5, 0.5) width 0.25, height 0.25와 같이 0 ~ 1 사이 값으로 정규화되어 모델에 입력됩니다. Feature Map도 마찬가지 입니다.

이런 식으로 feature map이 예측한 좌표와 GT 좌표를 서로 비교하면서 Loss 적용하며 모델을 학습하게 됩니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 송근영님.

Faster R-CNN의 RPN(Region Proposal Network)은 주어진 feature map에서 anchor boxes를 통해 물체의 위치를 예측하는 역할을 합니다. 먼저, Faster R-CNN이 작동하는 핵심 개념은 엄밀히 말하면 anchor boxes와 ground truth의 IoU(Intersection over Union)를 계산하는 것입니다. 이를 통해 각각의 anchor box가 positive인지 negative인지를 판단합니다.

  1. RPN의 입력: RPN은 원본 이미지가 아닌 CNN을 통과한 feature map을 입력으로 받습니다. RPN은 각 위치별로 anchor boxes(일반적으로 다양한 크기와 비율로 생성됩니다)를 놓고, 이 anchor boxes에 대하여 각 클래스에 대한 물체인지 아닌지 예측하고, bounding box를 조정하는 regression을 수행합니다.

  2. Positive/Negative Anchor 판단: 일반적으로 IoU 값이 높은 경우를 Positive로, 낮은 경우를 Negative로 결정합니다. 이 때 GT와 anchor box 간의 IoU 값을 계산하여 Positive, Negative를 판별하게 됩니다.

  3. 사전 준비된 라벨 정보: 질문에서 언급하신 것처럼, 매 번째 이미지에 대하여 사전 계산되어 제공되는 ground truth의 좌표를 기준으로 anchor boxes의 상태를 설정할 수 있습니다. 이 과정은 일반적으로 데이터 로딩 시점에서 선행되어, 긍정적인(anchor box가 실제 객체와 연관이 있을 수 있는) anchor boxes와 부정적인(anchor box가 배경에 해당하는) anchor boxes를 학습시키는 데 사용됩니다.

RPN 내에서 IoU 계산과 Positive/Negative 판단은 네트워크 구조에 구현될 수 있습니다. 오히려, 이러한 계산은 training 시점에 anchor boxes를 적절히 필터링하여 학습 성능을 극대화하는 데 중요한 역할을 합니다. 실제로 이러한 과정은 딥러닝 라이브러리(Keras, TensorFlow) 내부에서 백엔드 코드로 처리됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

송근영님의 프로필 이미지
송근영

작성한 질문수

질문하기