Resnet图像识别入门——像素

本文涉及的产品
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
简介: 学习图像识别,最要了解的就是像素的属性和性质。

大家好啊,我是董董灿。

如果让你设计一个可以识别图像的神经网络,你会怎么做?

我之前问过自己这个问题,思来想去,我的答案是:我可能不知道如何下手。

突然有一天,当我把Resnet50这个网络的所有算法都写完一遍之后,我突然觉得,只要我深入了解了这些算法的原理,或许这个网络我也能设计出来。

于是,我有了一个大胆的想法:从头开始,拆解一个典型的图像识别网络是怎么工作的,以及它里面所涉及的背景知识和算法原理。

你可能会想,看懂这些需要什么知识呢?其实不需要太深奥的数学知识。我尽可能把每一步写的通俗易懂,这个过程中我会搜集一些资料,也是一个不断完善自己知识体系的过程。

这个网络,就用Resnet50吧。

像素

要实现图像识别,最离不开的,就是像素。

其实我们都知道,图像是由像素组成的。

实际上,神经网络计算,算的就是像素之间的关系,以及这些关系背后可能隐藏的图片信息。

相机摄像头像素2000万,拍出来的照片肯定比像素1000万的要清晰,我们更容易看到图片中的物体是什么。

这是为什么?因为像素越多,像素之间的关系(色彩,轮廓)越丰富,我们所能看到的信息就越多,自然而然获取到的信息就多。

一张1080p的图片,我们可以更容易辨别出图像中的物体是山还是水。这是因为更多的像素会给眼睛更丰富的图片细节

但是,你有没有发现。

当我们去看一张图片时,我们绝对不是盯着某一个像素或某几个像素看,而是看了整个图像的大部分区域,或者说,我们看到了大部分像素。

因为只有看到了大部分的图片,才能知道图中是座山。

正所谓,聚沙成山,绝不是少了一粒沙,山就不是山,多了一粒沙,就变成了山。

哆啦A梦

上图哆啦A梦,虽然不是很清晰,像素点数也很少,但一眼望去,依然可以分清是哆啦A梦,甚至,用手捂住一半的图像,依然可以。

这是因为人们对于图像信息的识别,是建立在对像素局部性分析的基础上的。

像素局部性

所谓局部性,通俗点说,就是眼睛或大脑会将相邻的像素或大片的像素连接起来分析,从而组合成嘴巴,然后是耳朵,最后是哆啦A梦。

而一个人工神经网络识别图片的过程,大致就是如此:神经网络模拟的,就是人们看到图片之后的信息处理过程。

当我们盯着一个图片看时,我们首先会获取到图片的细节特征,比如哆啦A梦红色的大嘴巴。

但是如果仅仅盯着大嘴巴,又反而让人有一种“只缘身在此山中”的感觉,并不能看到整个图片的全貌,因此还需要看一下图像的轮廓。

于是,眼睛看图片就有了以下两个过程:

  • 瞳孔放大,盯着某一处细节(如大嘴巴)看
  • 瞳孔缩小,模糊的看一张图片的大致轮廓

两个过程看到的信息,在大脑中叠加,那就看清楚了,是哆啦A梦。

那么神经网络是否可以模拟这种瞳孔放大、缩小的方式呢?

很幸运,可以,那就是利用卷积核。

卷积运算模拟人眼感受野

一个卷积运算

卷积核投影在原始图片上的区域,称之为感受野。通过设计不同大小的卷积核,就能获得不同大小的感受野。

如此,卷积核就可以很直观的模拟瞳孔张开、缩小的过程。

并且大量的实验和论文表明,卷积这一针对图像局部性识别的算法,可以非常有效的模拟人眼识别物体的过程。

关于卷积算法以及卷积核的设计,后面会专门写文章,欢迎持续关注本系列。

色彩分量RGB

回到像素这一话题。

你有没有想过,为什么一张图片会是彩色的。

学过摄影的小明同学可能这时会回答:因为图片是由RGB三种颜色来表示的,每个像素实际是不同的R/G/B分量的叠加,混合起来,就表示成了不同的颜色。

回答正确。

三张分别表示R/G/B分量的图片,合成一张彩色图片

我们人眼可以很直观的看到红色和蓝色,可以察觉到一张图片的色彩和轮廓。

那么,如果让计算机来处理图片,它又是如何知道色彩和轮廓的呢?

其实对于计算机来说,一张图片存在在内存中,只是一堆数据,计算机是无法知道这堆数据代表的是什么。

