• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

keras yolov3 트레이닝시 iou, score

21.06.17 14:17 작성 조회수 142

0

강사님? 안녕하세요. 좋은강의 항상 감사드립니다. 

yolo 모델은 트레이닝으로 특징맵을 추출하고,  NMS를 통해서 최종 detection을 수행하는것으로 알고있습니다. 

질문1) iou와 score는 NMS에서만 사용되는 파라미터인가요? 아니면 트레이닝에서도 사용되는 부분이 있는가요? 사용되는부분이 있다면 qqwweee코드에서 어느부분인지 알 수 있을까요? (트레이닝시 loss가 계산될때 두 파라미터가 사용 될 것 같다고 생각했습니다...)

질문1-1)  트레이닝시 iou와 score 는 제가 따로 지정하지 않고 model.py의 def yolo_eval 에  score_threshold=.6, iou_threshold=.5 값이 디폴트로 들어가는건가요? 질문1)이 이 부분을 조정하면 해결되는 건가요...?

그리고 detection(NMS) 수행시 (예)racoon_yolo = YOLO(model_path=~, anchors_path=~, iou=0.3, score=0.9) 이런식으로 지정해 주면 yolo_eval에 default값이 아닌 제가 지정한 값이 들어가게 되는건가요? 

질문2) iou는 ground truth(라벨 자료)와 비교하는건가요? confidence score(class probability)가 가장 높은 bbox와 비교하는건가요? 

질문3) detection후에 output image가 input image를 -90도 회전하여 나오는데... 이부분을 확인하거나 수정할 수 있는 코드부분을 알 수 있을까요?

질문4) kmeans.py 코드를 활용해서 custom data를 분석해서 anchor_box 사이즈를 조정해보고 싶은데 참고할만한 것이 있을까요? 

파이썬과 욜로를 깊게 이해하지 못한상태에서... qqwweee 코드분석이 너무 어려워서... 필요사항에 따라 이리저리 검색해가며 이용하고 있습니다. 질문이 너무 많아 죄송합니다 (ㅜ..ㅜ) 답변 부탁드리겠습니다. 감사합니다!! 

 

답변 1

답변을 작성해보세요.

0

안녕하십니까,

질문 내용이 많아서 먼저 질문 내용중 qqwwee에 어디에서 코드가 사용되는지는 제가 답변드리기가 어려울 것 같습니다. 내용 확인하는데 너무 시간이 오래 걸립니다.

그리고, 아래와 같이 NMS 정리가 필요할 것 같습니다(이미 NMS를 잘 아시는것 같지만.... )

NMS는 모델 학습 시에는 적용되지 않습니다. 학습 후 모델이 예측할 때 최종 Layer에서 예측 된 값들중에 filtering으로 걸려낼때 사용됩니다.

이 때 iou threshold와 confidence threshold 기준을 적용하여 filtering out을 시킵니다. 

질문1) iou와 score는 NMS에서만 사용되는 파라미터인가요? 아니면 트레이닝에서도 사용되는 부분이 있는가요? 사용되는부분이 있다면 qqwweee코드에서 어느부분인지 알 수 있을까요? (트레이닝시 loss가 계산될때 두 파라미터가 사용 될 것 같다고 생각했습니다...)

=>confidence와 iou가 학습시 loss식에 사용되는가는 애매한 부분이 있습니다.  loss식은 크게 bbox 좌표값 MSE loss + bbox classification loss + object여부 loss + Non object loss 로 나눌 수 있습니다.

앞에서 Confidence라고 적어 주신게 명확하게 어떤 것인지는 모르지만, Yolo NMS에 사용되는 Confidence는 objectness * class확률입니다. 여기서 objectness가 loss에 사용됩니다. 또한 ground truth와 가장 높은 IOU가 가지는 Anchor box와의 loss식을 계산할때도 IOU가 적용됩니다.

질문1-1)  트레이닝시 iou와 score 는 제가 따로 지정하지 않고 model.py의 def yolo_eval 에  score_threshold=.6, iou_threshold=.5 값이 디폴트로 들어가는건가요? 질문1)이 이 부분을 조정하면 해결되는 건가요...?

=>yolo_eval 에  score_threshold=.6, iou_threshold=.5 이 질문 1의 무엇을 해결한다는 의미인지는 잘 모르지만, yolo_eval()함수는 최종 예측 단에서 NMS를 통해 예측 결과를 뽑아내는 로직입니다. 그리고 score_threshold=.6, iou_threshold=.5는 NMS에서 사용됩니다.

model.py의 208 라인 부터는 NMS로 filtering out 시키는 로직 입니다.

그리고 detection(NMS) 수행시 (예)racoon_yolo = YOLO(model_path=~, anchors_path=~, iou=0.3, score=0.9) 이런식으로 지정해 주면 yolo_eval에 default값이 아닌 제가 지정한 값이 들어가게 되는건가요?

=> 이건 소스코드를 직접 쫒아가 보시면 아실 수 있을 것 같습니다.

질문2) iou는 ground truth(라벨 자료)와 비교하는건가요? confidence score(class probability)가 가장 높은 bbox와 비교하는건가요?

=> iou는 ground truth와 비교합니다. 음 근데 confidence score가 가장 높은 bbox와 비교한다는 의미는 무엇인지요(IOU 질문이신지요?)

질문3) detection후에 output image가 input image를 -90도 회전하여 나오는데... 이부분을 확인하거나 수정할 수 있는 코드부분을 알 수 있을까요?

=> detection에서 input image를 회전 시킬일이 없습니다. detection은 bbox 정보만 끄집어 냅니다.

질문4) kmeans.py 코드를 활용해서 custom data를 분석해서 anchor_box 사이즈를 조정해보고 싶은데 참고할만한 것이 있을까요?

=> 음, 이부분은 retinanet에 해당 유틸리티가 있는데,  로직이 좀 달라서 적용이 어려울 것 같습니다만... 아뭏튼 어떻게 분석을 하고, 참조를 하기를 원하시는 좀 더 자세히 설명해 주셨으면, 제가 더 답을 찾아보겠습니다.

감사합니다.