语义分割
语义分割
1.语义分割介绍
我们将在本教程中介绍的下一个深度学习功能是语义分割。语义分割是基于图像识别的,除了分类发生在像素级别,而不是整个图像。这是通过对预先训练的图像识别主干进行卷积来实现的,该主干将模型转换为能够按像素标记的全卷积网络(FCN)。分割对于环境感知特别有用,它为每个场景产生了许多不同潜在对象的密集的每像素分类,包括场景前景和背景。
segNet接受2D图像作为输入,并输出具有每像素分类掩模覆盖的第二图像。遮罩的每个像素对应于已分类的对象类别。segNet可以从Python和C++中使用。
下载其他得模型
在Jetson上具有实时性能的FCN-ResNet18网络的各种预训练分割模型。下面是可供使用的预训练语义分割模型的表,以及用于加载它们的segnet的相关--network参数。它们基于21类FCN-ResNet18网络,使用PyTorch在各种数据集和分辨率上进行了训练,并导出为ONNX格式以加载TensorRT。
这里大家可以根据自己想要得模型来下载网址是 https://github.com/dusty-nv/jetson-inference
2.图片语义分割
以下是一个使用城市景观模型分割城市街道场景的示例:
构建项目后,请确保您的终端位于aarch64/bin目录中:
cd jetson-inference/build/aarch64/bin
下面是使用fcn-resnet18-cityscapes模型的一些示例:
--network= 这里面可以放自己下载的模型文件进去。例如我这里的是fcn-resnet18-cityscapes
# C++
$ ./segnet --network=fcn-resnet18-cityscapes images/city_0.jpg images/test/output.jpg
# Python
$ ./segnet.py --network=fcn-resnet18-cityscapes images/city_0.jpg images/test/output.jpg
下面例子是DeepScene数据集由越野森林小径和植被组成,有助于户外机器人的路径跟踪。
C++
$ ./segnet --network=fcn-resnet18-deepscene images/trail_0.jpg images/test/output_overlay.jpg # overlay
$ ./segnet --network=fcn-resnet18-deepscene --visualize=mask images/trail_0.jpg images/test/output_mask.jpg # mask
python
$ ./segnet.py --network=fcn-resnet18-deepscene images/trail_0.jpg images/test/output_overlay.jpg # overlay
$ ./segnet.py --network=fcn-resnet18-deepscene --visualize=mask images/trail_0.jpg images/test/output_mask.jpg # mask
我们之前使用的segnet.cpp/segnet.py样本也可以用于实时相机流。支持的摄像机类型包括:
MIPI CSI cameras ( csi://0 )
V4L2 cameras ( /dev/video0 )
RTP/RTSP streams ( rtsp://username:password@ip:port )
以下是启动该程序的一些典型场景-有关可用的模型
C++
$ ./segnet --network=<model> csi://0 # MIPI CSI camera
$ ./segnet --network=<model> /dev/video0 # V4L2 camera
$ ./segnet --network=<model> /dev/video0 output.mp4 # save to video file
python
$ ./segnet.py --network=<model> csi://0 # MIPI CSI camera
$ ./segnet.py --network=<model> /dev/video0 # V4L2 camera
$ ./segnet.py --network=<model> /dev/video0 output.mp4 # save to video file
其中model是我们可以选择的,我这里使用的模型是fcn-resnet18-deepscene。
OpenGL窗口中显示的是叠加了分割输出的实时摄像机流,以及为了清晰起见的实心分割遮罩。以下是一些与不同型号一起使用的示例,可供尝试:
# C++
$ ./segnet --network=fcn-resnet18-deepscene csi://0
# Python
$ ./segnet.py --network=fcn-resnet18-deepscene csi://0