์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

OBB๊ฐ€ ํฌํ•จ๋œ DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ

DOTA๋Š” ํ•ญ๊ณต ์ด๋ฏธ์ง€์—์„œ ๋ฌผ์ฒด ํƒ์ง€๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ์ „๋ฌธ ๋ฐ์ดํ„ฐ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ ์‹œ๋ฆฌ์ฆˆ์—์„œ ์‹œ์ž‘๋œ ์ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” OBB(Oriented Bounding Box)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ•ญ๊ณต ์žฅ๋ฉด์„ ์บก์ฒ˜ํ•œ ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

DOTA ํด๋ž˜์Šค ๋น„์ฃผ์–ผ

์ฃผ์š” ๊ธฐ๋Šฅ

  • 800 ร— 800์—์„œ 20,000 ร— 20,000 ํ”ฝ์…€์— ์ด๋ฅด๋Š” ๋‹ค์–‘ํ•œ ์„ผ์„œ์™€ ํ”Œ๋žซํผ์—์„œ ์ˆ˜์ง‘ํ•œ ์ด๋ฏธ์ง€ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.
  • 18๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ์— ๊ฑธ์ณ 170๋งŒ ๊ฐœ ์ด์ƒ์˜ ์˜ค๋ฆฌ์—”ํ‹ฐ๋“œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ์Šค์ผ€์ผ ์˜ค๋ธŒ์ ํŠธ ๊ฐ์ง€ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค๋Š” ์ „๋ฌธ๊ฐ€๊ฐ€ ์ž„์˜์˜ ์‚ฌ๋ณ€ํ˜•(8๋””์˜ต์…˜)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ถ•์ฒ™, ๋ฐฉํ–ฅ ๋ฐ ๋ชจ์–‘์˜ ๊ฐ์ฒด๋ฅผ ์บก์ฒ˜ํ•˜์—ฌ ์ฃผ์„์„ ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ ๋ฒ„์ „

DOTA-v1.0

  • 15๊ฐœ์˜ ๊ณตํ†ต ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • 2,806๊ฐœ์˜ ์ด๋ฏธ์ง€์™€ 188,282๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถ„ํ•  ๋น„์œจ: ๊ต์œก์šฉ 1/2, ๊ฒ€์ฆ์šฉ 1/6, ํ…Œ์ŠคํŠธ์šฉ 1/3.

DOTA-v1.5

  • DOTA-v1.0๊ณผ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์•„์ฃผ ์ž‘์€ ์ธ์Šคํ„ด์Šค(10ํ”ฝ์…€ ๋ฏธ๋งŒ)์—๋„ ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ ์นดํ…Œ๊ณ ๋ฆฌ ์ถ”๊ฐ€: "์ปจํ…Œ์ด๋„ˆ ํฌ๋ ˆ์ธ".
  • ์ด 403,318๊ฐœ์˜ ์ธ์Šคํ„ด์Šค.
  • ํ•ญ๊ณต ์ด๋ฏธ์ง€์˜ ๋ฌผ์ฒด ๊ฐ์ง€์— ๊ด€ํ•œ DOAI ์ฑŒ๋ฆฐ์ง€ 2019๋ฅผ ์œ„ํ•ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

DOTA-v2.0

  • Google ์ง€๊ตฌ, GF-2 ์œ„์„ฑ ๋ฐ ๊ธฐํƒ€ ํ•ญ๊ณต ์ด๋ฏธ์ง€์—์„œ ์ˆ˜์ง‘ํ•œ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.
  • 18๊ฐœ์˜ ๊ณตํ†ต ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • 11,268๊ฐœ์˜ ์ด๋ฏธ์ง€์™€ ๋ฌด๋ ค 1,793,658๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค: "๊ณตํ•ญ" ๋ฐ "ํ—ฌ๊ธฐ์žฅ".
  • ์ด๋ฏธ์ง€ ๋ถ„ํ• :
    • ๊ต์œก: 1,830๊ฐœ ์ด๋ฏธ์ง€, 268,627๊ฐœ ์ธ์Šคํ„ด์Šค.
    • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ: 593๊ฐœ ์ด๋ฏธ์ง€, 81,048๊ฐœ ์ธ์Šคํ„ด์Šค.
    • ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœ: 2,792๊ฐœ ์ด๋ฏธ์ง€, 353,346๊ฐœ ์ธ์Šคํ„ด์Šค.
    • ํ…Œ์ŠคํŠธ ์ฑŒ๋ฆฐ์ง€: 6,053๊ฐœ ์ด๋ฏธ์ง€, 1,090,637๊ฐœ ์ธ์Šคํ„ด์Šค.

