YOLO 학습 데이터 구성과 전처리 방법

YOLO를 활용해 객체 탐지 모델을 개발하던 중, 모델 설정보다 더 많은 시간을 들이게 된 부분이 바로 학습 데이터 구성과 전처리였습니다. 프로젝트 초기에는 단순히 이미지를 모으고 라벨을 붙이면 될 거라 생각했지만, 실제로는 정확한 라벨링, 디렉토리 정리, 클래스 관리 등 세부적인 작업이 모델 성능에 큰 영향을 주었습니다. 이 글에서는 YOLO 학습 데이터를 구성하는 방법과 필요한 전처리 절차를 단계적으로 설명 하도록 하겠습니다.
YOLO 학습 데이터 구성 방법
YOLO 모델은 이미지 파일과 이에 대응하는 라벨 파일을 쌍으로 사용하여 학습합니다. 라벨 파일은 텍스트 형식으로 작성되며, 각 줄은 하나의 객체 정보를 담고 있습니다. 라벨 한 줄은 총 다섯 개의 항목으로 구성되며, 순서대로 클래스 번호, 중심 좌표 x, 중심 좌표 y, 박스의 너비, 박스의 높이를 입력합니다. 이때 모든 좌표와 크기 정보는 이미지 해상도 기준의 정규화된 값, 즉 0에서 1 사이의 실수로 표현되어야 합니다.
예를 들어 클래스 번호가 0이고 객체의 중심이 이미지 정중앙에 있으며, 폭과 높이가 이미지 크기의 절반이라면, 해당 라벨 파일에는 ‘0 0.5 0.5 0.5 0.5’ 와 같은 형식의 라인이 포함됩니다. 하나의 이미지에 여러 객체가 있을 경우 각 객체마다 한 줄씩 작성하며, 라벨 파일의 이름은 이미지 파일 이름과 동일하게 맞춰야 YOLO 학습 파이프라인에서 자동으로 매칭됩니다.
데이터를 구성할 때는 훈련용 이미지와 검증용 이미지, 그리고 각각에 해당하는 라벨 파일을 분리하여 정리해야 합니다. 일반적으로 'images/train', 'images/val' 폴더에 이미지를, 'labels/train', 'labels/val' 폴더에 라벨 파일을 배치합니다. 이를 통해 학습 시 데이터셋을 구분할 수 있으며, 학습 스크립트가 해당 경로를 참조해 자동으로 데이터를 불러올 수 있습니다.
정확한 라벨링과 전처리의 중요성
객체 탐지 모델은 바운딩 박스와 클래스 정보를 정확히 학습해야 하기 때문에, 라벨링의 정확도가 전체 성능을 결정한다고 해도 과언이 아닙니다. 바운딩 박스가 객체의 윤곽을 지나치게 벗어나거나 너무 좁게 잡힐 경우, 모델이 객체의 실제 크기를 잘못 학습하게 되어 탐지 오류가 발생합니다. 따라서 라벨링 작업은 신중하게 진행해야 하며, 가능하면 라벨링 완료 후 전수 검토를 수행하거나 팀 내에서 교차 검토를 진행하는 것이 좋습니다.
라벨링 작업은 수동으로 진행하기 어렵기 때문에, 대부분 전용 툴을 사용합니다. 대표적으로 LabelImg, Roboflow, Makesense, CVAT 등이 있으며, 이들 툴은 YOLO 형식으로 라벨을 저장하는 기능을 기본적으로 지원합니다. 특히 Roboflow는 웹 기반으로 작동하며, 라벨링 후 자동으로 학습용 데이터셋을 구성하고 포맷까지 맞춰주는 기능을 제공하여 매우 유용합니다.
전처리 과정에서는 우선 이미지의 크기를 모델 입력에 맞게 조정하는 것이 필요합니다. YOLO는 일반적으로 640x640 또는 416x416 크기의 정사각형 이미지를 입력으로 받기 때문에, 원본 이미지가 비정사각형일 경우 적절히 크기를 조정하거나 여백을 추가하는 방식으로 비율을 유지해야 합니다. 이 과정을 거치지 않으면 이미지가 왜곡되어 학습에 부정적인 영향을 미칠 수 있습니다.
또한 이미지의 색상 값을 정규화하는 것도 필수입니다. 대부분의 프레임워크에서는 픽셀 값을 0~255 범위에서 0~1 사이로 조정하며, 이 작업은 이미지 배열을 float32 형식으로 변환한 후 수행됩니다. 이러한 전처리는 PyTorch, TensorFlow와 같은 프레임워크에서 텐서 변환 함수로 쉽게 구현할 수 있습니다.
데이터 증강과 클래스 관리 전략
YOLO 모델은 입력 데이터의 다양성에 따라 일반화 능력이 크게 달라집니다. 이를 보완하기 위해 데이터 증강 기법을 적극 활용해야 합니다. 데이터 증강은 원본 이미지를 회전, 반전, 확대, 색상 변화, 블러 처리 등으로 다양하게 변형하여 학습 데이터를 확장하는 방식입니다. 이를 통해 모델이 다양한 상황에서도 객체를 안정적으로 탐지할 수 있도록 학습시킬 수 있습니다.
YOLOv5와 YOLOv8은 기본적으로 다양한 증강 기법을 내장하고 있으며, 특히 Mosaic 증강은 네 장의 이미지를 하나로 합쳐 새로운 데이터를 만들어주는 방식으로, 객체 간의 관계나 배경에 대한 학습 효과를 극대화합니다. 다만 과도한 증강은 학습 안정성을 떨어뜨릴 수 있기 때문에 실험을 통해 적절한 비율을 설정하는 것이 중요합니다.
클래스 관리는 또 다른 핵심 요소입니다. 학습에 사용할 클래스는 미리 리스트로 정의해야 하며, 이 순서에 따라 라벨 파일의 클래스 번호가 지정됩니다. 예를 들어 ‘person’, ‘car’, ‘dog’ 순서로 클래스가 정의되었다면, 각각은 0, 1, 2번 클래스로 라벨 파일에 반영되어야 합니다. 클래스 이름과 번호가 불일치하거나 중복될 경우 탐지 결과가 왜곡될 수 있습니다.
또한 클래스 간 불균형이 심한 경우, 데이터셋을 재조정하거나 가중치 설정을 통해 특정 클래스의 학습 효과를 높여야 합니다. 불균형이 심한 상태에서 모델을 그대로 학습시키면, 빈도수가 낮은 클래스는 아예 탐지되지 않을 수도 있기 때문입니다. 학습 전에 클래스 분포를 시각화하거나, 소수 클래스에 대한 샘플 수를 늘리는 전략을 함께 고려하는 것이 좋습니다.
결론 – 정확하고 체계적인 데이터 구성의 중요성
YOLO 모델을 통한 객체 탐지는 빠르고 효율적인 결과를 제공하지만, 그 성능은 데이터 품질에 크게 의존합니다. 정확한 라벨링, 포맷 일관성, 클래스 관리, 전처리 전략 등은 학습 성능을 결정짓는 핵심 요소이며, 실무 프로젝트에서는 모델 구조보다 오히려 이 부분에서 더 많은 시간이 소요되기도 합니다.
제가 진행했던 프로젝트에서도 라벨 파일 포맷 오류나 클래스 누락으로 인해 학습 초기 결과가 매우 불안정했습니다. 하지만 전체 데이터 구성을 점검하고 재정리한 후에는 동일한 모델 구조로도 정확도가 크게 향상되었고, 실시간 영상에서도 안정적인 탐지가 가능했습니다.
YOLO를 처음 사용하는 분들이라면 모델을 바로 학습시키기 전에, 데이터셋의 구조와 품질을 충분히 검토하고 준비하는 데 시간을 들이시는 것을 권장드립니다. 데이터가 제대로 준비되어 있다면, 그 어떤 최신 모델보다도 안정적이고 예측 가능한 성능을 얻을 수 있습니다.
댓글
댓글 쓰기