회전된 바운딩 박스(OBB) Object Detection#
회전된 객체 탐지는 이미지 내의 객체 위치를 더 정확하게 파악하기 위해 각도를 추가하여 표준 객체 탐지보다 한 단계 더 나아갑니다.
회전된 객체 탐지기의 출력은 이미지 내 객체를 정밀하게 둘러싸는 회전된 경계 상자 세트이며, 각 상자에 대한 클래스 레이블과 신뢰도 점수가 함께 제공됩니다. 회전된 경계 상자는 항공 이미지와 같이 객체가 다양한 각도로 나타나는 경우에 특히 유용한데, 이는 기존의 축 정렬 경계 상자가 불필요한 배경을 포함할 수 있기 때문입니다.
YOLO26 OBB 모델은 -obb 접미사를 사용하며(예: yolo26n-obb.pt), DOTAv1에서 사전 학습되었습니다.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
시각적 샘플#
| OBB를 사용한 선박 탐지 | OBB를 사용한 차량 탐지 |
|---|---|
![]() | ![]() |
Models#
여기에 표시된 YOLO26 사전 학습된 OBB 모델은 DOTAv1 데이터셋에서 사전 학습되었습니다.
Models는 첫 사용 시 최신 Ultralytics release에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | 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 evaluation에 제출하세요. - Amazon EC2 P4d 인스턴스를 사용하여 DOTAv1 검증 이미지에서 평균 낸 **속도(Speed)**입니다.
yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu(으)로 재현하세요. - Params 및 FLOPs 값은 Conv 및 BatchNorm 레이어를 병합하고 end2end 모델의 경우 보조 one-to-many 탐지 헤드를 제거하는
model.fuse()이후의 융합 모델 기준입니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 보일 수 있습니다.
학습(Train)#
이미지 크기 640으로 DOTA8 데이터셋에서 100 epochs 동안 YOLO26n-obb를 학습시킵니다. 사용 가능한 전체 인자 목록은 Configuration 페이지를 참조하세요.
OBB와 그 180° 회전은 동일하므로 회전은 180° 모듈로로 정의되며 박스에는 방향이 없습니다. 학습 레이블은 긴 변 형식으로 표준화됩니다. 박스 너비 w은 더 긴 변이고, 각도는 양의 x축에서 w 변의 방향까지 시계 방향으로 측정되며 [-π/4, 3π/4)([-45°, 135°))에 라디안 단위로 저장됩니다. 예측은 표준화되지 않으므로 예측된 박스는 짧은 변을 w(으)로 보고할 수 있습니다. Results Output을 참조하십시오. [0°, 90°) 형식은 정규화된 DOTA 스타일 규칙이며 학습이나 추론 시 적용되지 않습니다.
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 데이터셋 형식에 대한 자세한 내용은 Dataset Guide에서 확인할 수 있습니다. YOLO OBB 형식은 이 구조에 따라 좌표가 0과 1 사이로 정규화된 네 개의 모서리 점으로 바운딩 박스를 지정합니다. Ultralytics Platform annotation은 전용 회전 바운딩 박스 그리기 도구를 사용하여 OBB 레이블을 지원합니다:
class_index x1 y1 x2 y2 x3 y3 x4 y4내부적으로 YOLO는 bounding box의 중심점(xy), 너비, 높이, 회전을 나타내는 xywhr 형식으로 손실과 출력을 처리합니다.
검증(Val)#
DOTA8 데이터셋에서 학습된 YOLO26n-obb 모델 accuracy를 검증합니다. model이 학습된 data 및 인자를 모델 속성으로 유지하므로 인자가 필요하지 않습니다.
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추론(Predict)#
훈련된 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, 신뢰도 점수를 포함합니다.
| 속성 | 유형 | 형태 | 설명 |
|---|---|---|---|
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) | 네 개의 모서리 점입니다. |
result.obb.conf | torch.float32 | (N,) | 신뢰도 점수입니다. |
레이블은 긴 변 규칙으로 표준화되지만 예측은 그렇지 않으므로 result.obb.xywhr은 짧은 변에서 측정한 회전과 함께 h보다 작은 w을 보고할 수 있습니다. 두 형식 모두 동일한 직사각형을 설명하므로 어느 쪽이든 result.obb.xyxyxyxy이 올바릅니다. 다운스트림 코드에서 긴 변 형식이 필요할 때 모서리를 다시 변환하되, 박스 매개변수를 다시 작성하면 모서리 순서가 순환적으로 이동할 수 있음을 유념하세요:
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)모든 작업에 걸친 작업별 Results 필드는 Predict Results by Task 섹션을 참조하십시오.
내보내기(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, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-obb_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-obb.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-obb_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-obb_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
전체 export 세부 정보는 Export 페이지에서 확인하세요.
실제 활용 사례#
YOLO26을 사용한 OBB 탐지는 다양한 산업 분야에서 수많은 실제 응용 사례를 가지고 있습니다.
- 해운 및 항만 관리: fleet management 및 모니터링을 위해 다양한 각도에서 선박과 선박을 감지합니다.
- 도시 계획: 항공 이미지를 통해 건물과 인프라를 분석합니다.
- 농업: 드론 영상을 통해 작물과 농기계를 모니터링합니다.
- 에너지 부문: 다양한 방향의 태양광 패널과 풍력 터빈을 검사합니다.
- 교통: 다양한 관점에서 도로와 주차장의 차량을 추적합니다.
이러한 응용 프로그램은 객체를 모든 각도에서 정확하게 맞추는 OBB의 기능으로 혜택을 보며, 기존의 경계 상자보다 더 정확한 탐지 성능을 제공합니다.
FAQ#
회전된 바운딩 박스(OBB)에는 이미지 내 객체 현지화 정확도를 높이기 위한 추가 각도가 포함됩니다. 축에 정렬된 직사각형인 일반 바운딩 박스와 달리 OBB는 객체의 방향에 더 잘 맞도록 회전할 수 있습니다. 이는 항공 또는 위성 imagery(Dataset Guide)와 같이 정밀한 객체 배치가 필요한 애플리케이션에 특히 유용합니다.
사용자 지정 데이터셋으로 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)더 많은 학습 인자에 대해서는 Configuration 섹션을 확인하세요.
YOLO26-OBB 모델은 DOTAv1과 같은 데이터셋에서 사전 학습되지만, OBB용으로 포맷된 모든 데이터셋을 사용할 수 있습니다. OBB 데이터셋 형식에 대한 자세한 정보는 Dataset Guide에서 확인할 수 있습니다.
Python이나 CLI를 사용하여 YOLO26-OBB 모델을 ONNX 형식으로 내보내는 방법은 간단합니다.
예시from ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")더 많은 내보내기 형식과 세부 정보는 Export 페이지를 참조하세요.
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 섹션을 참조하세요.

