AI人工智能基础与实践(中职版)中等职业教育 · 项目化学习

CHAPTER 05 · 学生用书

第5章 计算机视觉:从像素到目标识别

第5章章首原理图 四帧窗口计算展示卷积核覆盖、对应相乘、求和落点和移动,随后形成多层特征。

章首语

走进实训室前,人能迅速看出操作台上放着几张信号卡:红色圆形表示停止,黄色三角形表示注意,蓝色方形表示可以继续。摄像头接收到的却不是“停止”或“注意”,而是一格格红、绿、蓝数值。光线变暗,纸张倾斜,手指遮住一角,或者画面中同时出现三张卡,数值都会改变。

本章将在班级AI应用系统中增加信号卡视觉检查模块。第一版读取整幅图像的颜色和边缘统计,只判断画面中的主要类别;第二版先找出多个相互分开的区域,再为每个区域画框、分类和计数。学生用内置场景或打印卡片改变亮度、角度、背景、遮挡和数量,观察同一物体为什么会得到不同结果。

我们还会沿着这些失败回看计算机视觉的发展:研究者怎样从边、角点和几何形状等人工特征出发,怎样让卷积神经网络从数据中学习多层特征,又怎样从“整张图是什么”走向“图中有什么、在哪里、有几个”。能识别标准样例只是起点,真正的工程问题是系统能否在预定环境中稳定工作,并在看不清时停止自动动作。

学习目标

完成本章学习后,你将能够:

  1. 解释像素、颜色通道、分辨率和图像数组之间的关系。
  2. 说明特征、卷积和特征图在视觉处理中的基本作用。
  3. 区分图像分类、目标检测和图像分割的任务输出。
  4. 开发信号卡识别与计数模块,完成单变量和组合条件测试。
  5. 根据置信信息、失败样例和现场风险设置人工复核与动作降级。

本章项目 开发实训室信号卡视觉检查模块

项目使用三类课堂信号卡:红色圆形、黄色三角形和蓝色方形。它们只是教学用视觉标记,不替代国家标准安全标志,也不直接控制真实设备。模块输入为内置生成场景、上传的卡片照片,或经允许开启的摄像头画面;输出为类别、位置、数量、处理分数和是否需要复核。

每组设置场景负责人、开发负责人、测试负责人和记录讲解员。场景负责人准备三类信号卡及背景,保证不拍到人脸、姓名和无关物品;开发负责人根据任务说明生成或配置离线网页;测试负责人封存一组角度、亮度、遮挡和多目标组合;记录讲解员保留输入条件、检测框、错检漏检和修订依据。多人可以轮换角色,交付记录要能看出谁确认了数据和结果。

第一版回答“整幅图最像哪一类”,画面即使有三张卡也只返回一个主要类别。第二版回答“有哪些卡、分别在哪里、有几个”,并增加低分拒绝、最小面积、重复框合并和人工确认。两个版本都加入系统版本线,形成视觉模块v0.5;失败图片或失败场景参数必须保留,不能只截取最清楚的一次结果。

把图像还原为像素和通道

5.1 摄像头记录的是数值网格

像素(Pixel)是数字图像中按位置排列的基本采样单元。彩色图像常为每个像素记录红、绿、蓝三个通道的数值,三个通道以不同强度组合成人眼看到的颜色。例如,红色卡片区域的红通道通常较高,但受光线、相机和纸面反射影响,它不会在每个位置都等于同一个数。

一幅宽640像素、高480像素的RGB图像,可以看成480行、640列、每格3个通道的数组。程序读取坐标 (x, y),就能取得该位置的通道值。图像显示时是一个完整画面,计算时却要依次处理大量位置和数值,这与第1章“信息先表示成数字”完全相连。

分辨率表示图像在宽和高方向包含多少像素。提高分辨率可能保留更小的细节,也会增加存储和计算量;它不保证图像一定更清楚,因为失焦、运动模糊、过暗和过曝不会只靠增加像素数量消失。现场系统需要在细节、速度、设备能力和任务距离之间选择。

