YOLOv5 이상 모델에 대해 학습 및 추론성능에 관한 의문점과 이슈 정리

Train & Test Image Size

  • YOLO 에서는 입력 이미지의 비율을 고려하여 기본 입력사이즈에 맞게 리사이징함(부족한 부분을 블랙으로 채움)
  • 현재 YOLO v5 이상 버전은 기본 입력 사이즈는 --img 640
  • 데이터셋에 작은 개체의 양이 많으면 높은 해상도로 세팅하여 학습하는 것이 효과적일 수 있다
  • 훈련에 사용된 이미지 사이즈와 추론 이미지 사이즈가 동일한 것이 성능이 가장 좋다
  • 즉, --img 1280 으로 학습한 경우, 추론도 --img 1280으로 학습하는 것이 좋다

Epoch

  • 기본 300이상 추천하지만 loss에 따라 적당히

Batch Size

  • --batch-size 는 하드웨어가 허용하는 최대 크기를 사용하는 것이 좋다?

Backgrond Images

  • Background Image 는 라벨링 파일 없이 이미지만 디렉터리에 추가하면됨
  • FP(오탐지)를 줄이기 위한 수단
  • 전체 데이터셋의 0~10% 를 권장
  • COCO 데이터셋의 경우 1000개의 배경이미지를 보유하고 있으며 이는 전체의 1%

ONNX

  • ONNX 포맷으로 변환 시 성능저하가 있는가?
  • 일반적으로 가중치 파일을 ONNX 형식으로 변환하면 성능에 큰 저하는 없다. ONNX(Open Neural Network Exchange)는 다양한 딥러닝 프레임워크 간에 모델을 공유하고 사용하기 쉽도록 설계된 개방형 표준. ONNX는 모델 아키텍처를 기술하는 것이 아니라 모델의 가중치 및 연산을 표현한다.
  • 따라서 가중치를 ONNX 형식으로 변환할 때는 대부분의 경우 성능 손실이 거의 없다.

음수 좌표 출력

  • YOLO 예측은 박스의 중심좌표를 찾는 것이므로 예측 결과의 박스도 입력 해상도를 초과하는 값이 나올 수 있다.

torch 버전

  • torch 버전에 따라 evaluation(inference) 결과가 다르게 나오는 것을 확인
  • tensor의 정밀도 등의 차이인 것으로 추정

RGB vs BGR

Q: 학습 시 입력 이미지 데이터들은 RGB 포맷으로 읽어 학습이 될텐데, 추론 시 OpenCV를 통해 이미지를 불러왔다면 RGB로 변경 후 입력으로 넣어야 하는지? A: 맞다. YOLOv8은 학습 시 이미지가 RGB 형식일 것을 가정함. 데이터로더에서 RGB로 자동으로 변환 후 학습함. 추론 시 OpenCV로 이미지를 읽었다면, cvtColor 함수를 통해 RGB로 변환 후 입력에 넣어라. 또, 추론 시 model() 함수에 이미지 path를 직접 넣으면 YOLO는 알아서 RGB 포맷으로 불러온다. Q: 이상하다. model() 이미지 path를 직접 넣는 것과 OpenCV로 불러온 이미지를 넣는 것이 결과가 동일하다. ultralytics yolov8 BGR or RGB? · GitHub 을 참고해라. A: 1)모델에 전달되는 Numpy 배열은 RGB 형식이어야 합니다. 2)직접 파일 경로를 사용하면 자동으로 형식 문제가 해결됩니다. 3)numpy 배열의 경우 BGR(OpenCV 기본값)을 RGB로 변환해야 한다는 가정이 실제로 맞습니다! Q: 아니라고. 니말대로면 이미지 path를 직접 넣은 것(자동으로 RGB로 로드)과 OpenCV로 불러온 이미지(BGR)를 변환없이 모델에 넣은 것과 결과가 달라야하는데 결과가 같다고. (테스트 실제 결과 같음) A: 좋은 관찰이다. YOLOv8은 필요한 경우 내부적으로 BGR에서 RGB로 변환을 처리하기 때문이다. path와 BGR 배열 모두에서 일관된 결과를 얻는다면 그대로 사용해도 된다. Q: 실제로 모델 추론 전에 BGR을 다시 RGB로 변경하는 또 다른 전처리 모듈을 발견했다. YOLO가 RGB 포맷의 이미지를 가정한다는 이전 코멘트는 틀렸을 것. 코드를 살펴보니, path나 opencv-ndarray에 상관없이 이미지를 받으면 YOLO에서는 무조건 BGR 포맷으로 변환한다. 그 뒤 포워드 패스 직전 RGB로 변경함.

  • 결론 : path나 opencv-ndarray에 상관없이 이미지를 받으면 YOLO에서는 무조건 BGR 포맷으로 변환한다. 그 뒤 포워드 패스 직전 RGB로 변경함.

참고