分类、检测、分割、生成、检索,到底有什么区别
很多初学者刚接触深度学习和计算机视觉时,都会遇到这样一种困惑:
明明都是“让模型看图”,为什么一会儿叫分类,一会儿叫检测,一会儿又叫分割、生成、检索?
看起来它们都和图像有关,也都可能会用到 CNN、Transformer 之类的模型,所以很容易让人误以为:
它们只是名字不同,或者只是难度不同。
但实际上,它们最本质的区别,不在于用了什么模型,而在于:
它们要解决的不是同一种问题,输出形式也完全不一样。
这篇文章,我想专门把这件事讲清楚。
你不需要先懂复杂模型,也不需要先会读论文。
你只需要先建立一个最重要的意识:
判断一个任务是什么,先看输入是什么、输出是什么、想解决什么问题。
一、为什么这些任务总会被混在一起
初学者之所以容易把这些任务混在一起,通常有几个原因:
- 它们都属于深度学习或计算机视觉的常见任务
- 它们都可能处理图像
- 它们背后都可能用到相似的模型结构
- 很多教程上来就讲模型,却没有先讲清任务边界
于是大家很容易形成一种模糊印象:
“反正都是看图,区别应该不大。”
但真正的问题是:
同样都是输入一张图,不同任务关心的输出完全不一样。
有的任务想知道这张图属于什么类;
有的任务想知道图里有什么,并且它们在哪里;
有的任务想知道每个像素属于谁;
有的任务想直接生成新的内容;
还有的任务不是给标签,而是从库里找最相似的结果。
所以,与其说这些任务都在“看图”,不如说它们都在用图像做输入,但问的问题不一样。
二、区分任务最简单的方法:看输入、看输出、看粒度
以后你看到一个新任务,先别急着看模型名字,先问下面 3 个问题:
1. 输入是什么
是整张图?
是一张图加一句文本?
还是一张查询图像?
2. 输出是什么
是一个类别标签?
是边界框?
是像素级掩码?
是一张新生成的图?
还是一组按相似度排序的结果?
3. 粒度是什么
它关注的是:
- 整张图级别
- 单个目标级别
- 像素级别
- 生成结果级别
- 检索排序级别
只要你先把这 3 个问题问清楚,很多任务就不会混。
三、分类:回答“这张图主要是什么”
我们先看最基础的一类任务:分类。
分类任务的核心目标是:
判断这张图属于哪个类别。
分类任务的基本形式
- 输入:一张图
- 输出:一个或多个类别标签
- 粒度:整图级
比如:
- 这张图是猫还是狗
- 这张胸片是正常还是肺炎
- 这个水果是苹果、香蕉还是橙子
分类任务通常只关心整张图的整体语义。
也就是说,模型在回答的是:
“这张图主要是什么?”
如果结合分类示意图来看,你可以把分类直观理解成:
- 先输入一张完整图像
- 模型读取整张图的整体信息
- 最后输出一个类别判断结果
也就是说,分类最典型的形式不是“画框”,而是:
直接给整张图下一个类别结论。
分类里最常见的两种情况
1. 二分类
二分类的意思是:
只在两个候选类别之间做判断。

比如上面这张图,输入一张狗的图片后,模型最后要在两种结果里选一个:
positivenegative
这类任务很常见,比如:
- 是猫还是不是猫
- 是正常还是异常
- 是良性还是恶性
- 是否包含目标
所以二分类最核心的特点就是:
输出只有两个候选结果。
2. 多分类
多分类的意思是:
在多个候选类别中选出最可能的那个。

