
人工智能计算机视觉深度学习微调【免费下载链接】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 项目中的语义分割Semantic Segmentation能力为主线完整梳理从 NVIDIA Aerial Drone 航拍数据集准备、DIGITS 导入与 FCN-Alexnet 训练、TensorRT 兼容性修补到最终在 Jetson 上运行segnet推理的全过程。读者读完本文后将掌握基于 DIGITS 构建像素级分类数据集、训练分割模型并把训练快照转换为 TensorRT 可运行模型的标准操作流程。语义分割与 SegNet逐像素分类的视觉基础本文档所聚焦的是 jetson-inference 三大深度学习能力中的第三项——语义分割Semantic Segmentation见 docs/segnet-dataset.md。与图像识别image recognition把整张图片归为一个类别不同语义分割在像素级别完成分类图像中的每个像素都被赋予一个语义类别标签从而能够同时刻画场景中多个潜在目标包括前景与背景。这种逐像素标注能力的实现方式是把一个预训练的图像识别模型如 Alexnet进行convolutionalizing卷积化使其转换为一个全卷积的分割模型Fully Convolutional NetworkFCN从而能够输出逐像素的分类结果。对于环境感知environmental sensing与避障collision avoidance等任务分割模型输出的稠密逐像素分类结果极具价值——无人机可以通过分割结果区分地面与天空自动驾驶系统可以区分道路、车辆与行人。在 jetson-inference 中承担这一任务的类为segNet定义见 c/segNet.h。它继承自tensorNet接受一张 2D 图像作为输入输出一张携带逐像素分类掩码mask覆盖层的图像输入任意分辨率的 2D 图像CUDA 设备内存中的像素值范围 0-255输出原图 按类别着色的分割掩码叠加结果掩码中每个像素的颜色对应其被分类到的物体类别。segNet的核心接口包括Process()执行推理、Overlay()生成与原始图像 alpha 混合的分割叠加图与Mask()生成纯色分割掩码图这部分调用链可从示例程序 examples/segnet/segnet.cpp 的主循环中看到完整的使用方式。下载航拍无人机数据集作为图像分割的实战示例本文档选用一个航拍无人机数据集NVIDIA Aerial Drone Dataset其核心任务是把地面地形与天空分割开来。数据集以第一人称视角First Person ViewFPV拍摄模拟无人机飞行中的观察视角用于训练一个以感知地形为导航空白的自动驾驶式网络。在运行 DIGITS 服务器的主机Host PC上通过以下命令下载并解压数据集$ wget --no-check-certificate https://nvidia.box.com/shared/static/ft9cc5yjvrbhkh07wcivu5ji9zola6i1.gz -O NVIDIA-Aerial-Drone-Dataset.tar.gz HTTP request sent, awaiting response... 200 OK Length: 7140413391 (6.6G) [application/octet-stream] Saving to: NVIDIA-Aerial-Drone-Dataset.tar.gz NVIDIA-Aerial-Drone-Datase 100%[] 6.65G 3.33MB/s in 44m 44s 2017-04-17 14:11:54 (2.54 MB/s) - NVIDIA-Aerial-Drone-Dataset.tar.gz saved [7140413391/7140413391] $ tar -xzvf NVIDIA-Aerial-Drone-Dataset.tar.gz需要说明的是该数据集压缩包体积约 6.6GB下载耗时较长参考值 44 分钟左右建议在网络状况良好的环境中预先下载。数据集内包含多个从无人机平台拍摄的片段clips本教程聚焦其中FPV/SFWA子目录下的片段。仓库根目录下的 data/images 中同样预置了若干航拍测试帧如drone_0428.png、drone_0435.png等见 data/images/drone_0428.png可用于训练完成后的本地验证。将航拍数据集导入 DIGITS在浏览器中打开 DIGITS 服务实例在Datasets标签页的下拉菜单中选择创建新的Segmentation Dataset分割数据集。在数据集创建表单中按以下配置填写图像与标签目录路径相对于解压出的航拍数据集位置配置项取值Feature image folder特征图目录NVIDIA-Aerial-Drone-Dataset/FPV/SFWA/720p/imagesLabel image folder标签图目录NVIDIA-Aerial-Drone-Dataset/FPV/SFWA/720p/labels% for validation验证集比例1%Class labels类别标签文件NVIDIA-Aerial-Drone-Dataset/FPV/SFWA/fpv-labels.txtColor map颜色映射From text file从文本文件读取Feature Encoding特征编码NoneLabel Encoding标签编码None其中Feature image folder为用于训练的分割原始图像Label image folder为对应的逐像素标注图像即 ground truth 掩码Class labels指向包含类别名称列表的文本文件Color map 选择 From text file是因为 DIGITS 将从数据集目录中的颜色映射文本文件读取各类别对应的可视化颜色两个 Encoding 均设为None表示图像与标签均不做额外编码转换直接按原格式使用。为数据集命名后点击表单底部的Create按钮即可启动导入任务Importing Job。数据导入完成后接下来创建分割模型并开始训练。生成预训练 FCN-Alexnet 基础模型用于分割的 FCN-Alexnet 是本文档配合 DIGITS 与 TensorRT 使用的网络拓扑。其核心思想来源于把标准 Alexnet 分类模型卷积化convolutionalizing为全卷积网络DIGITS 5 起新增了对分割数据集与分割模型训练的原生支持。DIGITS 的语义分割示例中附带了一个脚本它把标准 Alexnet 模型转换为 FCN-Alexnet 基础模型该基础模型可作为后续在自定义数据集上训练 FCN-Alexnet 分割模型的预训练起点。打开终端进入 DIGITS 的 semantic-segmentation 示例目录并运行net_surgery脚本$ cd DIGITS/examples/semantic-segmentation $ ./net_surgery.py Downloading files (this might take a few minutes)... Downloading https://raw.githubusercontent.com/BVLC/caffe/rc3/models/bvlc_alexnet/deploy.prototxt... Downloading http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel... Loading Alexnet model... ... Saving FCN-Alexnet model to fcn_alexnet.caffemodel该脚本会在线下载 Alexnet 的deploy.prototxt与bvlc_alexnet.caffemodel加载并执行网络手术net surgery最终输出fcn_alexnet.caffemodel。整个转换过程即 FCN 网络构建原理的实践验证把全连接层改造为卷积层使网络可以接受任意尺寸输入并输出逐像素分类得分图score map。使用 DIGITS 训练 FCN-Alexnet数据集导入任务完成后返回 DIGITS 首页在Models标签页选择创建新的Segmentation Model。在模型创建表单中选择数据集选取上一步创建的航拍分割数据集Subtract Mean减去均值设置为NoneBase Learning Rate基础学习率设置为0.0001网络拓扑选择Custom Network标签页并确保选中Caffe子标签页将FCN-Alexnet prototxt内容复制粘贴到文本框中该 prototxt 由 DIGITS 语义分割示例提供位于DIGITS/examples/semantic-segmentation/fcn_alexnet.prototxtPretrained Model预训练模型设置为上一步net_surgery生成的DIGITS/examples/semantic-segmentation/fcn_alexnet.caffemodel。为航拍模型命名后点击Create启动训练任务。通常经过约 5 个 epochDIGITS 训练页中的Accuracy曲线橙色会开始爬升此时模型已基本收敛、具备可用性。关于训练曲线与收敛判定可参考 DIGITS 训练任务输出的验证精度图表。在 DIGITS 中测试推理结果在将训练好的模型迁移到 Jetson 之前先在 DIGITS 中验证推理效果在上一训练任务的页面中向下滚动到Trained Models区域将Visualization Model设置为Image Segmentation在Test a Single Image下选择一张测试图例如/NVIDIA-Aerial-Drone-Dataset/FPV/SFWA/720p/images/0428.png点击Test One查看逐像素分割可视化结果。确认效果符合预期后下载并解压该训练快照model snapshot迁移到 Jetson 上进行下一步部署。仓库的 data/images 中预置了同编号的drone_0428.png见 data/images/drone_0428.png可以作为 DIGITS 端与 Jetson 端对照验证的同一测试帧。FCN-Alexnet 的 TensorRT 兼容性修补原始 FCN-Alexnet 中包含两个 TensorRT 不支持的非必要层需要从训练快照中的deploy.prototxt中删除。具体操作如下删除deploy.prototxt末尾的 deconv 与 crop 层在deploy.prototxt文件末尾删除以下两个 layer 定义layer { name: upscore type: Deconvolution bottom: score_fr top: upscore param { lr_mult: 0.0 } convolution_param { num_output: 21 bias_term: false kernel_size: 63 group: 21 stride: 32 weight_filler { type: bilinear } } } layer { name: score type: Crop bottom: upscore bottom: data top: score crop_param { axis: 2 offset: 18 } }其中upscore是上采样反卷积层Deconvolutionkernel 63×63、stride 32、group 21对应 21 个分割类别score是裁剪层Crop。这两层的作用是把低分辨率得分图上采样回输入分辨率在 TensorRT 推理时不需要它们因为segNet会在运行时对输出得分网格执行自己的缩放/上采样对应 c/segNet.h 中overlayPoint/overlayLinear的过滤逻辑。修改 padding 参数在deploy.prototxt的第 24 行附近把pad: 100改为pad: 0。Alexnet 原始部署配置中的大 padding 是为训练时代特征感受野设计的TensorRT 端并不需要。拷贝标签与颜色文件最后把航拍数据集中的fpv-labels.txt和fpv-deploy-colors.txt两个文件复制到 Jetson 上的模型快照目录中。完成以上三步后FCN-Alexnet 模型快照即与 TensorRT 兼容可以开始推理。在 Jetson 上运行分割模型在 Jetson 上测试自定义分割网络模型快照使用命令行工具segnet示例源码位于 examples/segnet/segnet.cpp其通过 c/segNet.h 的segNet::Create(cmdLine)解析命令行参数并创建网络实例。为方便起见先把解压后的快照路径存入$NET变量然后运行$ NET20170421-122956-f7c0_epoch_5.0 $ ./segnet drone_0428.png output_0428.png \ --prototxt$NET/deploy.prototxt \ --model$NET/snapshot_iter_22610.caffemodel \ --labels$NET/fpv-labels.txt \ --colors$NET/fpv-deploy-colors.txt \ --input_blobdata \ --output_blobscore_fr该命令在测试图像drone_0428.png仓库 data/images 中已提供该帧上运行指定的分割模型并输出带分割覆盖层的结果图。参数含义说明参数作用--prototxt网络部署结构文件经 TensorRT 兼容性修补后的deploy.prototxt--model训练得到的 Caffe 模型权重snapshot_iter_22610.caffemodel--labels类别标签文本文件fpv-labels.txt--colors类别颜色文本文件fpv-deploy-colors.txt--input_blob输入层 blob 名称这里为data--output_blob输出层 blob 名称这里为score_fr需要特别指出的是本教程示例中 FCN-Alexnet 使用data/score_fr作为输入输出 blob而 jetson-inference 自带的预训练分割模型则统一使用input_0/output_0作为默认 blob 名称见 c/segNet.h 中SEGNET_DEFAULT_INPUT与SEGNET_DEFAULT_OUTPUT宏定义二者不可混用。segNet 的完整命令行参数除了上述示例参数segNet还支持通过 c/segNet.h 中SEGNET_USAGE_STRING定义的一整套命令行选项。其中与自定义模型相关的核心参数已在上表列出此外还包括--networkNETWORK加载预训练模型可选项包括fcn-resnet18-cityscapes-512x256、fcn-resnet18-cityscapes-1024x512、fcn-resnet18-cityscapes-2048x1024、fcn-resnet18-deepscene-576x320、fcn-resnet18-deepscene-864x480、fcn-resnet18-mhp-512x320、fcn-resnet18-mhp-640x360、fcn-resnet18-voc-320x320默认、fcn-resnet18-voc-512x320、fcn-resnet18-sun-512x400、fcn-resnet18-sun-640x512。这些预训练模型的注册信息可在 data/networks/models.json 的segmentation条目中查看含下载 URL、ONNX 文件、标签与颜色文件路径--modelMODEL要加载的自定义模型路径支持 caffemodel、uff 或 onnx 格式--prototxtPROTOTXT自定义 prototxt 路径仅 caffemodel 需要--labelsLABELS类别标签文本文件路径--colorsCOLORS类别颜色文本文件路径--input-blobINPUT输入层名称默认input_0--output-blobOUTPUT输出层名称默认output_0--alphaALPHA叠加层的 alpha 混合值范围 0-255默认 150--visualizeVISUALIZE可视化标志合法组合为overlay、mask例如--visualizeoverlay,mask--profile在 TensorRT 中启用逐层 profiling。可视化模式与处理流水线示例程序 examples/segnet/segnet.cpp 展示了完整的推理与可视化流水线。它按照--visualize标志分配三类输出缓冲区overlay原图 alpha 混合的分割着色层VISUALIZE_OVERLAYmask纯分割掩码图仅显示类别颜色VISUALIZE_MASK当同时输出 overlay 时 mask 尺寸减半并排布在 composite 图中compositeoverlay 与 mask 拼接的复合图。主循环中对每一帧依次执行net-Process(...)推理、net-Overlay(...)生成叠加图与net-Mask(...)生成掩码并通过cudaOverlay拼合输出examples/segnet/segnet.cpp 第 230-262 行。同时segNet提供了SetOverlayAlpha()设置混合透明度、FilterModeFromStr()选择掩码/叠加图的过滤方式point最近邻采样或linear双线性滤波以及SetClassColor()自定义单个类别的可视化颜色等运行时能力见 c/segNet.h。更多预训练分割模型除了本教程训练的航拍模型仓库还包含在其他分割数据集上预训练好的模型包括Cityscapes、SYNTHIA与Pascal-VOC数据集上的版本。从源码结构看data/networks/models.json 的segmentation条目完整登记了这批模型的别名、下载地址与解压目录结构覆盖fcn-resnet18-cityscapes-*、fcn-resnet18-deepscene-*、fcn-resnet18-mhp-*、fcn-resnet18-voc-*与fcn-resnet18-sun-*等系列。这些模型可用--network参数直接指定加载无需走完整的 DIGITS 训练流程适合作为快速上手语义分割或迁移学习的起点。小结本文以 NVIDIA Aerial Drone Dataset 为实战案例完整走通了 jetson-inference 语义分割的自训练闭环数据准备下载与解压→ DIGITS 数据集导入 → FCN-Alexnet 预训练模型生成net surgery→ DIGITS 模型训练与推理验证 → deploy.prototxt 的 TensorRT 兼容性修补 → Jetson 端 segnet 命令行推理。同时结合 c/segNet.h、examples/segnet/segnet.cpp 与 data/networks/models.json 等仓库源码说明了segNet的输入输出语义、完整命令行参数与 overlay/mask 可视化流水线的底层实现。基于该流程读者可以迁移到任意自定义分割数据集上训练出能在 Jetson 上以 TensorRT 加速运行的逐像素分类模型。赞分享人工智能计算机视觉深度学习微调【免费下载链接】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点击查看免费下载相关推荐d3-delaunay 完全指南Voronoi 图与德劳内三角剖分究竟能做什么d3 delaunay 完全指南Voronoi 图与德劳内三角剖分究竟能做什么 d3 delaunay 是 D3 生态中一个专注于 几何计算 的快速库它的人工智能计算机视觉深度学习微调如何快速上手SocketIoClientDotNet3分钟实现实时通信功能如何快速上手SocketIoClientDotNet3分钟实现实时通信功能 SocketIoClientDotNet是一个强大的Socket.IO客户端库专人工智能计算机视觉深度学习微调Aeroscapes无人机语义分割数据集从入门到实战完全指南Aeroscapes无人机语义分割数据集从入门到实战完全指南 Aeroscapes是一个专为无人机视觉任务设计的语义分割数据集包含3269张从商业无人机采集上一篇Serpl项目贡献指南如何为开源终端搜索替换工具贡献力量下一篇gh_mirrors/ve/version核心组件揭秘Version类实现原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考