ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Jetson Inference 语义分割实战:使用 segNet 对图像进行逐像素分类(FCN-ResNet18 全卷积网络)

Jetson Inference 语义分割实战:使用 segNet 对图像进行逐像素分类(FCN-ResNet18 全卷积网络) 人工智能计算机视觉深度学习微调【免费下载链接】jetson-inferenceHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.项目地址https://gitcode.com/gh_mirrors/je/jetson-inference点击查看免费下载导读本篇指南聚焦于 jetson-inference 项目中基于 TensorRT 的segNet语义分割能力通过将预训练的图像识别骨干网络全卷积化convolutionalizing为 Fully Convolutional NetworkFCN实现对图像的逐像素分类输出带有类别颜色编码的分割蒙版mask与叠加overlay效果。读者将掌握如何使用segnet命令行程序C 与 Python 双版本处理静态图片、目录序列与多组预训练模型Cityscapes、DeepScene、MHP、Pascal VOC、SUN RGB-D并理解底层segNet类的推理流水线、参数解析与可视化原理。一、语义分割与全卷积网络FCN原理语义分割Semantic Segmentation建立在图像识别Image Recognition基础之上但与整图分类不同它的分类发生在像素级别网络为画面中的每一个像素赋予一个类别标签。对于环境感知environmental perception类应用这种能力尤为关键——分割结果能够给出场景中前景、背景乃至多种潜在物体的稠密逐像素类别标注。其实现手段是将预训练的图像识别骨干网络卷积化convolutionalizing把分类网络末端的全连接层替换为卷积层将模型转化为Fully Convolutional NetworkFCN从而保留空间位置信息、获得可对任意尺寸输入进行逐像素标注的能力。jetson-inference 提供的segNet预训练模型即基于 21 类 FCN-ResNet18 网络采用 PyTorch 在各种数据集与分辨率上训练导出为 ONNX 格式后由 TensorRT 加载推理。segNet类的输入是二维图像输出是第二张带逐像素分类蒙版叠加的图像——蒙版中每个像素的颜色都对应其被分类到的目标类别。该类在 c/segNet.h 中定义继承自tensorNet同时提供 C 与 Python 两种语言的接口。二、示例程序与输入输出流支持仓库为segNet提供了 C 与 Python 两套可直接运行的示例程序examples/segnet/segnet.cppCpython/examples/segnet.pyPython这两套示例不仅能分割静态图片还能处理视频流与实时摄像头画面。输入输出协议本地文件、RTSP、V4L2 摄像头、图像序列等由videoSource/videoOutput统一封装详细说明见 docs/aux-streaming.md。从 examples/segnet/segnet.cpp 可以看到 C 示例的核心处理循环解析命令行含--help时输出完整 usage通过videoSource::Create与videoOutput::Create创建输入输出流调用segNet::Create(cmdLine)加载网络并按--alpha、--filter-mode、--visualize、--ignore-class设置可视化参数逐帧执行net-Process(...)推理 argmax 分类→net-Overlay(...)/net-Mask(...)可视化→output-Render(...)输出显示状态栏实时显示 TensorRT 版本、网络名称与 FPS。Python 版 python/examples/segnet.py 逻辑一一对应额外支持--stats参数输出每类像素占比统计由 python/examples/segnet_utils.py 中的segmentationBuffers类实现基于np.histogram统计分类网格中各类别出现次数与百分比。三、预训练分割模型一览下表列出了 jetson-inference 内置的全部预训练语义分割模型以及加载它们所需的--network参数。这些模型均基于 21 类 FCN-ResNet18 网络覆盖城市街景、野外越野路径、室内办公与家居等多种环境。数据来源与模型清单可核对 data/networks/models.json 中segmentation分段每个模型条目记录了下载 URL、目录、ONNX 模型文件、classes.txt标签与colors.txt颜色文件。数据集分辨率CLI 参数精度Jetson NanoJetson XavierCityscapes512x256fcn-resnet18-cityscapes-512x25683.3%48 FPS480 FPSCityscapes1024x512fcn-resnet18-cityscapes-1024x51287.3%12 FPS175 FPSCityscapes2048x1024fcn-resnet18-cityscapes-2048x102489.6%3 FPS47 FPSDeepScene576x320fcn-resnet18-deepscene-576x32096.4%26 FPS360 FPSDeepScene864x480fcn-resnet18-deepscene-864x48096.9%14 FPS190 FPSMulti-Human512x320fcn-resnet18-mhp-512x32086.5%34 FPS370 FPSMulti-Human640x360fcn-resnet18-mhp-640x36087.1%23 FPS325 FPSPascal VOC320x320fcn-resnet18-voc-320x32085.9%45 FPS508 FPSPascal VOC512x320fcn-resnet18-voc-512x32088.5%34 FPS375 FPSSUN RGB-D512x400fcn-resnet18-sun-512x40064.3%28 FPS340 FPSSUN RGB-D640x512fcn-resnet18-sun-640x51265.1%17 FPS224 FPS补充说明分辨率缺省如果 CLI 参数省略分辨率后缀如直接写fcn-resnet18-cityscapes将自动加载最低分辨率版本的模型。这一点在 c/segNet.cpp 的命令行解析中体现且 data/networks/models.json 中为每个系列的低分辨率模型注册了别名alias如fcn-resnet18-cityscapes、fcn-resnet18-deepscene、fcn-resnet18-voc等精度口径表格中的 Accuracy 表示模型在其验证数据集上的逐像素分类准确率性能口径FPS 数据来自 JetPack 4.2.1、GPU FP16 模式、nvpmodel 0MAX-N下的测量同一模型在不同设备、不同功率模式下的实际性能会有差异默认模型为fcn-resnet18-voc-320x320见 c/segNet.h 中的SEGNET_USAGE_STRING与 c/segNet.cpp。四、命令行选项详解运行segnet --helpC可查看全部参数说明Python 版segnet.py使用 argparse 同样输出完整 usage。除输入/输出路径外主要分割相关选项如下参数取值默认值说明--networkmodel见上表各模型名fcn-resnet18-voc切换分割模型缺省分辨率时加载最低分辨率版本--visualizeflagsoverlay和/或mask可用逗号或竖线组合如overlay,maskoverlayC 默认/overlay,maskPython 默认选择可视化模式在原图上叠加类别颜色或输出纯色分割蒙版--alphavalue0–255150C/150.0Python叠加模式的 alpha 混合值值越小蒙版越透明--filter-modemodepoint或linearlinear蒙版/叠加生成时的采样方式最近邻采样或双线性滤波--ignore-classname类别标签名void在可视化中忽略指定类别如未标注区域--model/--prototxt/--labels/--colors文件路径—加载自定义模型caffemodel/uff/onnx及其标签、颜色文件--input-blob/--output-blobblob 名称input_0/output_0自定义输入/输出层名--profile标志位关闭开启 TensorRT 逐层性能分析其中几个参数在源码中有明确定义与解析逻辑默认 alphaSEGNET_DEFAULT_ALPHA在 c/segNet.h 定义为 150SetOverlayAlpha()c/segNet.cpp会将 alpha 写入每个类别的 RGBA 颜色中若某个类别在colors.txt中显式设置了 alpha则默认值不会覆盖它explicit_exempttrue可视化标志解析VisualizationFlagsFromStr()c/segNet.cpp以,或|为分隔符 token 化字符串识别overlay与mask标志位滤波模式解析FilterModeFromStr()c/segNet.cpp识别point与linear两种模式。构建与运行前提程序在编译项目后于build/目录运行segnet为 C 可执行文件segnet.py为 Python 脚本。构建流程参见 docs/building-repo.mdmkdir build cd build cmake ../ make -j$(nproc)CMake 预构建脚本 CMakePreBuild.sh 会自动下载依赖与上述分割模型。五、从命令行分割静态图片下面通过segnet程序对静态图片进行分割。除了输入/输出路径外只需按需附加上述可选参数C$ ./segnet --networkmodel input.jpg output.jpg # 在原图上叠加分割结果 $ ./segnet --networkmodel --alpha200 input.jpg output.jpg # 降低叠加层的不透明度 $ ./segnet --networkmodel --visualizemask input.jpg output.jpg # 输出纯色分割蒙版Python$ ./segnet.py --networkmodel input.jpg output.jpg # 在原图上叠加分割结果 $ ./segnet.py --networkmodel --alpha200 input.jpg output.jpg # 降低叠加层的不透明度 $ ./segnet.py --networkmodel --visualizemask input.jpg output.jpg # 输出分割蒙版需要说明的是C 示例 examples/segnet/segnet.cpp 中可视化标志的默认值为overlay|mask叠加与蒙版并排合成输出而--visualize参数缺省时也可只显示 overlay以实际--help输出为准即可。推理与可视化底层原理从源码看segNet::Process()c/segNet.cpp完成三件事预处理将输入图像缩放downsample至网络输入分辨率并按模型类型做归一化——ONNX 模型使用cudaTensorNormMeanRGBRGB 带序 mean/std 归一化均值(0.485, 0.456, 0.406)、方差(0.229, 0.224, 0.225)其他模型使用cudaTensorMeanBGRTensorRT 推理调用ProcessNetwork()执行引擎后处理 argmax 分类classify()c/segNet.cpp对输出张量逐网格单元取各类别分数的最大值可跳过ignore_class指定的类别生成mClassMap分类索引图。可视化阶段Overlay()/Mask()分别通过overlayPoint()/overlayLinear()c/segNet.cpp实现默认走 CUDA 路径调用cudaSegOverlay定义于 c/segNet.cu按每类颜色对蒙版着色overlay模式下再与原图做 alpha 混合——混合公式即alpha * classColor (1-alpha) * inputPixel。linear模式会对分类网格的 2x2 邻域做双线性插值使输出边界更平滑。六、场景实战五大数据集示例仓库在 data/images 下提供了对应各数据集的测试图片city_*.jpg、trail_*.jpg、humans_*.jpg、object_*.jpg、room_*.jpg可直接替换下面的命令体验不同场景。Cityscapes城市街景用 Cityscapes 模型分割城市道路场景覆盖道路、车辆、行人、建筑等类别# C $ ./segnet --networkfcn-resnet18-cityscapes images/city_0.jpg images/test/output.jpg # Python $ ./segnet.py --networkfcn-resnet18-cityscapes images/city_0.jpg images/test/output.jpgimages/子目录下还有更多city-*.jpg测试图可供尝试。DeepScene野外越野路径DeepScene 数据集由野外森林小径与植被组成可用于室外机器人的路径跟随path-following。下面同时演示--visualize参数输出叠加图与蒙版C$ ./segnet --networkfcn-resnet18-deepscene images/trail_0.jpg images/test/output_overlay.jpg # 叠加 $ ./segnet --networkfcn-resnet18-deepscene --visualizemask images/trail_0.jpg images/test/output_mask.jpg # 蒙版Python$ ./segnet.py --networkfcn-resnet18-deepscene images/trail_0.jpg images/test/output_overlay.jpg # 叠加 $ ./segnet.py --networkfcn-resnet18-deepscene --visualizemask images/trail_0.jpg images/test/output_mask.jpg # 蒙版images/下的trail-*.jpg系列图片可继续测试。Multi-Human ParsingMHP人体部件解析Multi-Human Parsing 提供对人体部位手臂、腿、头部及不同类型衣物的稠密标注适合行人分析场景。测试图见images/humans-*.jpg# C $ ./segnet --networkfcn-resnet18-mhp images/humans_0.jpg images/test/output.jpg # Python $ ./segnet.py --networkfcn-resnet18-mhp images/humans_0.jpg images/test/output.jpg如需了解 MHP 各部件类别的颜色编码可在运行后添加--legend参数C 端 c/segNet.cpp 支持通过--legend输出图例文件图例由saveClassLegend()c/segNet.cpp生成。Pascal VOC通用目标分割Pascal VOC 是最早用于语义分割的经典数据集之一涵盖人、动物、车辆与家居物品。测试图见images/object-*.jpg# C $ ./segnet --networkfcn-resnet18-voc images/object_0.jpg images/test/output.jpg # Python $ ./segnet.py --networkfcn-resnet18-voc images/object_0.jpg images/test/output.jpgSUN RGB-D室内场景SUN RGB-D 提供大量室内物体与场景办公室、住宅的分割真值。测试图见images/room-*.jpg# C $ ./segnet --networkfcn-resnet18-sun images/room_0.jpg images/test/output.jpg # Python $ ./segnet.py --networkfcn-resnet18-sun images/room_0.jpg images/test/output.jpg七、批量处理目录与图像序列若需要一次处理目录下的多张图片或一个带编号的序列直接把输入参数换成目录路径或通配符序列即可# C $ ./segnet --networkfcn-resnet18-sun images/room_*.jpg images/test/room_output_%i.jpg # Python $ ./segnet.py --networkfcn-resnet18-sun images/room_*.jpg images/test/room_output_%i.jpg注意使用通配符时务必用引号将模式包起来如*.jpg。否则操作系统会自行展开序列并改变命令行参数顺序可能导致某张输入图被输出结果覆盖。输出路径中的%i是 printf 风格的文件序号占位符如%04i可生成image_0001.jpg这类带前导零的文件名当输出路径直接指向目录时程序会自动按目录/%i.jpg的格式命名。图像序列的加载/保存协议细节见 docs/aux-streaming.md。八、延伸阅读实时摄像头分割本文聚焦静态图片与序列处理下一篇指南 docs/segnet-camera-2.md 讲解如何在实时摄像头/视频流上运行分割图像分类与目标检测对照docs/imagenet-console-2.md整图分类与 docs/detectnet-console-2.md目标检测可与本文的分割形成识别 → 检测 → 分割的完整视觉能力图谱相关入口见 README.md自定义模型segnet支持通过--model/--prototxt/--labels/--colors加载自定义 caffemodel/uff/onnx 分割模型构建自己的数据集与训练流程可参考 docs/segnet-dataset.md 及后续训练指南模型下载机制模型由 c/modelDownloader.cpp 结合 data/networks/models.json 自动下载至networks/目录离线环境可预先下载模型压缩包并放置到对应目录。赞分享人工智能计算机视觉深度学习微调【免费下载链接】jetson-inferenceHello AI World guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and NVIDIA Jetson.项目地址https://gitcode.com/gh_mirrors/je/jetson-inference点击查看免费下载相关推荐如何快速上手 Notepad--跨平台文本编辑器与文件对比的完整指南如何快速上手 Notepad 跨平台文本编辑器与文件对比的完整指南 Notepad 是一款基于 C 和 Qt 开发的轻量级跨平台文本编辑器支持 Wind桌面应用从像素到场景理解jetson-inference语义分割实战指南从像素到场景理解jetson inference语义分割实战指南 你是否曾想让机器人像人类一样看懂世界传统图像识别只能告诉你画面里有什么而语义分割S人工智能计算机视觉深度学习微调在 Jetson 上运行分割模型jetson-inference 的 segnet-console 命令行实战在 Jetson 上运行分割模型jetson inference 的 segnet console 命令行实战 本篇技术指南聚焦 jetson inferen人工智能计算机视觉深度学习微调上一篇DCGAN网络架构深度剖析生成器与判别器的卷积层设计奥秘下一篇终极PsiTransfer常见问题解决方案快速解决文件共享难题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表