长文解析Resnet50的算法原理

这篇具有很好参考价值的文章主要介绍了长文解析Resnet50的算法原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好啊,我是董董灿。

恭喜你发现宝藏了。收藏起来吧。

前言

从打算写图像识别系列文章开始已经快2个月了,目前写了有9篇文章,几乎涵盖了Renset50这一CNN网络95%的算法。

今天整理了下,修复一些笔误和表述错误,整理成了pdf, 同时本文也是整理汇总版。

这篇文章算是偏专业性的深度科普文,将Resnet50这一神经网络(为什么叫这个名字文中也有详述)用到的算法几乎全部分章节完成了科普性的表述。

文中关于算法的表述力求在通俗易懂的情况下完成,几乎没有枯燥无味的公式推导,会有很多图片演示,算法背景也有交代。但毕竟涉及到算法,对于没有算法背景或深度学习背景的同学而言,可能有些地方会难懂一点,但不妨碍对深度学习或Resnet50这一网络有个感性的认识。

限于作者白天要上班,文章基本都是晚上下班后和周末抽时间写的,时间精力有限。文中一些表述难免有疏漏,同时,作者为了尽可能用通俗易懂的语言说清楚一些算法原理,会导致某些算法上的表述并不严谨,但不妨碍我们对一些算法有一个感性认识。

欢迎收藏本文或分享给周围希望了解深度学习知识的朋友。

pdf 目录如下:

长文解析Resnet50的算法原理

长文解析Resnet50的算法原理

​全文共18500字,全文较长。

建议收藏本文,全文pdf你也可以关注下面链接的公众号,发送【resnet】获取全文pdf。下载pdf阅读更通畅。

长文解析Resnet50的算法原理

一、写在前面

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

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

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

于是,我有了一个大胆的想法。接下来,我会从头开始,聊聊一个图像识别网络是怎么工作的,每一步算法的原理,以及相关的背景知识。你可能会想,看懂这些需要什么知识呢?其实不需要太深奥的数学知识。我会尽可能把每一步写的通俗易懂,这个过程中我也会搜集一些资料,也是一个不断完善自己知识体系的过程。

文中聊得网络,就是大家都比较熟悉的,被玩烂的、作为各大AI芯片厂商性能标杆的Resnet50。

个人水平有限,文中如有错误,欢迎联系我指正。

长文解析Resnet50的算法原理

二、从像素说起

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

其实我们都知道,图像是由像素组成的。实际上,神经网络计算,算的就是像素之间的关系,以及这些关系背后可能隐藏的图片信息。相机摄像头像素2000万,拍出来的照片肯定比像素1000万的要清晰我们更容易看到图片中的物体是什么。

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

长文解析Resnet50的算法原理

一张1080p的图片,我们可以更容易辨别出图像中的物体是山还是水。这是因为更多的像素会给眼睛更丰富的图片细节 但是,你有没有发现,当我们去看一张图片时,我们绝对不是盯着某一个像素或某几个像素看,而是看了整个图像的大部分区域,或者说,大部分像素!

因为只有看到了大部分的图片,才能知道图中是座山。正所谓,聚沙成山!绝不是少了一粒沙,山就不是山,多了一粒沙,就变成了山。

像素局部性

长文解析Resnet50的算法原理

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

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

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

神经网络识别图片大致就是这样的原理,它模拟的,就是人们看到图片之后的信息处理过程。

当我们盯着一个图片看时,我们首先会获取到图片的细节特征。比如哆啦A梦红色的大嘴巴。但是如果仅仅盯着大嘴巴,又反而让人有一种“只缘身在此山中”的感觉,看不到图片的全貌。

因此还需要看一下图像的轮廓。于是,我们的眼睛看图片大致有以下两个过程:

  • 瞳孔放大,盯着某一处细节(如大嘴巴)看

  • 瞳孔缩小,模糊的看一张图片的大致轮廓

两个过程获取的信息叠加。

Bingo,看清楚了,是哆啦A梦!那么神经网络是否可以模拟这种瞳孔放大、缩小的方式呢?

很幸运,可以! 那就是卷积算法。

卷积

长文解析Resnet50的算法原理

卷积的计算示意图

卷积核的设计,就可以很直观的模拟这种获取图片信息的方法。

