7060 字
35 分钟
图像理解

概述#

这一讲讨论的是 图像理解(Image Understanding)。它回答的核心问题是:

机器如何从一张由像素组成的图片中,逐步理解“这是什么场景、有哪些物体、物体在哪里、这张图能用一句话怎么描述”?

这一讲的逻辑主线:

  • 先理解 数字图像的本质:图像在计算机里不是“画面”,而是矩阵或张量;
  • 再理解 图像预处理:为什么要先灰度化、归一化、增强对比度、做几何变换;
  • 接着按照视觉理解能力从浅到深,依次学习四类任务:
    • 图像分类(image classification):整张图属于哪一类;
    • 图像识别 / 目标检测(image recognition / object detection):图里有哪些物体,它们大致在哪里;
    • 图像分割(image segmentation):每个像素属于哪个物体或区域;
    • 图像描述(image captioning):把图像内容转化为自然语言;
  • 最后通过 猫狗分类器实训 串起完整流程:数据准备、特征选择、模型选择、模型训练、模型评估和模型使用。

图像理解 = 把像素矩阵转化为语义信息。


目录#


数字图像基本概念#

图像在计算机中是什么#

在计算机中,图像是一组数字。

更准确地说:

  • 灰度图像可以表示为一个二维矩阵;
  • 彩色图像通常可以表示为三个矩阵组成的三维张量;
  • 视频可以看作一系列图像帧按时间排列形成的序列。

如果一张灰度图像的高为 HH、宽为 WW,则可以表示为:

IRH×WI \in \mathbb{R}^{H \times W}

其中矩阵中每一个元素对应一个像素点的灰度值。

如果是一张 RGB 彩色图像,则可以表示为:

IRH×W×3I \in \mathbb{R}^{H \times W \times 3}

其中最后一维的 3 分别表示:

  • R:Red,红色通道;
  • G:Green,绿色通道;
  • B:Blue,蓝色通道。

像素#

像素(pixel) 是数字图像的最小显示和记录单位。

每个像素保存的是该位置的视觉信息。

对于灰度图像:

  • 一个像素通常只保存亮度;
  • 例如 0 表示黑色,255 表示白色。

对于彩色图像:

  • 一个像素通常保存多个颜色通道;
  • RGB 图像中,一个像素可以写成 (R,G,B)(R,G,B)
  • 例如 (255,0,0)(255,0,0) 表示纯红色。

分辨率#

图像分辨率通常写成:

宽度×高度宽度 \times 高度

例如 1920×10801920 \times 1080 表示:

  • 宽度方向有 1920 个像素;
  • 高度方向有 1080 个像素;
  • 总像素数为 1920×10801920 \times 1080

分辨率越高,图像记录的信息越多,但计算成本也更高。

这也是图像模型常常要先统一图像大小的原因。

色彩空间#

色彩空间(color space) 是对颜色进行数学表示的方式。

常见色彩空间包括三类。

1. RGB#

RGB 使用红、绿、蓝三个通道表示颜色。

它基于人类视觉对三种基本颜色的感知,广泛用于:

  • 手机屏幕;
  • 电脑显示器;
  • 摄像头图像;
  • 深度学习模型输入。

对大多数图像理解任务来说,RGB 是最常见的输入格式。

2. HSV#

HSV 分别表示:

  • Hue:色相,表示颜色类型;
  • Saturation:饱和度,表示颜色纯度;
  • Value:亮度,表示颜色明暗。

HSV 更接近人类描述颜色的方式。

3. CMYK#

CMYK 分别表示:

  • Cyan:青;
  • Magenta:洋红;
  • Yellow:黄;
  • Key / Black:黑。

它主要用于印刷行业,基于颜料混合的减色原理。


图像预处理#

图像预处理是图像分析和识别流程中的第一步。

它的目标是:

改善图像质量,统一数据格式,让后续模型更容易学习。

现实图像往往不干净:

  • 大小不统一;
  • 光照不同;
  • 角度不同;
  • 有噪声;
  • 对比度不足;
  • 背景复杂。

