- 操作系统:ubuntu22.04
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
目标检测(Object Detection)、图像分类(Image Classification)、语义分割(Semantic Segmentation) 是计算机视觉三大核心任务,它们在输入、输出、应用场景和算法思路上有本质区别。
下面我用通俗语言 + 技术对比 + 应用举例 + 输出形式图示的方式,帮你彻底搞懂它们的区别。
一句话通俗理解
任务 | 一句话解释 |
---|---|
图像分类 | “这张图里是什么?” → 输出一个标签(如“猫”) |
目标检测 | “这张图里有什么,在哪?” → 输出多个框 + 标签(如“猫在左上角”) |
语义分割 | “这张图里每个像素属于什么?” → 输出每个像素的类别(精细到像素级) |
技术对比表
维度 | 图像分类 | 目标检测 | 语义分割 |
---|---|---|---|
输入 | 一张图像 | 一张图像 | 一张图像 |
输出 | 1 个类别标签 | 多个边界框 + 类别标签 | 每个像素的类别标签(H×W 的 mask) |
定位能力 | ❌ 无 | ✅ 有(矩形框) | ✅ 精确到像素 |
多目标支持 | ❌ 通常只识别“主要物体” | ✅ 支持多个目标 | ✅ 支持多个目标 |
重叠目标处理 | ❌ 无法区分 | ✅ 可区分不同框 | ✅ 可区分不同像素归属 |
常用模型 | ResNet, VGG, EfficientNet | YOLO, SSD, Faster R-CNN | U-Net, DeepLab, FCN |
评估指标 | Accuracy, Top-1/5 | mAP, IoU, Precision/Recall | mIoU, Pixel Accuracy |
计算复杂度 | ⭐ | ⭐⭐ | ⭐⭐⭐ |
应用举例 | 相册自动分类、内容审核 | 人脸检测、自动驾驶、工业缺陷定位 | 医学图像分割、遥感地物分析 |
输出形式图示(想象一张街景图)
假设输入是一张街景图,包含:汽车、行人、交通灯。
任务 | 输出形式 |
---|---|
图像分类 | “街景” 或 “包含车辆和行人”(只有一个标签) |
目标检测 | 三个框: – [汽车, (x1,y1,x2,y2)] – [行人, (x3,y3,x4,y4)] – [交通灯, (x5,y5,x6,y6)] |
语义分割 | 一张和原图一样大小的彩色图, 每个像素被染色: – 红色=汽车像素 – 蓝色=行人像素 – 绿色=交通灯像素 |
💡 语义分割不区分“这是第几辆汽车”,只关心“这些像素属于汽车”。
算法思想差异
-
图像分类
- 核心思想:提取整张图的全局特征 → 映射到类别
- 网络结构:CNN → Global Average Pooling → FC → Softmax
- 代表模型:ResNet, VGG, MobileNet
-
目标检测
- 核心思想:既要分类,又要定位 → 输出框坐标 + 类别
- 两阶段(如 Faster R-CNN):
- 先生成候选框(Region Proposal)
- 再对每个框分类 + 精修坐标
- 单阶段(如 YOLO, SSD):
- 直接在网格上预测框和类别,速度快
- 关键模块:Anchor机制、NMS、IoU Loss
- 语义分割
- 核心思想:为每个像素做分类 → 输出 H×W 的类别图
- 网络结构:Encoder-Decoder(如 U-Net),或带空洞卷积(DeepLab)
- 关键技术:上采样、跳跃连接(skip connection)、多尺度融合
应用场景对比
场景 | 适合任务 | 原因 |
---|---|---|
手机相册自动分类 | 图像分类 | 只需知道“这是风景/人物/宠物” |
自动驾驶识别车辆行人 | 目标检测 | 需要知道“车在哪,有多大,是什么类型” |
医学影像肿瘤区域分割 | 语义分割 | 需要精确知道“哪些像素是肿瘤” |
工业缺陷检测 | 目标检测 or 语义分割 | 粗定位用检测,精细轮廓用分割 |
人脸考勤 | 目标检测 + 分类 | 先检测人脸框,再分类是谁 |
常见误区
误区 | 正解 |
---|---|
“目标检测就是多个图像分类” | ❌ 错!目标检测需要同时预测位置和类别,且要处理重叠、尺度变化 |
“语义分割就是超精细的目标检测” | ❌ 错!语义分割不区分实例(两个挨着的汽车会被染成同一颜色) |
“图像分类不能用于多物体图” | ⚠️ 不完全错,但效果差。分类模型通常关注“最显著物体” |
✅ 如果你想区分“第一辆车”和“第二辆车”,需要用实例分割(Instance Segmentation),如 Mask R-CNN ——
它是目标检测 + 语义分割的结合体。
总结一句话:
图像分类告诉你“是什么”,目标检测告诉你“是什么+在哪里”,语义分割告诉你“每个像素是什么”。
掌握这三者的区别,是你理解计算机视觉任务体系的第一步,也是面试高频考点!
📌 面试加分回答示例:
“图像分类是整图打标签,目标检测是画框+分类,语义分割是像素级分类。我在工业项目中用目标检测定位缺陷位置,因为需要知道缺陷坐标用于机械臂抓取;而在医学图像中用语义分割,因为医生需要知道病灶的精确边界。”