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

wolfgang gartner님의 프로필 이미지

작성한 질문수

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

OpenCV DNN으로 YOLO Inference 실습 - 01

cv_outputs 에 대해 질문

21.02.18 18:30 작성

·

152

0

단일 이미지에 Detection 적용한 결과인 cv_outputs를 확인해보니 궁금한 점이 생겨 질문합니다.

1. 각 앵커박스의 Objectness Score은 어디에 사용되나요?

2. 각 앵커박스의  Class Scores를 확인해보니 1개 Class 값을 제외하고 모두 0으로 되어있는데 당연한건가요?

3. Yolo3 에서는 Multi Labels 예측을 할 수 있다고 하셨는데 어떻게 작동하나요??

답변 2

0

wolfgang gartner님의 프로필 이미지

2021. 02. 19. 02:40

친절하게 답변해주셔서 감사합니다.

제가 이론적 지식이 부족해서 어떤 부분이 헷갈리는지 명확하게 설명하기가 힘드네요 양해 부탁드립니다.

원본 이미지로 부터 3가지 사이즈의 피쳐맵을 통해 다양한 사이즈의 객체를 인식합니다.

객체인식은 각 픽처맵의 각 셀에서 여러개 앵커박스로 진행합니다.

각 앵커박스는 "좌표",  " Objectness score",   "Class Scores" 가 있습니다.

여기서 Objectness score 은 해당 앵커박스에 객체가 있을 확률을 의미하는데 어떻게 구하는지 다른 글을 확인해보니 

Objectness score = GTbox와 비교한 IoU 값 * 객체가 있을 확률        으로 확인했습니다.

이때 객체가 있을 확률을 어떤식으로 구하는지 궁금합니다.  제가 영상에서 놓친건지 조심스럽습니다.

그리고 Objectness score 에 대한 임계치를 설정하고 임계값보다 낮은 앵커박스는 Detection 대상에서 제외시킵니다. (이때 이 앵커박스는 Class Score를 갖고 있는지도 궁금합니다.)

코드에서 앵커박스의 정보를 detection 변수로 표현했는데 detect[5:] 은 Class Score 들이고 detect[4]가 Objectness score인데 쓰이질 않아 어디서 사용되는지 궁금했습니다.

또 Class Scores는 데이터에 따라 80개 또는 20개 숫자로 구성되는데 softmax로 각 클래스일 확률을 구해 최댓값을 선택하는게 맞나요? 제가 데이터 값을 확인해 본 결과 전부 합해서 1이 안되고 나머지 값들이 0이었습니다. (최댓값이 0.8이어도 나머지값들이 0으로 나왔습니다 이에 대해서는 강사님께서 설명하신 그대로인거같습니다.)

0

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

2021. 02. 18. 21:27

1. 각 앵커박스의 Objectness score는 해당 anchor가 오브젝트 영역에 해당하는지 오브젝트가 아닌 백그라운드 영역에 해당하는지를 나타냅니다.

2. 강의에서 말씀드린대로 여러 class에 대한 score를 나타내므로 1개 class를 제외하고는 0이 최적입니다. 다만 0이 아니라 아주 작은 값이 되어 있을 걸로 예상됩니다. 만약 아주 작은 값이 아니라면 opencv내에서 아주 작은 값은 0 으로 변경되었을 가능성이 있습니다.

3. Yolo3 는 object detect한 클래스 별로 sigmoid 를 적용하여 multi label 예측을 합니다. softmax는 여러개의 클래스중 하나를 exclusive하게 예측합니다. multi label을 적용할 때는 클래스별로 여러개의 sigmoid 를 적용하는데, 예를 들어 1, 2, 3을 예측하면 첫번째 sigmoid는 1인가 아닌가 에 따라 결정하고, 두번째 sigmoid는 2인가 아닌가, 세번째 sigmoid는 3인가 아닌가로 결정하면서 여러개의 multi label을 예측합니다.