π νλ‘μ νΈ κ°μ
μ΄λ² νλ‘μ νΈλ 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λ‘λ λ³νν΄λ릴 μ μμ΄μ!
λ΅κΈ λ¨κΈ°κΈ°