这就需要人为的给这堆数据一种表示方法,让计算机知道:哦,这1/3的数据是红色分量,这1/3的是蓝色分量,剩下1/3的数据是绿色分量。还得让计算机知道,一些数据(像素)组合起来,可能代表的是个“帽子”。

怎么做呢

数据在计算机的存储中,最常见的存储方式是连续存储的。

比如在C语言编程中,我们可以定义一个数组,那么数组在内存中的位置是连续的。

int data[10] = {0,1,2,3,4,5,6,7,8,9};

内存怎么理解,它就是一排连着的门牌号的宿舍。

门牌号为101里面住着的,是data的第一个数据0;门牌号102里面住着的,是data的第二个数据1,...,以此类推。

内存中的数据

只不过,在计算机存储器中,没有门牌号,有的都是地址。

这个时候,计算机根本就不关心数据是啥,计算机用到的时候,就把数据从内存对应的地址中取出来用。

如何取数据

这就需要人们为数据存储设计一种格式,告诉计算机,这堆数据大概是什么样的。只有这样,通过这种人为约定的方式,计算机才能正确的取到R分量或者B分量。

对于一张图片来说,最常见的两个参数是长和宽,一般用H(height) 和 W(width) 来表示,那么RGB三个分量,看作是3个通道(channel),一般用 C 来表示。

如此一来,一张长宽分别是224像素和224像素的RGB图像,就可以用 HWC = [224, 224, 3]来表示。两张类似的图片就用 NHWC = [2, 224, 224, 3]表示,其中N代表图片张数。

一张图片的抽象数据表示

友好的数据表示方法,可以减少大量的计算复杂度。虽然这样表示不太利于人们的直观理解,但是计算机处理这种数据是十分方便的。

在目前主流的深度学习框架中,对于图片的数据格式,基本都支持了NHWC或NCHW这种数据摆放格式。

说到底,都是为了更高效地进行图片数据的处理和运算。

像素女神

熟悉OpenCV或者计算机视觉的同学,可能对于上面的RGB分量中的女神很熟悉。没错,在很多的教程中,这位女神不止一次的出场。

Lena

这位女士名叫 Lena。

电气电子工程师学会图像处理汇刊 (IEEE Transactions on Image Processing)主编曾在1996年1月出版的一期中解释道,Lena的流行,因为她是一张好的测试图片,其中包含了很多细节,平滑区域,阴影和纹理。

当然,另外一个原因就是漂亮美女的图片自然受到男性居多的研究领域的欢迎。

本文作者原创,请勿随意转载,如有转载需求请联系作者

相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
5月前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
326 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
3月前
|
机器学习/深度学习 数据挖掘 C#
ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
94 0
|
6月前
|
机器学习/深度学习 自动驾驶 算法
图像识别中的scikit-learn:从像素到分类
【4月更文挑战第17天】本文介绍了如何使用Python的scikit-learn进行图像识别,包括图像预处理、特征提取(如HOG、SIFT)和分类器训练(如SVM、决策树)。通过一个示例展示了从像素数据到图像分类的完整流程,强调了预处理和特征提取的重要性。虽然scikit-learn在图像识别中有应用,但随着深度学习的发展,卷积神经网络在该领域展现出更强的性能,暗示了未来结合深度学习与scikit-learn的研究趋势。
|
6月前
|
机器学习/深度学习 并行计算 算法
【计算机视觉+CNN】keras+ResNet残差网络实现图像识别分类实战(附源码和数据集 超详细)
【计算机视觉+CNN】keras+ResNet残差网络实现图像识别分类实战(附源码和数据集 超详细)
181 0
|
机器学习/深度学习 算法 TensorFlow
基于python+ResNet50算法实现一个图像识别分类系统
在本文中将介绍使用Python语言,基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练,观察其模型训练效果。
661 0
基于python+ResNet50算法实现一个图像识别分类系统
|
机器学习/深度学习 算法
Resnet图像识别入门——Softmax分类是如何工作的
softmax作为一个分类器,它只是把重要的信息变得更重要了而已。
Resnet图像识别入门——Softmax分类是如何工作的
|
机器学习/深度学习 算法 计算机视觉
Resnet图像识别入门——全连接
全连接,到底连接的是什么?看完这篇文章,相信你会有所了解。
Resnet图像识别入门——全连接
|
机器学习/深度学习 算法
Resnet图像识别入门——池化层
池化和卷积不同,它没有channel维度的累加。
Resnet图像识别入门——池化层