Ultralytics YOLO를 사용한 인스턴스 세그멘테이션#
인스턴스 세그멘테이션은 객체 탐지에서 한 단계 더 나아가 이미지 내 개별 객체를 식별하고 이미지의 나머지 부분과 분리하는 작업입니다.
인스턴스 세그멘테이션 모델은 이미지 내 각 객체의 윤곽을 나타내는 마스크 또는 컨투어 집합과 각 객체의 클래스 레이블 및 신뢰도 점수를 출력합니다. 인스턴스 세그멘테이션은 이미지에서 객체의 위치뿐만 아니라 정확한 형태까지 알아야 할 때 유용합니다.
시청: Python에서 사전 학습된 Ultralytics YOLO 모델로 분할을 실행합니다.
YOLO26 Segment 모델은 -seg 접미사를 사용합니다. 예를 들면 yolo26n-seg.pt이며, COCO로 사전 학습됩니다.
모델#
COCO 데이터셋으로 사전 학습된 YOLO26 Segment 모델은 아래와 같습니다.
모델은 처음 사용할 때 최신 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 segment val data=coco.yaml device=0 nms=False로 재현할 수 있습니다. - 속도는 CPU의 ONNX와 NVIDIA T4 GPU의 TensorRT10을 사용하여 COCO val 이미지에서 측정한 평균값입니다.
yolo segment val data=coco.yaml batch=1 device=0|cpu nms=False로 재현할 수 있습니다. - Params 및 FLOPs 값은 Conv/BatchNorm 폴딩과 사용하지 않는 감지 브랜치 제거 후의 융합 모델 기준입니다. 사전 학습된 체크포인트에는 전체 학습 아키텍처가 유지되므로 값이 더 높을 수 있습니다.
이 체크포인트는 COCO의 80개 클래스를 세그멘테이션합니다. 재학습 없이 목록에 없는 카테고리를 세그멘테이션하려면, 텍스트 프롬프트, 시각적 예시 또는 내장 어휘를 입력으로 받는 YOLOE를 참조하세요.
예비 COCO 박스 및 마스크 결과는 미출시 YOLO27 미리 보기를 참조하세요.
학습#
COCO8-seg 데이터셋에서 이미지 크기 640으로 100 에포크 동안 YOLO26n-seg를 학습합니다. 사용 가능한 인수의 전체 목록은 Configuration 페이지를 참조하세요.
from ultralytics import YOLO
# 모델 로드
model = YOLO("yolo26n-seg.yaml") # YAML에서 새 모델을 생성합니다.
model = YOLO("yolo26n-seg.pt") # 사전 학습된 모델을 불러옵니다(학습에 권장).
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # YAML에서 모델을 생성하고 가중치를 전이합니다.
# 모델 학습
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 어노테이션으로 세그멘테이션 마스크를 만들 수도 있습니다.
검증#
학습된 YOLO26n-seg 모델의 정확도를 검증합니다. model은 학습 data와 인수를 모델 속성으로 유지하므로 인수가 필요하지 않습니다. Train 예제의 path/to/best.pt은 COCO8-seg에서 검증합니다. 공식 가중치에는 사용자 컴퓨터에 존재하지 않는 학습 데이터셋 경로가 기록되어 있으므로, 경고와 함께 기본 작업 coco8-seg.yaml로 대체됩니다. 다른 데이터셋에서 검증하려면 data을 전달하세요.
from ultralytics import YOLO
# 모델 로드
model = YOLO("yolo26n-seg.pt") # 공식 모델을 불러옵니다
model = YOLO("path/to/best.pt") # 사용자 지정 모델 로드
# 모델을 검증합니다
metrics = model.val() # 데이터셋과 설정이 기억되므로 인수가 필요하지 않습니다
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # 각 카테고리의 mAP50-95(B)가 포함된 목록
metrics.box.image_metrics # 정밀도, 재현율, F1, TP, FP, FN을 포함하는 이미지별 det 메트릭 딕셔너리
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # 각 카테고리의 mAP50-95(M)가 포함된 목록
metrics.seg.image_metrics # 정밀도, 재현율, F1, TP, FP, FN을 포함하는 이미지별 seg 메트릭 딕셔너리예측#
학습된 YOLO26n-seg 모델을 사용하여 이미지에서 예측을 실행합니다.
from ultralytics import YOLO
# 모델 로드
model = YOLO("yolo26n-seg.pt") # 공식 모델을 불러옵니다
model = YOLO("path/to/best.pt") # 사용자 지정 모델 로드
# 모델로 예측을 수행합니다
results = model("https://ultralytics.com/images/bus.jpg") # 이미지에 대해 예측을 수행합니다
# 결과에 액세스합니다
for result in results:
xy = result.masks.xy # 픽셀 좌표의 마스크 다각형
xyn = result.masks.xyn # 정규화된 마스크 다각형
masks = result.masks.data # 이진 마스크, shape (N,H,W), dtype torch.uint8Predict 페이지에서 predict 모드의 전체 세부 정보를 확인하세요.
결과 출력#
YOLO 인스턴스 세그멘테이션은 이미지마다 하나의 Results 객체를 반환합니다. 각 결과에는 객체 수준 예측이 저장되며, 각 감지된 인스턴스에는 자체 이진 마스크, 클래스, 신뢰도 및 박스가 포함됩니다.
| 속성 | 유형 | 형태 | 설명 |
|---|---|---|---|
result.masks | Masks | (N) | 인스턴스 마스크입니다. |
result.masks.data | torch.uint8 | (N,H,W) | 값이 0 또는 1인 이진 마스크입니다. |
result.masks.xy | np.float32 | list[(P,2)] | 픽셀 다각형입니다. |
result.masks.xyn | np.float32 | list[(P,2)] | 정규화된 다각형입니다. |
result.boxes | Boxes | (N) | 인스턴스 박스/클래스/신뢰도입니다. |
result.boxes.cls | torch.float32 | (N,) | 클래스 ID이며, 이름을 가져오려면 int으로 변환합니다. |
모든 작업에서 작업별 Results 필드를 확인하려면 작업별 예측 결과 섹션을 참조하세요.
인스턴스 세그멘테이션과 시맨틱 세그멘테이션 비교#
인스턴스 세그멘테이션은 객체 수준 세그멘테이션입니다. 자동차 두 대는 마스크 두 개, 박스 두 개, 신뢰도 점수 두 개를 생성합니다. 시맨틱 세그멘테이션은 픽셀 수준 분류입니다. 동일한 자동차 두 대는 객체별 박스, 신뢰도 또는 기본 다각형 목록 없이 한 이미지 크기의 클래스 맵에서 같은 클래스 ID를 가진 픽셀이 됩니다. 시맨틱 세그멘테이션 페이지의 항목별 비교를 참조하세요.
내보내기#
YOLO26n-seg 모델을 ONNX, CoreML 등의 다른 형식으로 내보냅니다.
from ultralytics import YOLO
# 모델 로드
model = YOLO("yolo26n-seg.pt") # 공식 모델을 불러옵니다
model = YOLO("path/to/best.pt") # 사용자 지정 모델 로드
# 모델을 내보냅니다
model.export(format="onnx")사용 가능한 YOLO26-seg 내보내기 형식은 아래 표에 나와 있습니다. format 인수를 사용하여 모든 형식으로 내보낼 수 있습니다. 예를 들면 format='onnx' 또는 format='engine'입니다. 내보낸 모델에서 바로 예측 또는 검증을 실행할 수 있습니다. 예를 들면 yolo predict model=yolo26n-seg.onnx입니다. 내보내기가 완료되면 모델의 사용 예제가 표시됩니다.
CoreML은 정적 shape에서 객체 탐지, 인스턴스 세그멘테이션 및 포즈를 위한 내장 NMS(nms=True)를 지원합니다. 기본 세그멘테이션 내보내기(nms=None)에서는 NMS 처리를 사용자가 맡습니다.
| 형식 | format 인수 | 모델 | 메타데이터 | 인수 |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, 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 |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-seg_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None은 외부 NMS를 위한 원시 출력을 기본값으로 사용합니다. 사용 가능한 NMS-free head를 선택하려면 nms=False을 설정합니다. 지원되지 않는 형식은 해당 형식의 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True을 사용해 NMS를 포함할 수 있는 형식을 나타냅니다.
자세한 export 내용은 내보내기 페이지를 참조하세요.
자주 묻는 질문#
사용자 지정 데이터셋으로 YOLO26 세그멘테이션 모델을 학습하려면 먼저 YOLO 세그멘테이션 형식으로 데이터셋을 준비해야 합니다. 내장
convert_coco유틸리티를 사용하여 COCO JSON 데이터셋을 변환할 수 있습니다. 데이터셋을 준비한 후 Python 또는 CLI 명령으로 모델을 학습할 수 있습니다.예제from ultralytics import YOLO # 사전 학습된 YOLO 세그먼트 모델 로드 model = YOLO("yolo26n-seg.pt") # 모델 학습 results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)사용 가능한 인수에 대한 자세한 내용은 Configuration 페이지를 참조하세요.
객체 탐지는 이미지 내 객체 주위에 바운딩 박스를 그려 객체를 식별하고 위치를 찾습니다. 반면 인스턴스 세그멘테이션은 바운딩 박스를 식별할 뿐만 아니라 각 객체의 정확한 형태도 구분합니다. YOLO26 인스턴스 세그멘테이션 모델은 감지된 각 객체의 윤곽을 나타내는 마스크 또는 컨투어를 제공하므로, 의료 영상이나 자율 주행처럼 객체의 정확한 형태가 중요한 작업에 특히 유용합니다.
Ultralytics YOLO26은 높은 정확도와 실시간 성능으로 인정받는 최첨단 모델이므로 인스턴스 세그멘테이션 작업에 적합합니다. YOLO26 Segment 모델은 COCO 데이터셋으로 사전 학습되어 다양한 객체에서 안정적인 성능을 제공합니다. 또한 YOLO는 학습, 검증, 예측 및 내보내기 기능을 원활하게 통합하여 연구와 산업 분야 모두에서 높은 유연성을 제공합니다.
사전 학습된 YOLO 세그멘테이션 모델은 간단하게 로드하고 검증할 수 있습니다. Python과 CLI를 사용하면 다음과 같이 실행할 수 있습니다.
예제from ultralytics import YOLO # 사전 학습된 모델 불러오기 model = YOLO("yolo26n-seg.pt") # 모델을 검증합니다 metrics = model.val() print("Mean Average Precision for boxes:", metrics.box.map) print("Mean Average Precision for masks:", metrics.seg.map)이 단계를 통해 모델 성능을 평가하는 데 중요한 평균 정밀도(mAP)와 같은 검증 메트릭을 얻을 수 있습니다.
Python 또는 CLI 명령을 사용하면 YOLO 세그멘테이션 모델을 간편하게 ONNX 형식으로 내보낼 수 있습니다.
예제from ultralytics import YOLO # 사전 학습된 모델 불러오기 model = YOLO("yolo26n-seg.pt") # 모델을 ONNX 형식으로 내보내기 model.export(format="onnx")다양한 형식으로 내보내는 방법에 대한 자세한 내용은 Export 페이지를 참조하세요.