机器学习篇---像素展平特征
最简单、最原始的特征提取方法——像素展平特征。
如果说HOG是拿着放大镜去刻画图像的轮廓,那像素展平就是直接把图像“拍扁”,不进行任何加工,把最原始的像素信息交给机器去学习。
一、像素展平的核心思想:从“表格”到“列表”
核心思想:图像在计算机里就是一个多维的数字矩阵。一张28x28像素的灰度图,就是一个28行、28列的二维表格,每个格子里填着0-255之间的亮度值。像素展平,就是把这张表格按行或按列拆开,然后首尾拼接成一条长长的、一维的数字列表。
-
灰度图展平
28 x 28 = 784。一张图就被转换成了一个长度为784的一维向量。
向量里的第1个值,是原图左上角第1个像素的亮度;最后一个值,是右下角最后一个像素的亮度。 -
彩色图展平
一张28x28的RGB图,可以想象成3张叠在一起的28x28的表格。展平时,通常把每张表格先展平,再把3条列表拼在一起。
28 x 28 x 3 = 2352。最终得到一个长度为2352的向量。
这么做的目的,是让数据格式能适配传统机器学习模型。逻辑回归、支持向量机(SVM)、全连接神经网络等模型的输入,都要求是一维的向量。所以展平操作可以看作把一个完整的图像对象转换为一次数据库中的一条记录,每个像素就是一个独立的特征,其值就是特征值。
二、展平操作的本质:最“笨”却最忠实
这种方法可以看作一种无损记录,就像拍照存成RAW格式,不压缩、不美化,所有原始数据都原封不动地保留。它没有像HOG那样设计“箭头方向”的分析逻辑,也没有CNN的层级抽象。它唯一的逻辑就是:把每一个像素单元都当成一个绝对平等的独立变量。
正是因为极致简单,它带来一些有意思的特性:
-
优点:简单到极致,信息零损耗
-
实现简单:一行代码就能搞定。在Python里,
image.flatten()或image.reshape(-1)即可完成。 -
信息无损:所有原始信息都保留了下来,没有被人为加工或丢弃。如果图像规整(如手写数字MNIST),一个简单的全连接网络也能达到不错的效果。
-
-
缺点:维度灾难与空间感全无
-
维度灾难:一张小小的100x100的灰度图,展平后就是10000维。这导致模型参数量爆炸式增长,计算变慢,且需要海量数据来防止过拟合。
-
空间拓扑结构完全丢失:这是最致命的问题。像素(1,5)和像素(1,6)在空间上是挨着的邻居,但展平后它们可能一个在第5位,一个在第10085位,相隔很远。模型会彻底丢失“上下左右”的概念,这相当于把一个拼图块全打乱后去识别图案,极其低效。
-
三、与全连接网络的“命运之桥”
像素展平最重要的存在意义,就是作为原始图像与全连接神经网络之间的桥梁。
一个最朴素的手写数字识别全连接网络,结构通常是这样的:输入层 (展平后的784个像素点) -> 隐藏层1 (学一点组合) -> 隐藏层2 (学更复杂的组合) -> 输出层 (0到9共10个概率)
在这个结构里,展平层是网络的第一层,它本身不进行任何计算,只是做一个数据变形。就像一个接口转换器,把2D图像插头转换成1D向量插头,好让后续的网络层能读懂。展平特征本身没有任何学习能力,其后的全连接网络,本质上是在学习“哪些像素值组合在一起代表5,哪些组合在一起代表8”。这意味着,同样一张图,你把目标物体平移到右上角,所有特征值的位置都变了,全连接网络会认为这是一个完全不同的新情况。
四、在CNN时代的位置:最后的“一哆嗦”
有趣的是,即使在CNN时代,展平操作依然没有被淘汰。一个典型的图像分类CNN,结构是这样的:
卷积层(找边缘)-> 池化层(压缩)-> 卷积层(找形状)-> 池化层(压缩)-> ... -> 展平层 -> 全连接层 -> 输出
这里的展平,发生在CNN的末端。它的工作不再是处理原始像素,而是把前面那些能干的卷积核学到的高级抽象特征图,拍平了送给最后的“大总管”全连接层,去做最终的分类判断。此时它展平的是一个已经高度浓缩、语义清晰的“精华信息版”,完美避开了自己“空间感缺失”的弱点。
五、思考:展平与“空间拓扑”的哲学
如果展平会丢失空间结构,那保留空间结构的方法有几种?
-
让模型去学:给像素赋予位置编码,让Transformer去搞清楚谁和谁相关。
-
保持原来的架构:像CNN一样用卷积核滑动,始终保持数据的二维或三维结构。
-
转化为另一种表示:如HOG,把像素转化为局部梯度方向的统计,这种表示比原始像素本身更有语义,也更紧凑。
但如果没有展平,把整个图像作为“一个整体”塞给模型,那模型就只能基于所有像素的全局关系去推理。而现实世界的物体往往是可分解的组成部分(部分与整体关系),这正是CNN层级结构和展平二者配合的巧妙之处。
六、总结框图

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)