比如手写数字识别任务中,每一张图都对应一个标签:
- 0
- 1
- 2
- 3
- …
- 9
这就是一个很典型的多分类任务。
模型面对的是很多可能类别,最后要判断:
“这张图更像 5,还是 0,还是 4,还是 9?”
所以多分类最核心的特点就是:
输出不再只是两个选项,而是多个类别中的一个。
从这两张图你也能更容易看出分类任务的共同点:
- 输入都是整张图
- 输出都是一个标签结果
- 它不负责告诉你目标在哪,只负责判断“属于哪一类”
但它通常不会告诉你:
- 目标具体在哪里
- 目标占了多大区域
- 图里是不是有多个目标同时存在
所以你可以把分类理解成:
分类关心“是什么”,但通常不负责告诉你“在哪里”。
四、检测:回答“图里有什么,它们在哪里”
检测比分类更进一步。
检测任务不只想知道图像里有什么,还想知道这些目标在图中的位置。
检测任务的基本形式
- 输入:一张图
- 输出:目标类别 + 边界框
- 粒度:目标级
比如:
- 一张街景图里有几辆车、几个人
- 一张超声图里病灶大概在什么位置
- 一张安防图像中有没有安全帽、有没有车辆
如果结合检测示意图来看,这个过程通常可以直观理解成:
- 先输入一张完整图像
- 模型会在图上很多位置、很多尺度上尝试“找目标”
- 中间往往会产生大量候选框,绝大多数其实都不是真正的最终答案
- 最后再保留少数高置信度、位置也更合理的框
所以你看到的检测结果,往往不是“模型一上来就只看见 3 个框”,而是:
它先提出很多种可能,再从里面筛出真正靠谱的目标位置。
和分类相比,检测多回答了一个关键问题:
它不仅告诉你“是什么”,还告诉你“在哪里”。
所以,如果分类像是在回答:
“这张图里主要是猫。”
但是如果是检测任务,如图:

那么模型回答的会是:
“图里有一只狗,它在左下角;有一辆自行车,在中间;右上角还有一辆车。”
检测的输出通常会表现为:
- 一个个矩形框
- 每个框对应一个类别
- 有时还有置信度分数
如果贴合示意图来说,你可以把检测理解成下面这个过程:
- 把整张图送进模型
- 模型在很多位置上尝试预测“这里有没有目标”
- 为可能的目标生成很多候选框
- 再根据类别分数、位置重叠情况等规则,筛掉大量无效框
- 最后留下少数结果,比如“狗”“自行车”“汽车”这些最终框
所以检测和分类的差别,不只是“检测多了一个框”,而是:
检测面对的是图中可能存在的多个目标,它既要判断类别,还要从许多候选位置里找出真正的目标。
因此你可以记住一句最核心的话:
检测 = 识别目标 + 定位目标。
五、分割:回答“哪些像素属于哪个目标”
如果说检测已经能告诉你“目标大概在哪”,那么分割会更进一步:
它想知道图中哪些像素真正属于目标。
分割任务的基本形式
- 输入:一张图
- 输出:像素级掩码
- 粒度:像素级
比如:
- 把道路区域完整分出来
- 把肿瘤区域精确勾出来
- 把人、车、天空、树分别分开
如果结合分割示意图来看,这个过程可以直观理解成:
- 左边先输入原始图像
- 右边不再只是画一个框,而是把目标真正对应的区域“涂出来”
- 也就是说,模型要判断图中每一个像素到底属不属于目标
比如那张趴着的小狗图,分割结果不是只告诉你“小狗在这里”,而是直接给出:
哪些像素属于这只狗,哪些像素不属于它。
而在摩托车那张图里,右侧结果更能体现分割的精细度:
- 车身区域被完整标出来
- 骑手区域也被单独标出来
- 背景则被排除在外
这说明分割关心的,不是一个大概框,而是目标真实占据的区域边界。
分割和检测最关键的区别在于:
- 检测通常给你一个框
- 分割通常给你一块更精确的区域
也就是说,检测只告诉你目标的大致位置,分割则更在意目标的真实边界。
如果贴合图片来理解:
- 检测更像是在说:“狗在这个矩形框里”“车在这个矩形框里”
- 分割更像是在说:“这块具体区域才是真正的狗”“这块具体区域才是真正的车”
所以分割比检测更细,因为它不满足于“圈住目标”,而是想把目标真正从背景中分离出来。
分割里常见的两种情况
1. 语义分割
语义分割关心的是:
同一类像素都归为同一类。
比如:
- 所有道路像素都标成“道路”
- 所有树的像素都标成“树”
它不强调同类目标之间彼此是否是不同个体。
如果图里有两辆车,语义分割更关心的是:
它们都属于“车”这一类。
2. 实例分割
实例分割在语义分割的基础上更进一步:
即使同样都是“人”,也要区分这是第 1 个人、这是第 2 个人、这是第 3 个人。
放到这张摩托车图上,也可以这样理解:

