Ultralytics YOLO를 활용한 시맨틱 세그멘테이션#
의미론적 분할은 이미지의 모든 픽셀에 클래스 레이블을 할당하여 전체 장면을 포괄하는 조밀한 클래스 맵을 생성합니다. 개별 객체를 분리하는 인스턴스 분할과 달리, 의미론적 분할은 서로 다른 객체가 몇 개 존재하는지와 관계없이 동일한 클래스에 속하는 모든 픽셀을 함께 그룹화합니다.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
의미론적 분할 모델의 출력은 높이×너비 형태의 단일 클래스 맵이며, 각 픽셀 값은 예측된 클래스 ID에 해당합니다. 따라서 의미론적 분할은 자율 주행, 의료 영상, 토지 피복 매핑과 같은 장면 파싱 작업에 적합합니다.
의미론적 분할에는 task=semantic 또는 yolo semantic CLI task를 사용합니다. YOLO26 의미론적 분할 모델 파일은 -sem 접미사를 사용하며, 예시는 yolo26n-sem.pt입니다.
모델#
Cityscapes 데이터셋으로 사전 학습된 YOLO26 의미론적 분할 모델은 다음과 같습니다.
모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | mIoUval | Speed RTX3090 PyTorch (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 23.8 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 91.0 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 305.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.8 | 388.2 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.1 | 866.9 |
- mIoUval 값은 Cityscapes 검증 세트에서 단일 모델, 단일 스케일로 측정한 결과입니다.
yolo semantic val data=cityscapes.yaml device=0 imgsz=2048로 재현할 수 있습니다. - Speed 지표는 RTX3090 인스턴스를 사용하여 Cityscapes 검증 이미지에서 평균을 낸 값입니다.
yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048으로 재현할 수 있습니다. - Params 및 FLOPs 값은 Conv 및 BatchNorm 레이어를 병합하는
model.fuse()실행 후의 fused 모델에 대한 값입니다. 사전 학습된 checkpoint는 전체 학습 아키텍처를 유지하므로 더 높은 값으로 표시될 수 있습니다.
ADE20K 데이터셋으로 사전 학습된 YOLO26 의미론적 분할 모델은 다음과 같습니다.
모델은 처음 사용할 때 최신 Ultralytics 릴리스에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | mIoUval | Speed RTX3090 PyTorch (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.5 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.5 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.4 | 59.6 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.2 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.4 |
- mIoUval 값은 ADE20K 검증 세트에서 단일 모델, 단일 스케일로 측정한 결과입니다.
yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640로 재현하되,yolo26n-sem-ade20k.pt를 원하는yolo26*-sem-ade20k.ptcheckpoint로 바꿉니다. - Speed 지표는 RTX3090 인스턴스를 사용하여 ADE20K 검증 이미지에서 평균을 낸 값입니다.
yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640으로 재현하되,yolo26n-sem-ade20k.pt을 원하는yolo26*-sem-ade20k.ptcheckpoint로 바꿉니다. - Params 및 FLOPs 값은 Conv 및 BatchNorm 레이어를 병합하는
model.fuse()실행 후의 fused 모델에 대한 값입니다. 사전 학습된 checkpoint는 전체 학습 아키텍처를 유지하므로 더 높은 값으로 표시될 수 있습니다.
사전 Cityscapes mIoU 결과는 출시되지 않은 YOLO27 미리보기를 참조하십시오.
학습#
Cityscapes8 데이터셋에서 이미지 크기 1024로 100회 epochs 동안 YOLO26n-sem을 학습합니다. 사용 가능한 전체 인수 목록은 Configuration 페이지를 참조하세요.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.yaml") # build a new model from YAML
model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Train 페이지에서 전체 train mode 세부 정보를 확인하세요. 의미론적 분할 모델은 Ultralytics Platform cloud training을 사용하여 학습할 수도 있습니다.
데이터셋 형식#
의미론적 분할 데이터셋은 일반적으로 PNG 형식의 단일 채널 mask 이미지를 사용하며, 각 픽셀 값은 클래스 ID를 나타냅니다. 값이 255인 픽셀은 "ignore"로 처리되어 loss 계산에서 제외됩니다. 데이터셋 YAML에는 이미지와 해당 mask 디렉터리의 경로를 지정해야 합니다. 형식에 대한 자세한 내용은 Semantic Segmentation Dataset Guide를 참조하세요. 지원되는 데이터셋에는 Cityscapes와 ADE20K가 포함됩니다. Ultralytics Platform annotation을 사용하여 의미론적 데이터셋을 관리하고 라벨링할 수 있습니다.
검증#
의미론적 분할 데이터셋에서 학습된 YOLO26n-sem 모델의 accuracy를 검증합니다. 검증에서 의도한 데이터셋 YAML을 사용하도록 data을 명시적으로 전달합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou # mean Intersection over Union
metrics.pixel_accuracy # overall pixel accuracyPrediction#
학습된 YOLO26n-sem 모델을 사용하여 이미지에 대한 prediction을 실행합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.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:
semantic_mask = result.semantic_mask.data # class map, shape (H,W), integer dtype selected by class count전체 predict mode 세부 정보는 Predict 페이지를 참조하십시오.
결과 출력#
YOLO 의미론적 분할은 이미지마다 하나의 Results 객체를 반환합니다. 각 result에는 객체 mask 목록 대신 전체
이미지에 대한 하나의 조밀한 클래스 맵이 저장됩니다. 예측 클래스가 같은 픽셀은 서로 다른 객체에
속하더라도 동일한 클래스 ID를 공유합니다.
| Attribute | 유형 | Shape | 설명 |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | 밀집 클래스 맵입니다. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | 클래스 ID이며, dtype은 클래스 수에 따라 선택됩니다. |
result.masks | - | - | 인스턴스 마스크가 없습니다. |
result.boxes | - | - | 인스턴스 박스/신뢰도가 없습니다. |
result.masks.xy | - | - | 기본 polygon은 없습니다. |
모든 task에서 task-specific Results field를 확인하려면 Predict Results by Task 섹션을 참조하십시오.
의미론적 분할은 조밀한 클래스 맵을 예측한 다음, 시각화 및
후속 사용을 위해 해당 맵을 이미지 shape으로 다시 크기 조정합니다. 따라서 차선 표시, 코트 선, 기둥 또는 전선과 같은 매우 얇은 구조는 추론이 원본 이미지 해상도보다 훨씬 낮은 imgsz에서 실행될 때
계단형으로 보일 수 있습니다. 경계가 울퉁불퉁하게 보이면 먼저 더 큰 imgsz를 사용하여 native PyTorch .pt 모델을 다시 테스트하세요. 예를 들어 1024, 1280 또는 원본 이미지 크기에 실용적으로 가장 가까운 값을 사용할 수 있습니다. .pt 출력이 허용 가능한지 확인한 후에만 export된 모델을 사용하세요.
낮은 해상도의 입력으로는 예측된 클래스 맵에 처음부터 존재하지 않았던 세부 정보를 복원할 수 없기 때문입니다.
인스턴스 분할과 의미론적 분할#
| 측면 | 인스턴스 분할 (task="segment") | 의미론적 분할 (task="semantic") |
|---|---|---|
| 예측 목표 | 감지된 각 객체를 개별적으로 분할합니다 | 모든 픽셀에 하나의 클래스 ID를 할당합니다 |
| 출력 필드 | result.masks | result.semantic_mask |
| 주요 데이터 | result.masks.data | result.semantic_mask.data |
| Shape | (N,H,W) | (H,W) |
| 픽셀 값 | 이진 mask 값: 0 또는 1 | 클래스 ID: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| 동일 클래스 객체 | 별도의 인스턴스로 유지됩니다 | 동일한 클래스 영역으로 병합됩니다 |
| Polygon | 예. result.masks.xy 및 result.masks.xyn을 통해 제공됩니다 | 기본적으로 polygon 출력이 없습니다 |
| Box 및 confidence | 예. result.boxes을 통해 제공됩니다 | 인스턴스별 box 또는 confidence score가 없습니다 |
| 일반적인 용도 | 개수 세기, 추적, cropping, 객체 수준 측정 | 조밀한 장면 라벨링, 주행 가능 영역, 토지 피복, 의료 영역 |
내보내기#
YOLO26n-sem 모델을 ONNX, CoreML 등의 다른 형식으로 export합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")사용 가능한 YOLO26 의미론적 분할 export 형식은 아래 표에 나와 있습니다. format 인수를 사용하여 모든 형식으로 export할 수 있으며, 예를 들어 format='onnx' 또는 format='engine'를 사용할 수 있습니다. export된 모델에서 직접 prediction 또는 validation을 실행할 수도 있으며, 예를 들어 yolo predict model=yolo26n-sem.onnx을 사용할 수 있습니다. export가 완료되면 해당 모델에 대한 사용 예시가 표시됩니다.
| 형식 | format Argument | 모델 | Metadata | Arguments |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
nms=None은(는) 외부 NMS에 대해 기본적으로 원시 출력을 사용합니다. 사용 가능한 NMS 프리 헤드를 선택하려면 nms=False을(를) 설정하세요. 지원되지 않는 형식은 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True(으)로 NMS를 임베드할 수 있는 형식을 식별합니다.
전체 export 세부 정보는 Export 페이지를 참조하십시오.
FAQ#
사용자 지정 데이터셋에서 YOLO26 의미론적 분할 모델을 학습하려면 각 픽셀 값이 클래스 ID(0, 1, 2, ...)를 나타내고 값이 255인 픽셀은 학습 중 무시되는 PNG mask 이미지를 준비해야 합니다. 이미지 및 mask 디렉터리를 가리키는 데이터셋 YAML 파일을 만든 다음 모델을 학습합니다.
예시from ultralytics import YOLO # Load a pretrained YOLO26 semantic segmentation model model = YOLO("yolo26n-sem.pt") # Train the model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)사용 가능한 추가 argument는 Configuration 페이지를 확인하십시오.
인스턴스 분할과 의미론적 분할은 모두 픽셀 수준 작업이지만, 다음과 같은 중요한 차이가 있습니다.
- **의미론적 분할**은 모든 픽셀에 클래스 레이블을 할당하지만 동일한 클래스에 속한 개별 객체를 구분하지 않습니다. 예를 들어 장면의 모든 자동차는 동일한 클래스 레이블을 공유합니다.
- **인스턴스 분할**은 각 개별 객체를 별도로 식별하여 동일한 클래스에 속하더라도 객체마다 구분되는 mask를 생성합니다.
의미론적 분할은 자율 주행 및 토지 피복 매핑과 같은 장면 이해 작업에 가장 적합하며, 개별 객체의 개수 세기 또는 추적이 중요한 경우에는 인스턴스 분할이 선호됩니다.
예. 데이터셋에서 Ultralytics YOLO polygon 라벨(이미지마다 하나의
.txt)을 사용하는 경우 데이터셋 YAML에서masks_dir을 생략하고, 데이터셋 루트의 이미지 옆에masks/폴더가 없는지 확인하세요(masks_dir이 설정되지 않았더라도 이 폴더가 존재하기만 하면 PNG-mask mode가 트리거됩니다). 그러면 loader가 즉시 polygon을 이미지별 semantic mask로 변환합니다. 다중 클래스 데이터셋(N > 1)에서는 추가background클래스가names에 자동으로 추가됩니다. 단일 클래스 데이터셋(N == 1)에서는 학습이 1개 클래스로 유지됩니다. 선언한 클래스는 mask에서1이 되고, 포함되지 않은 픽셀은0가 됩니다. 자세한 내용은 Semantic Segmentation Dataset Guide를 참조하세요.Ultralytics YOLO26은 여러 의미론적 분할 데이터셋에 대한 기본 제공 구성을 제공합니다.
- Cityscapes: 19개 클래스를 포함하는 도시 거리 장면 데이터셋으로, 자율 주행 연구에 널리 사용됩니다.
- ADE20K: 150개 클래스를 포함하는 대규모 장면 파싱 데이터셋입니다.
픽셀 값이 클래스 ID에 해당하는 PNG mask annotation을 제공하는 모든 사용자 지정 데이터셋도 사용할 수 있습니다.
평가에 사용되는 데이터셋 YAML을 사용하여 사전 학습된 YOLO26 의미론적 분할 모델을 검증합니다.
예시from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Validate the model metrics = model.val(data="cityscapes.yaml") print("Mean IoU:", metrics.miou) print("Pixel Accuracy:", metrics.pixel_accuracy)이 단계를 수행하면 평균 Intersection over Union(mIoU) 및 픽셀 정확도와 같은 validation metric을 확인할 수 있습니다. 이러한 지표는 의미론적 분할 성능을 평가하는 표준 측정값입니다.
Python 또는 CLI 명령을 사용하여 YOLO26 의미론적 분할 모델을 ONNX 형식으로 export합니다.
예시from ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Export the model to ONNX format model.export(format="onnx")다양한 형식으로 export하는 방법에 대한 자세한 내용은 Export 페이지를 참조하십시오.