如果直接把这些图像输入模型,模型会把大量无关差异也当成学习对象,训练效果可能变差。

灰度化#

灰度化(grayscale conversion) 是把彩色图像转换为灰度图像。

它的作用是:

  • 减少数据量;
  • 简化计算;
  • 只保留亮度信息;
  • 在颜色不重要的任务中降低干扰。

例如手写数字识别通常不关心颜色,只关心笔画形状,因此灰度图就足够。

但如果任务需要颜色信息,例如识别水果成熟度、区分红绿灯、识别皮肤病变,则不应随意灰度化。

归一化#

归一化(normalization) 是把像素值缩放到统一范围。

常见做法是把 [0,255][0,255] 缩放到 [0,1][0,1]

x=x255x' = \frac{x}{255}

也可以标准化为均值为 0、方差为 1:

x=xμσx' = \frac{x - \mu}{\sigma}

归一化的意义是:

  • 避免像素值尺度过大;
  • 让梯度优化更稳定;
  • 加快模型收敛;
  • 减少不同图像之间数值尺度差异带来的影响。

直方图均衡化#

直方图均衡化(histogram equalization) 是一种增强图像对比度的方法。

它通过调整像素值分布,让图像的亮暗层次更加均匀。

适用场景:

  • 图像整体偏暗;
  • 图像整体偏亮;
  • 目标和背景对比度不足;
  • 医学影像、遥感影像中需要增强细节。

直观理解:

把原本挤在一小段亮度范围里的像素值拉开,让细节更容易被模型看到。

几何变换#

几何变换(geometric transformation) 包括:

  • 旋转;
  • 缩放;
  • 平移;
  • 裁剪;
  • 翻转。

它有两类作用。

第一,统一输入格式。

第二,增强模型鲁棒性。


从手工特征到深层特征#

手工特征#

早期图像理解依赖人类设计特征。

常见手工特征包括:

  • 像素值;
  • 边缘;
  • 角点;
  • 纹理;
  • 颜色直方图;
  • SIFT;
  • HOG。

这些特征的思路是:

人先假设哪些视觉模式有用,再把这些模式编码成数学特征。

例如:

  • HOG 关注局部梯度方向,适合描述轮廓和形状;
  • SIFT 关注尺度不变的局部关键点,适合做图像匹配;
  • 颜色直方图关注颜色分布,适合粗略区分图像风格或物体颜色。

手工特征的优点:

  • 可解释性较强;
  • 计算量通常较小;
  • 在小数据、规则明确的任务中仍有价值。

手工特征的局限:

  • 依赖专家经验;
  • 很难覆盖复杂视觉变化;
  • 对光照、遮挡、姿态变化敏感;
  • 特征设计和任务强绑定,迁移能力有限。

深层特征#

深度学习出现后,特征可以由模型自动学习。

以 CNN 为例:

  • 底层卷积层学习边缘、线条、颜色变化;
  • 中间层学习纹理、局部形状;
  • 高层学习物体部件和整体语义;
  • 最后输出分类、检测或分割结果。

这类由神经网络自动学习出的特征,称为 深层特征(deep features)

它的核心优势是:

不再完全依赖人手工设计特征,而是让模型从大量数据中学习更适合任务的表示。

两者的关系#

手工特征和深层特征不是完全对立的。

维度手工特征深层特征
特征来源人类专家设计神经网络自动学习
代表方法SIFT、HOG、颜色直方图、像素值CNN、ViT、深度检测/分割模型
可解释性通常更强通常较弱
表达能力受人工设计限制更强,能学习复杂模式
数据需求较低通常更高
典型用途小规模任务、传统视觉任务、教学入门大规模分类、检测、分割、描述

图像分类#

图像分类解决什么问题#

图像分类(image classification) 的目标是:

输入一张图像,输出一个类别标签。

图像分类的基本流程#

图像分类通常包含三步:

1. 输入#

输入是一张图片。