程序常把RGB图像转换为灰度图。灰度不是简单“去掉颜色”,而是把三个通道按一定方式合成为亮度数值。若任务只关注文字边缘,灰度可能降低计算量;若要区分红、黄、蓝信号卡,过早丢掉颜色会失去重要依据。因此,预处理必须服从任务,不存在对所有图像都最好的固定步骤。

图5-1 一张信号卡图像、局部像素网格和RGB通道数值的对应关系

5.2 用人工特征完成第一版分类

人观察图像时会注意颜色、轮廓、纹理、相对位置等线索。程序如果直接比较两幅图所有像素,物体只要平移几个像素就会产生大量差异。更实用的办法是从像素中计算与任务有关的量,例如红色像素比例、边缘数量、圆形程度和横纵比例,再用这些量作判断。

特征(Feature)是从原始数据中提取或学习得到、用于描述对象和支持判断的数值表示。早期和许多受控场景中的视觉系统由工程人员设计特征:边缘表示亮度突变,角点表示方向明显变化,颜色直方图统计各颜色范围的数量,轮廓面积和周长可以帮助区分形状。

第一版先计算整幅画面的颜色比例和边缘密度。若红色前景比例最高且轮廓接近圆形,就输出“红色圆形”;黄色和蓝色同理。示意代码中的redRatio是满足红色条件的像素数除以前景像素总数,edgeDensity是边缘像素所占比例。

const redRatio = redPixels / foregroundPixels;
const edgeDensity = edgePixels / allPixels;
if (redRatio > 0.55 && edgeDensity > minimumEdge) {
  result = "红色圆形";
}

这种做法容易检查:颜色阈值、比例和判定规则都能显示出来,出错时可以追到某一步。它也会遇到明显问题。黄色灯光可能让白色背景偏黄,红色书包可能被当成信号卡,多个目标被全图统计混在一起,卡片缩小后边缘所占比例还会变化。人工特征没有失去价值,但需要明确环境条件。

使用AI编程助手时,可以提交以下任务说明。生成程序后先核对像素读取、特征计算、阈值和结果显示四个区域;如果AI加入了无法离线加载的视觉库或云端接口,应要求改为单文件可运行版本。

开发任务说明:信号卡视觉检查 v0.1

目标:制作一个离线网页,判断画面中的主要信号卡类别。
场景:内置红圆、黄三角、蓝方块和空场景,可调整亮度、角度、遮挡、背景噪声和目标数量。
输入:先使用内置画布;图片上传和摄像头作为可选入口,不得自动开启。
处理:显示RGB原图、灰度图、3×3边缘卷积结果,以及全图颜色和边缘统计。
输出:第一版只给一个主要类别,同时显示处理依据和“不确定”状态。
记录:保存场景参数、期望类别、实际类别、分数和错误类型。
运行:单个HTML文件,无外部脚本、模型、字体和网络请求。
验收:空场景拒绝;三类标准场景正确;参数变化可重复;页面能够纵向滚动并导出记录。

用变量实验找出第一版的边界

5.3 分类不能回答所有视觉问题

图像分类把一幅图作为整体,输出一个或多个类别。若画面只有一张居中的红色圆卡,“这张图主要是什么”与项目需要接近;若画面同时有红圆、黄三角和蓝方块,只输出“红圆”就丢失了其他目标,也没有说明红圆位于哪里。

目标检测(Object Detection)是在图像中判断目标类别并给出其位置的任务,常用边界框表示位置。检测结果可以写成“红圆:x=42, y=18, w=36, h=35”,多组边界框还能用于计数。图像分割比检测更细,它为像素或区域赋予类别,从而描述物体的实际轮廓。三种任务的输入都可能是图像,但输出和评价不能混为一谈。

测试负责人先建立单变量矩阵。标准场景固定为一张居中的信号卡,每次只改变一个条件:亮度取100%、70%、40%,旋转取0°、20°、45°,遮挡取0%、20%、40%,目标大小取大、中、小,背景取纯色、网格、彩色噪声。每项至少运行三类卡片,记录结果和特征数值。

