의미론적 분할 (Semantic Segmentation)#
Semantic segmentation은 이미지의 모든 픽셀에 클래스 레이블을 할당하여 전체 Scene을 포괄하는 조밀한 클래스 맵을 생성합니다. 개별 객체를 분리하는 instance segmentation과 달리, semantic segmentation은 존재하는 개별 객체의 수와 관계없이 동일한 클래스의 모든 픽셀을 하나로 그룹화합니다.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
의미론적 분할 모델의 출력은 각 픽셀 값이 예측된 클래스 ID에 해당하는 단일 높이 x 너비 클래스 맵입니다. 이로 인해 의미론적 분할은 자율 주행, 의료 영상, 토지 피복 매핑과 같은 장면 파싱 작업에 이상적입니다.
의미론적 분할(Semantic Segmentation)을 위해 task=semantic 또는 yolo semantic CLI 작업을 사용하십시오. YOLO26 의미론적 분할 모델 파일은 yolo26n-sem.pt과(와) 같은 -sem 접미사를 사용합니다.
Models#
Cityscapes 데이터셋으로 사전 학습된 YOLO26 semantic segmentation 모델은 다음과 같습니다.
Models는 첫 사용 시 최신 Ultralytics release에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | mIoUval | 속도 RTX3090 PyTorch (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 22.7 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 88.8 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 304.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.9 | 384.7 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.2 | 861.7 |
- 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()이후의 융합된 모델 기준입니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 나타낼 수 있습니다.
ADE20K 데이터셋으로 사전 학습된 YOLO26 semantic segmentation 모델은 다음과 같습니다.
Models는 첫 사용 시 최신 Ultralytics release에서 자동으로 다운로드됩니다.
| 모델 | 크기 (픽셀) | mIoUval | 속도 RTX3090 PyTorch (ms) | 파라미터 (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.4 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.4 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.3 | 59.5 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.0 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.1 |
- mIoUval 값은 ADE20K 검증 세트에서의 단일 모델, 단일 스케일 기준입니다.
yolo26n-sem-ade20k.pt을(를) 원하는yolo26*-sem-ade20k.pt체크포인트로 교체하여yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640(으)로 재현하십시오. - 속도(Speed) 측정치는 RTX3090 인스턴스를 사용하여 ADE20K 검증 이미지 평균을 낸 것입니다.
yolo26n-sem-ade20k.pt을(를) 원하는yolo26*-sem-ade20k.pt체크포인트로 교체하여yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640(으)로 재현하십시오. - Params 및 FLOPs 값은 Conv 및 BatchNorm 레이어를 병합하는
model.fuse()이후의 융합된 모델 기준입니다. 사전 학습된 체크포인트는 전체 학습 아키텍처를 유지하므로 더 높은 수치를 나타낼 수 있습니다.
학습(Train)#
이미지 크기 1024에서 100 epochs 동안 Cityscapes8 데이터셋으로 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 페이지에서 확인하십시오. 의미론적 분할 모델은 Ultralytics Platform cloud training을(를) 통해서도 학습할 수 있습니다.
데이터셋 형식#
Semantic segmentation 데이터셋은 일반적으로 PNG 형식의 단일 채널 마스크 이미지를 사용하며, 여기서 각 픽셀 값은 클래스 ID를 나타냅니다. 값이 255인 픽셀은 "무시(ignore)"로 처리되며 손실 계산에서 제외됩니다. 데이터셋 YAML은 이미지 경로와 해당 마스크 디렉터리를 지정해야 합니다. 형식 세부 정보는 Semantic Segmentation Dataset Guide를 참조하십시오. 지원되는 데이터셋에는 Cityscapes 및 ADE20K가 포함됩니다. Ultralytics Platform annotation을 사용하여 시맨틱 데이터셋을 관리하고 라벨링할 수 있습니다.
검증(Val)#
semantic segmentation 데이터셋에서 학습된 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 accuracy추론(Predict)#
학습된 YOLO26n-sem 모델을 사용하여 이미지에 대한 예측을 수행합니다.
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 모드 세부 정보는 Predict 페이지에서 확인하세요.
결과 출력#
YOLO semantic segmentation은 이미지당 하나의 Results 객체를 반환합니다. 각 결과는 객체 마스크 목록 대신 전체 이미지에 대한 하나의 조밀한 클래스 맵을 저장합니다. 예측된 클래스가 동일한 픽셀은 별개의 객체에 속해 있더라도 동일한 클래스 ID를 공유합니다.
| 속성 | 유형 | 형태 | 설명 |
|---|---|---|---|
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) 없음. |
모든 작업에 걸친 작업별 Results 필드는 Predict Results by Task 섹션을 참조하십시오.
의미론적 분할은 조밀한 클래스 맵을 예측한 다음, 시각화 및 다운스트림 사용을 위해 해당 맵을 원래 이미지 형태로 다시 크기 조절합니다. 따라서 차선 마커, 경기장 라인, 폴 또는 전선과 같은 매우 얇은 구조물은 추론이 원래 이미지 해상도보다 훨씬 낮은 imgsz에서 실행될 때 계단 현상(stair-stepped)이 나타날 수 있습니다. 경계가 들쑥날쑥해 보인다면, 먼저 기본 PyTorch .pt 모델을 1024, 1280 또는 원본 이미지 크기에 가장 가까운 실용적인 값과 같은 더 큰 imgsz로 다시 테스트하십시오. 예측된 클래스 맵에 존재하지 않았던 세부 정보는 저해상도 입력에서 복구할 수 없으므로, .pt 출력이 허용 가능한 수준인지 확인한 후에만 내보낸 모델을 사용하십시오.
인스턴스 분할 vs 의미론적 분할#
| 측면 | Instance Segmentation (task="segment") | Semantic Segmentation (task="semantic") |
|---|---|---|
| 예측 목표 | 감지된 각 객체를 개별적으로 분할 | 모든 픽셀에 하나의 클래스 ID 할당 |
| 출력 필드 | result.masks | result.semantic_mask |
| 주요 데이터 | result.masks.data | result.semantic_mask.data |
| 형태 | (N,H,W) | (H,W) |
| 픽셀 값 | 이진 마스크 값: 0 또는 1 | 클래스 ID: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| 동일 클래스 객체 | 개별 인스턴스로 유지됨 | 동일한 클래스 영역으로 병합됨 |
| 다각형(Polygons) | 네, result.masks.xy 및 result.masks.xyn을(를) 통해 가능합니다. | 기본적으로 다각형 출력 없음 |
| 박스 및 신뢰도(Confidence) | 네, result.boxes을(를) 통해 가능합니다. | 인스턴스별 박스 또는 신뢰도 점수 없음 |
| 일반적인 용도 | 계수, 추적, 자르기, 객체 수준 측정 | 밀도 높은 장면 라벨링, 주행 가능 영역, 토지 피복, 의료 영역 |
내보내기(Export)#
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 semantic segmentation 내보내기 형식은 아래 표에 있습니다. format 인수(예: format='onnx' 또는 format='engine')를 사용하여 모든 형식으로 내보낼 수 있습니다. 내보낸 모델에 대해 직접 예측 또는 검증을 수행할 수 있습니다(예: yolo predict model=yolo26n-sem.onnx). 내보내기가 완료된 후 모델에 대한 사용 예시가 표시됩니다.
| 형식 | format 인수 | 모델 | 메타데이터 | 인수 |
|---|---|---|---|---|
| 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 |
전체 export 세부 정보는 Export 페이지에서 확인하세요.
FAQ#
사용자 지정 데이터셋에서 YOLO26 의미론적 분할 모델을 어떻게 학습시키나요?#
사용자 지정 데이터셋에서 YOLO26 의미론적 분할 모델을 학습시키려면 각 픽셀 값이 클래스 ID(0, 1, 2, ...)를 나타내고 값이 255인 픽셀은 학습 중 무시되는 PNG 마스크 이미지를 준비해야 합니다. 이미지 및 마스크 디렉터리를 가리키는 데이터셋 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)사용 가능한 더 많은 인수는 Configuration 페이지를 확인하세요.
인스턴스 분할과 의미론적 분할의 차이점은 무엇인가요?#
인스턴스 분할과 의미론적 분할은 모두 픽셀 수준의 작업이지만 중요한 차이점이 있습니다:
- **Semantic segmentation**은 모든 픽셀에 클래스 레이블을 할당하지만 동일한 클래스의 개별 객체는 구분하지 않습니다. 예를 들어, 한 씬(scene)에 있는 모든 자동차는 동일한 클래스 레이블을 공유합니다.
- **Instance segmentation**은 각 개별 객체를 따로 식별하며, 동일한 클래스에 속하더라도 각 객체에 대한 고유한 마스크를 생성합니다.
의미론적 분할은 자율 주행이나 토지 피복 매핑과 같은 장면 이해 작업에 가장 적합하며, 인스턴스 분할은 개별 객체를 계수하거나 추적하는 것이 중요할 때 선호됩니다.
인스턴스 분할 데이터를 사용하여 의미론적 분할을 학습시킬 수 있나요?#
네. 데이터셋이 Ultralytics YOLO 다각형 레이블(이미지당 하나의 .txt)을 사용하는 경우, 데이터셋 YAML에서 masks_dir을(를) 생략하고, 데이터셋 루트의 이미지 옆에 masks/ 폴더가 존재하지 않는지 확인하십시오(masks_dir이 설정되지 않은 상태에서도 폴더의 존재 자체만으로 PNG 마스크 모드가 트리거됩니다). 그러면 로더가 즉시 다각형을 이미지별 시맨틱 마스크로 변환합니다. 다중 클래스 데이터셋(N > 1)의 경우 여분의 background 클래스가 names에 자동으로 추가됩니다. 단일 클래스 데이터셋(N == 1)의 경우 학습이 1개의 클래스로 유지되며, 선언한 클래스가 마스크에서 1이 되고 감싸이지 않은 픽셀은 0가 됩니다. 자세한 내용은 Semantic Segmentation Dataset Guide를 참조하십시오.
의미론적 분할을 위해 어떤 데이터셋이 지원되나요?#
Ultralytics YOLO26은 여러 의미론적 분할 데이터셋에 대한 내장 구성을 제공합니다:
- Cityscapes: 자율주행 연구에 널리 사용되는 19개 클래스의 도시 거리 씬.
- ADE20K: 150개의 클래스를 가진 대규모 씬 파싱 데이터셋.
또한 픽셀 값이 클래스 ID에 해당하는 PNG 마스크 주석을 제공하는 모든 사용자 지정 데이터셋을 사용할 수 있습니다.
사전 학습된 YOLO26 의미론적 분할 모델을 어떻게 검증하나요?#
평가에 사용된 데이터셋 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)이 단계들을 통해 의미론적 분할 성능을 평가하는 표준 척도인 mIoU(mean Intersection over Union) 및 픽셀 정확도와 같은 검증 지표를 얻을 수 있습니다.
YOLO26 의미론적 분할 모델을 ONNX 형식으로 어떻게 내보낼 수 있나요?#
Python 또는 CLI 명령을 사용하여 YOLO26 의미론적 분할 모델을 ONNX 형식으로 내보낼 수 있습니다:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-sem.pt")
# Export the model to ONNX format
model.export(format="onnx")다양한 형식으로 내보내는 방법에 대한 자세한 내용은 Export 페이지를 참조하십시오.