在模型内部,图片会被表示为矩阵或张量。

2. 模型#

模型负责从图像中提取特征,并计算各类别的可能性。

常见模型包括:

  • KNN;
  • CNN;
  • ViT;
  • 其他预训练图像分类模型。

3. 输出#

输出是一个标签,也可以是每个类别的概率。

例如:

类别概率
客厅0.91
卧室0.06
厨房0.03

最终取概率最高的类别作为预测结果。

CNN:局部观察者#

卷积神经网络(Convolutional Neural Network, CNN) 是最经典的图像分类模型之一。

CNN 的核心思想是:

用卷积核在图像上滑动,自动提取局部视觉特征。

CNN 有两个关键设计。

1. 局部连接#

一个卷积核只观察图像的一小块区域。

这适合图像任务,因为图像中的很多特征本来就是局部的:

  • 边缘;
  • 角点;
  • 纹理;
  • 猫的胡须;
  • 狗的耳朵;
  • 椅子的边缘。

2. 权重共享#

同一个卷积核会在整张图像上重复使用。

这意味着:

同一种特征不管出现在图像左边还是右边,都可以被同一个卷积核识别。

因此 CNN 特别适合处理具有局部结构和空间平移特征的数据。

在 CNN 中:

  • 卷积层负责提取特征;
  • 池化层负责降低维度、压缩信息;
  • 多层卷积逐步把低级特征组合成高级特征;
  • 最后的分类层输出类别概率。

ViT:全局观察者#

Vision Transformer(ViT) 是把 Transformer 思想引入图像识别的一类模型。

它的关键做法是:

把图像切成许多小块,把每个图像块当作类似语言中的 token,再用 Transformer 处理这些图像块之间的关系。

例如一张图片可以被切成多个 patch:

image{patch1,patch2,,patchn}\text{image} \rightarrow \{patch_1, patch_2, \dots, patch_n\}

每个 patch 被嵌入成向量,加入位置信息后送入 Transformer。

ViT 的优势在于:

  • 通过自注意力机制建模图像块之间的全局关系;
  • 更适合捕捉整体结构;
  • 在大规模数据预训练后效果很强。

CNN 和 ViT 的对比:

  • CNN 像 局部观察者,擅长看局部细节;
  • ViT 像 全局观察者,擅长看图像块之间的整体关系。
维度CNNViT
基本单元卷积核图像 patch
关注方式局部区域全局关系
核心机制卷积、池化、权重共享自注意力、多头注意力
优势局部细节、边缘、纹理长距离依赖、整体结构
典型问题大范围关系建模较弱通常依赖较大数据规模

TensorFlow.js Classifier#

其特点是:

  • 用户可以上传或拍摄照片;
  • 模型可以在浏览器中直接运行;
  • 不一定需要把图片上传到服务器;
  • 响应速度快;
  • 对隐私更友好。

这类工具适合用来理解:

图像分类模型可以从研究算法走向实际可交互应用。


图像识别:从类别到位置#

图像识别解决什么问题#

它的目标是:

不仅判断图像里有什么物体,还要指出物体大致在哪里。

图像分类只输出一个整体标签:

  • 客厅。

图像识别 / 目标检测会输出:

  • 椅子:位置框;
  • 茶几:位置框;
  • 沙发:位置框。

也就是说,它的输出通常包括:

  • 类别标签;
  • 边界框(bounding box);
  • 置信度(confidence score)。

例如:

物体边界框置信度
椅子(x1,y1,x2,y2)(x_1,y_1,x_2,y_2)0.93
茶几(x1,y1,x2,y2)(x_1,y_1,x_2,y_2)0.88

图像识别的基本流程#

1. 输入#

输入是一张图像,例如室内客厅场景。

2. 模型#

模型识别图像中的物体,并估计每个物体所在位置。

3. 输出#

输出是一张带标注的图像:

  • 物体被边界框框出;
  • 边界框旁边标注类别名称;
  • 有时还会显示置信度。

R-CNN:先找候选区域,再分类#

