Ultralytics YOLO를 활용한 회전 바운딩 박스 탐지#
회전 객체 탐지는 객체를 이미지에서 더 정확하게 찾을 수 있도록 추가 각도를 도입하여 표준 객체 탐지보다 한 단계 더 발전한 방식입니다.
회전 객체 탐지기의 출력은 이미지의 객체를 정확하게 둘러싸는 회전 바운딩 박스 집합과 각 박스에 대한 클래스 레이블 및 confidence score입니다. 회전 바운딩 박스는 객체가 다양한 각도로 나타나는 경우에 특히 유용합니다. 예를 들어 항공 이미지에서는 기존의 축 정렬 바운딩 박스가 불필요한 배경을 포함할 수 있습니다.
YOLO26 OBB 모델은 -obb 접미사를 사용합니다. 즉, yolo26n-obb.pt이며 DOTAv1로 사전 학습됩니다.
Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢
시각적 샘플#
| OBB를 사용한 선박 탐지 | OBB를 사용한 차량 탐지 |
|---|---|
![]() | ![]() |
모델#
여기에는 YOLO26 사전 학습 OBB 모델이 표시되어 있으며, DOTAv1 데이터셋으로 사전 학습되었습니다.
모델은 처음 사용할 때 최신 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.4 | 14.8 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 56.7 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 184.9 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 232.4 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 520.1 |
- mAPtest 값은 DOTAv1 데이터셋에서 단일 모델 멀티스케일 방식으로 측정한 값입니다.
yolo val obb data=DOTAv1.yaml device=0 split=test nms=False로 재현하고 병합된 결과를 DOTA 평가에 제출합니다. - 속도는 Amazon EC2 P4d 인스턴스를 사용하여 DOTAv1 검증 이미지에서 평균을 낸 값입니다.
yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False로 재현합니다. - Params 및 FLOPs 값은 Conv/BatchNorm 융합 및 사용되지 않는 탐지 브랜치 제거 이후의 융합된 모델 기준입니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 나타낼 수 있습니다.
DOTAv1 예비 결과는 미출시 YOLO27 미리보기를 참조하세요.
학습#
DOTA8 데이터셋에서 이미지 크기 640, 100 epochs 동안 YOLO26n-obb를 학습합니다. 사용 가능한 인수의 전체 목록은 구성 페이지를 참조하세요.
OBB와 180° 회전된 OBB는 동일하므로 회전은 180°를 법으로 정의되며 박스에는 방향이 없습니다. 학습 레이블은 긴 변 형식으로 정규화됩니다. 박스 너비 w은 더 긴 변이고, 각도는 양의 x축에서 w 변의 방향까지 시계 방향으로 측정되며, [-π/4, 3π/4) ([-45°, 135°))에 라디안 단위로 저장됩니다. 예측은 정규화되지 않으므로 예측된 박스에서 짧은 변이 w로 보고될 수 있습니다. 결과 출력을 참조하세요. [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 데이터셋 형식에 대한 자세한 내용은 데이터셋 가이드에서 확인할 수 있습니다. YOLO OBB 형식은 좌표가 0과 1 사이로 정규화된 네 모서리 점을 사용하여 바운딩 박스를 지정하며, 다음 구조를 따릅니다. Ultralytics Platform 주석 도구는 전용 회전 바운딩 박스 그리기 도구를 통해 OBB 레이블을 지원합니다.
class_index x1 y1 x2 y2 x3 y3 x4 y4내부적으로 YOLO는 xywhr 형식으로 손실과 출력을 처리하며, 이 형식은 바운딩 박스의 중심점(xy), 너비, 높이 및 회전을 나타냅니다.
검증#
DOTA8 데이터셋에서 학습된 YOLO26n-obb 모델의 정확도를 검증합니다. 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") # validate on the DOTA8 dataset
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 FNPrediction#
학습된 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 mode 세부 정보는 Predict 페이지를 참조하십시오.
결과 출력#
회전 바운딩 박스 탐지는 이미지당 하나의 Results 객체를 반환합니다. 기본 예측 필드는 result.obb이며,
탐지된 각 객체의 회전 박스, 클래스 ID 및 confidence score를 포함합니다.
| Attribute | 유형 | Shape | 설명 |
|---|---|---|---|
result.obb | OBB | (N) | 방향이 지정된 박스입니다. |
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,) | Confidence score입니다. |
레이블은 긴 변 규칙에 따라 정규화되지만 예측은 정규화되지 않으므로 result.obb.xywhr에서 회전이 짧은 변을 기준으로 측정된 w이 h보다 작게 보고될 수 있습니다. 두 형식 모두 동일한 직사각형을 나타내므로 어느 경우든 result.obb.xyxyxyxy은 올바릅니다. 다운스트림 코드에서 긴 변 형식이 필요한 경우 모서리를 다시 변환하세요. 이때 박스 파라미터를 다시 작성하면 모서리 순서가 주기적으로 변경될 수 있다는 점에 유의하세요.
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)모든 task에서 task-specific Results field를 확인하려면 Predict Results by Task 섹션을 참조하십시오.
내보내기#
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 Argument | 모델 | Metadata | Arguments |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n-obb.aimodel | ✅ | imgsz, batch, quantize |
nms=None은(는) 외부 NMS에 대해 기본적으로 원시 출력을 사용합니다. 사용 가능한 NMS 프리 헤드를 선택하려면 nms=False을(를) 설정하세요. 지원되지 않는 형식은 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True(으)로 NMS를 임베드할 수 있는 형식을 식별합니다.
전체 export 세부 정보는 Export 페이지를 참조하십시오.
실제 애플리케이션#
YOLO26을 사용한 OBB 탐지는 다양한 산업 분야에서 여러 실용적인 활용 사례를 제공합니다.
- 해양 및 항만 관리: 다양한 각도의 선박을 탐지하여 선대 관리 및 모니터링을 수행합니다.
- 도시 계획: 항공 이미지에서 건물과 인프라를 분석합니다.
- 농업: 드론 영상에서 작물과 농업 장비를 모니터링합니다.
- 에너지 부문: 다양한 방향의 태양광 패널과 풍력 터빈을 검사합니다.
- 교통: 다양한 시점에서 도로와 주차장의 차량을 추적합니다.
이러한 활용 사례는 어떤 각도에서든 객체에 정밀하게 맞출 수 있는 OBB의 장점을 활용하므로 기존 바운딩 박스보다 더 정확한 탐지를 제공합니다.
FAQ#
회전 바운딩 박스(OBB)는 이미지에서 객체 위치를 더 정확하게 파악할 수 있도록 추가 각도를 포함합니다. 축 정렬 직사각형인 일반 바운딩 박스와 달리 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 모델은 Python 또는 CLI를 사용하여 간단하게 ONNX 형식으로 내보낼 수 있습니다.
예시from ultralytics import YOLO # Load a model model = YOLO("yolo26n-obb.pt") # Export the model model.export(format="onnx")추가 내보내기 형식과 자세한 내용은 내보내기 페이지를 참조하세요.
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 섹션을 참조하세요.

