• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

NMS 구현 관련 질문있습니다.

21.03.16 10:56 작성 조회수 118

0

안녕하세요. 강의 해주신 내용을 듣고 코드를 활용해서 Pascal voc 20class들을 학습했습니다.

그리고나서 model을 활용한 prediction을 해보려고하는데 코드에서 NMS를 사용하지 않더군요....

개인적으로 코드를 만들어서 적용을 해봤는데

test image

문제 1. 7*7*30 model ouput 값이 0 ~ 1 사이 값이 아닙니다.

center x, center y값부터 softmax metrics 값까지 0 ~ 1 사이 값이 아니며,

심지어 음수 형태가 다수 발견됩니다. 이 부분은 활용하는데 아무런 문제가 없는 것인가요??

문제 2. IOU 코드는 첨부해주신 코드를 그대로 사용해봤는데 아래와 같이 class별 98개의 confidence를 담고 있는 결과가 이상합니다. 즉, 내림차순 정렬 이후에 bbox max 와 bbox cur에 대한 IOU 결과값이 아래와 같이 나옵니다.

ex) class 0 : aeroplane

[1324.24121094    0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.            0.            0.

    0.            0.            0.        ]

class1 : bicycle

[1051.5657959    0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.           0.           0.

    0.           0.           0.       ]

아마 첨부해주신 코드의 문제라기 보다 제가 짠 코드에서 활용이 잘못된 것일 확률이 높으니

코드 링크를 첨부해 봅니다. 

https://github.com/pervin0527/pervinco/blob/master/source/3.object_detection/non_maximum_suppresion.py

답변 1

답변을 작성해보세요.

0

안녕하세요~. 반갑습니다.

문제 1. 7*7*30 model ouput 값이 0 ~ 1 사이 값이 아닙니다.

center x, center y값부터 softmax metrics 값까지 0 ~ 1 사이 값이 아니며,

심지어 음수 형태가 다수 발견됩니다. 이 부분은 활용하는데 아무런 문제가 없는 것인가요??
->
해당 부분은 아마 모델이 적합한 파라미터에 수렴하지 않아서 발생한 현상으로 예상됩니다. 문제 자체는 없으나 pascal voc 20개 레이블에 대해서 직접 적합한 파라미터까지 수렴하도록 학습시키긴 쉽지 않으실겁니다.
따라서 pascal voc 20개 레이블에 대해 실험을 진행해보고 싶으시면 yolo 저자가 공개한 파라미터를 사용하는게 좋을 것 같습니다.

논문에서는 많은 시행착오와 대량의 data augmentation을 이용해서 pascal voc 20개 레이블에 수렴한 파라미터를 찾은 다음에 이를 오픈소스로 공개하였습니다. 다만 해당 공개한 weight가 자체 제작한 darknet 형태로 되어있어서
tensorflow로 해당 weight를 사용해보고 싶으시면 darnket weight를 tensorflow weight로 변경해주는 아래 오픈소스 프로젝트 등을 활용해보시는 것을 추천드립니다.

https://github.com/jinyu121/DW2TF

2. 문제 2. IOU 코드는 첨부해주신 코드를 그대로 사용해봤는데 아래와 같이 class별 98개의 confidence를 담고 있는 결과가 이상합니다. 즉, 내림차순 정렬 이후에 bbox max 와 bbox cur에 대한 IOU 결과값이 아래와 같이 나옵니다.
->
포지션 변환과정에서 뭔가 오류가 있으신게 아닐까 생각됩니다. 강의에서 제공드린 코드의 아래 2가지 부분을 다시 유심히 참조해서 디버깅해보시면 좋을 것 같습니다.
https://github.com/solaris33/YOLO-v1-tf2/blob/main/evaluate.py#L104
https://github.com/solaris33/YOLO-v1-tf2/blob/main/utils.py#L44

감사합니다~.