完成单变量测试后,再使用8个封存组合场景。例如“40%亮度+20°旋转”“彩色背景+小目标”“两张相互遮挡的卡”“红色干扰物+黄色三角”。组合条件更接近真实现场,也更容易暴露只在标准样例上有效的规则。开发阶段可以查看单变量结果并修订,封存组合场景只能在设置确定后打开。

变量 保持不变 改变范围 需要观察的证据
亮度 卡片、位置、角度 100%—35% 通道值、前景比例、是否拒绝
旋转 卡片、亮度、背景 0°—50° 边缘图、形状分数、类别
遮挡 卡片、亮度、角度 0%—45% 可见面积、漏检、错误框
数量 背景、亮度 0—4张 第一版主要类别、实际数量
背景 卡片、大小 纯色—彩色干扰 误检区域、低分候选

第一版最重要的失败通常不是“把红圆说成黄三角”,而是任务定义不够:它原本就只能做整图分类,无法可靠地找出多个目标。继续增加全图规则也不能自然得到每个物体的位置。要升级作品,必须改变处理流程,而不只是调几个颜色阈值。

从人工特征理解视觉技术的发展

5.4 从线条、边缘和几何结构开始

20世纪中期的机器视觉研究面对的图像规模和计算能力与今天不同。一条重要路线是先把亮度变化转换为线条和边缘,再寻找角点、平面和物体之间的几何关系。1963年,Lawrence Roberts的博士研究从积木状三维物体的二维线条图出发,尝试识别物体结构和观察方向。

这类研究说明,从像素到“物体”之间需要中间表示。边缘检测寻找相邻像素的明显差异;直线检测把多个方向相近的边缘组织起来;轮廓把相连边界围成区域;几何约束再判断它是否可能构成某种物体。每一步都能加入人对成像和形状的知识。

人工特征长期用于字符识别、零件测量、道路分析和图像检索,也仍适合光线固定、目标样式有限、解释要求高的场景。例如,生产线上检查一个圆孔的直径,可以使用边缘、圆拟合和尺寸标定;如果只需要测量几何量,未必需要大规模神经网络。

问题在于现实物体变化太多。猫的姿态、毛色和背景难以由少量几何规则覆盖;同一零件在反光、油污和遮挡下也会产生新边缘。手工特征的效果依赖工程经验和现场控制,跨场景迁移时往往需要重新设计。研究者因此不断探索让模型从数据中学习特征的方法。

5.5 卷积怎样寻找局部模式

卷积(Convolution)在本章中指一个小的数值窗口在图像上移动,对覆盖的局部像素进行加权求和,形成新的数值图。一个3×3窗口每次查看9个相邻位置,向右或向下移动后重复计算。不同权重可以突出垂直边、水平边、模糊或锐化等局部模式。

下面的核对左列赋负权、右列赋正权。均匀区域左右差别小,结果接近0;从暗到亮的垂直边界会产生较大的响应。实训页可以把原图和响应图并排显示,白色位置表示当前核在这里发现了较强变化。

-1  0  1
-2  0  2
-1  0  1

卷积输出仍按空间位置排列,称为特征图。第一层可能对边缘和颜色变化响应,后续层再组合相邻特征,形成角、纹理、局部部件等更复杂表示。局部连接让同一组权重可以在图像不同位置使用,比为每个像素位置建立完全独立的连接更节省参数。

实训页采用固定边缘核,是为了让加权求和过程可见。卷积神经网络的卷积核通常在训练中调整,不由人逐项写成“圆形核”或“三角形核”;网络还会加入非线性变换、下采样或其他结构。看到一张边缘特征图,不表示程序已经识别出物体,后面仍需组合特征并完成任务判断。

图5-2 3×3卷积窗口移动、局部加权求和与边缘特征图

5.6 卷积神经网络从数据中学习多层特征

