• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

YOLO v3-320, YOLO v3-416, YOLO v3-608 링크 관련

22.04.21 20:18 작성 조회수 620

0

안녕하세요. 매번 좋은 강의해주셔서 감사드립니다.

질문이 한 가지 있습니다.

다크넷 욜로 사이트에 , YOLO v3-320, YOLO v3-416, YOLO v3-608의 weight와 config 링크가 모두 같습니다.

세 모델의 차이는 입력 이미지 크기인데, 입력 이미지 크기를 서로 달리해서 사전 훈련을 했는데도 가중치와 config가 모두 똑같은 것인가요?

 

아울러, 모델에 입력 이미지를 전달할 때 다음과 같이 했습니다.

cv_net_yolo.setInput(cv2.dnn.blobFromImage(img, scalefactor=1/255.0, size=(416, 416), swapRB=True, crop=False))

이떄 size=(416, 416)으로 했는데요, YOLO v3-320, YOLO v3-416, YOLO v3-608의 weight와 config가 모두 같다면(그래서 결국 같은 모델을 불러오는 것이라면), setInput()을 호출할 때 size 파라미터에 (416, 416)을 전달하든 (320, 320) 혹은 (608, 608)을 전달하든 상관 없는 것인가요?

감사합니다 ^^

답변 1

답변을 작성해보세요.

0

안녕하십니까,

1. 다크넷 욜로 사이트에 , YOLO v3-320, YOLO v3-416, YOLO v3-608의 weight와 config 링크가 모두 같습니다.

세 모델의 차이는 입력 이미지 크기인데, 입력 이미지 크기를 서로 달리해서 사전 훈련을 했는데도 가중치와 config가 모두 똑같은 것인가요?

=> 이건 저도 몇달전에 발견한 사항인데, 말씀하신대로 이미지 크기가 다른데 가중치와 config가 동일합니다.  config에 width와 height가 있는데, 이미지 크기가 다르더라도 width와 height로 조절해서 resize후에 모델에 입력하는 것으로 보입니다. 따라서 YOLO v3-320을 적용하려면 width와 height를 320으로 설정하면 됩니다. 

그런데 pretrained 가중치도 동일합니다. 아마 CNN Filter 갯수와 kernel 사이즈는 이미지 사이즈와 상관없이 동일하게 적용하므로 YOLO v3-320, YOLO v3-416, YOLO v3-608 모두 동일하게 적용할 수 있을것으로 보입니다만, (테스트는 저도 해보진 않았습니다) 저도 헷갈리는 부분이 있습니다. 

2. cv_net_yolo.setInput(cv2.dnn.blobFromImage(img, scalefactor=1/255.0, size=(416, 416), swapRB=True, crop=False))

이떄 size=(416, 416)으로 했는데요, YOLO v3-320, YOLO v3-416, YOLO v3-608의 weight와 config가 모두 같다면(그래서 결국 같은 모델을 불러오는 것이라면), setInput()을 호출할 때 size 파라미터에 (416, 416)을 전달하든 (320, 320) 혹은 (608, 608)을 전달하든 상관 없는 것인가요?

=> Opencv DNN은 이미지 사이즈가 416, 416으로 들어오는 걸로 가정하고 Output layer에서 결과를 추출합니다. 그러니까 416이 아닌 이미지가 들어오면 Output layer의 feature map 크기가 달라져서 결과 추출시 오류가 발생합니다.