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

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 ν˜•μ‹κ³Ό μΌμΉ˜ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

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

자주 λ¬»λŠ” 질문

OBB(μ˜€λ¦¬μ—”ν‹°λ“œ λ°”μš΄λ”© λ°•μŠ€)λž€ 무엇이며 Ultralytics YOLO λͺ¨λΈμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λ‚˜μš”?

μ˜€λ¦¬μ—”ν‹°λ“œ λ°”μš΄λ”© λ°•μŠ€(OBB)λŠ” λ°”μš΄λ”© λ°•μŠ€ μ£Όμ„μ˜ ν•œ μœ ν˜•μœΌλ‘œ, μƒμžλ₯Ό νšŒμ „ν•˜μ—¬ 좕에 μ •λ ¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ κ°μ§€λ˜λŠ” 물체에 더 κ°€κΉκ²Œ μ •λ ¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 물체가 이미지 좕에 μ •λ ¬λ˜μ§€ μ•Šμ„ 수 μžˆλŠ” 항곡 λ˜λŠ” μœ„μ„± μ΄λ―Έμ§€μ—μ„œ 특히 μœ μš©ν•©λ‹ˆλ‹€. Ultralytics YOLO λͺ¨λΈμ—μ„œ OBBλŠ” YOLO OBB ν˜•μ‹μ˜ λ„€ λͺ¨μ„œλ¦¬ 점으둜 ν‘œμ‹œλ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 경계 μƒμžκ°€ 물체에 더 잘 λ§žλ„λ‘ νšŒμ „ν•  수 μžˆμœΌλ―€λ‘œ 물체λ₯Ό 더 μ •ν™•ν•˜κ²Œ 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.

Ultralytics YOLOv8 μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ κΈ°μ‘΄ DOTA 데이터 μ„ΈνŠΈ λ ˆμ΄λΈ”μ„ YOLO OBB ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

DOTA 데이터 μ„ΈνŠΈ λ ˆμ΄λΈ”μ„ YOLO OBB ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. convert_dota_to_yolo_obb ν•¨μˆ˜λ₯Ό Ultralytics μ—μ„œ λ³€ν™˜ν•˜λ©΄ Ultralytics YOLO λͺ¨λΈκ³Όμ˜ ν˜Έν™˜μ„±μ„ 보μž₯ν•˜μ—¬ ν–₯μƒλœ 객체 감지 κΈ°λŠ₯을 μœ„ν•œ OBB κΈ°λŠ₯을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ κ°„λ‹¨ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€:

from ultralytics.data.converter import convert_dota_to_yolo_obb

convert_dota_to_yolo_obb("path/to/DOTA")

이 μŠ€ν¬λ¦½νŠΈλŠ” DOTA 주석을 YOLO-ν˜Έν™˜ ν˜•μ‹μœΌλ‘œ λ‹€μ‹œ ν¬λ§·ν•©λ‹ˆλ‹€.

λ‚΄ 데이터 μ§‘ν•©μ—μ„œ λ°©ν–₯μ„± 경계 μƒμž(OBB)λ₯Ό μ‚¬μš©ν•˜μ—¬ YOLOv8 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

OBBλ₯Ό μ‚¬μš©ν•˜μ—¬ YOLOv8 λͺ¨λΈμ„ ν•™μŠ΅μ‹œν‚€λ €λ©΄ 데이터 μ„ΈνŠΈκ°€ YOLO OBB ν˜•μ‹μΈμ§€ ν™•μΈν•œ λ‹€μŒ Ultralytics APIλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λΈμ„ ν•™μŠ΅μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒμ€ Python 와 CLI μ—μ„œ 예제λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

예

from ultralytics import YOLO

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

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

μ΄λ ‡κ²Œ ν•˜λ©΄ λͺ¨λΈμ΄ μƒμ„Έν•œ OBB 주석을 ν™œμš©ν•˜μ—¬ 감지 정확도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ Ultralytics YOLO λͺ¨λΈμ—μ„œ OBB κ΅μœ‘μ— μ§€μ›λ˜λŠ” 데이터 μ„ΈνŠΈλŠ” λ¬΄μ—‡μΈκ°€μš”?

ν˜„μž¬ Ultralytics μ—μ„œ μ§€μ›ν•˜λŠ” OBB ꡐ윑용 데이터 μ„ΈνŠΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • DOTA-v2: 이 데이터 μ„ΈνŠΈμ—λŠ” λ°©ν–₯이 μ§€μ •λœ 경계 μƒμžκ°€ μžˆλŠ” 170만 개의 μΈμŠ€ν„΄μŠ€μ™€ 11,268개의 이미지가 ν¬ν•¨λ˜μ–΄ 있으며, 주둜 항곡 물체 탐지에 쀑점을 두고 μžˆμŠ΅λ‹ˆλ‹€.
  • DOTA8: ν…ŒμŠ€νŠΈ 및 지속적 톡합(CI) 검사에 μ‚¬μš©λ˜λŠ” DOTA 데이터 μ§‘ν•©μ˜ 더 μž‘μ€ 8개의 이미지 ν•˜μœ„ μ§‘ν•©μž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 데이터 μ„ΈνŠΈλŠ” 항곡 및 μœ„μ„± 이미지 뢄석과 같이 OBBκ°€ μƒλ‹Ήν•œ 이점을 μ œκ³΅ν•˜λŠ” μ‹œλ‚˜λ¦¬μ˜€μ— 맞게 μ‘°μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ°©ν–₯μ„± λ°”μš΄λ”© λ°•μŠ€κ°€ μžˆλŠ” 자체 데이터 집합을 YOLOv8 κ΅μœ‘μ— μ‚¬μš©ν•  수 있으며, μ‚¬μš©ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λ‚˜μš”?

예, λ°©ν–₯이 μ§€μ •λœ λ°”μš΄λ”© λ°•μŠ€κ°€ μžˆλŠ” 자체 데이터 집합을 YOLOv8 κ΅μœ‘μ— μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 데이터 μ„ΈνŠΈ 주석이 λ„€ λͺ¨μ„œλ¦¬ μ§€μ μœΌλ‘œ λ°”μš΄λ”© λ°•μŠ€λ₯Ό μ •μ˜ν•˜λŠ” YOLO OBB ν˜•μ‹μœΌλ‘œ λ³€ν™˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 데이터 μ„ΈνŠΈ 경둜, 클래슀 및 기타 ν•„μš”ν•œ μ„ΈλΆ€ 정보λ₯Ό μ§€μ •ν•˜λŠ” YAML ꡬ성 νŒŒμΌμ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 데이터셋을 λ§Œλ“€κ³  κ΅¬μ„±ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ μ§€μ›λ˜λŠ” 데이터셋 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.



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

λŒ“κΈ€