- 如果只是语义分割,模型更关注“哪些像素属于人,哪些像素属于摩托车”
- 如果是实例分割,它会进一步把每个独立目标作为一个实例单独分开
也就是说,它不仅知道“这是一类什么东西”,还知道“这是一个独立的个体”。
所以你可以把分割简单记成一句话:
分割不是只给框,而是给更精细的像素级区域。
六、生成:回答“让模型创造新内容”
前面的分类、检测、分割,本质上大多都属于“识别已有内容”。
而生成任务的方向完全不同。
生成任务的核心是:
让模型产出新的内容。
生成任务的基本形式
- 输入:可以是随机噪声、文本条件、图像条件等
- 输出:新生成的图像、文本、视频或其他内容
- 粒度:生成结果级
比如:
- 输入一句文字,生成一张图
- 输入一张模糊图,生成更清晰的图
- 输入图像缺失区域,补全完整图像
- 输入低分辨率图像,生成高分辨率版本
如果结合你给的扩散模型示意图来看,会更好理解生成任务中的一种典型路线。
这张图更适合从“去噪生成”的角度来理解:
- 一开始输入的是几乎纯噪声
- 模型执行一次去噪,图像里会出现一点模糊轮廓
- 再继续去噪,目标形状会越来越清楚
- 经过很多步之后,最终得到一张可以看懂的猫图
也就是说,这张图最想表达的不是“怎么加噪”,而是:
模型怎样从一团噪声开始,一步步生成出有结构、有语义的图像。
如图所示:

Step 1000附近,图像几乎还是噪声- 越往后走,噪声越少,轮廓越明显
- 到最后几步时,图像已经越来越接近真实结果
所以扩散模型在生成时,可以被直观理解成一个反复执行的过程:
- 从噪声出发
- 预测当前这一步应该去掉多少噪声
- 得到一个更干净一点的中间结果
- 重复很多次
- 最后生成一张新的图像
因此,如果只贴合这张图来讲,你完全可以把扩散模型先简单理解成:
一种“从噪声慢慢去噪,最终生成清晰图像”的方法。
生成和前面识别类任务最大的不同在于:
- 分类、检测、分割主要是在“判断”
- 生成主要是在“创造”
也就是说,前面几类任务通常是在回答:
“这是什么?”
“它在哪里?”
“哪些像素属于它?”
而生成任务更像是在回答:
“请你直接给我造一个结果出来。”
所以你可以把生成任务记成:
生成不是识别已有内容,而是构造新的内容。
七、检索:回答“从库里找最像或最相关的内容”
检索也是很容易被初学者混淆的一类任务。
很多人会把检索和分类混在一起,因为它们都可能输入一张图。
但实际上,它们的输出逻辑完全不同。
检索任务的基本形式
- 输入:一张查询图像,或者一句文本
- 输出:一组按相似度排序的结果
- 粒度:集合/排序级
比如:
- 以图搜图:给一张鞋子的图,找图库中最像的鞋
- 文搜图:输入一句文字,找最相关的图片
- 医学场景里,输入一张病例图,找最相似的历史病例

