Ultralytics YOLO27:

Ultralytics YOLO를 활용한 회전 바운딩 박스 탐지#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

회전 객체 탐지는 객체를 이미지에서 더 정확하게 찾을 수 있도록 추가 각도를 도입하여 표준 객체 탐지보다 한 단계 더 발전한 방식입니다.

회전 객체 탐지기의 출력은 이미지의 객체를 정확하게 둘러싸는 회전 바운딩 박스 집합과 각 박스에 대한 클래스 레이블 및 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를 사용한 차량 탐지
OBB를 사용한 선박 탐지OBB를 사용한 차량 탐지

모델#

여기에는 YOLO26 사전 학습 OBB 모델이 표시되어 있으며, DOTAv1 데이터셋으로 사전 학습되었습니다.

모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.

모델크기
(픽셀)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
속도
CPU ONNX
(ms)
속도
T4 TensorRT10
(ms)
파라미터
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.414.8
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.856.7
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2184.9
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6232.4
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6520.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로 재현합니다.
  • ParamsFLOPs 값은 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 FN

Prediction#

학습된 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 box


Watch: 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.obbOBB(N)방향이 지정된 박스입니다.
result.obb.datatorch.float32(N,7/8)신뢰도/클래스가 포함된 원시 회전 박스입니다.
result.obb.xywhrtorch.float32(N,5)xywhr 회전 박스입니다.
result.obb.xyxyxyxytorch.float32(N,4,2)네 개의 모서리 점입니다.
result.obb.conftorch.float32(N,)Confidence score입니다.

레이블은 긴 변 규칙에 따라 정규화되지만 예측은 정규화되지 않으므로 result.obb.xywhr에서 회전이 짧은 변을 기준으로 측정된 wh보다 작게 보고될 수 있습니다. 두 형식 모두 동일한 직사각형을 나타내므로 어느 경우든 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모델MetadataArguments
PyTorch-yolo26n-obb.pt-
TorchScripttorchscriptyolo26n-obb.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgsz, batch, device
MNNmnnyolo26n-obb.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-obb_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-obb_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-obb_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-obb_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-obb_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-obb_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-obb_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-obb_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-obb.aimodelimgsz, 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 모델은 DOTAv1과 같은 데이터셋으로 사전 학습되지만, OBB 형식으로 지정된 모든 데이터셋을 사용할 수 있습니다. OBB 데이터셋 형식에 대한 자세한 내용은 데이터셋 가이드에서 확인할 수 있습니다.

  • 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 섹션을 참조하세요.

댓글