๋ฐ์ดํ„ฐ ์„ธํŠธ ๊ตฌ์กฐ

DOTA๋Š” OBB ๊ฐ์ฒด ๊ฐ์ง€ ๊ณผ์ œ์— ๋งž๊ฒŒ ๊ตฌ์กฐํ™”๋œ ๋ ˆ์ด์•„์›ƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

  • ์ด๋ฏธ์ง€: ๋‹ค์–‘ํ•œ ์ง€ํ˜•๊ณผ ๊ตฌ์กฐ๋ฌผ์„ ์ดฌ์˜ํ•œ ๋ฐฉ๋Œ€ํ•œ ๊ณ ํ•ด์ƒ๋„ ํ•ญ๊ณต ์ด๋ฏธ์ง€ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.
  • ์˜ค๋ฆฌ์—”ํ‹ฐ๋“œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค: ๋ฐฉํ–ฅ์— ๊ด€๊ณ„์—†์ด ๊ฐœ์ฒด๋ฅผ ๋‘˜๋Ÿฌ์‹ธ๋Š” ํšŒ์ „๋œ ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ ์ฃผ์„์œผ๋กœ ๋น„ํ–‰๊ธฐ, ์„ ๋ฐ•, ๊ฑด๋ฌผ๊ณผ ๊ฐ™์€ ๊ฐœ์ฒด๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

DOTA๋Š” ํ•ญ๊ณต ์ด๋ฏธ์ง€ ๋ถ„์„์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๋งž์ถคํ™”๋œ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๊ณ  ํ‰๊ฐ€ํ•˜๋Š” ๋ฒค์น˜๋งˆํฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. OBB ์ฃผ์„์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ํ•ญ๊ณต ์ด๋ฏธ์ง€์˜ ๋‰˜์•™์Šค์— ๋งž๋Š” ํŠน์ˆ˜ํ•œ ๋ฌผ์ฒด ๊ฐ์ง€ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋…ํŠนํ•œ ๊ณผ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์„ธํŠธ YAML

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๊ตฌ์„ฑ์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” YAML(๋˜ ๋‹ค๋ฅธ ๋งˆํฌ์—… ์–ธ์–ด) ํŒŒ์ผ์ด ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. DOTA v1 ๋ฐ DOTA v1.5์˜ ๊ฒฝ์šฐ Ultralytics ์—์„œ ๋‹ค์Œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. DOTAv1.yaml ๊ทธ๋ฆฌ๊ณ  DOTAv1.5.yaml ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. ์ด๋Ÿฌํ•œ ํŒŒ์ผ๊ณผ DOTA v2์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ DOTA์˜ ๊ณต์‹ ์ €์žฅ์†Œ ๋ฐ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

DOTAv1.yaml

# Ultralytics YOLO ๐Ÿš€, AGPL-3.0 license
# DOTA 1.0 dataset https://captain-whu.github.io/DOTA/index.html for object detection in aerial images by Wuhan University
# Documentation: https://docs.ultralytics.com/datasets/obb/dota-v2/
# Example usage: yolo train model=yolov8n-obb.pt data=DOTAv1.yaml
# parent
# โ”œโ”€โ”€ ultralytics
# โ””โ”€โ”€ datasets
#     โ””โ”€โ”€ dota1  โ† downloads here (2GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/DOTAv1 # dataset root dir
train: images/train # train images (relative to 'path') 1411 images
val: images/val # val images (relative to 'path') 458 images
test: images/test # test images (optional) 937 images

# Classes for DOTA 1.0
names:
  0: plane
  1: ship
  2: storage tank
  3: baseball diamond
  4: tennis court
  5: basketball court
  6: ground track field
  7: harbor
  8: bridge
  9: large vehicle
  10: small vehicle
  11: helicopter
  12: roundabout
  13: soccer ball field
  14: swimming pool

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/DOTAv1.zip

DOTA ์ด๋ฏธ์ง€ ๋ถ„ํ• 

DOTA ๋ฐ์ดํ„ฐ์…‹์„ ํ•™์Šต์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ณ ํ•ด์ƒ๋„์˜ ์›๋ณธ DOTA ์ด๋ฏธ์ง€๋ฅผ 1024x1024 ํ•ด์ƒ๋„์˜ ์ด๋ฏธ์ง€๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฉ€ํ‹ฐ์Šค์ผ€์ผ ๋ฐฉ์‹์œผ๋กœ ํ•™์Šต์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ๋ถ„ํ• 