用人脸检索图举例,检索的过程可以很直观地理解成:
- 先给系统一张“查询人脸”
- 系统到图库里去找
- 最后返回一组和它最相似的人脸结果
所以检索的输出通常不是一个单独标签,而是一组候选结果。
换句话说,它不是在回答:
“这张脸属于哪一类?”
而是在回答:
“数据库里哪几张脸和它最像?”
检索任务通常不是直接输出一个固定标签,而是从一个已有库中返回:
- 最相似的若干结果
- 相关性排序
像你这张图里展示的,就是一种很典型的视觉检索结果:
- 系统不会只给一个答案
- 它会返回很多候选图片
- 越靠前的结果,通常表示相似度越高
所以检索更像是在“找邻居”或“找最像的样本”,而不是像分类那样直接拍板给一个类别名。
所以分类和检索的一个核心差别是:
- 分类:直接预测“它是什么类”
- 检索:返回“和它最像、最相关的是哪些”
因此你可以把检索记成:
检索不是直接给结论,而是从库里把最相关的内容找出来。
八、五类任务放在一起,到底怎么区分
如果把这 5 类任务放在一起,对比会更清楚。
| 任务 | 输入 | 输出 | 粒度 | 核心问题 | 常见指标 |
|---|---|---|---|---|---|
| 分类 | 一张图 | 类别标签 | 整图级 | 这张图主要是什么? | Accuracy、Precision、Recall、F1 |
| 检测 | 一张图 | 边界框 + 类别 | 目标级 | 图里有什么,它们在哪里? | mAP、IoU |
| 分割 | 一张图 | 像素级掩码 | 像素级 | 哪些像素属于哪个目标? | IoU、Dice |
| 生成 | 噪声/文本/图像条件 | 新生成内容 | 生成结果级 | 能否产出新的内容? | FID、IS,或任务相关指标 |
| 检索 | 查询图像/文本 | 相似结果列表 | 排序级 | 库里哪些内容最相关? | Recall@K、mAP |
这张表最值得你记住的不是指标,而是中间那两列:
输出形式不同,任务本质就不同。
九、最容易混淆的几组任务,到底差在哪
这一部分我建议你认真看,因为它最接近初学者真正会卡住的地方。
1. 分类 vs 检测
它们都可能输入一张图,也都可能输出“猫”“狗”“车”这种类别词。
但它们的区别是:
- 分类:判断整张图主要属于什么类
- 检测:找出图里有哪些目标,并给出位置
所以一句话区分:
分类只回答“是什么”,检测还要回答“在哪里”。
2. 检测 vs 分割
它们都在做定位,但定位精度不同。
- 检测:通常给一个框
- 分割:给更精细的区域掩码
所以一句话区分:
检测给大致位置,分割给精确区域。
3. 分类 vs 检索
它们都可能输入一张图片,但输出目标不同。
- 分类:输出标签
- 检索:输出相似样本列表
所以一句话区分:
分类是在做“判别”,检索是在做“匹配与排序”。
4. 识别类任务 vs 生成任务
分类、检测、分割、检索,大多都和“理解已有数据”有关。
而生成任务则更强调“产出新内容”。
所以一句话区分:
识别类任务在理解已有内容,生成任务在创造新的结果。
十、一定要记住:任务不是模型
这一点非常重要。
很多初学者会不自觉地把任务和模型混在一起,比如:
- 把
Transformer当成一种任务 - 把
UNet当成“分割的同义词” - 把
Diffusion当成“图像任务”的名字
但其实:
分类、检测、分割、生成、检索是任务CNN、Transformer、UNet、Diffusion是模型或方法
任务在回答的是:
我到底要解决什么问题?
模型在回答的是:
我准备用什么结构或方法去解决它?
同一个任务,可以用不同模型来做。
同一个模型,也可能服务不同任务。
比如:
- 分类可以用 CNN,也可以用 Transformer
- 检测可以在 CNN 主干上做,也可以在 Transformer 架构上做
- 分割可以用 UNet,也可以用其他 encoder-decoder 结构
所以以后你看到一个名词,先别急着问“这个厉不厉害”,先问:
它是在说任务,还是在说模型?
这一步想清楚,很多混乱会直接少一半。
十一、以后怎么看一篇论文到底属于什么任务
其实判断一篇论文做什么任务,也可以用同一套方法。
你只需要先问这几个问题:
1. 输入是什么
是图像?文本?图像加文本?还是查询样本?
2. 输出是什么
是:
- 标签
- 框
- 掩码
- 新生成内容
- 相似结果列表
3. 它主要在解决什么问题
是:
- 识别类别
- 找目标位置
- 分精细区域
- 生成新内容
- 做相似匹配
只要你先抓住输入和输出,很多论文的任务属性其实一眼就能判断出来。
十二、结语:先分清任务,再去看模型,学习会顺很多
回到最开始的问题:
分类、检测、分割、生成、检索,到底有什么区别?
我觉得最核心的答案不是一句“定义不同”就结束,而是:
- 它们问的问题不同
- 它们输出的结果不同
- 它们关注的粒度不同
所以以后再遇到一个任务,不要先被模型名字带跑。
先看:
- 输入是什么
- 输出是什么
- 它到底想解决什么问题
只要这三步清楚了,你就会发现:
原来很多任务并不难分,难的是过去总把它们混成一个模糊的“大类”。
真正学深度学习,不是先记住一堆模型名,而是先把问题定义理顺。
下一篇文章,我们继续往下走,把“任务层”后面那块补上:
什么是数据集、标签、样本、特征?
更多推荐




所有评论(0)