卷积神经网络把卷积等运算组织成多层可训练结构。训练样本提供图像和标签,前向计算得到预测,损失函数衡量预测与标签的差距,反向传播再调整卷积核和其他参数。这个过程与第3章“数据—模型—训练—测试”的框架相同,只是图像的空间结构让卷积成为重要运算。

1998年,LeCun等人的论文系统介绍了用梯度方法训练多层网络,并展示卷积网络在手写字符和文档识别中的应用。网络减少了对完整手工特征链的依赖,但仍需要合适的结构、标注数据和评价方法。手写数字识别成功,也不等于同一模型可以直接识别任意自然场景。

2009年的ImageNet工作推动了大规模、有组织的标注图像数据和统一评价。2012年,AlexNet使用深层卷积网络、GPU计算和大规模训练图像,在ImageNet大规模视觉识别挑战中取得显著结果。这一节点的重要性来自数据、算法、算力和基准共同成熟,不能简化成“模型层数越多就越智能”。

图像标注把人对任务的判断转换成训练和评价所需的数据。分类数据要为整幅图确认类别,检测数据还要逐个画出边界框,分割数据则要描出更细的区域;输出要求越细,标注成本和一致性检查通常越高。标注者对模糊目标、遮挡范围和类别边界理解不同,会把差异带入数据,因此项目要编写标注说明、抽查争议样例,并把难以确定的图片单独记录。

统一基准使不同方法能够在相近条件下比较,却不能代替自己的现场测试。公开数据中的类别、拍摄方式和评价指标未必与实训室相同;在某个榜单上表现较好,只能说明模型在该数据与指标下的结果。部署前仍要用预定摄像头、距离、光线和真实目标检查漏检、误检、速度与资源占用。

多层特征也不是人能逐项命名的规则表。研究者可以观察哪些输入使某些通道强烈响应,但一个类别通常由许多数值共同决定。训练数据若大量把“雪地”与“雪橇”同时出现,模型可能把背景当捷径;标签错误或类别不平衡也会影响学习。学习特征减少了人工设计,却没有取消数据责任和失败分析。

5.7 从整图分类走向定位、计数和分割

整图分类取得进展后,研究者继续解决目标检测。检测既要判断类别,又要预测位置;同一幅图中的目标数量不同、尺寸不同,还可能相互遮挡。早期常见思路是在许多位置和尺度上运行分类器,或先提出可能包含物体的候选区域,再分类和修正边界框。

2014年的R-CNN把候选区域与卷积网络特征结合:先找出可能的物体区域,再分别提取特征和分类。这类方法推动了深度学习特征在检测任务中的应用,但多阶段处理也带来速度和训练流程问题。2016年的YOLO把整幅图像一次输入网络,直接预测多个边界框和类别信息,展示了统一、实时检测路线的可能性。

“YOLO”后来出现许多不同实现和版本,不能把它当作一个永远不变的单一模型名称,也不能把论文在特定硬件上的速度写成任何设备都能达到的指标。工程选型要看目标大小、实时要求、设备算力、授权条件和自己的测试结果,而不是只比较模型名称。

检测框仍不是物体本身。两个框重叠时需要处理重复候选,小目标可能在缩放时丢失,框内也可能包含大量背景。分割任务进一步输出每个像素或区域的类别,适合表面缺陷、道路区域和精细轮廓,但需要更细标注和更多计算。任务越细,不等于一定越适合;项目只需要计数时,先确认检测是否已经够用。

5.8 分数、环境变化和视觉偏差

视觉系统常显示分数或置信信息。它表示模型在当前计算规则下对候选的支持程度,不等于“有这么大概率一定正确”,更不等于现实动作可以自动执行。不同模型的分数尺度不同,环境变化后原有阈值也可能失效,重要任务要用符合现场分布的验证集检查并进行校准。

图像中的相关线索还可能造成偏差。如果训练集里的安全帽照片大多来自明亮工地,模型在室内暗光下可能性能下降;如果某类物品总与特定桌面同时出现,模型可能记住桌面;如果数据只来自一种相机,换镜头、焦距和颜色处理后也会改变输入。测试必须覆盖真实准备部署的环境,而不是只重复训练样例。