from ultralytics.data.split_dota import split_test, split_trainval

# split train and val set, with labels.
split_trainval(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)
# split test set, without labels.
split_test(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)

์‚ฌ์šฉ๋ฒ•

DOTA v1 ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์ˆ˜์˜ ์ „์ฒด ๋ชฉ๋ก์€ ํ•ญ์ƒ ๋ชจ๋ธ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฒฝ๊ณ 

DOTAv1 ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๋ชจ๋“  ์ด๋ฏธ์ง€์™€ ๊ด€๋ จ ์ฃผ์„์€ ํ•™์ˆ ์  ๋ชฉ์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ์—…์  ์‚ฌ์šฉ์€ ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ œ์ž‘์ž์˜ ์˜์‚ฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์กด์ค‘ํ•ด ์ฃผ์‹œ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

์—ด์ฐจ ์˜ˆ์‹œ

from ultralytics import YOLO

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

# Train the model on the DOTAv1 dataset
results = model.train(data="DOTAv1.yaml", epochs=100, imgsz=1024)
# Train a new YOLO11n-OBB model on the DOTAv1 dataset
yolo obb train data=DOTAv1.yaml model=yolo11n-obb.pt epochs=100 imgsz=1024

์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋ฐ ์ฃผ์„

๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ํ•œ ๋ˆˆ์— ๋ณด๋ฉด ๊ทธ ๊นŠ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋ฐ์ดํ„ฐ ์„ธํŠธ ์ƒ˜ํ”Œ ์ด๋ฏธ์ง€

  • DOTA ์˜ˆ์‹œ: ์ด ์Šค๋ƒ…์ƒท์€ ํ•ญ๊ณต ์žฅ๋ฉด์˜ ๋ณต์žก์„ฑ๊ณผ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐฉํ–ฅ์œผ๋กœ ์บก์ฒ˜ํ•˜๋Š” ์˜ค๋ฆฌ์—”ํ‹ฐ๋“œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ฃผ์„์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

ํ’๋ถ€ํ•œ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ํ•ญ๊ณต ์ด๋ฏธ์ง€์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌผ์ฒด ๊ฐ์ง€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ท€์ค‘ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ธ์šฉ ๋ฐ ๊ฐ์‚ฌ

DOTA๋ฅผ ํ™œ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๊ด€๋ จ ์—ฐ๊ตฌ ๋…ผ๋ฌธ์„ ์ธ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค:

@article{9560031,
  author={Ding, Jian and Xue, Nan and Xia, Gui-Song and Bai, Xiang and Yang, Wen and Yang, Michael and Belongie, Serge and Luo, Jiebo and Datcu, Mihai and Pelillo, Marcello and Zhang, Liangpei},
  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
  title={Object Detection in Aerial Images: A Large-Scale Benchmark and Challenges},
  year={2021},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/TPAMI.2021.3117983}
}

์ด ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ํ๋ ˆ์ดํŒ…ํ•˜๋Š” ๋ฐ ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ธ DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ ์ œ์ž‘ํŒ€์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ์˜ ๋ง์”€์„ ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์„ธํŠธ์™€ ๊ทธ ๋‰˜์•™์Šค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๊ณต์‹ DOTA ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ž€ ๋ฌด์—‡์ด๋ฉฐ ํ•ญ๊ณต ์ด๋ฏธ์ง€์—์„œ ๋ฌผ์ฒด ๊ฐ์ง€์— ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋Š” ํ•ญ๊ณต ์ด๋ฏธ์ง€์—์„œ ๋ฌผ์ฒด ํƒ์ง€์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ „๋ฌธ ๋ฐ์ดํ„ฐ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ•ญ๊ณต ์žฅ๋ฉด์˜ ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” OBB(Oriented Bounding Box)๊ฐ€ ํŠน์ง•์ž…๋‹ˆ๋‹ค. 170๋งŒ ๊ฐœ์˜ ์ฃผ์„๊ณผ 18๊ฐœ์˜ ์นดํ…Œ๊ณ ๋ฆฌ์— ๊ฑธ์ณ ๋ฌผ์ฒด์˜ ๋ฐฉํ–ฅ, ํฌ๊ธฐ, ๋ชจ์–‘์ด ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์‹œ, ํ™˜๊ฒฝ ๋ชจ๋‹ˆํ„ฐ๋ง, ์žฌ๋‚œ ๊ด€๋ฆฌ ๋“ฑ์— ์‚ฌ์šฉ๋˜๋Š” ํ•ญ๊ณต ์ด๋ฏธ์ง€ ๋ถ„์„์— ์ ํ•ฉํ•œ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ์ด๋ฏธ์ง€์˜ ๋‹ค์–‘ํ•œ ๋ฐฐ์œจ๊ณผ ๋ฐฉํ–ฅ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋‚˜์š”?

