ARTICLE DETAIL

资讯详情

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

基于 ONNX 的 DUC 语义分割模型实战:ResNet101_DUC_HDC 的推理、验证与 INT8 量化指南

基于 ONNX 的 DUC 语义分割模型实战:ResNet101_DUC_HDC 的推理、验证与 INT8 量化指南 人工智能大模型计算机视觉NLP模型评测【免费下载链接】modelsA collection of pre-trained, state-of-the-art models in the ONNX format项目地址https://gitcode.com/gh_mirrors/model/models点击查看免费下载本指南以 ONNX Model Zoo 仓库中 validated/vision/object_detection_segmentation/duc 目录下的 ResNet101_DUC_HDC 系列模型为主线系统讲解 Dense Upsampling ConvolutionDUC语义分割模型的原理、三个 ONNX 版本的获取、基于 MXNet 的端到端推理管线、Cityscapes 数据集上的 mIOU 验证方法以及基于 Intel® Neural Compressor 的 INT8 量化流程。读完本文你将能够独立完成 DUC 模型的加载、预处理、推理、结果可视化与精度验证并掌握将其量化为 INT8 模型的具体操作步骤。应用场景面向城市街景的逐像素语义分割DUCDense Upsampling Convolution是一个语义分割模型对于输入图像模型会为图像中的每一个像素预测其所属的预定义类别从而实现逐像素级的场景理解。模型在 Cityscapes 数据集包含城市街景图像上训练得到因此非常适合自动驾驶系统中的道路场景感知任务——例如区分道路、人行道、建筑、车辆、行人、交通标志等语义类别。由于采用逐像素分类而非目标框回归语义分割能提供比目标检测更精细的空间信息在自动驾驶、智能交通监控、地图测绘等需要精确理解场景结构的应用中具有直接价值。模型以 mIOUmean Intersection Over Union平均交并比作为核心精度指标详见 验证指标 一节。技术原理DUC 与 HDC 两大核心创新ResNet101_DUC_HDC 是一个以图像分类网络 ResNet101 作为骨干backend的 CNN 语义分割模型其精度提升来自论文 Understanding Convolution for Semantic Segmentation 中提出的两项关键技术Dense Upsampling ConvolutionDUC替代传统双线性上采样的密集上采样卷积。双线性上采样在放大特征图时会丢失大量细节信息而 DUC 通过在编码阶段学习一组密集的像素级特征将输出通道组织成d²d 为下采样率个子部分从而在上采样时直接恢复出像素级的预测信息显著提升分割边界的精细度。Hybrid Dilated ConvolutionHDC在编码阶段采用的混合膨胀卷积框架。标准膨胀卷积虽然能扩大感受野以聚合全局信息但连续使用相同膨胀率会引发棋盘格感受野问题gridding 效应导致部分像素的信息无法被感知。HDC 通过交替使用不同膨胀率的卷积核来缓解这一问题使网络既能扩大感受野、聚合全局上下文又能保持像素级特征的一致性。从配套代码可以印证 DUC 层的核心行为后处理脚本 duc-postprocess.py 中定义了下采样率ds_rate 8、cell_width 2并将网络输出labels重排为(label_num, 4, 4, feat_height, feat_width)后按(0, 3, 1, 4, 2)转置再 reshape——这正对应 DUC 将特征图划分为d²个子部分此处8/24再重组为完整分割图的解码过程。模型获取三个 ONNX 版本的差异与选择Model文件ONNX 版本Opset 版本mIOU (%)ResNet101_DUC_HDCResNet101-DUC-7.onnx1.2.2781.92ResNet101_DUC_HDC-12ResNet101-DUC-12.onnx1.9.01281.92ResNet101_DUC_HDC-12-int8ResNet101-DUC-12-int8.onnx1.9.01281.62三个模型文件均存放在 model 目录 下由 Git LFS 托管仓库中为 LFS 指针文件实际模型体积约 248.6 MB/248.6 MB/62.5 MB。选择建议Opset 7 版本兼容性最广适合 ONNX 1.2.2 时代的运行时与旧推理环境Opset 12 版本与新版 ONNX1.9.0配合使用是后续量化操作的基准模型Opset 12 INT8 版本在 Opset 12 基础上经静态量化得到体积压缩至约四分之一。关于 INT8 版本官方对比数据说明与 ResNet101_DUC_HDC-12 相比ResNet101_DUC_HDC-12-int8 的 mIOU 下降比例仅为0.37%而性能提升为1.69x。需要注意的是性能数据与测试硬件强相关上述数据采集环境为Intel® Xeon® Platinum 8280 处理器、1 路 4 核每实例、CentOS Linux 8.3、数据 batch size 为 1。推理流程基于 MXNet 的端到端管线仓库使用 MXNet 框架执行推理完整流程记录在 duc-inference.ipynb 中。核心思路是通过mxnet.contrib.onnx.import_model将 ONNX 模型导入为 MXNet 符号与参数再构建mx.mod.Module绑定参数执行前向推理。下面按阶段拆解。输入与运行环境由于模型在 Cityscapes 街景图像上训练输入图像最好为街景场景以获得最佳效果对图像尺寸没有硬性约束Notebook 示例中使用了一张 png 图像。推理前需按 Notebook 要求安装依赖Protobuf 编译器sudo apt-get install protobuf-compiler libprotoc-dev、ONNXpip install onnx、MXNetpip install mxnet-cu90mkl --pre -U其中--pre为 ONNX 兼容性所需的预构建版本-U用于清理旧版本、numpy、OpenCV 与 Pillow同时需要将 cityscapes_labels.py 放置在与 Notebook 相同的目录中该脚本定义了分割类别标签见下文后处理部分。预处理边界外推与均值减除DUC 层会把图像划分为d²个子部分因此输入图像需要先外推extrapolate一个小的边界以保证经过 DUC 层重排后能得到精确的 reshape 结果随后再进行均值减除归一化。对应实现见 duc-preprocess.pydef preprocess(im, rgb_mean): test_img im.astype(np.float32) test_shape [im.shape[0], im.shape[1]] cell_shapes [math.ceil(l / 8) * 8 for l in test_shape] # 对齐到 8 的整数倍 test_img cv.copyMakeBorder(test_img, 0, max(0, int(cell_shapes[0]) - im.shape[0]), 0, max(0, int(cell_shapes[1]) - im.shape[1]), cv.BORDER_CONSTANT, valuergb_mean) # 用均值填充边界 test_img np.transpose(test_img, (2, 0, 1)) # HWC - CHW for i in range(3): test_img[i] - rgb_mean[i] # 逐通道均值减除 test_img np.expand_dims(test_img, axis0) # 增加 batch 维度 return mx.ndarray.array(test_img)关键点解读高宽先向上取整到8 的整数倍与下采样率 8 对应差值部分用 RGB 均值常量填充确保 DUC 层重排后的尺寸精确执行逐通道均值减除Notebook 推理示例中直接使用cv.mean(im)计算输入图像均值验证流程则使用 Cityscapes 统计均值(122.675, 116.669, 104.008)最终输出为 MXNet ndarray形状(1, 3, H, W)。前向推理与输出模型加载后通过mod.forward(batch([imgs]), is_trainFalse)执行前向传播mod.get_outputs()[0]取回网络输出。网络输出是一个形状为(1, label_num, H * W)的张量其中label_num 19为参与训练与评估的类别数H、W为输出分割图的高和宽。也就是说网络的原始输出是摊平的一维类别概率分布需要后处理才能还原为二维分割图。后处理重排、argmax 与着色后处理将输出张量重排并缩放为形状(H, W, label_num)的 softmax 图再对 softmax 图执行 argmax 得到原始标签图。对应实现见 duc-postprocess.py核心步骤按label_num × 4 × 4 × feat_h × feat_w重排输出转置后 reshape 还原空间结构对应 DUC 解码4 ds_rate / cell_width裁掉预处理时外推的边界转置为(H, W, label_num)并线性插值缩放到目标尺寸对类别维执行np.argmax得到raw_labels计算置信度confidence max(softmax, axis0).mean()即 softmax 最大值在全图上的平均取值在[0, 1]越高表示模型对像素分类越有信心调用colorize()生成彩色分割图并用cv.addWeighted(im, 0.5, result_img, 0.5, 0)生成原图与分割图各占 50% 的融合blended可视化图。类别与颜色映射定义在 cityscapes_labels.py 中Cityscapes 原始标注包含 30 个类别其中 19 个参与训练与评估trainId 0–18其余归为 void 类trainId 255评估时忽略。例如 roadtrainId 0颜色 (128,64,128)、sidewalktrainId 1、buildingtrainId 2、cartrainId 13、persontrainId 11等。着色时通过get_palette()将 trainId 映射到 RGB 调色板trainId 255void统一着色为黑色。验证指标与验证流程mIOU 的计算与复现mIOU 指标定义mean Intersection Over UnionmIOU是本模型的验证指标。对于每个类别计算输出分割图与目标分割图之间像素标签的交并比IOUintersection over union即两类像素集合的交集大小与并集大小之比再将所有类别的 IOU 取平均得到 mIOU。验证流程仓库使用 MXNet 在 Cityscapes 验证集上计算 mIOU完整流程记录在 duc-validation.ipynb 中涉及的三个辅助脚本为cityscapes_loader.pyCityLoader类继承自mx.io.DataIter负责验证图像与标签的加载、裁剪、缩放与批量产出支持多进程 worker 并行加载utils.py供加载器使用的辅助函数如get_single_image_duc()完成缩放、中心裁剪、边界填充、均值减除与标签处理replace_city_labels()将原始 id 映射为 trainIdcityscapes_labels.py类别标签定义。Notebook 中的关键配置参数val_args包括RGB 均值(122.675, 116.669, 104.008)、batch size 16、输入尺寸800×800、下采样率ds_rate 8、cell_width 2、忽略标签ignore_label 255、类别数label_num 19。验证时模型输出与标签送入自定义的IoUMetric继承mx.metric.EvalMetricreset()将每个类别的_tptrue positive 计数与_denom预测与真值并集计数初始化为 0update()对网络输出执行argmax_channel得到预测标签逐类统计tp pred gt与denom pred ∪ gt - (pred ∩ ignore)即扣除被忽略的 void 像素累加后计算iou tp / (denom eps)eps 1e-6防止除零最终对 19 个类别求平均得到 mIOU。验证时对每个 val 图像生成 7 种不同裁剪参数512, str(256 * i)for i in 1..7全部批次遍历完毕后metric.get()[1]即为最终 mIOU。文档说明上述 mIOU 分数与论文报告一致。Cityscapes 数据集下载与配置Cityscapes 是一个大规模城市街景语义理解数据集包含 50 个城市、不同季节、多样场景布局与背景的5000 张带精细标注图像共有 30 个类别其中 19 个用于训练与评估。训练集、验证集、测试集分别包含2975、500、1525张精细标注图像。下载前往 Cityscapes 官网下载页面注册账号已有账号直接登录下载以下两个文件文件名大小说明leftImg8bit_trainvaltest.zip11 GBtrain/val/test 图像gtFine_trainvaltest.zip241 MBtrain 与 val 集的精细标注配置将两个 zip 分别解压到文件夹leftImg8bit_trainvaltest与gtFine_trainvaltest在训练/验证时使用这两个文件夹内部的 train/val 目录路径即可验证 Notebook 中即通过data_dir与label_dir指向leftImg8bit/val与gtFine/val。请注意该数据集受版权保护使用前需参考其官方网站的引用citation页面说明。INT8 量化基于 Intel® Neural Compressor 的 PTQ 流程ResNet101_DUC_HDC-12-int8 是对 ResNet101_DUC_HDC-12 模型进行量化得到的。量化工具为 Intel® Neural Compressor量化后端为 onnxruntime采用训练后量化PTQPost-Training Quantization方式。量化环境组件版本onnx1.9.0onnxruntime1.10.0准备模型首先下载基准模型Opset 12 版本wget https://github.com/onnx/models/raw/main/vision/object_detection_segmentation/duc/model/ResNet101-DUC-12.onnx执行量化使用配套的调优脚本执行量化命令格式如下bash run_tuning.sh --input_modelpath/to/model \ # model path as *.onnx --configDUC.yaml \ --data_path/path/to/leftImg8bit/val \ --label_path/path/to/gtFine/val \ --output_modelpath/to/save参数说明--input_model待量化的模型路径格式为*.onnx--config量化配置文件DUC.yaml其中定义了量化策略与调优目标如精度下降容忍度--data_path量化校准所用验证图像路径指向 Cityscapes 的leftImg8bit/val--label_path对应标注路径指向gtFine/val--output_model量化后模型的保存路径。该流程与 ONNX Model Zoo 的整体 INT8 策略一致INT8 模型由 Intel® Neural Compressor 生成它支持自动精度驱动调优帮助用户快速找到最佳量化模型。量化后模型体积从约 248.6 MB 降至 62.5 MBmIOU 仅从 81.92% 微降至 81.62%而推理性能提升约 1.69 倍具体性能依测试硬件而异。参考资料与许可证论文Understanding Convolution for Semantic SegmentationWang 等人arXiv:1702.08502DUC 与 HDC 技术的原始出处原始实现TuSimple-DUC 仓库使用 MXNet 框架量化工具Intel® Neural Compressoronnxruntime 后端模型贡献者abhinv95Amazon AI、mengniwang95Intel、airMengIntel、ftian1Intel、hshen14Intel。本目录下的模型与脚本遵循Apache 2.0开源许可证仓库根目录 README.md 中另有说明ONNX Model Zoo 已进入归档状态自 2025 年 7 月 1 日起不再提供 LFS 模型下载历史模型可转由 Hugging Face 上的 onnxmodelzoo 组织获取。赞分享人工智能大模型计算机视觉NLP模型评测【免费下载链接】modelsA collection of pre-trained, state-of-the-art models in the ONNX format项目地址https://gitcode.com/gh_mirrors/model/models点击查看免费下载相关推荐基于 ONNX 的 SSD 单阶段目标检测模型实战指南推理、预处理与 INT8 量化基于 ONNX 的 SSD 单阶段目标检测模型实战指南推理、预处理与 INT8 量化 本指南以 models 仓库中 validated/vision/obj人工智能大模型计算机视觉NLP模型评测ONNX 模型仓库实战指南EfficientNet-Lite4 图像分类模型的推理、预处理与 INT8 量化ONNX 模型仓库实战指南EfficientNet Lite4 图像分类模型的推理、预处理与 INT8 量化 本篇技术指南以 ONNX 模型仓库中 Effic人工智能大模型计算机视觉NLP模型评测Mask R-CNN 实例分割 ONNX 模型实战模型变体、预处理、推理后处理与 INT8 量化全解析Mask R CNN 实例分割 ONNX 模型实战模型变体、预处理、推理后处理与 INT8 量化全解析 本指南以 ONNX Model Zoo 中经过验证的人工智能大模型计算机视觉NLP模型评测上一篇ArchiSteamFarm与第三方服务集成通知系统与Webhook下一篇10个关键步骤Scala School生产环境部署与运维最佳实践指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表