R-CNN(Region-based Convolutional Neural Networks) 是目标检测中的重要模型。

它的核心思想是:

先从图像中找出可能包含物体的候选区域,再对每个候选区域使用 CNN 提取特征并分类。

传统的全图滑动窗口方法效率较低,因为需要对大量位置和尺度重复扫描。

R-CNN 引入 区域候选(region proposal),先缩小搜索范围。

工作流程可以概括为:

  1. 输入一张图像;
  2. 提取若干可能包含物体的候选区域;
  3. 对每个候选区域用 CNN 计算特征;
  4. 对候选区域进行分类;
  5. 输出物体类别和边界框。

Fast R-CNN 与 Faster R-CNN#

R-CNN 的主要问题是速度慢。

原因是:

  • 每个候选区域都要单独送入 CNN;
  • 重复计算很多;
  • 训练和推理成本都较高。

Fast R-CNN 的改进方向是:

  • 先对整张图像计算一次卷积特征图;
  • 再在特征图上对候选区域进行分类和回归;
  • 减少重复卷积计算。

Faster R-CNN 进一步引入 区域建议网络(Region Proposal Network, RPN)

  • 用神经网络自动生成候选区域;
  • 与检测网络共享特征;
  • 使候选区域生成更快、更端到端。

可以这样理解三者关系:

模型核心思想主要改进
R-CNN候选区域 + CNN 分类深度学习目标检测的早期重要框架
Fast R-CNN整图共享卷积特征减少重复计算,提高速度
Faster R-CNN用 RPN 自动生成候选区域进一步接近实时检测

RTOD 实时检测工具#

RTOD(real-time object detection) 实时物体检测平台。

它可以:

  • 上传图像或调用摄像头;
  • 实时检测行人、车辆等物体;
  • 用边界框标出目标;
  • 显示类别和置信度。

这类工具体现了目标检测的工程价值:

  • 自动驾驶要实时识别行人和车辆;
  • 安防系统要实时检测异常目标;
  • 智能零售要识别货架商品;
  • 工业质检要定位缺陷区域。

图像分割:从边界框到像素级理解#

图像分割解决什么问题#

图像识别只能给出物体的大致位置,通常用矩形边界框表示。

但很多任务需要更精确的边界。

例如:

  • 自动驾驶要知道道路、行人、车辆的精确范围;
  • 医学影像要分割病灶边界;
  • 图像编辑要把人物从背景中抠出来;
  • 艺术分析要计算人物和背景的面积比例。

这时就需要 图像分割(image segmentation)

图像分割的目标是:

为图像中的每个像素分配类别或实例标签。

与目标检测相比:

  • 目标检测输出边界框;
  • 图像分割输出像素级区域。

图像分割的基本流程#

图像分割通常包含三步。

1. 输入#

输入是一张待处理图像。

2. 模型#

模型判断每个像素属于哪个类别或哪个实例。

3. 输出#

输出是一张标注图。

其中:

  • 每个像素都有标签;
  • 不同类别或实例用不同颜色显示;
  • 物体边界比检测框更精确。

三类图像分割#

三种分割方式:

  • 语义分割;
  • 实例分割;
  • 全景分割。

1. 语义分割#

语义分割(semantic segmentation) 给每个像素分配类别标签。

例如图像中所有猫的像素都标成“猫”。

它关心的是:

这个像素属于什么类别。

但它不区分同类中的不同个体。

适合任务:

  • 道路区域分割;
  • 天空、建筑、树木分割;
  • 医学组织区域分割;
  • 场景理解。

代表模型:FCN

2. 实例分割#

实例分割(instance segmentation) 不仅识别类别,还区分同一类别中的不同个体。

它关心的是:

这个像素属于哪个具体对象。

适合任务:

  • 人群中区分每个人;
  • 自动驾驶中区分每辆车;
  • 工业检测中区分每个零件;
  • 图像编辑中单独抠出某个对象。

代表模型:Mask R-CNN