人们通过调整卷积核的大小,来达到瞳孔张开、缩小的目的。并且大量的实验和论文表明,卷积这一针对图像局部性识别的算法,可以非常有效的模拟人眼识别物体的过程。关于卷积算法以及卷积核的设计原理,后面会专门来讲,因为卷积这一算法,在图像处理领域,太重要了。

我们现在继续沿着像素这一话题讲下去。

色彩分量RGB

回到像素这一话题,你有没有想过,为什么一张图片会是彩色的。

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

回答正确。

长文解析Resnet50的算法原理

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

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

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

其实对于计算机来说,一张图片只是一堆数据,计算机是无法知道这堆数据代表的是什么。这就需要人为的给这堆数据一种表示方法,让计算机知道,哦,这1/3的数据是红色分量,这1/3的是蓝色分量,这些数据(像素)组合起来,可能代表的是个“帽子”。

怎么做呢?通过设计数据在计算机中的存储方式来解决。

数据在计算机的存储中,最常见的存储方式是连续存储的。比如C语言,定义一个数组,那么数组在内存中的位置是连续的。

int data[10] = {0,1,2,3,4,5,6,7,8,9};
内存怎么理解,它就是一排连着的门牌号的公寓宿舍。门牌号为101里面住着的,是data的第一个数据0。门牌号102里面住着的,是data的第二个数据1,...,以此类推。

长文解析Resnet50的算法原理

哈利波特的女贞路4号,内存也是类似于门牌号规则,数据就像人一样,存储在以地址为标识的一个个的内存地址上(房子)

只不过,在计算机存储器中,没有门牌号,有的都是地址。这个时候,计算机根本就不关心数据是啥,计算机用到的时候,就把数据从内存对应的地址中取出来用。

计算机是如何取像素数据的

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

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

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

长文解析Resnet50的算法原理

一张图片的抽象数据表示

友好的数据表示方法,可以减少大量的计算复杂度。

虽然这样表示不太利于人们的直观理解,但是计算机处理这种数据是十分方便的。在目前主流的深度学习框架中,对于图片的数据格式,基本都支持了NHWC或NCHW这种数据摆放格式。说到底,都是为了更高效地进行图片数据的处理和运算。

总结一下

这一章,从像素说起,说到了像素具有局部连接性的,人眼识别图像也是通过获取像素的局部连接性信息来完成的。

幸运的是,卷积这一算法,可以很好的模拟这一过程。最后,为了使计算机更高效的处理图片数据,引出NHWC的图片数据表示方法,所以,之后我们说图片,不仅仅局限于图片的长和宽,还多了一个维度信息,那就是channel。

加餐

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

长文解析Resnet50的算法原理

这位女士名叫Lena。

电气电子工程师学会图像处理汇刊(IEEE Transactions on Image Processing)主编曾在1996年1月出版的一期中解释道,Lena的流行,因为她是一张好的测试图片,其中包含了很多细节,平滑区域,阴影和纹理。当然,另外一个原因就是漂亮美女的图片自然受到男性居多的研究领域的欢迎。

三、图像的色彩空间

上一章从像素开始,聊到了RGB 这一常见的色彩空间模型。

之所以还想继续聊聊RGB 以及另一种色彩空间模型-YUV ,不是说想要以后去学摄影,学学如何需要调节色度、曝光和饱和度啥的。

而是在图像识别的深度学习任务中,RGB以及YUV这些概念,总是会时不时的出现一下,让枯燥无味且高度抽象的深度学习算法,突然之间,变得具体一些,光鲜一些。

长文解析Resnet50的算法原理

RGB

Red,Green,Blue(RGB)是我们最常见的图像表示方法。这个非常好理解,三原色的融合,几乎可以构造出所有需要的颜色。三张RGB分量图片的融合,就可以构成一幅色彩斑斓的图片。

长文解析Resnet50的算法原理

原图与R G B 三个分量图片

平时我们说,分辨率为1920*1080的图片,它代表的是在长宽两个方向上,有 1920 * 1080 个像素,但是,在色彩这个方向上,还有 3 个通道(channel),也就是RGB,往往被我们忽略。

我们看到的一个像素点的颜色,在计算系统中,并不是简单的由一个数值来表示的,而是由RGB三个分量的三个数值来表示的。

长文解析Resnet50的算法原理

一个像素点的 RGB 表示

因此,想要计算一张1920*1080的图片的大小,或者说计算这张图片在计算机内存中所占用的大小时,不能仅仅用图片的长度乘以宽度这么算,还需要考虑通道数。

