3.3 KiB
3.3 KiB
ResNet18 — 图像分类模型
概述
ResNet(Residual Network) 是计算机视觉领域里程碑式的网络架构,通过引入残差连接(Skip Connection) 解决了深层网络退化问题。ResNet18 是 ResNet 系列中最轻量的版本,包含 18 个卷积层,在准确率和效率间取得良好平衡。
核心特性
| 特性 | 说明 |
|---|---|
| 模型类型 | 图像分类(Image Classification) |
| 网络深度 | 18 层 |
| 输出类别 | 1000 类(ImageNet) |
| 输入尺寸 | 224 × 224 |
| 关键创新 | 残差学习(Residual Learning) |
模型架构
graph LR
A["输入图像 224×224"] --> B["Conv 7×7 + BN + ReLU"]
B --> C["MaxPool 3×3"]
C --> D["Stage 1: 2× BasicBlock"]
D --> E["Stage 2: 2× BasicBlock"]
E --> F["Stage 3: 2× BasicBlock"]
F --> G["Stage 4: 2× BasicBlock"]
G --> H["AvgPool + FC"]
H --> I["Softmax 1000类"]
BasicBlock 结构
graph LR
A["输入"] --> B["Conv 3×3"]
B --> C["BN + ReLU"]
C --> D["Conv 3×3"]
D --> E["BN"]
A --> F["残差连接"]
E --> G["相加"]
F --> G
G --> H["ReLU"]
H --> I["输出"]
每个 BasicBlock 包含两个 3×3 卷积层,输入通过跳跃连接直接加到输出上,缓解梯度消失问题。
目标应用场景
- 图像分类 — 通用图像识别与标签分配
- 迁移学习 — 作为特征提取主干,微调下游任务
- 工业质检 — 产品缺陷分类
- 农业识别 — 植物病虫害分类
参考来源
- 论文:Deep Residual Learning for Image Recognition (CVPR 2016)
- 代码:https://github.com/ultralytics/yolov5.git
输入 / 输出规格
模型接口
| 方向 | 名称 | 数据类型 | 维度 | 尺寸 | 说明 |
|---|---|---|---|---|---|
| 输入 | INPUT:0 | UINT8 | 4D | 1 × 1 × 224 × 672 | 输入灰度图 (H×W=224×672, 含批处理填充) |
| 输出 | OUTPUT:0 | FP32 | 2D | 1 × 1000 | 1000 类置信度得分 |
输入实际有效区域为 224×224,672 宽度包含批处理填充。
后处理流程
flowchart TD
A["模型输出: 1000维向量"] --> B["Softmax 归一化"]
B --> C["Top-K 筛选"]
C --> D{"置信度 > 阈值?"}
D -->|"是"| E["保留分类结果"]
D -->|"否"| F["过滤"]
E --> G["输出 Top-K 类别 + 置信度"]
步骤说明
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | Softmax | 将 1000 个原始得分转为 0~1 概率分布 |
| 2 | Top-K 筛选 | 取前 K 个最大概率及其对应的类别索引(常用 K=1 或 K=5) |
| 3 | 阈值过滤 | 低于置信度阈值的预测将被排除 |
执行与性能
运行方式
python resnet18.py
性能指标
| 指标 | 数值 |
|---|---|
| 推理平台 | 边缘板卡(NPU) |
| 推理时间 | ~4.6 ms |
| 输出 FE 均值误差 | 0.034708 |
| 输出 FE 最大误差 | 0.161392 |
ResNet18 推理速度非常快(4.6ms),适合实时分类场景。
输出示例
分类结果可视化
图中显示了 Top-1 分类的类别标签和置信度。结果图保存路径:
../resource/resnet18/result.jpg
