Ultralytics YOLO를 사용한 인스턴스 세그멘테이션#
인스턴스 세그멘테이션은 객체 감지보다 한 단계 더 나아가 이미지 내 개별 객체를 식별하고 이미지의 나머지 부분과 분리합니다.
인스턴스 세그멘테이션 모델의 출력은 이미지 내 각 객체의 윤곽을 나타내는 마스크 또는 컨투어 집합과 각 객체의 클래스 레이블 및 confidence score입니다. 인스턴스 세그멘테이션은 이미지에서 객체가 어디에 있는지뿐만 아니라 정확한 형태까지 알아야 할 때 유용합니다.
Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
YOLO26 세그먼트 모델은 -seg 접미사를 사용합니다. 즉, yolo26n-seg.pt이며 COCO로 사전 학습됩니다.
모델#
여기에는 YOLO26 사전 학습 세그먼트 모델이 나와 있습니다. Detect, Segment 및 Pose 모델은 COCO 데이터셋으로 사전 학습되고, Semantic 모델은 Cityscapes로 사전 학습되며, Classify 모델은 ImageNet 데이터셋으로 사전 학습됩니다.
모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | mAP박스 50-95(e2e) | mAP마스크 50-95(e2e) | 속도 CPU ONNX (ms) | 속도 T4 TensorRT10 (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.3 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.5 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.7 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 140.1 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 314.0 |
- mAPval 값은 COCO val2017 데이터셋에서 단일 모델 및 단일 스케일로 측정한 값입니다.
yolo val segment data=coco.yaml device=0 nms=False로 재현할 수 있습니다. - Speed는 Amazon EC2 P4d 인스턴스를 사용하여 COCO val 이미지에 대해 평균을 낸 값입니다.
yolo val segment data=coco.yaml batch=1 device=0|cpu nms=False로 재현할 수 있습니다. - Params 및 FLOPs 값은 Conv/BatchNorm 융합 및 사용되지 않는 탐지 브랜치 제거 이후의 융합된 모델 기준입니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 나타낼 수 있습니다.
이 checkpoint는 COCO의 80개 클래스를 세그먼트합니다. 재학습 없이 해당 목록에 없는 카테고리를 세그먼트하려면, 클래스를 텍스트 프롬프트, 시각적 예시 또는 기본 제공 vocabulary로 입력받는 YOLOE를 참조하십시오.
COCO 바 및 마스크 예비 결과는 출시되지 않은 YOLO27 미리보기를 참조하십시오.
학습#
COCO8-seg 데이터셋에서 이미지 크기 640으로 100 epochs 동안 YOLO26n-seg를 학습합니다. 사용 가능한 전체 인수 목록은 Configuration 페이지를 참조하십시오.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.yaml") # build a new model from YAML
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Train 페이지에서 전체 train 모드 세부 정보를 확인하십시오. 세그멘테이션 모델은 Ultralytics Platform 클라우드 학습을 사용하여 학습할 수도 있습니다.
데이터셋 형식#
YOLO 세그멘테이션 데이터셋 포맷에 대한 자세한 내용은 Dataset Guide에서 확인할 수 있습니다. 기존 COCO JSON 데이터셋을 YOLO 포맷으로 변환하려면 COCO to YOLO guide에 설명된 대로 내장된 convert_coco 함수를 use_segments=True와 함께 사용하십시오. 또한 다각형 도구와 SAM 기반 스마트 어노테이션을 사용하여 Ultralytics Platform annotation으로 세그멘테이션 마스크를 생성할 수 있습니다.
검증#
COCO8-seg 데이터셋에서 학습된 YOLO26n-seg 모델의 accuracy를 검증합니다. model이 학습 시 사용한 data와 인수를 모델 속성으로 유지하므로 인수가 필요하지 않습니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # 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 for det with precision, recall, F1, TP, FP, and FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # a list containing mAP50-95(M) for each category
metrics.seg.image_metrics # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FNPrediction#
학습된 YOLO26n-seg 모델을 사용하여 이미지에 대한 prediction을 실행합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.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/bus.jpg") # predict on an image
# Access the results
for result in results:
xy = result.masks.xy # mask polygons in pixel coordinates
xyn = result.masks.xyn # normalized mask polygons
masks = result.masks.data # binary masks, shape (N,H,W), dtype torch.uint8전체 predict mode 세부 정보는 Predict 페이지를 참조하십시오.
결과 출력#
YOLO 인스턴스 세그멘테이션은 이미지마다 하나의 Results 객체를 반환합니다. 각 결과에는 객체 수준 prediction이 저장되며, 각 감지된 인스턴스에는 고유한 binary mask, 클래스, confidence 및 box가 있습니다.
| Attribute | 유형 | Shape | 설명 |
|---|---|---|---|
result.masks | Masks | (N) | Instance mask입니다. |
result.masks.data | torch.uint8 | (N,H,W) | Binary mask이며 값은 0 또는 1입니다. |
result.masks.xy | np.float32 | list[(P,2)] | 픽셀 폴리곤입니다. |
result.masks.xyn | np.float32 | list[(P,2)] | 정규화된 폴리곤입니다. |
result.boxes | Boxes | (N) | Instance box/class/confidence입니다. |
result.boxes.cls | torch.float32 | (N,) | Class ID이며, name을 가져오려면 int으로 cast합니다. |
모든 task에서 task-specific Results field를 확인하려면 Predict Results by Task 섹션을 참조하십시오.
Semantic 세그멘테이션과의 차이점#
인스턴스 세그멘테이션은 객체 수준 세그멘테이션입니다. 자동차 두 대는 두 개의 마스크, 두 개의 box 및 두 개의 confidence score를 생성합니다. Semantic 세그멘테이션은 픽셀 수준 분류입니다. 동일한 자동차 두 대는 하나의 이미지 크기 class map에서 동일한 클래스 ID를 가진 픽셀이 되며, 객체별 box, confidence 또는 기본 polygon 목록은 없습니다.
내보내기#
YOLO26n-seg 모델을 ONNX, CoreML 등의 다른 형식으로 export합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")사용 가능한 YOLO26-seg export 형식은 아래 표에 나와 있습니다. format 인수를 사용하여 모든 형식으로 export할 수 있으며, 예를 들면 format='onnx' 또는 format='engine'입니다. export된 모델에서 직접 prediction 또는 validation을 실행할 수도 있으며, 예를 들면 yolo predict model=yolo26n-seg.onnx입니다. export가 완료되면 해당 모델의 사용 예제가 표시됩니다.
CoreML은 정적 형상을 가진 탐지, 객체 세분화 및 포즈 추정을 위해 임베디드 NMS(nms=True)를 지원합니다. 기본 세분화 내보내기(nms=None)는 NMS 처리를 소비자에 위임합니다.
| 형식 | format Argument | 모델 | Metadata | Arguments |
|---|---|---|---|---|
| PyTorch | - | yolo26n-seg.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-seg.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-seg.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-seg_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-seg.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-seg.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-seg.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-seg_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-seg_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-seg.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-seg_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-seg_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-seg_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-seg_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-seg_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-seg_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-seg_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, batch, quantize |
nms=None은(는) 외부 NMS에 대해 기본적으로 원시 출력을 사용합니다. 사용 가능한 NMS 프리 헤드를 선택하려면 nms=False을(를) 설정하세요. 지원되지 않는 형식은 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True(으)로 NMS를 임베드할 수 있는 형식을 식별합니다.
전체 export 세부 정보는 Export 페이지를 참조하십시오.
FAQ#
사용자 정의 데이터셋에서 YOLO26 세그멘테이션 모델을 학습시키려면 먼저 데이터셋을 YOLO 세그멘테이션 포맷으로 준비해야 합니다. 내장된
convert_coco유틸리티를 사용하여 COCO JSON 데이터셋을 변환할 수 있습니다. 데이터셋이 준비되면 Python 또는 CLI 명령어를 사용하여 모델을 학습시킬 수 있습니다.예시from ultralytics import YOLO # Load a pretrained YOLO26 segment model model = YOLO("yolo26n-seg.pt") # Train the model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)사용 가능한 추가 argument는 Configuration 페이지를 확인하십시오.
Object detection은 객체 주위에 bounding box를 그려 이미지 내 객체를 식별하고 위치를 지정하는 반면, 인스턴스 세그멘테이션은 bounding box를 식별할 뿐만 아니라 각 객체의 정확한 형태도 구분합니다. YOLO26 인스턴스 세그멘테이션 모델은 감지된 각 객체의 윤곽을 나타내는 마스크 또는 컨투어를 제공하므로, 의료 영상이나 자율 주행처럼 객체의 정확한 형태를 아는 것이 중요한 작업에 특히 유용합니다.
Ultralytics YOLO26은 높은 정확도와 실시간 성능으로 인정받는 최첨단 모델이므로 인스턴스 세그멘테이션 작업에 적합합니다. YOLO26 세그먼트 모델은 COCO 데이터셋으로 사전 학습되어 다양한 객체에 대해 견고한 성능을 제공합니다. 또한 YOLO는 학습, 검증, prediction 및 export 기능을 원활하게 통합하여 지원하므로 연구와 산업 애플리케이션 모두에서 매우 유연하게 사용할 수 있습니다.
사전 학습된 YOLO 세그멘테이션 모델을 로드하고 검증하는 작업은 간단합니다. Python과 CLI를 모두 사용하여 수행하는 방법은 다음과 같습니다:
예시from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Validate the model metrics = model.val() print("Mean Average Precision for boxes:", metrics.box.map) print("Mean Average Precision for masks:", metrics.seg.map)이 단계를 수행하면 모델 성능을 평가하는 데 중요한 평균 정밀도(mAP)와 같은 validation metric을 확인할 수 있습니다.
YOLO 세그멘테이션 모델은 Python 또는 CLI 명령을 사용하여 간단하게 ONNX 형식으로 export할 수 있습니다:
예시from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Export the model to ONNX format model.export(format="onnx")다양한 형식으로 export하는 방법에 대한 자세한 내용은 Export 페이지를 참조하십시오.