회전된 경계 상자 객체 탐지
회전된 객체 탐지는 이미지 내 객체를 더 정확하게 찾기 위해 추가적인 각도를 도입함으로써 표준 객체 탐지보다 한 단계 더 나아갑니다.
회전된 객체 탐지기의 출력은 이미지 내 객체를 정밀하게 감싸는 회전된 경계 상자들의 집합이며, 각 상자에 대한 클래스 레이블과 신뢰도 점수가 함께 제공됩니다. 회전된 경계 상자는 항공 이미지와 같이 객체가 다양한 각도로 나타나는 경우에 특히 유용하며, 이때 기존의 축 정렬 경계 상자는 불필요한 배경을 포함할 수 있습니다.
YOLO26 OBB 모델은 -obb 접미사를 사용하며(예: yolo26n-obb.pt), DOTAv1으로 사전 훈련되었습니다.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
시각적 샘플
| OBB를 사용한 선박 탐지 | OBB를 사용한 차량 탐지 |
|---|---|
![]() | ![]() |
모델
여기에 DOTAv1 데이터셋으로 사전 훈련된 YOLO26 사전 훈련 OBB 모델들이 표시되어 있습니다.
모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | mAPtest 50-95(e2e) | mAPtest 50(e2e) | 속도 CPU ONNX (ms) | 속도 T4 TensorRT10 (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-obb | 1024 | 52.4 | 78.9 | 97.7 ± 0.9 | 2.8 ± 0.0 | 2.5 | 14.0 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 55.1 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 183.3 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 230.0 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 516.5 |
- mAPtest 값은 DOTAv1 데이터셋에 대한 단일 모델 다중 스케일 기준입니다.
yolo val obb data=DOTAv1.yaml device=0 split=test를 실행하여 재현하고 병합된 결과를 DOTA 평가에 제출하십시오. - 속도는 Amazon EC2 P4d 인스턴스를 사용하여 DOTAv1 val 이미지에서 평균을 낸 값입니다.
yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu를 실행하여 재현하십시오. - 파라미터 및 FLOPs 값은
model.fuse()후 융합된 모델 기준입니다. 이는 Conv 레이어와 BatchNorm 레이어를 병합하며, end2end 모델의 경우 보조적인 일대다(one-to-many) 감지 헤드를 제거합니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 보일 수 있습니다.
학습(Train)
DOTA8 데이터셋에서 이미지 크기 640으로 100 에폭 동안 YOLO26n-obb를 훈련하십시오. 사용 가능한 인수의 전체 목록은 구성 페이지를 참조하십시오.
OBB 각도는 0~90도(90 미포함) 범위로 제한됩니다. 90도 이상의 각도는 지원되지 않습니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.yaml") # build a new model from YAML
model = YOLO("yolo26n-obb.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)Watch: How to Train Ultralytics YOLO-OBB (Oriented Bounding Boxes) Models on DOTA Dataset using Ultralytics Platform
데이터셋 형식
OBB 데이터셋 형식에 대한 자세한 내용은 데이터셋 가이드에서 확인할 수 있습니다. YOLO OBB 형식은 이 구조에 따라 0과 1 사이로 정규화된 좌표를 가진 4개의 모서리 지점으로 경계 상자를 지정합니다. Ultralytics 플랫폼은 전용 회전된 경계 상자 그리기 도구로 OBB 주석을 지원합니다:
class_index x1 y1 x2 y2 x3 y3 x4 y4
내부적으로 YOLO는 손실과 출력을 xywhr 형식으로 처리하며, 이는 경계 상자의 중심점(xy), 너비, 높이 및 회전을 나타냅니다.
검증(Val)
Validate trained YOLO26n-obb model accuracy on the DOTA8 dataset. No arguments are needed as the model retains its training data and arguments as model attributes.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="dota8.yaml") # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # a list containing mAP50-95(B) for each category
metrics.box.image_metrics # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN예측
훈련된 YOLO26n-obb 모델을 사용하여 이미지에 대한 예측을 수행하십시오.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/boats.jpg") # predict on an image
# Access the results
for result in results:
xywhr = result.obb.xywhr # center-x, center-y, width, height, angle (radians)
xyxyxyxy = result.obb.xyxyxyxy # polygon format with 4-points
names = [result.names[cls.item()] for cls in result.obb.cls.int()] # class name of each box
confs = result.obb.conf # confidence score of each boxWatch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA
predict 모드에 대한 자세한 내용은 예측(Predict) 페이지를 참조하십시오.
결과 출력
회전된 경계 상자 탐지는 이미지당 하나의 Results 객체를 반환합니다. 주요 예측 필드는 result.obb이며, 여기에는 탐지된 각 객체에 대한 회전된 상자, 클래스 ID 및 신뢰도 점수가 포함되어 있습니다.
| 속성 | 유형 | 형태 (Shape) | 설명 |
|---|---|---|---|
result.obb | OBB | (N) | 회전된 박스(Oriented boxes). |
result.obb.data | torch.float32 | (N,7/8) | 신뢰도/클래스를 포함한 원시 회전 박스. |
result.obb.xywhr | torch.float32 | (N,5) | xywhr 회전 박스. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | 4개의 모서리 포인트. |
result.obb.conf | torch.float32 | (N,) | 신뢰도 점수입니다. |
모든 작업 전반에 걸친 작업별 Results 필드에 대해서는 작업별 예측 결과 섹션을 참조하십시오.
내보내기(Export)
YOLO26n-obb 모델을 ONNX, CoreML 등 다른 형식으로 내보내십시오.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")사용 가능한 YOLO26-obb 내보내기 형식은 아래 표에 있습니다. format 인수(예: format='onnx' 또는 format='engine')를 사용하여 모든 형식으로 내보낼 수 있습니다. 내보낸 모델에 대해 직접 예측하거나 검증할 수 있습니다(예: yolo predict model=yolo26n-obb.onnx). 모델 내보내기가 완료된 후 사용 예시가 표시됩니다.
| 형식 | format 인수 | 모델 | 메타데이터 | 인수 |
|---|---|---|---|---|
| PyTorch | - | yolo26n-obb.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-obb.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n-obb.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n-obb_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
전체 export 세부 정보는 Export 페이지를 참조하십시오.
실제 응용 분야
YOLO26을 사용한 OBB 탐지는 다양한 산업 전반에서 수많은 실용적인 응용 분야를 가지고 있습니다:
- 해양 및 항만 관리: 선박 관리 및 모니터링을 위해 다양한 각도에서 선박과 함정을 탐지합니다.
- 도시 계획: 항공 이미지에서 건물과 인프라를 분석합니다.
- 농업: 드론 영상을 통해 농작물과 농기계를 모니터링합니다.
- 에너지 부문: 다양한 방향의 태양광 패널과 풍력 터빈을 검사합니다.
- 교통: 다양한 관점에서 도로와 주차장의 차량을 추적합니다.
이러한 응용 분야는 임의의 각도에서 객체를 정밀하게 맞추는 OBB의 기능 덕분에 기존 경계 상자보다 더 정확한 탐지 결과를 제공합니다.
FAQ
회전된 경계 상자(OBB)란 무엇이며 일반 경계 상자와 어떻게 다른가요?
회전된 경계 상자(OBB)는 이미지 내 객체 위치 정확도를 높이기 위해 추가적인 각도를 포함합니다. 축 정렬 사각형인 일반 경계 상자와 달리, OBB는 객체의 방향에 맞게 회전할 수 있습니다. 이는 항공 또는 위성 이미지와 같이 정밀한 객체 배치가 필요한 응용 분야에 특히 유용합니다(데이터셋 가이드).
사용자 지정 데이터셋을 사용하여 YOLO26n-obb 모델을 어떻게 훈련하나요?
사용자 지정 데이터셋으로 YOLO26n-obb 모델을 훈련하려면 Python 또는 CLI를 사용하여 아래 예제를 따르십시오:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-obb.pt")
# Train the model
results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)더 많은 훈련 인수는 구성 섹션을 확인하십시오.
YOLO26-OBB 모델 훈련에는 어떤 데이터셋을 사용할 수 있나요?
YOLO26-OBB 모델은 DOTAv1과 같은 데이터셋으로 사전 훈련되지만, OBB용으로 형식이 지정된 모든 데이터셋을 사용할 수 있습니다. OBB 데이터셋 형식에 대한 자세한 정보는 데이터셋 가이드에서 확인할 수 있습니다.
YOLO26-OBB 모델을 ONNX 형식으로 어떻게 내보내나요?
Python 또는 CLI를 사용하여 YOLO26-OBB 모델을 ONNX 형식으로 내보내는 것은 간단합니다:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt")
# Export the model
model.export(format="onnx")더 많은 내보내기 형식과 세부 사항은 내보내기 페이지를 참조하십시오.
YOLO26n-obb 모델의 정확도는 어떻게 검증하나요?
YOLO26n-obb 모델을 검증하려면 아래와 같이 Python 또는 CLI 명령을 사용할 수 있습니다:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-obb.pt")
# Validate the model
metrics = model.val(data="dota8.yaml")전체 검증 세부 사항은 Val 섹션을 참조하십시오.

