🌊 프로젝트 개요
이번 프로젝트는 YOLOv8을 이용한 해양 쓰레기 객체 탐지 모델 개발 과정을 담고 있습니다.
Pascal VOC 형식의 XML 라벨을 YOLO 포맷으로 변환하고, 10개의 클래스에 대한 정밀 탐지 모델을 학습한 뒤,
실제 영상(.mp4
)에 적용해 바운딩 박스로 탐지 결과를 시각화합니다.
🎯 목표
- 해양 쓰레기를 구성하는 10개 클래스를 YOLOv8 기반으로 탐지
- mAP 기준 90% 이상 성능 달성
- 실제 영상을 탐지해
.mp4
로 저장
🧱 데이터 구조
project/
├── images/ # 원본 이미지 (.jpg)
├── annotations/ # VOC 형식 라벨 (.xml)
├── labels_yolo/ # 변환된 YOLO 라벨 (.txt)
├── dataset/ # train/val 분리 구조
├── data.yaml # YOLO 학습 설정
├── convert_voc_to_yolotxt.py
├── split_testNval.py
├── test01.py # 추론 + 영상 저장
└── best.pt # 훈련 완료 모델
📦 클래스 정의 (10개)
class_map = {
"tire": 0,
"wood": 1,
"rope": 2,
"spring fish trap": 3,
"bundle of ropes": 4,
"circular fish trap": 5,
"eel fish trap": 6,
"fish net": 7,
"rectangular fish trap": 8,
"other objects": 9
}
🔁 라벨 변환 (XML → YOLO 텍스트)
python convert_voc_to_yolotxt.py
→ labels_yolo/
폴더에 YOLO 포맷 .txt
생성
🧪 데이터셋 분할
python split_testNval.py
→ dataset/images/train
, dataset/images/val
형태로 구성
⚙️ data.yaml 설정
path: ./dataset
train: images/train
val: images/val
names:
0: tire
1: wood
...
9: other objects
🧠 YOLOv8 학습
yolo detect train \
model=yolov8m.pt \
data=data.yaml \
epochs=100 \
imgsz=640 \
device=0
✅ 모델 크기: yolov8m.pt
✅ 환경: Python 3.12, torch 2.6.0, NVIDIA H100 80GB
📈 최종 성능 결과
전체 성능 | 값 |
---|---|
mAP@50 | 0.920 |
mAP@50–95 | 0.782 |
Precision | 0.91 |
Recall | 0.792 |
🏆 클래스별 성능 하이라이트
클래스명 | Precision | Recall | mAP@50 | mAP@50–95 |
---|---|---|---|---|
tire | 0.975 | 0.989 | 0.994 | 0.967 |
eel fish trap | 0.962 | 0.977 | 0.992 | 0.926 |
circular fish trap | 0.955 | 0.969 | 0.985 | 0.962 |
spring fish trap | 0.972 | 0.978 | 0.978 | 0.951 |
fish net | 0.922 | 0.895 | 0.930 | 0.738 |
rope | 0.675 | 0.506 | 0.595 | 0.428 |
other objects | 1.000 | 0.000 | 0.995 | 0.497 |
🎥 영상 추론 및 저장
python test01.py
- 입력:
seetrash_val_01.mp4
- 출력:
seetrash_val_01_detected.mp4
- 모델의 바운딩 박스만 출력 (라벨/점수 없음)
- 박스 색상: 빨강, 굵기: 4
🧠 개념 정리
지표 | 의미 |
---|---|
Recall | 실제 쓰레기 중 모델이 탐지한 비율 |
Precision | 탐지된 것 중 실제 쓰레기인 비율 |
mAP | 클래스별 Precision-Recall 조합의 평균값 |
mAP@50 | IoU ≥ 0.5 기준 성능 |
mAP@50–95 | 0.5 ~ 0.95 IoU 기준 평균 |
✅ 결과 정리
- 정확도·속도 모두 우수한 YOLOv8m 모델로 10 클래스 학습 성공
- mAP@50 92%, mAP@50–95 78% → 실전 활용 충분
- 추론 결과 영상 생성까지 완료
🙋♀️ 누구나 시작하려면?
pip install ultralytics opencv-python torch torchvision typing_extensions pyyaml
또는:
python3 -m venv venv
source venv/bin/activate
pip install ultralytics opencv-python torch
💬 마무리
YOLOv8은 성능과 사용성 모두 훌륭합니다.
직접 라벨링하고 학습한 데이터셋을 가지고 수질 모니터링, 해양 정화 자동화, 환경 교육 콘텐츠로도 확장 가능성이 매우 큽니다.
필요하시면 이 모델을 FastAPI로 배포하거나 웹 서비스로 구성하는 예제도 도와드릴 수 있습니다.
여기까지 따라오셨다면, 여러분도 객체 탐지 실전 운영이 가능합니다! 🚀
필요하시면 이 포스팅을 .md
, .pdf
, Notion, 블로그용 HTML로도 변환해드릴 수 있어요!