遮挡和对抗性干扰提醒我们,局部像素变化可能影响输出。普通污渍、反光、贴纸和压缩噪声就足以造成错误,不必把失败都解释成蓄意攻击。工程上可以通过改善采集位置、增加代表性数据、组合传感器、设置不确定状态和人工复核降低风险。

本章信号卡具有颜色和形状双重线索。第二版不能只在红色区域上画框,还要检查轮廓面积、长宽比和形状分数;颜色与形状冲突时显示“不确定”。这种组合不是卷积神经网络,却能让学生看清一个稳定原则:不要让系统在证据不足时装作确定。

增加区域检测并完成第二版

第二版先从画面中找出与背景不同的前景像素,再把相邻前景归为连通区域。每个区域分别计算边界框、面积、主颜色、长宽比和轮廓特征,最后给出类别和分数。面积过小的区域视为噪声,重叠很大的重复框进行合并,颜色与形状明显冲突时进入人工复核。

这一处理流程让“有几个、在哪里”成为可计算输出。程序不再把全图红色比例当作唯一依据,而是对每个候选区域单独判断。它仍会在两张卡粘连、遮挡过多、背景颜色相近和边缘越界时失败;连通区域也不是现代目标检测网络,只是帮助理解区域、特征、边界框和计数的透明模型。

开发测试使用前面的单变量矩阵,允许根据结果调整最小面积、颜色纯度和形状阈值。修订完成后锁定设置,再运行8个封存组合场景。每个场景记录真实目标数、预测目标数、类别正确数、误检数、漏检数和需复核数;只报“总体准确率”会掩盖计数和定位问题。

评价项 计算或记录方式 说明
分类正确 类别正确的检测数 位置正确但类别错仍要记录
漏检 真实目标中没有匹配框的数量 遮挡和小目标常导致漏检
误检 没有真实目标对应的检测框数量 背景干扰常导致误检
计数误差 预测数量与真实数量之差 正负方向都要保留
复核触发 低分或线索冲突的数量 触发复核不是系统失败

模块动作分为三级:证据充分时在页面标注类别和位置;证据不足时显示黄色“请复核”;输入缺失、场景越界或风险较高时保持静默,不输出真实设备控制指令。实训页可模拟指示灯状态,但不得把教学分数直接连接到门锁、电机或危险设备。

第二版保存为 vision_signal_detector_v02.html。模块说明卡要写清:使用了什么输入,第一版和第二版各做什么,哪些变量进入测试,最常见的漏检和误检是什么,何时需要人确认,以及为什么它不是工业安全认证系统。

接入摄像头前完成现场检查

内置场景保证没有摄像头也能完成全部学习任务。若设备和权限允许,可以把打印卡片放在普通摄像头前开展扩展测试。网页必须由使用者主动点击后请求摄像头权限,画面默认只在本机内存中处理,不自动录制、上传或保存;测试结束后关闭视频轨道和浏览器权限。

摄像头测试先固定机位和背景,再逐项改变距离、角度、亮度和遮挡。每次改变只记录一个主要变量,拍到无关人员时立即停止并重新取景。不同电脑的摄像头会自动调整曝光和白平衡,同一张卡的通道值可能不同,因此内置阈值不能未经测试直接复制到所有设备。

硬件联动只做低风险模拟:检测到红圆时页面上的虚拟指示灯变红,检测到黄三角时显示复核提示,检测到蓝方块时仍需点击人工确认才能进入下一步。第12章将进一步学习传感器、执行器、反馈和动作降级;本章先建立“视觉输出只是系统输入之一”的工程意识。

图5-3 摄像头—像素—特征—检测框—人工确认—模拟指示灯的完整链路

安全与责任

视觉数据的信息量很大。一张看似只拍信号卡的照片,背景中可能包含同学面孔、工牌、作业、位置和设备编号。采集前要说明目的、范围、保存时间和访问者;能用内置场景完成时,就没有必要拍摄真实人员。删除照片不等于所有副本自动消失,上传云端前尤其要确认权限和使用约定。