数值表示和图片大小计算

我们可能用过画图这一软件来调过颜色。

通过简单的设置红色,绿色,蓝色的数值,就可以在调色板中得到一个颜色。有没有注意到,无论红色,还是绿色,还是蓝色,其表示的数值都没有超过255。

为什么?因为像素值,在计算机语言中,是用一个 int8 的数据来表示的。而 int8,指的是 8bit文章来源地址https://www.toymoban.com/news/detail-455660.html

到了这里,关于长文解析Resnet50的算法原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是Resnet50模型?

     随着CNN的不断发展,为了获取深层次的特征,卷积的层数也越来越多。一开始的 LeNet 网络只有 5 层,接着 AlexNet 为 8 层,后来 VggNet 网络包含了 19 层,GoogleNet 已经有了 22 层。但仅仅通过增加网络层数的方法,来增强网络的学习能力的方法并不总是可行的,因为网络层数到

    2023年04月13日
    浏览(44)
  • ResNet18、50模型结构

    论文地址: https://arxiv.org/pdf/1512.03385.pdf pytorch官方 预训练模型 地址: pytorch官方 resnet网络 代码(包括resnet18、34、50、101、152,resnext50_32x4d、resnext101_32x8d、wide_resnet50_2、wide_resnet101_2): torchvision.models.resnet — Torchvision 0.11.0 documentation https://pytorch.org/vision/stable/_modules/torchvis

    2024年02月06日
    浏览(42)
  • ResNet50的猫狗分类训练及预测

    相比于之前写的ResNet18,下面的ResNet50写得更加工程化一点,这还适用与其他分类,就是换一个分类训练只需要修改图片数据的路径即可。 我的代码文件结构   1. 数据处理 首先已经对数据做好了分类       文件夹结构是这样 开始划分数据集 split_data.py 运行完以上代码的到的

    2023年04月12日
    浏览(50)
  • torchvision中的标准ResNet50网络结构

    注:仅用以记录学习 打印出来的网络结构如下: 结构: 修改最后一层(fc层)代码: 用于特定的分类任务,其中最后一层全连接层的输出类别数量被指定为输入参数

    2024年02月04日
    浏览(44)
  • 62、python - 全手写搭建 resnet50 神经网络

    如果将上篇文章中涉及到的算法都自己手写完一遍后,我们开始尝试利用自己手写的算法,搭建一个完整的 resnet50 神经网络。 网络结构就参考这个链接中的网络结构,是在之前下载模型的章节中,下载的模型。 为了搭建一个完整的神经网络,定义一个 Resnet 的类,这个类就

    2024年01月24日
    浏览(40)
  • ResNet50卷积神经网络输出数据形参分析-笔记

    ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块,其中第2到第5个模块分别包含3、4、6、3个残差块 50=49个卷积(3+4+6+3)*3+1和一个全连接层 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10, 1] [2048, 1] [1] ResNet50包含多个模块,其中第2到第5个模

    2024年02月14日
    浏览(48)
  • 适合新手搭建ResNet50残差网络的架构图(最全)

    适合新手搭建ResNet50残差网络的架构图+代码(最全) 网上的教程大多复杂难懂,不适合新手,本来神经网络就难,这些教程本身更难,对新手极度不友好,因此自己做的这个架构图和写的代码,面向新手,大神跳过 后续还会上传ResNet30,FCN,UNet等架构图和代码。

    2024年02月14日
    浏览(33)
  • YOLOv5改进之替换Backbone为ResNet50

    BestYOLO:https://github.com/WangRongsheng/BestYOLO BestYOLO是一个以科研和竞赛为导向的最好的YOLO实践框架! 目前BestYOLO是一个完全基于YOLOv5 v7.0 进行改进的开源库,该库将始终秉持以落地应用为导向,以轻便化使用为宗旨,简化各种模块的改进。目前已经集成了基于torchvision.models 模型为

    2024年02月05日
    浏览(53)
  • MATLAB卷积神经网络——基于ResNet-50进行图像分类

    一、ResNet50工具箱安装 (1)下载工具箱 https://ww2.mathworks.cn/matlabcentral/fileexchange/64626-deep-learning-toolbox-model-for-resnet-50-network (2)在matlab打开下载的resnet50.mlpkginstall文件 (3)使用下面代码进行测试,出现结果说明安装成功 二、训练猫狗数据集 (1)数据集下载链接:    http

    2024年02月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包