3. 全景分割#

全景分割(panoptic segmentation) 结合语义分割和实例分割。

它希望图像中每个像素都有完整解释:

  • 对可数物体,区分不同实例;
  • 对不可数背景区域,只标注类别。

例如:

  • 人、车、动物:区分每个个体;
  • 天空、道路、草地:标注语义类别。

它关心的是:

整张图中每个像素属于什么,同时可数物体还要区分具体实例。

代表模型:Panoptic FPN

分割类型是否逐像素分类是否区分实例典型例子代表模型
语义分割所有道路像素标为“道路”FCN
实例分割区分每一个人、每一辆车Mask R-CNN
全景分割对可数物体区分实例同时理解道路、天空、人、车Panoptic FPN

FCN#

FCN(Fully Convolutional Network,全卷积网络) 是语义分割中的经典模型。

它的核心思想是:

把分类网络改造成可以输出空间位置预测的网络,让模型对每个像素做分类。

传统 CNN 分类模型最后通常输出一个类别标签。

FCN 则输出一张与图像空间相关的预测图,让每个位置都有类别结果。

这使得深度学习可以从“整图分类”扩展到“像素级分类”。

Mask R-CNN#

Mask R-CNN 是实例分割中的经典模型。

它可以看作在 Faster R-CNN 的基础上增加了一个 mask 分支。

原来的 Faster R-CNN 主要输出:

  • 类别;
  • 边界框。

Mask R-CNN 进一步输出:

  • 每个实例的分割掩码。

所以它能够做到:

  • 检测图中有哪些物体;
  • 框出它们的位置;
  • 分割出每个物体的精确轮廓。

Panoptic FPN#

Panoptic FPN 是全景分割的重要模型。

它的目标是统一两类任务:

  • 实例分割:处理人、车、动物等可数对象;
  • 语义分割:处理天空、道路、墙壁等背景区域。

它适合更完整的场景理解。

自动驾驶中就很需要这类能力,因为系统不仅要知道“有车”,还要知道:

  • 哪块是道路;
  • 哪块是人行道;
  • 哪些是行人;
  • 哪些是车辆;
  • 每个车辆和行人分别在哪里。

Segment Anything#

Segment Anything Model(SAM) 是 Meta AI 提出的图像分割基础模型。

特点:

  • 能快速分割图像中的任意物体;
  • 支持用户指定目标;
  • 不需要针对每个新物体重新训练;
  • 具有较强的零样本泛化能力;
  • 可用于图片编辑、内容创作、目标检测辅助、视觉研究等场景。

可以把 SAM 理解为:

一个通用的“图像抠图 / 分割”基础工具。


图像描述:从视觉到语言#

图像描述解决什么问题#

图像描述(image captioning) 的目标是:

输入一张图像,输出一段自然语言描述。

例如输入一张客厅图片,模型输出:

这是一张现代风格的客厅照片,左右两边分别有木制椅子,中间有一个茶几。

图像描述比分类、识别、分割更进一步,因为它需要跨模态能力:

  • 先理解视觉内容;
  • 再组织语言;
  • 最后生成符合人类表达习惯的句子。

它连接了两个领域:

  • 计算机视觉;
  • 自然语言处理。

图像描述的基本流程#

图像描述通常包括:

  1. 输入一张图像;
  2. 视觉模型提取图像特征;
  3. 语言模型根据视觉特征生成文字;
  4. 输出一句或一段描述。

在早期经典模型中,常见结构是:

  • CNN 负责“看图”;
  • RNN / LSTM 负责“说话”;
  • 注意力机制负责“决定描述每个词时该看图中的哪里”。

Show, Attend and Tell#

它的核心创新是引入 注意力机制(attention mechanism)

直观理解:

模型不是一次性看完整张图再机械生成句子,而是在生成每个词时动态关注图像中的关键区域。

例如生成“椅子”这个词时,模型应关注椅子所在区域;生成“茶几”这个词时,应关注茶几所在区域。

这使图像描述更细致、更准确。