视觉系统用于人员评价、门禁、安全生产和健康判断时,错误会对人产生实际影响。课堂模型不得承担这些职责。真实项目需要合规的数据、明确的性能指标、不同人群和环境下的测试、人工申诉渠道以及故障时的安全状态。开发者既要说明能做什么,也要主动说明不能做什么。

本章小结

数字图像是按位置排列的像素和通道数值。计算机视觉从这些数值中构造特征,再完成分类、检测或分割任务。人工特征把边缘、颜色和几何关系写成可检查的计算;卷积使用局部窗口形成特征图;卷积神经网络通过训练学习多层卷积核和其他参数,但仍受数据、任务和环境约束。

视觉技术的发展不是一条“旧方法全部消失”的直线。从线条和几何结构,到卷积网络在字符识别中的应用,再到ImageNet与深层网络推动大规模图像分类,最后到R-CNN、YOLO等目标检测路线,研究问题从识别受控形状扩展到复杂场景中的类别、位置和数量。每次能力扩展都带来新的标注、计算和评价要求。

本章第一版用全图颜色和边缘统计做主要类别分类,不能完成多目标计数;第二版用区域、边界框和几何特征完成透明的教学检测,同时保留小目标、粘连、遮挡和背景干扰的失败。可靠系统不会把处理分数写成事实保证,而会在证据不足时拒绝、复核或降级动作。

习题

基础题

  1. 用自己的话解释像素、特征、卷积和目标检测,并各指出本章实训中的一个对应对象。
  2. 为什么一幅640×480的RGB图像可以看成三维数组?提高分辨率为什么不一定消除模糊?
  3. 比较图像分类、目标检测和图像分割的输出,分别举一个合适任务。
  4. 固定3×3边缘核与卷积神经网络中训练得到的卷积核有什么联系和区别?

应用题

  1. 第一版在一幅包含三张信号卡的图中只输出“红色圆形”。从任务定义和处理方法两方面解释原因,并提出升级方案。
  2. 某检测器在明亮纯色背景上表现良好,换到暗光杂乱背景后误检增加。设计一个变量测试表,并说明哪些数据可以用于修订、哪些数据应留作最终测试。

探究题

  1. 【选做】寻找一个受控工业视觉任务,判断人工特征、学习模型或组合方法哪一种更合适,并列出你的选择条件。
  2. 【选做】比较R-CNN与YOLO原始论文的处理思路,只概括候选区域、整图处理、输出和工程取舍,不追逐版本排名。

本章交付物

1. 程序与测试证据

提交整图分类第一版、区域检测第二版、单变量测试矩阵、8个封存组合场景、错检漏检记录和模块说明卡。使用配套实训页时,提交单文件页面与导出的实验记录;采用摄像头扩展时,另附采集范围和删除确认,不提交包含无关人员的原始画面。

评价维度 达成标志
程序运行 原图、特征图、分类或检测结果可离线运行,参数变化可重复
测试证据 亮度、角度、遮挡、数量和背景齐全,保留误检与漏检
原理解释 能从像素讲到特征、卷积、分类和目标检测
工程修订 第二版有区域、边界框、拒绝、复核和动作降级
数据责任 不采集无关个人信息,摄像头主动授权,适用范围准确

2. 自评单

  • [ ] 我能从一个屏幕颜色追溯到像素位置和RGB通道值。
  • [ ] 我能说明本章固定卷积核怎样形成边缘特征图。
  • [ ] 我没有把教学区域检测器说成卷积神经网络。
  • [ ] 我能区分分类结果、边界框和像素级分割结果。
  • [ ] 单变量测试每次只改变一个主要条件。
  • [ ] 最终组合场景没有参与阈值修订。
  • [ ] 我们保留了至少一项误检、一项漏检和一项正确复核。
  • [ ] 摄像头没有自动开启,记录中不含无关个人信息。

打开本章离线实训