人工智能计算机视觉深度学习微调【免费下载链接】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 仓库中的 detectnet-training.md 为核心脉络完整讲解如何基于 NVIDIA DIGITS 平台把 MS-COCO 数据集转换为 KITTI 标注格式、导入检测数据集、训练以 GoogLeNet 为骨干的 DetectNet 目标检测模型并在 Jetson 上借助 TensorRT 完成推理部署。读完本文你将掌握 DetectNet 的数据格式规范、DIGITS 训练参数含 Batch Size 与 Batch Accumulation 的显存权衡、prototxt 网络结构原理以及detectnet命令行工具的使用方法。背景从图像分类到目标定位前几篇教程中如 imagenet 系列网络输出的是一整张图片的类别概率即这张图里是什么。而本文要解决的是第二个深度学习能力——目标检测Object Detection不仅要知道图里有什么还要定位出物体在画面中的位置即提取其**边界框bounding box**坐标。在 jetson-inference 中这个能力由detectNet类承担它接收 2D 图像作为输入输出一组检测到的边界框坐标列表。与纯分类模型不同训练检测模型时除了源图像本身训练数据集中还必须包含边界框坐标标签。本文的做法是先使用预训练的 ImageNet 识别模型如 GoogLeNet作为骨干再在带标注的检测数据集上微调。从源码看detectNet的检测结果结构体Detection包含类别 IDClassID、置信度Confidence、左右上下四边坐标Left/Right/Top/Bottom并提供IOU()、Intersects()、Expand()等几何计算方法——这些正是后处理阶段做**聚类合并clustering**时的基础设施。教程自带的预训练 DetectNet 模型仓库教程提供了以下预训练 DetectNet 模型覆盖行人、人脸、COCO 常见类别模型用途ped-100单类别行人检测器multiped-500多类别行人 行李检测器facenet-120单类别人脸检测器coco-airplaneMS COCO 飞机类别coco-bottleMS COCO 瓶子类别coco-chairMS COCO 椅子类别coco-dogMS COCO 狗类别与之前一样仓库同时提供了控制台程序和摄像头流媒体程序两种使用方式分别对应 detectnet.cpp 以及 Python 绑定示例本文重点讲解前者也就是模型训练完成后的命令行推理验证。DIGITS 中的数据格式KITTI 标注规范目标检测数据集示例可用的公开目标检测数据集包括 KITTI、MS-COCO 等。无论使用哪个数据集DIGITS 统一使用 KITTI 元数据格式来摄取检测边界框标签。这些标签是与图像文件名一一对应的文本文件文件名中的帧号与图像对应内容形如dog 0 0 0 528.63 315.22 569.09 354.18 0 0 0 0 0 0 0 sheep 0 0 0 235.28 300.59 270.52 346.55 0 0 0 0 0 0 0每行对应一个目标格式为类别名 前 3 个0对应 truncated/occluded/alpha 等 KITTI 字段 边界框的x1 y1 x2 y2四个像素坐标 后 8 个0对应 3D 尺寸、位置、朝向等 KITTI 字段。DIGITS 依赖这种类别 四坐标的行格式来解析标签。使用 coco2kitti.py 转换 MS-COCO 标注仓库在tools/coco2kitti.py中提供了把 MS-COCO 类别转换为 KITTI 格式的脚本。其核心逻辑coco2kitti(catNms, annFile)函数要点如下通过pycocotools.coco.COCO加载 COCO 的 JSON 标注文件对每一张图片按catNms指定的类别列表筛选注解 ID将 COCO 的bbox格式为[x, y, width, height]转换为 KITTI 的对角坐标格式[x, y, xwidth, yheight]输出到./labels/目录下、与图片同名的.txt文件中每行写类别名 3个0 四坐标 8个0类别名中的空白字符会被移除catname.replace( ,)脚本设计为运行在 COCO 标注目录下默认读取../annotations/instances_train2014.jsoncatNms默认为空列表此时会输出所有类别若./labels目录已存在则直接退出避免覆盖。转换成 DIGITS/KITTI 目录结构后即可在 DIGITS 中作为数据集导入。下载 MS-COCO 检测数据集在 DIGITS 服务器的终端中下载并解压已经预处理为 DIGITS/KITTI 格式的示例 MS-COCO 类别子集包含 airplane、bottle、chair、dog 四个类的训练数据$ wget --no-check-certificate https://nvidia.box.com/shared/static/tdrvaw3fd2cwst2zu2jsi0u43vzk8ecu.gz -O coco.tar.gz HTTP request sent, awaiting response... 200 OK Length: 5140413391 (4.5G) [application/octet-stream] Saving to: ‘coco.tar.gz’ coco 100%[] 4.5G 3.33MB/s in 28m 22s 2017-04-17 10:41:19 (2.5 MB/s) - ‘coco.tar.gz’ saved [5140413391/5140413391] $ tar -xzvf coco.tar.gz注意该压缩包约 4.5GB下载耗时取决于带宽。若需要其他 MS-COCO 类别可使用仓库中的coco2kitti.py自行转换。在 DIGITS 中导入检测数据集解压后在浏览器中打开 DIGITS 服务器实例进入Datasets选项卡从下拉菜单中选择新建Detection Dataset。在表单中填写以下字段以 dog 类为例路径指向解压目录下的对应文件夹字段值Training image foldercoco/train/images/dogTraining label foldercoco/train/labels/dogValidation image foldercoco/val/images/dogValidation label foldercoco/val/labels/dogPad image (Width x Height)640 x 640Custom classesdontcare, dogGroup NameMS-COCODataset Namecoco-dog设置完成后点击页面底部的Create按钮DIGITS 会启动数据导入任务。等导入完成即可开始创建检测模型。为什么是 640×640 与 KITTI 格式从仓库中的data/networks/detectnet.prototxt可以看到网络的数据层deploy_data定义的输入形状为1 × 3 × 640 × 640即单张 3 通道 640×640 图像。数据变换层DetectNetTransformation中的image_size_x: 640、image_size_y: 640也与之呼应。因此 DIGITS 表单中Pad image填640 x 640是为了让输入图像尺寸与网络定义严格对齐保证训练与部署阶段一致。创建 DetectNet 模型并配置训练数据导入完成后回到 DIGITS 首页进入Models选项卡从下拉菜单选择新建Detection Model然后按以下参数填写表单字段值Select Datasetcoco-dogTraining epochs100Subtract MeannoneSolver TypeAdamBase learning rate2.5e-05同时勾选Show advanced learning options并设置高级选项值PolicyExponential DecayGamma0.99选择合适的 Batch Size显存权衡DetectNet 网络的默认 batch size 为 10训练时最多会占用约 12GB GPU 显存。如果你的 DIGITS 服务器 GPU 显存不足 12GB可以通过Batch Accumulation字段来降低单次批大小、等效保持梯度累积从而在更小的显存上完成训练。参考下表GPU 显存Batch SizeBatch Accumulation4GB258GB5212GB 或更大[网络默认值]10留空即 1在 12GB 及以上显存的显卡上直接保留 Batch Size 默认值、Batch Accumulation 留空即可显存不足时按上表设置。这一点与detectnet.prototxt中数据层batch_size: 10训练阶段的默认定义一致——该文件里训练数据层batch_size: 10验证数据层batch_size: 6部署数据层为Input类型。指定 DetectNet 网络结构prototxt在网络区域选择Custom Network选项卡把仓库中的data/networks/detectnet.prototxt全部内容复制粘贴进去。这个文件是 DetectNet 训练的完整 Caffe 网络定义值得理解其结构数据/输入层训练阶段使用 LMDB 后端的数据层train_data/train_labelbatch 10验证阶段使用val_data/val_labelbatch 6部署阶段使用Input层deploy_data数据变换层训练阶段使用DetectNetTransformation其中detectnet_groundtruth_param定义网格步长stride: 16、覆盖度缩放scale_cvg: 0.4、网格框类型GRIDBOX_MIN、覆盖度类型RECTANGULAR、最小覆盖长度min_cvg_len: 20、是否目标归一化obj_norm: true、图像尺寸 640×640以及类别映射object_class: { src: 1 dst: 0 }detectnet_augmentation_param则定义了训练时的数据增强裁剪概率crop_prob: 1、x/y 平移量shift_x: 32/shift_y: 32、翻转概率flip_prob: 0.5、缩放概率scale_prob: 0.4范围 0.8–1.2、色调旋转概率hue_rotation_prob: 0.8、去饱和概率desaturation_prob: 0.8等同时通过transform_param设置mean_value: 127标签转换层通过Slice把标签切成前景、边界框、尺寸、目标、覆盖度等通道再用若干Concat/Eltwise层构造归一化后的训练标签卷积主干网络从conv1/7x7_s2开始完整复刻 GoogLeNetInception v1的 inception 模块inception_3a、inception_3b、inception_4a……直到inception_5b/output这正是 DetectNet 之所以强烈建议使用 GoogLeNet 预训练权重的原因——网络结构本身派生自 GoogLeNet输出层cvg/classifier1 通道卷积 Sigmoid输出名为coverage的覆盖度热图bbox/regressor4 通道卷积输出名为bboxes的边界框网格损失层边界框使用L1Lossloss_weight: 2覆盖度使用EuclideanLoss聚类与 mAP 层clusterPython 层param_str: 640, 640, 16, 0.6, 2, 0.02, 22, 1把覆盖度与边界框网格聚合成bbox-list验证阶段通过cluster_gt、score、mAP三个 Python 层计算平均精度均值。使用预训练 GoogLeNet 权重初始化训练由于 DetectNet 派生自 GoogLeNet强烈建议使用 GoogLeNet 的预训练权重初始化这能显著加速训练并提升稳定性。在 DIGITS 服务器上执行wget http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel然后在 DIGITS 表单的Pretrained Model字段中指定该 caffemodel 的路径。最后选择一个 GPU设置模型分组与名称字段值Group NameMS-COCOModel NameDetectNet-COCO-Dog点击底部Create按钮开始训练。在 DIGITS 中验证模型推理效果让训练任务运行一段时间例如 50 个 epoch直到 mAPMean Average Precision曲线开始上升。需要特别说明的是由于 DetectNet 损失函数计算 mAP 的方式特殊mAP 的量纲并不一定是 0–100即便 mAP 只有 5–10 也可能说明模型已经可用。以示例 COCO 数据集的大小在近期 GPU 上跑完 100 个 epoch 大约需要几个小时。此时可以在训练页面Trained Models区域下测试新模型的推理效果将Visualization Model设置为Bounding Boxes在Test a Single Image下选择一张测试图例如/coco/val/images/dog/000074.png点击Test One按钮页面会显示带边界框叠加的推理结果。这一步的目的就是在把模型部署到 Jetson 之前先确认模型确实学到了目标定位能力。将训练好的模型部署到 Jetson 并命令行推理指定自训练的 DIGITS 模型把 DIGITS 训练完成后导出的 snapshot包含deploy.prototxt与 caffemodel拷贝到 Jetson。为了方便先把 snapshot 路径保存到环境变量$NET$ NET20170504-190602-879f_epoch_100然后运行detectnet处理单张测试图输入图dog_0.jpg在仓库 data/images 目录下可找到并显式指定 prototxt、caffemodel 以及三个关键 blob 名称$ ./detectnet dog_0.jpg output_0.jpg \ --prototxt$NET/deploy.prototxt \ --model$NET/snapshot_iter_38600.caffemodel \ --input_blobdata \ --output_cvgcoverage \ --output_bboxbboxes注意如果你的 DetectNet 层名与教程默认一致即使用仓库的detectnet.prototxt训练的模型input_blob、output_cvg、output_bbox这三个参数可以省略。它们的默认值分别对应 c/detectNet.h 中的DETECTNET_DEFAULT_INPUTdata、DETECTNET_DEFAULT_COVERAGEcoverage、DETECTNET_DEFAULT_BBOXbboxes——这些宏正好与 prototxt 中数据层、coverage/sig层输出、bbox/regressor层输出的 blob 名一一对应。这些可选参数是为使用了自定义层名的 DetectNet 变体准备的。加载仓库自带预训练模型如果不想自己训练也可以直接用仓库附带的预训练 snapshot通过--network参数切换检测模型默认网络是 PedNet即行人检测。C 版本$ ./detectnet peds-004.jpg output.jpgPython 版本detectnet-console.py$ ./detectnet-console.py peds-004.jpg output.jpg可用预训练检测模型一览下表列出了可用于 模型下载 的预训练目标检测网络及其对应的--network命令行参数与网络类型枚举值模型CLI 参数NetworkType 枚举目标类别SSD-Mobilenet-v1ssd-mobilenet-v1SSD_MOBILENET_V191COCO 类别SSD-Mobilenet-v2ssd-mobilenet-v2SSD_MOBILENET_V291COCO 类别SSD-Inception-v2ssd-inception-v2SSD_INCEPTION_V291COCO 类别DetectNet-COCO-Dogcoco-dogCOCO_DOG狗DetectNet-COCO-Bottlecoco-bottleCOCO_BOTTLE瓶子DetectNet-COCO-Chaircoco-chairCOCO_CHAIR椅子DetectNet-COCO-Airplanecoco-airplaneCOCO_AIRPLANE飞机ped-100pednetPEDNET行人multiped-500multipedPEDNET_MULTI行人、行李facenet-120facenetFACENET人脸提示如需下载更多网络运行 模型下载工具$ cd jetson-inference/tools后执行$ ./download-models.sh。此外从 c/detectNet.h 的DETECTNET_USAGE_STRING可以看到当前版本还支持peoplenet、peoplenet-pruned、dashcamnet、trafficcamnet、facedetect等网络选项。运行不同的检测模型通过--network标志即可切换模型默认是 PedNet 行人检测。以 COCO 系列模型为例# C $ ./detectnet --networkcoco-dog dog_1.jpg output_1.jpg # Python $ ./detectnet-console.py --networkcoco-dog dog_1.jpg output_1.jpg# C $ ./detectnet --networkcoco-bottle bottle_0.jpg output_2.jpg # Python $ ./detectnet-console.py --networkcoco-bottle bottle_0.jpg output_2.jpg# C $ ./detectnet --networkcoco-airplane airplane_0.jpg output_3.jpg # Python $ ./detectnet-console.py --networkcoco-airplane airplane_0.jpg output_3.jpg上述输入图片dog_1.jpg、bottle_0.jpg、airplane_0.jpg均位于仓库 data/images 目录。多类别目标检测模型部分模型支持同时检测多种类别。例如使用multiped模型处理同时含行人与行李/随身物品的图像时第 2 个类别会用绿色叠加层渲染区别于行人的默认颜色类别颜色由detectNet::GetClassColor/SetClassColor管理见 c/detectNet.h# C $ ./detectnet --networkmultiped peds-003.jpg output_4.jpg # Python $ ./detectnet-console.py --networkmultiped peds-003.jpg output_4.jpgdetectnet 命令行参数速查从 c/detectNet.h 的DETECTNET_USAGE_STRING可整理出与推理部署直接相关的核心参数参数说明默认值--networkNETWORK加载的预训练模型名称ssd-mobilenet-v2代码默认--modelMODEL自定义模型路径caffemodel/uff/onnx—--prototxtPROTOTXT自定义 prototxt 路径仅 caffemodel 需要—--labelsLABELS类别标签文本文件路径—--input-blobINPUT输入层名称data--output-cvgCOVERAGE覆盖度/置信度输出层名称coverage--output-bboxBOXES边界框输出层名称bboxes--mean-pixelPIXEL输入减去的均值像素0.0--confidenceCONF检测最小置信度阈值0.5--clusteringCLUSTER聚类最小重叠面积阈值0.75--alphaALPHA叠加层 alpha 混合值0–255120--overlayOVERLAY叠加选项box/lines/labels/conf/none组合默认叠加--profile开启 TensorRT 层级性能剖析关闭其中--confidence与--clustering两个阈值直接对应 c/detectNet.cpp 中的后处理逻辑在postProcessDetectNet()中网络输出的覆盖度热图coverage中小于mConfidenceThreshold的网格单元会被跳过符合条件的边界框再进入clusterDetections()按重叠面积阈值合并——这正是先按置信度筛框、再按重叠度聚簇的 DetectNet 后处理全流程。此外Detection结构体还带有TrackID等跟踪字段可与 c/tracking 目录下的 objectTracker 配合实现跨帧跟踪。下一步模型在 Jetson 上完成命令行验证后接下来就可以把同一模型接入实时摄像头流通过--input参数指定 CSI 摄像头或视频文件--output指定显示/编码输出detectnet程序源码见 examples/detectnet/detectnet.cpp会逐帧调用detectNet::Detect()完成检测与叠加渲染。这样从 DIGITS 数据准备 → 模型训练 → snapshot 导出 → Jetson 推理的完整 DetectNet 部署链路就全部打通了。赞分享人工智能计算机视觉深度学习微调【免费下载链接】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点击查看免费下载相关推荐如何快速上手SocketIoClientDotNet3分钟实现实时通信功能如何快速上手SocketIoClientDotNet3分钟实现实时通信功能 SocketIoClientDotNet是一个强大的Socket.IO客户端库专人工智能计算机视觉深度学习微调NVIDIA DIGITS实战使用DetectNet进行目标检测训练指南NVIDIA DIGITS实战使用DetectNet进行目标检测训练指南 引言为什么选择DIGITS和DetectNet 在深度学习目标检测领域数据准备如何配置 Umi-OCR 的 HTTP 接口允许局域网设备访问如何配置 Umi OCR 的 HTTP 接口允许局域网设备访问 默认情况下Umi OCR 的 HTTP 接口只监听本机环回地址 127.0.0.1 其他设人工智能计算机视觉深度学习微调上一篇Higress AI Proxy 插件完全指南统一 OpenAI 协议接入 40 AI 服务提供商下一篇10分钟搞定抖音视频去水印批量下载从单条视频到主页追更创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
