如何判断深度学习模型的任务类型(AI4问)
提问:如何判断任务类型?
答:
如何判断深度学习模型的任务类型
两种途径:看模型来源 / 用途、看模型输出张量 shape(Netron 工具)、看数据集、看输出层算子。
1、从模型名字、数据集、用途直接判断(最优先)
表格
| 任务类型 | 典型模型名称、数据集、用途 |
|---|---|
| 单标签图像分类 | GoogLeNet、Inception、ResNet、MobileNet;数据集 ImageNet;一张图只有一个主物体,输出哪一类。 |
| 多标签分类 | 一张图可以同时存在多个物体;例如图片同时有猫 + 狗;输出每一类独立 0‑1 置信。 |
| 目标检测 | YOLOv3/v4/v5/v8、SSD、Faster‑RCNN;输出物体坐标框 (x,y,w,h)+ 类别 + 置信度。 |
| 语义分割 | U‑Net、DeepLab;输出一张和输入尺寸接近的图,每个像素预测类别。 |
| 实例分割 | Mask‑RCNN;检测框 + 每个物体像素掩码。 |
| 回归任务 | 人脸关键点、角度预测、距离估算;输出连续浮点数,不是类别编号。 |
例子:
bvlc_googlenet.caffemodel、tensorflow_inception_graph.pb→ ImageNet,单标签分类。yolov3.cfg + yolov3.weights→ YOLO,目标检测。
2、Netron 看输出张量 shape(核心手段,拿到未知模型也可以判断)
Netron 打开模型,看网络最末尾输出 tensor 维度,OpenCV‑DNN 是 NCHW 格式
[N, C, H, W]
①单标签分类
输出 shape:[1, num_classes, 1, 1]
- H=1,W=1;C 等于类别数量。 示例:
[1,1000,1,1]含义:batch=1,1000 个类别,高宽都是 1。
②多标签分类
输出 shape:[1, num_classes, 1, 1]
和单分类 shape 长得一模一样!shape 区分不开,要看训练数据集与输出算子。 区别:不会只取最大值,每个类别独立判断是否大于阈值。
③目标检测(YOLO)
输出:多组输出头,例如[1,255,13,13]、[1,255,26,26]
- C 通道 = 每个框信息(x,y,w,h,conf,class…),H、W 是不同尺度特征图。
H、W 不等于 1,是二维网格。
④语义分割
输出 shape:[1, num_class, H_out, W_out]H_out、W_out 是输出图的高宽,不是 1。 例如[1,21,320,320]:21 个类别,输出 320×320 分割图。
⑤回归任务(关键点、角度)
输出 shape:[1, keypoint_num*2,1,1],输出连续浮点数,没有类别概念。
3、看网络最后一层算子(Netron / 代码打印层类型)
表格
| 最后层算子 | 任务 |
|---|---|
| Softmax | 单标签分类,所有类别概率总和 = 1。 |
| Sigmoid | 多标签分类,每一类独立 0‑1,互不干扰。 |
| Conv / Conv+Sigmoid | 分割、检测输出。 |
| InnerProduct (FC) 直接输出(无 softmax) | 输出 logits 原始得分,分类;也可以是回归。 |
⚠重点区分 Softmax vs Sigmoid
- Softmax:适合单标签,整张图只能属于一类,概率总和为 1。
- Sigmoid:适合多标签,各类互不影响,可以同时多个类别大于阈值。
4、拿到别人给的模型,完整判断流程(实操步骤)
- 看模型文件名、文档,这是做什么的?(分类 / 检测 / 分割)
- Netron 打开模型:
- 看输出 tensor 的 shape;
- 看最后一层是什么算子(Softmax / Sigmoid / Conv)。
- 结合 shape + 末尾算子综合判断:
判断示例 1
模型:inception tensorflow pb 输出 shape:
[1,1000,1,1];最后一层softmax2算子是 Softmax 👉单标签分类,可以用 reshape+minMaxLoc。
判断示例 2
YOLOv3 输出多个 tensor:
[1,255,13,13] [1,255,26,26] [1,255,52,52];末尾是 Conv,无 Softmax 👉目标检测,不能用那套解析代码。
判断示例 3
U‑Net 语义分割 输出
[1,2,224,224];末尾 Conv 👉语义分割,每个像素输出类别。
判断示例 4
输出 shape[1,8,1,1],末尾 Sigmoid 👉 多标签分类,一张图可以同时输出多个类别,不能只取最大值。
5、易错坑
- 单标签与多标签 shape 完全一样,不能只看维度,要看最后一层算子
- Softmax → 单标签;
- Sigmoid → 多标签。
- 有些分类模型输出 logits,没有 Softmax 层,shape 依然是
[1,N,1,1];可以 minMaxLoc 拿索引,但数值不是概率。 - 不要只看文件后缀,同样 onnx 文件,可以是分类、检测、分割。
简答背诵
判断模型任务:
- 优先查阅模型文档、模型名称,知道它设计用途。
- 使用 Netron 工具查看输出张量 shape:单分类输出 H=1,W=1;检测 / 分割 H、W 不为 1。
- 查看网络最后一层算子:Softmax 一般单标签分类;Sigmoid 多标签分类;卷积输出一般检测或分割。
- 结合 shape 与算子综合判定,再决定解析结果用什么代码。
