6.3.4 图像分割
UNet 简介
本示例展示如何基于轻量化的 UNet 语义分割模型,结合 SpacemiT 智算核实现高效的图像分割。模型可接受静态图像或视频流输入,输出为像素级语义标签(灰度图)及伪彩渲染图,通过 ROS2 发布分割结果,便于下游感知与控制模块调用。
该模型基于 Cityscapes 数据集 训练,采用 ONNX 格式部署,支持对城市道路场景中的典型要素(如人、车、道路、交通标志等)进行精准分割。
UNet 的典型应用场景有:
- 自动驾驶感知(道路/目标分割)
- 城市街景结构解析与数字地图构建
- 遥感图像地物分类与土地利用识别
- 医学图像分割(如器官、病灶)
- 工业检测中的缺陷识别与预处理
环境准备
安装依赖项
sudo apt install python3-opencv ros-humble-cv-bridge ros-humble-camera-info-manager \
ros-humble-image-transport python3-spacemit-ort python3-yaml libyaml-dev python3-numpy
导入 ROS 2 环境
source /opt/bros/humble/setup.bash
查看支持的分割模型
通过以下命令查看已支持的图像分割模型配置路径:
ros2 launch br_perception infer_info.launch.py | grep 'segmentation'
输出示例:
- config/segmentation/unet.yaml
图片推理
准备输入图片
cp /opt/bros/humble/share/jobot_infer_py/data/segmentation/test_unet.jpg .
推理并保存图像结果
ros2 launch br_perception infer_img.launch.py \
config_path:='config/segmentation/unet.yaml' \
img_path:='./test_unet.jpg'
示例输出:
[INFO] [launch]: All log files can be found below /home/zq-pi/.ros/log/2025-05-26-09-45-18-005008-spacemit-k1-x-MUSE-Pi-board-5995
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [infer_img_node-1]: process started with pid [5996]
[infer_img_node-1] Inference time: 4665.87 ms
[infer_img_node-1] The semantic segmentation results are saved in: seg_result.jpg
[infer_img_node-1] The semantic segmentation pseudo-color image is saved to seg_pseudo_color.png
[INFO] [infer_img_node-1]: process has finished cleanly [pid 5996]
输出文件包括:
- seg_result.jpg:原图与预测结果叠加图
- seg_pseudo_color.png:伪彩图(各语义类别以彩色编码表示)
示例图:
原始图像 | 分割叠加图 | 伪彩图 |
---|---|---|
![]() | ![]() | ![]() |