[具身智能-632]:efficientnasnet、googlenet、resnet18、vargconvnet对比
test_efficientnasnet_m.py test_googlenet.py test_mobilenetv1.py test_resnet18.py test_vargconvnet.py 这几种CNN网络介绍与对比
5 个网络完整介绍 + RDK X5 部署场景横向对比
文件清单:test_resnet18.py、test_mobilenetv1.py、test_googlenet.py、test_vargconvnet.py、test_efficientnasnet_m.py全部都是图像分类 CNN,适配地平线 RDK X3/X5 BPU 部署(对应你手上 NV12 输入.bin 模型 demo 体系,ImageNet-1000)。
前置背景:
- 传统手工设计 CNN:GoogLeNet、ResNet18、MobileNetV1
- 搜索架构 NAS:EfficientNASNet-M
- 地平线自研高效架构:VarGConvNet(面向 BPU 硬件优化)
一、逐个网络简介
1. ResNet18(test_resnet18.py,你当前正在运行)
论文:Deep Residual Learning for Image Recognition(2015)核心创新:残差连接 Shortcut Connection,解决深度网络梯度消失,可以堆叠更深网络。
- 结构:18 层卷积网络,基础模块
Conv-BN-ReLU + 残差分支 - 卷积:标准 3×3 普通卷积
- 参数量:~11.7M
- 计算量:FLOPs ~1.8G
✅ 优点
- 工业界最通用基线,预训练权重极多;
- 结构规整,BPU 调度友好;
- 训练稳定,微调简单; ❌ 缺点
- 没有深度可分离卷积,算力消耗大于轻量化网络;
- 单纯堆叠 3×3 卷积,移动端 / 边缘端算力利用率一般。
适用场景:通用分类、简单缺陷检测、作为检测网络 Backbone 基线。
2. MobileNetV1(test_mobilenetv1.py)
论文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications(2017)核心创新:深度可分离卷积 Depthwise Conv + Pointwise Conv,大幅削减计算量。
- 结构:全部由
DW Conv + PW Conv串联 - 参数量:~4.2M
- FLOPs:~0.57G
✅ 优点
- 初代轻量化标杆,算力远低于 ResNet18;
- 推理速度快; ❌ 缺点
- DW 卷积在部分 BPU / 硬件上并行效率一般;
- 精度上限不高;
- 缺少残差结构,深层训练容易不稳定;
- ReLU6 激活函数。
地平线提示:DW 卷积要关注模型编译优化策略,部分场景不如 VarGConvNet。
适用场景:极低算力设备、简单分类、低速抓拍场景。
3. GoogLeNet(Inception v1,test_googlenet.py)
论文:Going Deeper with Convolutions(2014)核心创新:Inception 模块(多尺度并行卷积:1×1、3×3、5×5 同时提取特征再 concat)
- 参数量:~6.7M(比 ResNet18 更小)
- FLOPs ~1.5G
✅ 优点
- 多尺度特征原生支持,对大小差异目标友好; ❌ 缺点
- 分支多、concat 操作频繁;
- 网络拓扑碎片化;
- BPU 硬件调度压力大,延迟波动更大;
- 比较老旧,同等算力下精度弱于 ResNet 系列。
适用场景:历史项目兼容,新项目基本不优先选用。
4. VarGConvNet(test_vargconvnet.py,地平线自研网络)
VarGConvNet = Variable Group Convolution Network地平线面向BPU 硬件量身设计轻量化 CNN,官方提供预训练 ImageNet 权重。 核心思想:可变分组卷积 + 硬件友好算子组合,平衡精度、访存、BPU 并行效率。
✅ 优点
- 针对地平线 BPU 做算子优化!同精度下,推理延迟普遍优于 MobileNetV1;
- 算子连续、分支少,减少 DDR 数据读写;
- 不需要大量 DW 卷积规避硬件短板;
- RDK 平台官方主推轻量化骨干之一; ❌ 缺点
- 第三方框架生态弱(谷歌 / 学术界不通用);
- 外部资料少,只能参考地平线文档;
⭐重点:RDK X3/X5 部署首选轻量化骨干之一适用场景:边缘实时分类、目标检测轻量化 backbone,推荐优先对比它和 MobileNet。
5. EfficientNASNet-M(test_efficientnasnet_m.py)
属于NAS 神经架构搜索得到的网络(地平线内部搜索得到系列,EfficientNASNet-M medium 版本) 区别于 Google EfficientNet;是地平线 NAS 产出模型。 原理:通过强化学习自动搜索最优卷积组合、通道数、网络深度,不是人工设计。
✅ 优点
- 在给定算力约束下,自动逼近最优精度;
- 相比手工网络更容易实现 “精度 / 速度平衡点”; ❌ 缺点
- 网络结构不规则,碎片化算子;
- 部分零散小卷积组合,极端情况下 BPU 利用率不如 VarGConvNet;
- 微调难度高于 ResNet;
分级:
- EfficientNASNet-S:小模型
- EfficientNASNet-M:中等规模(这份 demo)
- EfficientNASNet-L:大模型
适用场景:追求极致精度,愿意投入时间调编译参数;产品定型阶段选型对比实验。
二、综合横向对比表(ImageNet1k,RDK X5 实测参考维度)
定性排序:精度越高↑;推理耗时越低越好↓
表格
| 网络 | 设计方式 | 核心算子 | 参数量规模 | ImageNet 精度 (参考) | RDK X5 推理延迟特性 | 生态通用性 | 推荐优先级(RDK) |
|---|---|---|---|---|---|---|---|
| ResNet18 | 人工设计 | 标准 3×3 卷积 + 残差 | 中大 | ★★★★ | 稳定,速度中等 | ⭐⭐⭐⭐⭐ 通用基线 | ★★★★☆ |
| MobileNetV1 | 人工轻量化 | 深度可分离卷积 DW/PW | 小 | ★★★ | 较快,DW 卷积硬件存在瓶颈 | ⭐⭐⭐⭐ | ★★★☆ |
| GoogLeNet | 人工多尺度 | Inception 多分支 concat | 中小 | ★★★ | 分支多,延迟波动大 | ⭐⭐⭐ | ★★☆(新项目不推荐) |
| VarGConvNet | 地平线硬件定向人工设计 | 可变分组卷积 | 小 | ★★★★ | 轻量化里速度最优,BPU 高度适配 | ⭐⭐ | ★★★★★(轻量化首选) |
| EfficientNASNet-M | NAS 自动搜索 | 搜索混合卷积结构 | 中小 | ★★★★☆ | 速度中等,上限高,依赖编译优化 | ⭐⭐ | ★★★★(精度优先选型) |
三、选型指南(直接结合你的 RDK X5 工程)
场景 1:需要通用基线、后续还要迁移检测 / 分割
👉ResNet18标准骨干,论文、预训练、开源工具链最全;适合算法验证、做精度基准对比。
场景 2:追求轻量化、低延迟,实时图像分类(摄像头 25fps+)
👉优先 VarGConvNet > MobileNetV1VarGConv 是地平线硬件特化,很多实测同样精度比 MobileNetV1 更快,访存开销更低。
场景 3:想压榨最高精度,算力余量充足
👉EfficientNASNet-MNAS 搜索架构,同等计算量精度普遍高于手工轻量化网络,代价是调参、模型编译需要多测试。
场景 4:存量旧项目维护
👉 GoogLeNet;新项目尽量不要从零启动 GoogLeNet。
四、结合你现有代码的工程提示
- 所有 demo 结构完全统一:
读取图→resize→BGR2NV12→dnn推理→ctypes调用libpostprocess可以直接一套预处理代码无缝切换各个网络.bin 模型; - 模型必须使用地平线 hb_mapper 单独编译,不能跨网络混用;
- 如果你后续把分类骨干迁移到 FCOS/YOLO 目标检测:
- ResNet18、VarGConvNet 最适合作为 Detection Backbone;
- MobileNetV1 也常用;GoogLeNet 很少用于检测;
- 精度优化关键点: ResNet18/EfficientNASNet 可以支持更大分辨率;轻量化网络建议 224 输入。
五、补充测试建议(你可以批量跑实验)
统一条件:输入 224×224 NV12,RDK X5,统计指标:
- 单帧推理耗时(forward 耗时)
- Top1 准确率(自制测试集)
- BPU 占用率 最终选出:延迟 & 精度平衡点。