它通常结合:

  • CNN:提取图像特征;
  • RNN:生成文字序列;
  • Attention:在生成过程中选择关注区域。

可以把它理解为一个“会看图的讲解员”:

  • 一边看图;
  • 一边关注关键部分;
  • 一边组织语言描述。

Image Caption Generator#

它的功能是:

  • 上传图片;
  • 自动生成图片说明;
  • 支持多语言;
  • 面向社交媒体用户、博主、内容创作者等。

应用价值包括:

  • 帮助视觉障碍人士理解图片;
  • 为社交媒体图片生成文案;
  • 给图片库自动生成检索标签;
  • 辅助新闻、广告、创意内容生产;
  • 为多模态模型提供图文对齐数据。

图像描述的局限#

图像描述模型也有明显局限。

1. 容易停留在显性物体#

模型通常擅长描述:

  • 有什么物体;
  • 物体大致在哪里;
  • 场景是什么。

但它不一定能准确描述:

  • 氛围;
  • 情绪;
  • 隐喻;
  • 审美风格;
  • 文化含义。

例如人类可能说“这个房间看起来很舒适”,而模型可能只说“房间里有沙发和茶几”。

2. 可能出现错误描述#

如果模型误识别了物体,就会生成错误文字。

例如把“猫”误识别为“狗”,描述就会跟着错。

3. 难处理复杂关系#

当图像中存在遮挡、重叠、多人物互动、复杂动作时,模型可能难以准确描述物体关系。

4. 依赖训练数据#

训练数据如果偏向某类场景或某种表达方式,模型生成的描述也会受到影响。


猫狗图像分类器#

这个案例使用的是比较基础的方案:

  • 数据:猫狗图片;
  • 特征:图像像素值;
  • 模型:KNN;
  • 任务:二分类。

它适合作为入门案例,因为流程清晰,但性能不一定高。

第一步:数据准备#

准备猫狗图像数据集。

数据来源是 Kaggle 的 Dogs vs. Cats 数据集。

数据准备时要关注:

  • 图片数量是否足够;
  • 猫狗类别是否平衡;
  • 图片质量是否可靠;
  • 是否有错误标签;
  • 是否覆盖不同光线、角度、姿态和背景;
  • 训练集和测试集是否严格分开。

例如:

  • 训练集中猫的图片全是白天拍摄;
  • 测试时出现夜晚拍摄的猫;
  • 模型可能因为分布变化而分类错误。

这就是数据分布偏差带来的泛化问题。

第二步:特征选择#

使用图像的像素值作为特征。

如果把图片统一成 H×W×3H \times W \times 3,那么每张图片可以展开成一个长向量:

xRHW3x \in \mathbb{R}^{H \cdot W \cdot 3}

像素特征的优点是:

  • 简单;
  • 容易理解;
  • 适合教学入门。

但它的问题很明显:

  • 维度高;
  • 对位置变化敏感;
  • 对光照变化敏感;
  • 难以表达高级语义;
  • 距离度量不一定符合人类视觉相似性。

因此如果想提升效果,可以使用更复杂的特征:

  • SIFT;
  • HOG;
  • CNN 深层特征;
  • ViT 特征;
  • 预训练模型 embedding。

第三步:模型选择#

选择 KNN(K-Nearest Neighbors, K 近邻) 分类器。

KNN 的思想非常直观:

要判断一张新图属于哪一类,就看训练集中和它最像的 kk 张图大多数属于哪一类。

流程如下:

  1. 给定一张待分类图片;
  2. 计算它与训练集中每张图片的距离;
  3. 找到距离最近的 kk 张图片;
  4. 统计这 kk 张图片的类别;
  5. 采用多数投票输出类别。

常见距离是欧氏距离:

d(xi,xj)=l=1d(xilxjl)2d(x_i,x_j)=\sqrt{\sum_{l=1}^{d}(x_{il}-x_{jl})^2}

KNN 的优点:

  • 思想简单;
  • 不需要复杂训练;
  • 适合理解分类基本逻辑。

