μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°

OBB(μ˜€λ¦¬μ—”ν‹°λ“œ λ°”μš΄λ”© λ°•μŠ€) 데이터 μ„ΈνŠΈ κ°œμš”

OBB(λ°©ν–₯μ„± 경계 μƒμž)둜 μ •λ°€ν•œ 객체 감지 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜λ €λ©΄ μ² μ €ν•œ 데이터 μ„ΈνŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€. 이 κ°€μ΄λ“œμ—μ„œλŠ” Ultralytics YOLO λͺ¨λΈκ³Ό ν˜Έν™˜λ˜λŠ” λ‹€μ–‘ν•œ OBB 데이터 μ„ΈνŠΈ ν˜•μ‹μ— λŒ€ν•΄ μ„€λͺ…ν•˜λ©°, ν˜•μ‹ λ³€ν™˜μ„ μœ„ν•œ ꡬ쑰, μ‘μš© 및 방법에 λŒ€ν•œ μΈμ‚¬μ΄νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ§€μ›λ˜λŠ” OBB 데이터 μ„ΈνŠΈ ν˜•μ‹

YOLO OBB ν˜•μ‹

YOLO OBB ν˜•μ‹μ€ 0μ—μ„œ 1 μ‚¬μ΄λ‘œ μ •κ·œν™”λœ μ’Œν‘œλ‘œ λ„€ λͺ¨μ„œλ¦¬ 점을 κΈ°μ€€μœΌλ‘œ 경계 μƒμžλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 이 ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€:

class_index, x1, y1, x2, y2, x3, y3, x4, y4

λ‚΄λΆ€μ μœΌλ‘œλŠ” YOLO μ—μ„œ 손싀 및 좜λ ₯을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. xywhr ν˜•μ‹μœΌλ‘œ λ°”μš΄λ”© λ°•μŠ€μ˜ 쀑심점(xy), λ„ˆλΉ„, 높이 및 νšŒμ „μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

OBB ν˜•μ‹ 예제

의 예 *.txt 클래슀 μ˜€λΈŒμ νŠΈκ°€ ν¬ν•¨λœ μœ„ μ΄λ―Έμ§€μ˜ λ ˆμ΄λΈ” νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€. 0 λŠ” λ‹€μŒκ³Ό 같이 보일 수 μžˆμŠ΅λ‹ˆλ‹€:

0 0.780811 0.743961 0.782371 0.74686 0.777691 0.752174 0.776131 0.749758

μ‚¬μš©λ²•

μ΄λŸ¬ν•œ OBB ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λΈμ„ ν•™μŠ΅μ‹œν‚€λ €λ©΄ λ‹€μŒκ³Ό 같이 ν•˜μ„Έμš”:

예

from ultralytics import YOLO

# Create a new YOLOv8n-OBB model from scratch
model = YOLO('yolov8n-obb.yaml')

# Train the model on the DOTAv2 dataset
results = model.train(data='DOTAv1.yaml', epochs=100, imgsz=640)
# Train a new YOLOv8n-OBB model on the DOTAv2 dataset
yolo detect train data=DOTAv1.yaml model=yolov8n.pt epochs=100 imgsz=640

μ§€μ›λ˜λŠ” 데이터 μ„ΈνŠΈ

ν˜„μž¬ μ˜€λ¦¬μ—”ν‹°λ“œ λ°”μš΄λ”© λ°•μŠ€κ°€ μžˆλŠ” λ‹€μŒ 데이터 집합이 μ§€μ›λ©λ‹ˆλ‹€:

  • DOTA v2: 항곡 μ΄λ―Έμ§€μ—μ„œ 물체 감지λ₯Ό μœ„ν•œ λŒ€κ·œλͺ¨ 데이터 μ„ΈνŠΈ(DOTA) 버전 2λŠ” 항곡 κ΄€μ μ—μ„œμ˜ 감지λ₯Ό κ°•μ‘°ν•˜λ©° 170만 개의 μΈμŠ€ν„΄μŠ€μ™€ 11,268개의 이미지가 ν¬ν•¨λœ λ°©ν–₯μ„± λ°”μš΄λ”© λ°•μŠ€λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • DOTA8: 전체 DOTA 데이터 μ„ΈνŠΈμ˜ μž‘μ€ 8개 이미지 ν•˜μœ„ μ§‘ν•©μœΌλ‘œ, μ›Œν¬ν”Œλ‘œ ν…ŒμŠ€νŠΈ 및 OBB κ΅μœ‘μ— λŒ€ν•œ 지속적 톡합(CI) 검사에 μ ν•©ν•©λ‹ˆλ‹€. ultralytics 리포지토리에 μ €μž₯ν•©λ‹ˆλ‹€.

자체 OBB 데이터 μ„ΈνŠΈ ν†΅ν•©ν•˜κΈ°

λ°©ν–₯이 μ§€μ •λœ λ°”μš΄λ”© λ°•μŠ€κ°€ μžˆλŠ” 자체 데이터셋을 λ„μž…ν•˜λ €λŠ” 경우 μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 'YOLO OBB ν˜•μ‹'κ³Ό ν˜Έν™˜λ˜λŠ”μ§€ ν™•μΈν•˜μ„Έμš”. μ–΄λ…Έν…Œμ΄μ…˜μ„ 이 ν•„μˆ˜ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜κ³  ν•΄λ‹Ή YAML ꡬ성 νŒŒμΌμ— 경둜, 클래슀 및 클래슀 이름을 μžμ„Ένžˆ μ„€λͺ…ν•˜μ„Έμš”.

라벨 ν˜•μ‹ λ³€ν™˜

DOTA λ°μ΄ν„°μ„ΈνŠΈ ν˜•μ‹μ„ YOLO OBB ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜κΈ°

이 슀크립트λ₯Ό μ‚¬μš©ν•˜μ—¬ DOTA λ°μ΄ν„°μ„ΈνŠΈ ν˜•μ‹μ—μ„œ YOLO OBB ν˜•μ‹μœΌλ‘œ λ ˆμ΄λΈ”μ„ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

예

from ultralytics.data.converter import convert_dota_to_yolo_obb

convert_dota_to_yolo_obb('path/to/DOTA')

이 λ³€ν™˜ λ©”μ»€λ‹ˆμ¦˜μ€ DOTA ν˜•μ‹μ˜ 데이터 μ„ΈνŠΈμ— μ€‘μš”ν•œ 역할을 ν•˜λ©°, Ultralytics YOLO OBB ν˜•μ‹κ³Ό μΌμΉ˜ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

데이터 μ„ΈνŠΈμ™€ λͺ¨λΈμ˜ ν˜Έν™˜μ„±μ„ κ²€μ¦ν•˜κ³  ν•„μš”ν•œ ν˜•μ‹ κ·œμΉ™μ„ μ€€μˆ˜ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€. μ μ ˆν•˜κ²Œ κ΅¬μ‘°ν™”λœ 데이터 μ„ΈνŠΈλŠ” λ°©ν–₯이 μ§€μ •λœ 경계 μƒμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 효율적인 객체 감지 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜λŠ” 데 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.



생성 2023-11-12, μ—…λ°μ΄νŠΈ 2024-01-25
μž‘μ„±μž: glenn-jocher (6)

λŒ“κΈ€