# 语义分割
# 简介
语义分割(Semantic Segmentation)是一种计算机视觉任务,它的目标是为图像中的每个像素分配一个类别标签,从而实现对场景的精细理解。例如,在一张街景图像中,将所有属于“道路”的像素标记为一类,“行人”的像素标记为另一类。
与其他任务的区别
目标检测(Object Detection) 通过边界框(bounding box)定位并分类目标,但不能精确到像素级,只能大致框出目标区域。
语义分割(Semantic Segmentation) 逐像素分类,能够精确划分目标形状,但无法区分同类别的不同个体。
实例分割(Instance Segmentation) 结合了目标检测和语义分割的优势,既能像语义分割那样进行像素级划分,又能像目标检测那样区分不同个体。
# 安装
# Maven
在项目的 pom.xml 中添加以下依赖,详细引入方式参考 Maven 引入。
如需引入全部功能,请使用 【不推荐 ❌】 all
模块。
<dependency>
<groupId>cn.smartjavaai</groupId>
<artifactId>vision</artifactId>
<version>1.0.24</version>
</dependency>
# 获取语义分割模型
SemSegModelConfig config = new SemSegModelConfig();
config.setModelEnum(SemSegModelEnum.DEEPLABV3);
config.setModelPath("/Users/wenjie/Documents/develop/model/vision/semseg/deeplabv3/deeplabv3.pt");
SemSegModel semSegModel = SemSegModelFactory.getInstance().getModel(config);
# SemSegModelConfig参数说明
字段名称 | 字段类型 | 默认值 | 说明 |
---|---|---|---|
modelEnum | SemSegModelEnum | 无 | 语义分割模型枚举 |
modelPath | String | 模型路径 | |
allowedClasses | List<String> | 允许的分类列表 | |
device | DeviceEnum | CPU | 指定运行设备,支持 CPU/GPU |
gpuId | int | 0 | gpu设备ID 当device为GPU时生效 |
predictorPoolSize | int | 默认为cpu核心数 | 模型预测器线程池大小 |
customParams | Map<String, Object> | 无 | 个性化配置(按模型类型动态解析) |
# 支持语义分割模型
模型名称 | 引擎 | 模型简介 | 模型开源网站 |
---|---|---|---|
DeepLabv3 | PyTorch | DeepLabv3 是一种图像分割模型,可以把图片里的每个像素分类出来 | 无 |
⚠️ 注意
不同模型支持的类别可能不一样,具体可查看模型目录下的 synset.txt
文件,其中列出了该模型支持的全部物体名称。
# SemSegModel API 方法说明
# 语义分割
Image图片源请查看文档Image使用说明
R<CategoryMask> detect(Image image);
# CategoryMask说明
CategoryMask
用于表示语义分割或实例分割任务中的类别掩码(mask)。
它保存了类别列表 (classes
) 和对应的像素级掩码 (mask
),并提供了生成、可视化和序列化相关的方法。
获取数据
getClasses()
返回类别名称列表。getMask()
返回二维数组形式的掩码数据,数组元素为类别 ID。
生成掩码图像
getMaskImage(Image image)
根据完整掩码生成对应的掩码图像。getMaskImage(Image image, int classId)
根据指定类别 ID 生成该类别的掩码图像(其他区域为 0)。getBackgroundImage(Image image)
获取背景掩码图像(类别 ID = 0)。
绘制可视化
drawMask(Image image, int opacity)
将整个掩码绘制到图像上,支持透明度设置。drawMask(Image image, int opacity, int background)
与上类似,但可指定背景颜色。drawMask(Image image, int classId, int color, int opacity)
将指定类别的掩码绘制到图像上,并自定义颜色与透明度。
# 检测并绘制结果
该接口支持对图像进行检测,并将检测结果绘制在图像上,同时返回检测结果信息。
- 保存绘制后的图片到指定路径,检测结果通过
CategoryMask
返回。
R<CategoryMask> detectAndDraw(String imagePath, String outputPath);
Image detectAndDraw(Image image);
# 使用说明
imagePath
:待检测图像的文件路径。outputPath
:绘制检测结果后图像的保存路径。image
:待检测的Image
对象。
# 模型下载
百度网盘:https://pan.baidu.com/s/1gt02ctdmf8hnwfHp_KDwdw?pwd=1234 提取码: 1234