KNN 的局限:

  • 高维图像上距离度量效果可能差;
  • 预测时要和大量样本比较,效率低;
  • 对噪声和数据分布敏感;
  • 不能自动学习高级视觉特征。

所以 KNN 更适合作为图像分类入门基线。

第四步:模型训练#

KNN 的“训练”主要是保存训练数据和标签。

一般训练流程包括:

  1. 读取图像;
  2. 统一尺寸;
  3. 归一化像素值;
  4. 展平成特征向量;
  5. 划分训练集和测试集;
  6. 用训练集拟合 KNN;
  7. 在测试集上评估。

注意:

训练集和测试集不能重叠。

如果测试图片已经出现在训练集中,评估结果就会虚高。

第五步:模型评估#

示例结果准确率约为 0.44。

这个结果并不高,恰好说明:

只用原始像素值 + KNN,很难处理真实图像分类任务。

图像分类常用指标包括准确率、精确率、召回率和 F1-score。

准确率#

Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP + TN}{TP + TN + FP + FN}

表示总体预测正确的比例。

但当类别不平衡时,准确率可能有误导性。

精确率#

Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}

表示被模型预测为正类的样本中,有多少是真的正类。

如果我们特别希望“预测为猫”的结果尽量准确,就要关注 precision。

召回率#

Recall=TPTP+FNRecall = \frac{TP}{TP + FN}

表示所有真正正类样本中,有多少被模型找出来。

如果我们特别希望不要漏掉猫,就要关注 recall。

F1-score#

F1=2PrecisionRecallPrecision+RecallF1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall}

F1 是 precision 和 recall 的调和平均,适合同时关注查准率和查全率的任务。

第六步:模型使用#

模型训练和评估完成后,就可以用于新图片分类。

输入一张新图后,模型输出:

  • cat;
  • dog;
  • 或对应概率 / 置信度。

为什么这个案例效果不高#

KNN 示例准确率约为 0.44,低于理想效果。

原因主要有:

  1. 像素不是稳定语义特征

    • 同一只猫平移几像素,像素向量就会明显变化。
  2. 图像维度太高

    • 高维空间中距离度量容易失效,KNN 很难找到真正语义相似的图片。
  3. 背景干扰强

    • KNN 可能把背景、光照、颜色当成主要差异。
  4. 缺少层次特征学习

    • 模型没有学到耳朵、胡须、眼睛、轮廓等更高级特征。
  5. 泛化能力弱

    • 遇到训练集中没覆盖的姿态、光照和品种时容易出错。

改进方向:

  • 使用 CNN 或 ViT;
  • 使用预训练模型提取 embedding;
  • 增加数据增强;
  • 清洗错误标签;
  • 平衡类别数量;
  • 引入验证集调参;
  • 使用更合适的评价指标。

四类图像理解任务对比#

任务输入输出解决的问题典型模型 / 工具
图像分类一张图像一个类别标签这张图是什么KNN、CNN、ViT、TensorFlow.js Classifier
图像识别 / 目标检测一张图像类别 + 边界框图里有什么,在哪里R-CNN、Fast R-CNN、Faster R-CNN、RTOD
图像分割一张图像每个像素的标签或实例 mask每个物体的精确边界在哪里FCN、Mask R-CNN、Panoptic FPN、SAM
图像描述一张图像自然语言描述如何用语言描述这张图Show, Attend and Tell、Image Caption Generator

四者的关系可以理解为视觉理解能力逐步加深:

  1. 分类:粗粒度理解整张图;
  2. 识别 / 检测:找到具体物体及其大致位置;
  3. 分割:精确理解物体边界和像素归属;
  4. 描述:把视觉语义转化为语言表达。

从分类到描述,AI 不断从“看见”走向“理解”。

图像理解
https://www.lazysheep2031.top/posts/ai_fundamention/chapter7/
作者
Lazysheep
发布于
2026-06-02
许可协议
CC BY-NC-SA 4.0

评论