μ€λ¦¬μν°λ λ°μ΄λ© λ°μ€ μ€λΈμ νΈ κ°μ§
λ°©ν₯μ± λ¬Όμ²΄ κ°μ§λ 물체 κ°μ§λ³΄λ€ ν λ¨κ³ λ λμκ° μ΄λ―Έμ§μμ 물체λ₯Ό λ μ ννκ² μ°Ύμ μ μλλ‘ μΆκ° κ°λλ₯Ό λμ ν©λλ€.
λ°©ν₯μ± κ°μ²΄ κ°μ§κΈ°μ μΆλ ₯μ μ΄λ―Έμ§μμ κ°μ²΄λ₯Ό μ νν λλ¬μΈλ νμ λ κ²½κ³ μμ μ§ν©κ³Ό κ° μμμ λν ν΄λμ€ λ μ΄λΈ λ° μ λ’°λ μ μλ‘ νμλ©λλ€. κ°μ²΄ κ°μ§λ μ₯λ©΄μμ κ΄μ¬ μλ κ°μ²΄λ₯Ό μλ³ν΄μΌ νμ§λ§ κ°μ²΄μ μ νν μμΉλ λͺ¨μμ μ νν μ νμλ μλ κ²½μ°μ μ ν©ν μ νμ λλ€.
ν
YOLOv8 OBB λͺ¨λΈμ -obb
μ λ―Έμ¬, μ¦ yolov8n-obb.pt
μ λν΄ μ¬μ κ΅μ‘μ λ°μμΌλ©° DOTAv1.
Watch: Ultralytics YOLOv8 μ€λ¦¬μν°λ λ°μ΄λ© λ°μ€(YOLOv8-OBB)λ₯Ό μ¬μ©ν κ°μ²΄ κ°μ§ |
Watch: Ultralytics HUBλ₯Ό μ¬μ©νμ¬ YOLOv8-OBBλ‘ κ°μ²΄ κ°μ§ |
μκ°μ μν
OBBλ₯Ό μ¬μ©ν μ λ° κ°μ§ | OBBλ₯Ό μ¬μ©ν μ°¨λ κ°μ§ |
---|---|
λͺ¨λΈ
YOLOv8 DOTAv1 λ°μ΄ν° μΈνΈμμ μ¬μ νμ΅λ OBB λͺ¨λΈμ΄ μ¬κΈ°μ λμ μμ΅λλ€.
λͺ¨λΈμ μ²μ μ¬μ©ν λ μ΅μ Ultralytics 릴리μ€μμ μλμΌλ‘ λ€μ΄λ‘λλ©λλ€.
λͺ¨λΈ | ν¬κΈ° (ν½μ ) |
mAPtest 50 |
μλ CPU ONNX (ms) |
μλ A100 TensorRT (ms) |
맀κ°λ³μ (M) |
FLOPs (B) |
---|---|---|---|---|---|---|
YOLOv8n-obb | 1024 | 78.0 | 204.77 | 3.57 | 3.1 | 23.3 |
YOLOv8s-obb | 1024 | 79.5 | 424.88 | 4.07 | 11.4 | 76.3 |
YOLOv8m-obb | 1024 | 80.5 | 763.48 | 7.61 | 26.4 | 208.6 |
YOLOv8l-obb | 1024 | 80.7 | 1278.42 | 11.83 | 44.5 | 433.8 |
YOLOv8x-obb | 1024 | 81.36 | 1759.10 | 13.23 | 69.5 | 676.7 |
- mAPtest κ°μ λ¨μΌ λͺ¨λΈ λ©ν°μ€μΌμΌμμ DOTAv1 ν
μ€νΈ λ°μ΄ν° μΈνΈ.
볡μ λμyolo val obb data=DOTAv1.yaml device=0 split=test
μ ν΄λ¦νκ³ λ³ν©λ κ²°κ³Όλ₯Ό λ€μ μ£Όμλ‘ μ μΆν©λλ€. DOTA νκ°. - μλ λ₯Ό μ¬μ©νμ¬ DOTAv1 val μ΄λ―Έμ§μ λν νκ· κ°μ Amazon EC2 P4d μΈμ€ν΄μ€.
볡μ λμyolo val obb data=DOTAv1.yaml batch=1 device=0|cpu
κΈ°μ°¨
κΈ°μ°¨ YOLOv8n-obbμμ dota8.yaml
λ°μ΄ν°μ
μ μ΄λ―Έμ§ ν¬κΈ° 640μΌλ‘ 100κ°μ μν¬ν¬μ λν΄ μ¬μ©ν©λλ€. μ¬μ© κ°λ₯ν μΈμμ μ 체 λͺ©λ‘μ κ΅¬μ± νμ΄μ§λ‘ μ΄λν©λλ€.
μ
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n-obb.yaml") # build a new model from YAML
model = YOLO("yolov8n-obb.pt") # load a pretrained model (recommended for training)
model = YOLO("yolov8n-obb.yaml").load("yolov8n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo obb train data=dota8.yaml model=yolov8n-obb.yaml epochs=100 imgsz=640
# Start training from a pretrained *.pt model
yolo obb train data=dota8.yaml model=yolov8n-obb.pt epochs=100 imgsz=640
# Build a new model from YAML, transfer pretrained weights to it and start training
yolo obb train data=dota8.yaml model=yolov8n-obb.yaml pretrained=yolov8n-obb.pt epochs=100 imgsz=640
λ°μ΄ν° μ§ν© νμ
OBB λ°μ΄ν°μ νμμ λ°μ΄ν°μ κ°μ΄λμμ μμΈν νμΈν μ μμ΅λλ€.
Val
Validate trained YOLOv8n-obb model accuracy on the DOTA8 dataset. No arguments are needed as the model
κ΅μ‘ μ μ§ data
λ° μΈμλ₯Ό λͺ¨λΈ μμ±μΌλ‘ μ¬μ©ν©λλ€.
μ
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n-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 contains map50-95(B) of each category
μμΈ‘
νμ΅λ YOLOv8n-obb λͺ¨λΈμ μ¬μ©νμ¬ μ΄λ―Έμ§μ λν μμΈ‘μ μ€νν©λλ€.
μ
μ 체 보기 predict
λͺ¨λ μΈλΆ μ 보μμ μμΈ‘ νμ΄μ§λ‘ μ΄λν©λλ€.
λ΄λ³΄λ΄κΈ°
YOLOv8n-obb λͺ¨λΈμ ONNX, CoreML λ±κ³Ό κ°μ λ€λ₯Έ νμμΌλ‘ λ΄λ³΄λ λλ€.
μ
μ¬μ© κ°λ₯ν YOLOv8-obb λ΄λ³΄λ΄κΈ° νμμ μλ νμ λμ μμ΅λλ€. λ΄λ³΄λ΄λ νμμ format
μΈμ, μ¦ format='onnx'
λλ format='engine'
. λ΄λ³΄λΈ λͺ¨λΈμμ μ§μ μμΈ‘νκ±°λ μ ν¨μ±μ κ²μ¬ν μ μμ΅λλ€. yolo predict model=yolov8n-obb.onnx
. λ΄λ³΄λ΄κΈ°κ° μλ£λ ν λͺ¨λΈμ λν μ¬μ© μκ° νμλ©λλ€.
νμ | format μΈμ |
λͺ¨λΈ | λ©νλ°μ΄ν° | μΈμ |
---|---|---|---|---|
PyTorch | - | yolov8n-obb.pt |
β | - |
TorchScript | torchscript |
yolov8n-obb.torchscript |
β | imgsz , optimize , batch |
ONNX | onnx |
yolov8n-obb.onnx |
β | imgsz , half , dynamic , simplify , opset , batch |
OpenVINO | openvino |
yolov8n-obb_openvino_model/ |
β | imgsz , half , int8 , batch |
TensorRT | engine |
yolov8n-obb.engine |
β | imgsz , half , dynamic , simplify , workspace , int8 , batch |
CoreML | coreml |
yolov8n-obb.mlpackage |
β | imgsz , half , int8 , nms , batch |
TF SavedModel | saved_model |
yolov8n-obb_saved_model/ |
β | imgsz , keras , int8 , batch |
TF GraphDef | pb |
yolov8n-obb.pb |
β | imgsz , batch |
TF Lite | tflite |
yolov8n-obb.tflite |
β | imgsz , half , int8 , batch |
TF Edge TPU | edgetpu |
yolov8n-obb_edgetpu.tflite |
β | imgsz |
TF.js | tfjs |
yolov8n-obb_web_model/ |
β | imgsz , half , int8 , batch |
PaddlePaddle | paddle |
yolov8n-obb_paddle_model/ |
β | imgsz , batch |
NCNN | ncnn |
yolov8n-obb_ncnn_model/ |
β | imgsz , half , batch |
μ 체 보기 export
μΈλΆ μ 보μμ λ΄λ³΄λ΄κΈ° νμ΄μ§λ‘ μ΄λν©λλ€.
μμ£Ό 묻λ μ§λ¬Έ
OBB(μ€λ¦¬μν°λ λ°μ΄λ© λ°μ€)λ 무μμ΄λ©° μΌλ° λ°μ΄λ© λ°μ€μ μ΄λ»κ² λ€λ₯Έκ°μ?
OBB(μ€λ¦¬μν°λ λ°μ΄λ© λ°μ€)λ μ΄λ―Έμ§μμ κ°μ²΄μ μμΉ μ νλλ₯Ό λμ΄κΈ° μν΄ μΆκ° κ°λλ₯Ό ν¬ν¨ν©λλ€. μΆμ΄ μ λ ¬λ μ§μ¬κ°νμΈ μΌλ° λ°μ΄λ© λ°μ€μ λ¬λ¦¬ OBBλ κ°μ²΄μ λ°©ν₯μ λ μ λ§λλ‘ νμ ν μ μμ΅λλ€. μ΄λ ν곡 λλ μμ± μ΄λ―Έμ§μ κ°μ΄ μ νν κ°μ²΄ λ°°μΉκ° νμν μ ν리μΌμ΄μ μ νΉν μ μ©ν©λλ€(λ°μ΄ν° μΈνΈ κ°μ΄λ).
μ¬μ©μ μ§μ λ°μ΄ν° μ§ν©μ μ¬μ©νμ¬ YOLOv8n-obb λͺ¨λΈμ νλ ¨νλ €λ©΄ μ΄λ»κ² νλμ?
μ¬μ©μ μ§μ λ°μ΄ν° μ§ν©μΌλ‘ YOLOv8n-obb λͺ¨λΈμ νλ ¨νλ €λ©΄ Python λλ CLI μ μ¬μ©νμ¬ μλ μμ λ₯Ό λ°λ₯΄μΈμ:
μ
λ λ§μ κ΅μ‘ μΈμλ₯Ό νμΈνλ €λ©΄ κ΅¬μ± μΉμ μ νμΈνμΈμ.
YOLOv8-OBB λͺ¨λΈ νλ ¨μ μ¬μ©ν μ μλ λ°μ΄ν° μΈνΈλ 무μμΈκ°μ?
YOLOv8-OBB λͺ¨λΈμ DOTAv1κ³Ό κ°μ λ°μ΄ν° μΈνΈμ λν΄ μ¬μ νμ΅λμ§λ§, OBBμ©μΌλ‘ ν¬λ§·λ λͺ¨λ λ°μ΄ν° μΈνΈλ₯Ό μ¬μ©ν μ μμ΅λλ€. OBB λ°μ΄ν° μΈνΈ νμμ λν μμΈν μ 보λ λ°μ΄ν° μΈνΈ κ°μ΄λμμ νμΈν μ μμ΅λλ€.
YOLOv8-OBB λͺ¨λΈμ ONNX νμμΌλ‘ λ΄λ³΄λ΄λ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
YOLOv8-OBB λͺ¨λΈμ ONNX νμμΌλ‘ λ΄λ³΄λ΄λ λ°©λ²μ Python λλ CLI μ μ¬μ©νμ¬ κ°λ¨νκ² μνν μ μμ΅λλ€:
μ
λ΄λ³΄λ΄κΈ° νμ λ° μμΈν λ΄μ©μ λ΄λ³΄λ΄κΈ° νμ΄μ§λ₯Ό μ°Έμ‘°νμΈμ.
YOLOv8n-obb λͺ¨λΈμ μ νμ±μ μ΄λ»κ² κ²μ¦νλμ?
YOLOv8n-obb λͺ¨λΈμ μ ν¨μ±μ κ²μ¬νλ €λ©΄ μλμ κ°μ΄ Python λλ CLI λͺ λ Ήμ μ¬μ©ν μ μμ΅λλ€:
μ
Val μΉμ μμ μ 체 μ ν¨μ± κ²μ¬ μΈλΆ μ 보λ₯Ό νμΈνμΈμ.