OBB๊ฐ ํฌํจ๋ DOTA ๋ฐ์ดํฐ ์ธํธ
DOTA๋ ํญ๊ณต ์ด๋ฏธ์ง์์ ๋ฌผ์ฒด ํ์ง๋ฅผ ๊ฐ์กฐํ๋ ์ ๋ฌธ ๋ฐ์ดํฐ ์ธํธ์ ๋๋ค. DOTA ๋ฐ์ดํฐ ์ธํธ ์๋ฆฌ์ฆ์์ ์์๋ ์ด ๋ฐ์ดํฐ ์ธํธ๋ OBB(Oriented Bounding Box)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ํญ๊ณต ์ฅ๋ฉด์ ์บก์ฒํ ์ฃผ์์ด ๋ฌ๋ฆฐ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- 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 ๋ฐ์ดํฐ ์ธํธ์ ๋ชจ๋ ์ด๋ฏธ์ง์ ๊ด๋ จ ์ฃผ์์ ํ์ ์ ๋ชฉ์ ์ผ๋ก๋ ์ฌ์ฉํ ์ ์์ง๋ง ์์ ์ ์ฌ์ฉ์ ๊ธ์ง๋์ด ์์ต๋๋ค. ๋ฐ์ดํฐ ์ธํธ ์ ์์์ ์์ฌ๋ฅผ ์ดํดํ๊ณ ์กด์คํด ์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
์ด์ฐจ ์์
์ํ ๋ฐ์ดํฐ ๋ฐ ์ฃผ์
๋ฐ์ดํฐ ์งํฉ์ ํ ๋์ ๋ณด๋ฉด ๊ทธ ๊น์ด๋ฅผ ์ ์ ์์ต๋๋ค:
- 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 ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค:
์ด์ฐจ ์์
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 ์ด๋ฏธ์ง ๋ถํ ์น์ ์ ์ฐธ์กฐํ์ธ์.