精华内容
下载资源
问答
  • 最后再把螺杆旋入孔中将内部的药剂捣碎,使其膨胀,进而填充整个孔洞,让药剂,锚栓和基材之间全部混合在一起成为一个整体,达到锚固的效果。 那么要是里面的基材或者岩石裂开了怎么办嘞?这不用担心,有的化学锚栓...

    2fb5b27046c45b4e49ad332980939807.gif

    点击箭头处“蓝色字”,关注我们哦!!


    化学锚栓是一种新型的紧固材料,由化学药剂与金属杆体组成的。可用于各种幕墙、大理石干挂施工中的后加埋件安装,也可用于设备安装,公路、桥梁护栏安装;建筑物加固改造等场合。由于其玻璃管内装着的化学试剂易燃易爆,所以厂家必须经过国家有关部门的批准才能生产,整个生产过程需要有严密的安全措施,并必须使用和工作人员完全隔离的流水线。如果通过手工作业不但违反了国家的有关规定,而且非常危险。

    化学锚栓是继膨胀锚栓之后出现的一种新型锚栓,是通过特制的化学粘接剂,将螺杆胶结固定于砼基材钻孔中,以实现对固定件锚固的复合件。本文嘉捷和小编简单分享下化学锚栓的工作原理。

    93319aa3e7853b972f6900a1b2456425.png

    化学锚栓的工作原理

      化学锚栓的工作原理也非常简单,首先就是根据工程要求,在基材(岩石,混泥土等)中的相应位置打孔,然后用专用气筒,毛刷或压缩空气机清理钻孔中的灰尘,将化学药瓶放入到钻好的孔中,这也是与普通锚栓最大的区别,最后再把螺杆旋入孔中将内部的药剂捣碎,使其膨胀,进而填充整个孔洞,让药剂,锚栓和基材之间全部混合在一起成为一个整体,达到锚固的效果。

      那么要是里面的基材或者岩石裂开了怎么办嘞?这不用担心,有的化学锚栓内部有一个双层的结构,它可以滑动,如果里面的岩石裂开了,就会向外推动可滑动的滑杆,工人们就可以根据滑杆滑动的距离来判断岩石裂开的程度,这样就可以更好的保证安全了。

      每一种新锚栓的出现,都是伴随着工程应用中的问题而诞生的,如为了解决锚栓的抗腐蚀性能,人们就发明了化学锚栓,小小的锚栓不管在桥梁,高速公路还是工程隧道中都发挥着重要的作用,正因如此,世界上很多国家都将锚栓作为关键技术和重要的材料,可以说锚栓虽小,但是它做出的贡献却很大,未来也将在工程领域中起到越来越大的作用。

      更多化学锚栓的资讯请继续关注嘉捷和建材,感谢阅读!

    49de47dcb78d0719fec70cc88a159d15.png

    END

    发现更多精彩

    关注公众号

    d7aef441221857f8d37efe0ce229006b.png

    3458f24fcec5328d9bcf35b0a2c9f41e.png

    展开全文
  • 转自:机器之心:刷脸背后,卷积神经...本文将介绍卷积神经网络背后的数学原理。在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。今天,自动驾驶汽车和无人商店听起来...

    c3e9fad7b3e0ee877d583fd654d040d2.png

    转自:

    机器之心:刷脸背后,卷积神经网络的数学原理原来是这样的zhuanlan.zhihu.com
    d33228ff5775b8c06883fb2d09aace49.png

    计算机视觉技术在日常生活中有着非常普遍的应用:发朋友圈之前自动修图、网上购物时刷脸支付……在这一系列成功的应用背后,卷积神经网络功不可没。

    本文将介绍卷积神经网络背后的数学原理。
    在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。今天,自动驾驶汽车和无人商店听起来不再那么梦幻。事实上,我们每天都在使用计算机视觉技术——我们用自己的面孔解锁手机,将图片上传到社交网络之前进行自动修图……卷积神经网络可能是这一巨大成功背后的关键组成模块。这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。打个预防针,本文包含相当复杂的数学方程,但是,你也不必为自己不喜欢线性代数和微积分而沮丧。我的目标并不是让你记住这些公式,而是为你提供一些关于底层原理的直觉认知。简介
    过去我们接触到了密集连接的神经网络。那些神经网络中,所有的神经元被分成了若干组,形成了连续的层。每个这样的单元都与相邻层的每一个单独的神经元相连接。下图所示的是这样一个架构。

    5eab924b3b76b3567fc4f130ef246d7e.png
    图 1:密集连接的神经网络架构

    当我们基于一个有限的固定特征集合解决分类问题的时候,这种方法是很奏效的——例如,我们根据足球运动员在比赛中记录的统计数据来预测他的位置。但是,当处理照片的时候,问题变得更加复杂。当然,我们可以把每个像素的亮度视作一个单独的特征,然后将它作为密集网络的输入传递进去。不幸的是,为了让它能够应付一张典型的智能手机照片,我们的网络必须包含数千万甚至上亿的神经元。另一方面,虽然我们可以将照片缩小,但是我们也会在这个过程中损失有价值的信息。所以我们马上就会发现,传统的策略是没有用的——我们需要一种新的聪明的方法,来尽可能多的利用数据,但同时还要减少必需的计算量和参数。这就是 CNN 发挥作用的时候了。数字照片的数据结构
    让我们先花少许时间解释一下数字图像的存储方式。大多数人可能意识到了,图像实际上就是巨大的数字矩阵。每个数字代表的是一个单独像素的亮度。在 RGB 模型中,彩色图片是由 3 个这样的矩阵组成的,每个矩阵对应着 3 个颜色通道(红、绿、蓝)中的一个。在黑白图像中,我们仅使用一个矩阵。每个矩阵都存储着 0 到 255 的数值。这个数值范围是图像存储信息的效率(256 个数值刚好对应一个字节)和人眼敏感度之间的折中(我们仅能区分同种颜色的几种有限色度)。

    d560c6514b6fbf3f6cdb2a51cd36dc09.png
    图 2. 数字图像的数据结构

    卷积
    核卷积并不仅仅用在卷积神经经网络中,它也是很多其他计算机视觉算法的关键元素。这个过程是这样的:我们有一个小的数字矩阵(称作卷积核或滤波器),我们将它传递到我们的图像上,然后基于滤波器的数值进行变换。后续的特征图的值要通过下面的公式计算,其中输入图像被记作 f,我们的卷积核为 h。计算结果的行列索引分别记为 m 和 n。

    f1f9bff89ce4bfbc11b074d73cde2803.png

    fb07dc24d842c8c34bb7948536b8cabd.png

    图 3. 核卷积的例子

    在将我们的滤波器放在选中的像素上之后,我们将卷积核中的每一个数值和图像中对应的数值成对相乘。最后将乘积的结果相加,然后把结果放在输出特征图的正确位置上。我们在上边的动画中可以以一个微观的形式看到这个运算的过程,但是更有趣的是我们在整幅图像上执行这个运算得到的结果。图 4 展示了用数个滤波器做卷积的结果。

    fff638157907fc1bb50b9605f0017415.png

    图 4. 用卷积核寻找边缘

    Valid 和 Same 的卷积

    如图 3 所示,当我们在用 3x3 的卷积核在 6x6 的图像上执行卷积时,我们得到了 4x4 的特征图。这是因为在我们的图像里面,只有 16 个独特的位置来放置卷积核。由于我们的图像的尺寸在每次卷积的时候都会收缩,在图像完全消失之前,我们只能做有限次的卷积。此外,如果我们注意一下卷积核是如何在图像上移动的,我们会发现,边缘的像素会比中央的像素影响更小。这样的话我们会损失图片中包含的一些信息,你可以在下图看到,像素的位置是如何改变它对特征图的影响的。

    9e7d3519778daed3360d50ece93f2ed4.gif

    图 5. 像素位置的影响

    为了解决这两个问题,我们可以使用一个额外的边界来填充图像。例如,如果我们使用 1 像素的填充,我们将图像的尺寸增大到了 8x8,这样,3x3 的滤波器的输出将会成为 6x6。通常在实际中我们用 0 来做额外的填充。根据我们是否使用填充,我们会进行两种类型的卷积——Valid 和 Same。命名相当令人费解,所以在这里解释一下:valid 代表我们使用的是原始图像,same 代表我们在图像周围使用了边界,因此输入和输出的图像大小相同。在第二种情况下,扩充的宽度应该满足下面的方程,其中 p 是 padding(填充),f 是滤波器的维度(通常是奇数)。

    4e17d44a9961b4f2ad7bb47de6d82fd7.png

    跨步卷积

    e250bbb4223f76f94534953602d5b3d4.png

    图 6. 跨步卷积的例子

    在之前的例子中,我们总是将卷积核移动一个像素。但是,步长也可以看做是卷积层的一个参数。在图 6 中,我们可以看到,如果我们使用更大的步长,卷积会成为什么样子。在设计 CNN 结构时,如果我们想让接受域有更少的重叠或者想让特征图有更小的空间维度,那么我们可以决定增大步长。考虑到扩充和跨步,输出矩阵的维度可以使用下面的公式计算:

    1d98e060d69bf42ddf44ef275233e6ff.png

    转换到第三个维度

    立体卷积是一个非常重要的概念,它不仅让我们能够处理彩色图像,而且更重要的是,可以在一个单独的层上使用多个滤波器。最重要的规则是,滤波器和你想在其上应用滤波器的图像必须拥有相同的通道数。基本上,我们继续使用和图 3 类似的示例,尽管我们这次从第三个维度让矩阵中的数值对相乘。如果我们想在同一张图像上应用多个滤波器,我们会为每个滤波器独立地计算卷积,然后将计算结果逐个堆叠,最后将他们组合成一个整体。得到的张量(3D 矩阵可以被称作张量)满足下面的方程,其中:n 是图像的大小,f 是滤波器的大小,n_c 是图像中的通道数,p 是所用的填充,s 是所用的步长,n_f 是滤波器的数量。

    c9f94a6354a1a65f7bb1d957aef56792.png

    de627b2bb99acb62479f4e780b7a0195.png
    图 7. 立体卷积

    卷积层

    使用我们今天所学内容构造一个卷积层的时间到了。我们的方法几乎与用在密集连接神经网络上的方法相同,唯一的差别就是不使用简单的矩阵相乘,这一次我们将会使用卷积。前向传播包含两个步骤。第一步是计算中间结果 Z,它是由前一层的输入数据与张量 W(包含滤波器)的卷积结果,加上偏置项 b 得到的。第二步是给我们的中间结果应用一个非线性的激活函数(我们的激活函数记作 g)。矩阵方程的爱好者将在下面找到合适的数学公式。在下面的插图中,你可以看见一个小型的可视化,它描述了我们方程中用到的张量的维度。

    0651753cf017c19562d5a0f40af22ecb.png

    9e5540df1e5638245edd09284d37b766.png
    图 8. 张量维度

    连接剪切和参数共享

    在本文开始,由于需要学习的参数数量巨大,我提到密集连接神经网络在处理图像方面是很弱的。既然我们已经了解了关于卷积的所有内容,让我们来考虑一下它是如何优化计算的吧。在下图中,2D 卷积以一种稍微不同的方式进行了可视化——用数字 1-9 标记的神经元组成接收后续像素亮度的输入层,A-D 这 4 个单元代表的是计算得到的特征图元素。最后但同等重要的是,I-IV 是卷积核中的数值——它们必须被学习到。

    b70cdb72705b38058210103f6ab6ea36.png

    图 9. 连接剪切和参数共享

    现在,让我们聚焦于卷积层的两个重要属性。第一,你可以看到,连续两层中,并不是所有的神经元都是彼此相连的。例如,单元 1 仅仅会影响到 A 的值。第二,我们发现,一些神经元会共享相同的权重。这两个属性都意味着我们要学习的参数数量要少很多。顺便说一下,值得注意的是,滤波器中的每个值都会影响到特征图中的每个元素——这在反向传播中是特别重要的。

    卷积层反向传播

    任何一个曾经试图从零编写自己的神经网络的人都知道,前向传播远远不到成功的一半。真正有趣的是当你开始反向传播的时候。现在,我们不必在反向传播上花心思——深度学习框架都为我们做好了,但是我认为,了解背后发生的东西是很值得的。就像在密集连接神经网络中一样,我们的目标是在一个叫做梯度下降的过程中计算导数,然后使用它们来更新参数值。

    在计算中我们会使用链式法则——这个我在之前的文章中提到过。我们想要评估参数的变化对结果特征图的影响,然后评估它对最终结果的影响。在开始进入细节之前,让我们来统一一下将会用到的数学符号——为了让事情变得容易一些,我会放弃偏导数的完整符号,而会使用下面的简写符号。但是请记住,这个符号始终代表代价函数的偏导数。

    97baa955add2fe7a39499aab0c3ef37b.png

    d33c2139965fb547261124f6234b42e9.png
    图 10. 一个卷积层在前向和反向传播中的输入和输出数据

    我们的任务是计算 dW^[l] 和 db^[l]——它们是与当前层的参数相关的导数,还要计算 dA^[ l -1],它们会被传递到之前的层。如图 10 所示,我们以 dA^[ l ] 为输入。当然,这些对应张量的维度都是相同的,dW 和 W,db 和 b,以及 dA 和 A。第一步就是通过在我们的输入张量上应用我们的激活函数的导数,得到中间值 dZ^[l]。根据链式法则,这个运算的结果在后面会被用到。

    66481b313b8a187e83f9f9ffd8e8b301.png

    现在,我们需要处理卷积神经网络自身的反向传播,为了达到这个目的,我们会使用一个叫做全卷积的矩阵运算——见下图。请注意,我们在这里使用的卷积核会提前旋转 180°。这个运算可以通过下面的公式描述,其中的滤波器记作 W,dZ[m,n] 是一个标量,它属于从前一层得到的偏导数。

    058fe96a5331a97e8f45acc10b5de428.png

    3b68e96484da26368d5e24649373e752.png

    图 11. 全卷积

    池化层

    除了卷积层,CNN 通常会用到所谓的池化层。它们最早被用来减小张量的大小以及加速运算。这些层是比较简单的——我们需要将我们的图像分成不同的区域,然后在每一个部分上执行一些运算。例如,对 Max Pool 层而言,我们会选择每个区域的最大值,并将它放到对应的输出区域。与卷积层的情况一样,我们有两个可用的超参数——滤波器大小和步长。最后但同样重要的一点是,如果你对一个多通道的图像执行池化操作,那么每一个通道的池化应该单独完成。

    25a251c1eed26f5f855e65cb7eea6c6d.png

    图 12. 最大池化(max pooling)的例子

    池化层反向传播

    我们在这篇文章中只讨论最大池化反向传播,但是我们学到的规则是适用于所有类型的池化层的——只需要做微小的调整即可。因为在这种层中,我们没有任何必须更新的参数,所以我们的任务就是合适地分配梯度。我们记得,在最大池化的前向传播中,我们选择的是每个区域的最大值,并将它传递到了下一层。所以在反向传播中也是很清晰的,梯度不应该影响前向传播中不包含的矩阵的元素。实际上,这是通过创建一个掩膜来完成的,这个掩膜记住了前一阶段数值的位置,我们可以在后面转移梯度的时候用到。

    387fc27151704a1209e1b3cd0c907414.png

    5693d130bbae704fbf481e845bf92758.gif

    图 13. 最大池化反向传播

    展开全文
  • 本文将介绍卷积神经网络背后的数学原理。在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。今天,自动驾驶汽车和无人商店听起来不再那么梦幻。事实上,我们每天都在...
    计算机视觉技术在日常生活中有着非常普遍的应用:发朋友圈之前自动修图、网上购物时刷脸支付……在这一系列成功的应用背后,卷积神经网络功不可没。本文将介绍卷积神经网络背后的数学原理。

    在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。今天,自动驾驶汽车和无人商店听起来不再那么梦幻。事实上,我们每天都在使用计算机视觉技术——我们用自己的面孔解锁手机,将图片上传到社交网络之前进行自动修图……卷积神经网络可能是这一巨大成功背后的关键组成模块。这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。打个预防针,本文包含相当复杂的数学方程,但是,你也不必为自己不喜欢线性代数和微积分而沮丧。我的目标并不是让你记住这些公式,而是为你提供一些关于底层原理的直觉认知。

    简介

    过去我们接触到了密集连接的神经网络。那些神经网络中,所有的神经元被分成了若干组,形成了连续的层。每个这样的单元都与相邻层的每一个单独的神经元相连接。下图所示的是这样一个架构。

    f923b42c9ae30315d3f70e8ee16be604.png

    图 1:密集连接的神经网络架构

    当我们基于一个有限的固定特征集合解决分类问题的时候,这种方法是很奏效的——例如,我们根据足球运动员在比赛中记录的统计数据来预测他的位置。但是,当处理照片的时候,问题变得更加复杂。当然,我们可以把每个像素的亮度视作一个单独的特征,然后将它作为密集网络的输入传递进去。不幸的是,为了让它能够应付一张典型的智能手机照片,我们的网络必须包含数千万甚至上亿的神经元。另一方面,虽然我们可以将照片缩小,但是我们也会在这个过程中损失有价值的信息。所以我们马上就会发现,传统的策略是没有用的——我们需要一种新的聪明的方法,来尽可能多的利用数据,但同时还要减少必需的计算量和参数。这就是 CNN 发挥作用的时候了。

    数字照片的数据结构

    让我们先花少许时间解释一下数字图像的存储方式。大多数人可能意识到了,图像实际上就是巨大的数字矩阵。每个数字代表的是一个单独像素的亮度。在 RGB 模型中,彩色图片是由 3 个这样的矩阵组成的,每个矩阵对应着 3 个颜色通道(红、绿、蓝)中的一个。在黑白图像中,我们仅使用一个矩阵。每个矩阵都存储着 0 到 255 的数值。这个数值范围是图像存储信息的效率(256 个数值刚好对应一个字节)和人眼敏感度之间的折中(我们仅能区分同种颜色的几种有限色度)。

    96acdb9a8d1405eacbacbe359ec1553e.png

    图 2. 数字图像的数据结构

    卷积

    核卷积并不仅仅用在卷积神经经网络中,它也是很多其他计算机视觉算法的关键元素。这个过程是这样的:我们有一个小的数字矩阵(称作卷积核或滤波器),我们将它传递到我们的图像上,然后基于滤波器的数值进行变换。后续的特征图的值要通过下面的公式计算,其中输入图像被记作 f,我们的卷积核为 h。计算结果的行列索引分别记为 m 和 n。

    be101d7c4763b53d33627ed27169aafb.png
    f57c78aab57ab968e5ab4b4a4347e877.gif

    图 3. 核卷积的例子

    在将我们的滤波器放在选中的像素上之后,我们将卷积核中的每一个数值和图像中对应的数值成对相乘。最后将乘积的结果相加,然后把结果放在输出特征图的正确位置上。我们在上边的动画中可以以一个微观的形式看到这个运算的过程,但是更有趣的是我们在整幅图像上执行这个运算得到的结果。图 4 展示了用数个滤波器做卷积的结果。

    320ed1e7d13c996a5d1866078ee34860.gif

    图 4. 用卷积核寻找边缘

    Valid 和 Same 的卷积

    如图 3 所示,当我们在用 3x3 的卷积核在 6x6 的图像上执行卷积时,我们得到了 4x4 的特征图。这是因为在我们的图像里面,只有 16 个独特的位置来放置卷积核。由于我们的图像的尺寸在每次卷积的时候都会收缩,在图像完全消失之前,我们只能做有限次的卷积。此外,如果我们注意一下卷积核是如何在图像上移动的,我们会发现,边缘的像素会比中央的像素影响更小。这样的话我们会损失图片中包含的一些信息,你可以在下图看到,像素的位置是如何改变它对特征图的影响的。

    6fff47154fc13858c942d95bf07083d8.gif

    图 5. 像素位置的影响

    为了解决这两个问题,我们可以使用一个额外的边界来填充图像。例如,如果我们使用 1 像素的填充,我们将图像的尺寸增大到了 8x8,这样,3x3 的滤波器的输出将会成为 6x6。通常在实际中我们用 0 来做额外的填充。根据我们是否使用填充,我们会进行两种类型的卷积——Valid 和 Same。命名相当令人费解,所以在这里解释一下:valid 代表我们使用的是原始图像,same 代表我们在图像周围使用了边界,因此输入和输出的图像大小相同。在第二种情况下,扩充的宽度应该满足下面的方程,其中 p 是 padding(填充),f 是滤波器的维度(通常是奇数)。

    9e02a45e1e2f881b5b3f9f0af8348111.png

    跨步卷积

    9d1fe31969cfc08978c5f63af6ae1277.gif

    图 6. 跨步卷积的例子

    在之前的例子中,我们总是将卷积核移动一个像素。但是,步长也可以看做是卷积层的一个参数。在图 6 中,我们可以看到,如果我们使用更大的步长,卷积会成为什么样子。在设计 CNN 结构时,如果我们想让接受域有更少的重叠或者想让特征图有更小的空间维度,那么我们可以决定增大步长。考虑到扩充和跨步,输出矩阵的维度可以使用下面的公式计算:

    be0a069cc571e12b1c954c576b97e0e3.png

    转换到第三个维度

    立体卷积是一个非常重要的概念,它不仅让我们能够处理彩色图像,而且更重要的是,可以在一个单独的层上使用多个滤波器。最重要的规则是,滤波器和你想在其上应用滤波器的图像必须拥有相同的通道数。基本上,我们继续使用和图 3 类似的示例,尽管我们这次从第三个维度让矩阵中的数值对相乘。如果我们想在同一张图像上应用多个滤波器,我们会为每个滤波器独立地计算卷积,然后将计算结果逐个堆叠,最后将他们组合成一个整体。得到的张量(3D 矩阵可以被称作张量)满足下面的方程,其中:n 是图像的大小,f 是滤波器的大小,n_c 是图像中的通道数,p 是所用的填充,s 是所用的步长,n_f 是滤波器的数量。

    6cab48d71b5bfa7cd4e9504cf1665e9c.png
    15bb892be47f73056e60bdeaf88815ed.png

    图 7. 立体卷积

    卷积层

    使用我们今天所学内容构造一个卷积层的时间到了。我们的方法几乎与用在密集连接神经网络上的方法相同,唯一的差别就是不使用简单的矩阵相乘,这一次我们将会使用卷积。前向传播包含两个步骤。第一步是计算中间结果 Z,它是由前一层的输入数据与张量 W(包含滤波器)的卷积结果,加上偏置项 b 得到的。第二步是给我们的中间结果应用一个非线性的激活函数(我们的激活函数记作 g)。矩阵方程的爱好者将在下面找到合适的数学公式。在下面的插图中,你可以看见一个小型的可视化,它描述了我们方程中用到的张量的维度。

    61153fac8c22a973569aa423503acf3c.png
    c283f17c9cad532470620d5aae6b72ac.png

    图 8. 张量维度

    连接剪切和参数共享

    在本文开始,由于需要学习的参数数量巨大,我提到密集连接神经网络在处理图像方面是很弱的。既然我们已经了解了关于卷积的所有内容,让我们来考虑一下它是如何优化计算的吧。在下图中,2D 卷积以一种稍微不同的方式进行了可视化——用数字 1-9 标记的神经元组成接收后续像素亮度的输入层,A-D 这 4 个单元代表的是计算得到的特征图元素。最后但同等重要的是,I-IV 是卷积核中的数值——它们必须被学习到。

    c60911181db791f4300c11e1e6cbb8a8.gif

    图 9. 连接剪切和参数共享

    现在,让我们聚焦于卷积层的两个重要属性。第一,你可以看到,连续两层中,并不是所有的神经元都是彼此相连的。例如,单元 1 仅仅会影响到 A 的值。第二,我们发现,一些神经元会共享相同的权重。这两个属性都意味着我们要学习的参数数量要少很多。顺便说一下,值得注意的是,滤波器中的每个值都会影响到特征图中的每个元素——这在反向传播中是特别重要的。

    卷积层反向传播

    任何一个曾经试图从零编写自己的神经网络的人都知道,前向传播远远不到成功的一半。真正有趣的是当你开始反向传播的时候。现在,我们不必在反向传播上花心思——深度学习框架都为我们做好了,但是我认为,了解背后发生的东西是很值得的。就像在密集连接神经网络中一样,我们的目标是在一个叫做梯度下降的过程中计算导数,然后使用它们来更新参数值。

    在计算中我们会使用链式法则——这个我在之前的文章中提到过。我们想要评估参数的变化对结果特征图的影响,然后评估它对最终结果的影响。在开始进入细节之前,让我们来统一一下将会用到的数学符号——为了让事情变得容易一些,我会放弃偏导数的完整符号,而会使用下面的简写符号。但是请记住,这个符号始终代表代价函数的偏导数。

    2447e2fad27f0cb14ba0ce9d5c898afd.png
    8d07a382d047eecb91d6351c2b2f4432.png

    图 10. 一个卷积层在前向和反向传播中的输入和输出数据

    我们的任务是计算 dW^[l] 和 db^[l]——它们是与当前层的参数相关的导数,还要计算 dA^[ l -1],它们会被传递到之前的层。如图 10 所示,我们以 dA^[ l ] 为输入。当然,这些对应张量的维度都是相同的,dW 和 W,db 和 b,以及 dA 和 A。第一步就是通过在我们的输入张量上应用我们的激活函数的导数,得到中间值 dZ^[l]。根据链式法则,这个运算的结果在后面会被用到。

    21fe1b6d93f90334ab0321411ae4b573.png

    现在,我们需要处理卷积神经网络自身的反向传播,为了达到这个目的,我们会使用一个叫做全卷积的矩阵运算——见下图。请注意,我们在这里使用的卷积核会提前旋转 180°。这个运算可以通过下面的公式描述,其中的滤波器记作 W,dZ[m,n] 是一个标量,它属于从前一层得到的偏导数。

    fbdf2f3580b8d116ac101b4b7f5f5d37.png
    6ac64e4a748140b2c9409495fc471600.gif

    图 11. 全卷积

    池化层

    除了卷积层,CNN 通常会用到所谓的池化层。它们最早被用来减小张量的大小以及加速运算。这些层是比较简单的——我们需要将我们的图像分成不同的区域,然后在每一个部分上执行一些运算。例如,对 Max Pool 层而言,我们会选择每个区域的最大值,并将它放到对应的输出区域。与卷积层的情况一样,我们有两个可用的超参数——滤波器大小和步长。最后但同样重要的一点是,如果你对一个多通道的图像执行池化操作,那么每一个通道的池化应该单独完成。

    a14a3b0f82c011d0a5307835cf1dd11e.gif

    图 12. 最大池化(max pooling)的例子

    池化层反向传播

    我们在这篇文章中只讨论最大池化反向传播,但是我们学到的规则是适用于所有类型的池化层的——只需要做微小的调整即可。因为在这种层中,我们没有任何必须更新的参数,所以我们的任务就是合适地分配梯度。我们记得,在最大池化的前向传播中,我们选择的是每个区域的最大值,并将它传递到了下一层。所以在反向传播中也是很清晰的,梯度不应该影响前向传播中不包含的矩阵的元素。实际上,这是通过创建一个掩膜来完成的,这个掩膜记住了前一阶段数值的位置,我们可以在后面转移梯度的时候用到。

    65fc4741f5547b7c07b1508647a0ac08.gif

    图 13. 最大池化反向传播

    展开全文
  • 一、 前言卷积神经网络(convolutional neural network,CNN)是一种专门用来处理网格结构数据(例如图像数据)的前馈神经网络,是由生物学家Hubel和Wiesel在早期关于猫脑视觉皮层的研究发展而来。Hubel和Wiesel通过对猫...

    一、 前言

    卷积神经网络(convolutional neural network,CNN)是一种专门用来处理网格结构数据(例如图像数据)的前馈神经网络,是由生物学家Hubel和Wiesel在早期关于猫脑视觉皮层的研究发展而来。Hubel和Wiesel通过对猫脑视觉皮层的研究,发现初级视觉皮层中的神经元会响应视觉环境中特定的特征(称之为感受野机制),他们注意到了两种不同类型的细胞,简单细胞和复杂细胞。其中,简单细胞只对特定的空间位置和方向具有强烈的反应,而复杂细胞具有更大的接受域,其对于特征位置的微小偏移具有不变性。

    通过之前的介绍,我们了解到全连接神经网络的工作原理。后一层中的每一个神经元的都和上一层的所有神经元之间有连接。虽然这种方式能够最大程度地让整个网络中的神经元都接收到各个维度的信息,但是它的缺点也很明显。首先,全连接网络的参数较多,这会增加模型训练的时间和难度,其次过多的参数会导致过拟合问题,使得模型的泛化能力不强。另外对于二维图像数据来说,其所具有的局部不变性特征对于全连接神经网络来说是难以被提取到的。

    卷积神经网络一直是深度学习领域研究的核心,虽然早在上世纪90年代卷积神经网络就已经有一些实际场景的应用,但是其之所以能得到大范围的研究和使用,主要归功于近些年所取得的巨大进展。一个重要的节点是Hinton和他的学生Alex Krizhevsky利用他们设计的AlexNet[1]网络获得了2012年ImageNet竞赛的冠军。他们把图片分类的误差从原来的26%降低到15%,这在计算机视觉领域引起了不小的轰动,也是在那年之后,更多更深的神经网路一一被提出。直到现在,深度卷积神经网络已经发展成为计算机视觉领域中非常重要的一部分。

    二、 卷积神经网络的特性

    图像识别、分类是计算机视觉领域中比较常见的问题。对于计算机来说,一张图片就是一个大小为M*N*3的像素矩阵(以三通道图像为例),像素矩阵中每个像素的值在0到255之间。在给定这个像素矩阵作为输入后,要计算输出该图像所属的类别,这并不是一件十分简单的事。

    当我们人在看到一幅图像时,首先都会关注图像中比较突出的、信息量比较大的局部特征,例如当我们看到一张宠物狗的图片时,我们的目光一般首先会落在狗的脸部以及四条腿等部位,然后根据经验,我们知道这是一张狗的图片。卷积神经网络借鉴了人类视觉系统的工作原理,卷积神经网络首先通过寻找这副图片的边缘或者曲线等得到一些低级特征,然后再通过一系列卷积层将这些低级的特征汇聚成更加高级的特征,由于这些高级的特征是由多个低级特征卷积构成,因此高级特征能覆盖原始图片更多的信息。

    卷积神经网络主要有以下三大特性:

    1. 局部连接

    在第三章中,我们介绍的前馈神经网络,其相邻的两层之间,前一层的每一个神经元(或者是输入层的每一个单元)与后一层的每一个神经元都有连接,这种情况称为全连接。全连接网络的一个缺点就是参数太多,假设我们输入到神经网络中的是一张三通道的彩色图像,图像大小为128*128,因此输入层就有128*128*3=49150个单元。使用全连接网络的话,输入层到第一层隐藏层的每一个神经元都有49150个连接,随着网络层数的增加和每一层中神经元数量的增加,网络中的参数也会急剧增加。大量的参数不仅会拉低神经网络训练的效率,也很容易导致过拟合。

    在卷积神经网络中,层与层之间不再是全连接,而是局部连接,具体的实现方法就是我们在4.2节中会介绍的卷积操作。

    2. 权值共享

    在卷积神经网络中,每一层卷积层中都会有一个或者多个卷积核(也称为滤波器),这些卷积核可以识别图像中某些特定的特征,每个卷积核会去滑动卷积上一层的特征图,在卷积的过程中卷积核的参数是不变且共享的。这样在训练过程中,与之前的全连接神经网络训练大尺度输入样本时需要大量参数相比,卷积神经网络只需要相对少很多的参数就可以完成训练。

    3. 子采样

    子采样层(subsampling layer)也称作池化层(pooling layer), 其作用是对上一卷积层进行聚合,使得上一层卷积层的输入特征图尺寸在经过该子采样层的聚合(也就是我们说的池化)后减小,从而降低特征数量,减少参数的数量。子采样层所做的事其实就是对上一层卷积层进行扫描,每次扫描特定区域,然后计算该区域特征的最大值(最大池化(maximum pooling))或者平均值(平均池化(mean pooling)),作为该区域特征的表示。

    以上三个特征使得卷积神经网络具有一定程度上的缩放、平移和旋转不变性,并且相较于全连接神经网络,其网络参数也少了很多。

    三、 卷积层

    1. 什么是卷积

    卷积(Convolution)是分析数学中一种重要的运算,有着非常广泛的运用,在图像处理中,常用的是二维卷积。以单通道的灰度图像为例,对图像进行卷积操作,就是使用一个卷积核(也称滤波器,在本书中统一称为卷积核)分别与图像的同大小区域进行点乘,卷积核依次从左往右从上往下滑过该图像的所有区域,点乘后得到的矩阵其各个位置上的值累加,作为卷积后图像上的像素值。这种将图像和卷积核进行按位点乘后求和的操作,就是卷积神经网络中的卷积操作。

    假定有一个图像X,其大小为M*N,给定一个卷积核W,其大小为m*n,则卷积的公式可定义为:

    dc7af94c7952ceaf92c4eaf8f95feb94.png

    我们看一个简单的例子,如图1所示。我们有一张大小为5*5的图像(单通道),X是其像素矩阵,矩阵W为卷积核,其大小为3*3,矩阵Y是卷积得到的结果,称为特征映射或特征图(feature map)。根据上式,我们可以计算y11的值为:

    aa79615c4a7c7db25e8c0d8a388a7829.png
    4633920456cb5704093aab16f44384c4.png

    图1 二维滤波器的卷积运算示例

    需要说明的是,这里我们所说的卷积实际上是互相关(cross-correlation)。两者的区别在于,卷积的计算需要将卷积核进行翻转(相当于旋转180度),互相关也可以理解为不对卷积核进行翻转的卷积。

    这里不需要对卷积核进行翻转的原因是卷积核是否进行翻转并不影响神经网络对特征的抽取,另外卷积神经网络中的卷积核是需要学习的参数,因此卷积和互相关在这里其实是等价的。由于互相关的计算更加简便,所以目前我们在深度学习中都是使用互相关操作来替代卷积。

    在图像处理中,卷积是用来做特征提取的一个有效方法。不同的卷积核可以用来检测图像中不同的特征,以手写数字识别为例,如图2左侧所示是一个手写数字"1",右侧是它的像素值。

    c6a35dc1189fed21ef54dded2e9e5e28.png

    (左图:手写数字原始图像;右图:手写数字的像素值)

    现在我们要用卷积操作来提取这个数字的特征,假设我们有如图3所示的两个卷积核。

    ab56fff48a8c1a3c529d0f8302b7352c.png

    图3用来识别手写数字的两个不同的卷积核a(左)和b(右)

    如图4所示,当我们用卷积核a对原始图像做卷积操作时,根据前面介绍的卷积计算方式,其结果为:

    2183a368d464b8de7c7d9e59cb804428.png
    9c107bb308d98404e8df8d2733b12aca.png

    图4使用卷积核a对原始图像做卷积操作 (左:原始图像的像素表示;右:卷积核a)

    我们再换用卷积核b对原始图像进行卷积,如图5所示。

    8a8356238605c443eb51634db4b2c8ee.png

    图5使用卷积核b对原始图像做卷积操作

    卷积得到的结果为:

    b720bafd5d48aeaffaf2c269c9d11a84.png

    从计算结果来看,卷积核a与原始图像卷积计算得到的值要远大于卷积核b。通过观察也能发现,卷积核a的形状与原始图像的重合度较高,这也是卷积核提取图像特征的关键,如果图像的某一区域与卷积核所能检测的特征很相似,那么该区域就会激活卷积核,得到一个很高的值,反之,如果图像的某一区域与卷积核所能检测的特征不相似,卷积操作之后,该区域的值就会相对较低。

    如图6所示是图像处理中常用的几种卷积核,图中最上面的卷积核是高斯卷积核,其作用是对图像进行平滑降噪处理,第二和第三个卷积核可以用来进行边缘检测。

    9115cd34cb6744b0664b0d2174903b56.png

    图6图像处理中的几种滤波器示例(图片引用自:https://nndl.github.io/)

    (图片引用自:https://nndl.github.io/)

    现实中我们不可能针对每一种情况去设计一个卷积核,而卷积神经网络的强大就在于它可以学习到需要的卷积核,卷积神经网络通过从训练数据中学习到所需的卷积核,从而实现图像检测、分类的任务。

    在卷积神经网络中,为了达到更灵活的特征抽取,我们引入了卷积核的滑动步长(Stride)和零填充(Zero-padding)来增加卷积的多样性。

    卷积核的滑动步长是指卷积核在卷积操作中每次移动的距离,如图7的上半部分所示是滑动步长为1时候的情况。如果将滑动步长设为2,则卷积核每次在横向(或纵向)移动的距离就为2,如图4-7的下半部分所示。

    8c848a97f03ce66c6f40e40043173bc2.png
    97e4da0f6576472551ee287ee0e451e7.png

    图7滑动步长分别为1(上)和2(下)的卷积过程示例

    (本小节图片均引用自:Dumoulin V , Visin F .

    A guide to convolution arithmetic for deep learning[J]. 2016.)

    零填充是指在输入矩阵的四周填充零,如图8所示在输入矩阵的周围填充了宽度为2的零。

    7b13995962a74b67c0327447474fe863.png

    图8宽度为2的零填充示例

    在卷积神经网络中,按照不同的零填充的方式可以划分为不同的卷积,如下是三种较为常用的卷积(假设输入矩阵的大小为m*m,卷积核的大小为n*n,滑动步长为s,零填充的宽度为p。):

    1)窄卷积(narrow convolution):图7上半部分所示的情况就是窄卷积,其中滑动步长s=1,不进行零填充,卷积后输出的特征图大小为(m-n+1)*(m-n+1)。

    2)宽卷积(wide convolution):图9所示是宽卷积的示例,其中滑动步长s=1,零填充的宽度为p=n-1,卷积后输出的特征图大小为(m+n-1)*(m+n-1)。

    3)等宽卷积(equal-width convolution):图10所示是等宽卷积的示例,其中滑动步长s=1,零填充的宽度为p=(n-1)/2,卷积后输出的特征图大小为m*m,等宽卷积得到的特征图和输入的原图大小一致。

    899492f068661fcd0286d0f4436ad4e3.png

    图9宽卷积示例

    bb2edd243daad32cfd815a0594f084a2.png

    图10等宽卷积示例

    四、 总结

    由于卷积神经网络内容篇幅较大,故在此将卷积神经网络内容拆分为三部分,首先本篇幅介绍了卷积神经网络的发展,卷积神经网络模型的特性以及卷积层的特点。下一部分将介绍卷积层的结构和池化层的结构。最后将结合代码以一个实际比赛冰山雷达波图像识别结尾。

    五、 参考文献

    [1]Alex Krizhevsky: ImageNet Classification with Deep Convolutional Neural Networks .NIPS 2012

    展开全文
  • 得到的张量(3D 矩阵可以被称作张量)满足下面的方程,其中:n 是图像的大小,f 是滤波器的大小,n_c 是图像中的通道数,p 是所用的填充,s 是所用的步长,n_f 是滤波器的数量。 图 7. 立体卷积 卷积层 使用我们今天...
  • 选自towardsdatascience作者:Piotr Skalski机器之心编译参与:Nurhachu...本文将介绍卷积神经网络背后的数学原理。在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。...
  • 最后再把螺杆旋入孔中将内部的药剂捣碎,使其膨胀,进而填充整个孔洞,让药剂,锚栓和基材之间全部混合在一起成为一个整体,达到锚固的效果。 那么要是里面的基材或者岩石裂开了怎么办嘞?这不用担心,有的化学锚栓...
  • ----与智者为伍 为创新赋能----一,引言:AOI(automatically optical inspection)是光学自动检测,顾名思义是通过光学系统成像实现自动检测的一种手段,是众多自动图像传感检测技术中的一种检测技术,核心技术点如何...
  • 发泡胶顾名思义就是一种具有发泡特性和粘结特性的胶,它主要用于建筑门窗边缝、构件伸缩缝及孔洞处的填充、密封、粘结。它是一种有弹性有密封功能的发泡材料,靠着湿气进行固化。到目前为止,市面上有枪式和管式两种...
  • 二值图像孔洞填充

    2020-06-04 14:22:07
    二值图像孔洞填充 原理 将原图像向外延展一到两个像素,并将值填充为0。 使用floodFill函数将扩展后图像的大背景填充,填充值为前景色255,种子点为(0,0)即可(步骤一可以确保(0,0)点位于大背景。 将填充...
  • 图像处理——孔洞填充算法

    千次阅读 2020-08-28 15:06:48
    3、最后对Marker取补即得到最终图像,与原图相减可得到填充图像。 python代码: # -*- coding:utf-8 -*- import numpy as np import cv2 class kdtc(): def __init__(self): pass def readTif(sel
  • 形态学之孔洞填充

    千次阅读 2018-10-06 20:00:49
    说实话,我第一次看到这只是明白了它的原理,但是对它的作用并不是很了解,在做过一些图像...孔洞填充的公式:Xk=(Xk−1⊕B)∩Ack=1,2,3...X_k=(X_{k-1}\oplus B)\cap A^c \qquad k=1,2,3...Xk​=(Xk−1​⊕B)∩Ack...
  • 在平时处理二值图像的时候,除了要进行形态学的一些操作,还有有上一节讲到的轮廓连通区域的面积周长标记等,还有一个最常见的就是孔洞填充,opencv这里成为漫水填充,其实也可以叫种子填充,或者区域生长,基本的...
  • 在平时处理二值图像的时候,除了要进行形态学的一些操作,还有有上一节讲到的轮廓连通区域的面积周长标记等,还有一个最常见的就是孔洞填充,opencv这里成为漫水填充,其实也可以叫种子填充,或者区域生长,基本的...
  • 学习DIP第14天 转载请标明本文出处:... 其实写博客是个很痛苦的过程,要准备一些东西,还怕写错会误导别人,但是在总结和准备相关资料的时候会更深入的理解其中的一些算法原理,然后再根据自己的实际操...
  • 图像处理——形态学

    千次阅读 2017-06-05 15:53:00
    形态学一般是使用二值图像,进行边界提取,骨架提取,孔洞填充,角点提取,图像重建。 基本的算法:膨胀腐蚀,开操作,闭操作,击中击不中变换 几种算法进行组合,就可以实现一些非常复杂的功能,而且逻辑严密...
  • 形态学一般是使用二值图像,进行边界提取,骨架提取,孔洞填充,角点提取,图像重建。基本的算法:膨胀腐蚀,开操作,闭操作,击中击不中变换几种算法进行组合,就可以实现一些非常复杂的功能,而且逻辑严密。这里给...
  • 图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。1、膨胀(dilation)原理:一般对...一般用来扩充边缘或填充小的孔洞。功能函数:skimage.morphology.dilation(image, selem=...
  • 形态学一般是使用二值图像,进行边界提取,骨架提取,孔洞填充,角点提取,图像重建。 基本的算法:膨胀腐蚀,开操作,闭操作,击中击不中变换 几种算法进行组合,就可以实现一些非常复杂的功能,而且逻辑严密。 ...
  • 图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。 1、膨胀(dilation) ...一般用来扩充边缘或填充小的孔洞。 功能函数:skimage.morphology.dilation(image,s...
  • 图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。 1、膨胀(dilation) ...一般用来扩充边缘或填充小的孔洞。 功能函数:skimage.morphology.dilation(image,&...
  • 《数字图像处理》冈萨雷斯 第三版part1(共1-3部分)

    千次下载 热门讨论 2014-11-12 13:50:07
     9.5.2 填充孔洞  9.5.3 清除边界对象  9.6 灰度图像形态学  9.6.1 膨胀和腐蚀  9.6.2 开运算和闭运算  9.6.3 重构  小结 第10章 图像分割  前言  10.1 点、线和边缘检测  10.1.1 点检测  10.1.2 线检测 ...
  • 特点:消除噪点,去除小的干扰块,而不影响原来的图像。 1.2 闭运算 闭运算与开运算相反,是先膨胀后腐蚀,作用是消除“闭合”物体里面的孔洞。特点:可以填充闭合区域。 2 opencv实现 2.1 开运算 import numpy as...
  • 基本形态学滤波

    2019-09-25 13:24:09
    图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。 一 膨胀(dilation) ...一般用来扩充边缘或填充小的孔洞。 功能函数:skimage.morphology.dilation(im...
  • 图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。 1、膨胀(dilation) ...一般用来扩充边缘或填充小的孔洞。 功能函数:skimage.morphology.dilation(image,...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

图像孔洞填充原理