DOTA๋Š” ๋ฐฉํ–ฅ์— ๊ด€๊ณ„์—†์ด ๊ฐ์ฒด๋ฅผ ์บก์Šํ™”ํ•˜๋Š” ํšŒ์ „๋œ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” OBB(Oriented Bounding Box)๋ฅผ ์ฃผ์„์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํฌ๊ธฐ๊ฐ€ ์ž‘๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฐ๋„์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 800 ร— 800์—์„œ 20,000 ร— 20,000 ํ”ฝ์…€์— ์ด๋ฅด๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ์˜ ๋ฉ€ํ‹ฐ์Šค์ผ€์ผ ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ์ž‘์€ ๋ฌผ์ฒด์™€ ํฐ ๋ฌผ์ฒด๋ฅผ ๋ชจ๋‘ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

DOTA ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋ ค๋ฉด ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ Ultralytics YOLO ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:

์—ด์ฐจ ์˜ˆ์‹œ

from ultralytics import YOLO

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

# Train the model on the DOTAv1 dataset
results = model.train(data="DOTAv1.yaml", epochs=100, imgsz=1024)
# Train a new YOLO11n-OBB model on the DOTAv1 dataset
yolo obb train data=DOTAv1.yaml model=yolo11n-obb.pt epochs=100 imgsz=1024

DOTA ์ด๋ฏธ์ง€๋ฅผ ๋ถ„ํ• ํ•˜๊ณ  ์‚ฌ์ „ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ DOTA ์ด๋ฏธ์ง€ ๋ถ„ํ• ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

DOTA-v1.0, DOTA-v1.5, DOTA-v2.0์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • DOTA-v1.0: 2,806๊ฐœ์˜ ์ด๋ฏธ์ง€์— ๊ฑธ์ณ 15๊ฐœ์˜ ๊ณตํ†ต ์นดํ…Œ๊ณ ๋ฆฌ์™€ 188,282๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ํ•™์Šต, ๊ฒ€์ฆ, ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
  • DOTA-v1.5: ๋งค์šฐ ์ž‘์€ ์ธ์Šคํ„ด์Šค(10ํ”ฝ์…€ ๋ฏธ๋งŒ)์— ์ฃผ์„์„ ๋‹ฌ๊ณ  ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ์ธ '์ปจํ…Œ์ด๋„ˆ ํฌ๋ ˆ์ธ'์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด 403,318๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ DOTA-v1.0์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • DOTA-v2.0: 11,268๊ฐœ์˜ ์ด๋ฏธ์ง€์™€ 1,793,658๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google ์ง€๊ตฌ ๋ฐ GF-2 ์œ„์„ฑ์˜ ์ฃผ์„์œผ๋กœ ๋”์šฑ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” "๊ณตํ•ญ" ๋ฐ "ํ—ฌ๊ธฐ์žฅ"๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋น„๊ต ๋ฐ ์ถ”๊ฐ€ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋ฒ„์ „ ์„น์…˜์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๊ต์œก์šฉ ๊ณ ํ•ด์ƒ๋„ DOTA ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

๋งค์šฐ ํด ์ˆ˜ ์žˆ๋Š” DOTA ์ด๋ฏธ์ง€๋Š” ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ๊ต์œก์„ ์œ„ํ•ด ๋” ์ž‘์€ ํ•ด์ƒ๋„๋กœ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ด๋ฏธ์ง€๋ฅผ ๋ถ„ํ• ํ•˜๋Š” Python ์Šค๋‹ˆํŽซ์ž…๋‹ˆ๋‹ค:

์˜ˆ

from ultralytics.data.split_dota import split_test, split_trainval

# split train and val set, with labels.
split_trainval(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)
# split test set, without labels.
split_test(
    data_root="path/to/DOTAv1.0/",
    save_dir="path/to/DOTAv1.0-split/",
    rates=[0.5, 1.0, 1.5],  # multiscale
    gap=500,
)

์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ํ›ˆ๋ จ ํšจ์œจ์„ฑ๊ณผ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ง€์นจ์€ DOTA ์ด๋ฏธ์ง€ ๋ถ„ํ•  ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“…1 ๋…„ ์ „ ์ƒ์„ฑ๋จ โœ๏ธ 1๊ฐœ์›” ์ „ ์—…๋ฐ์ดํŠธ๋จ

๋Œ“๊ธ€