IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> padding(卷积中的填充) -> 正文阅读

[人工智能]padding(卷积中的填充)

情景(步长s为1):

一个6x6的图像,3x3的卷积核,每一行卷积的过程类似,如图

在这里插入图片描述

卷积核每走一步(第一个黑框到第一个绿框),输出一个像素。所以要计算卷积后图像的大小,需要知道图像大小及卷积核大小。

(6-3)+1的结果为4,所以得到的卷积图像大小为4x4。公式为(图片大小 - 卷积核大小) + 1,这里的(图片大小 - 卷积核大小)意味着卷积核移动的次数,移动3次(绿色框),输出3个像素,+1意味着第一次计算卷积,即卷积核初始位置不需要移动的那一次。

令原图像大小为nxn,卷积核大小为fxf
所以在步长为1的情况下,则卷积后图像边长为((n-f)+1),即移动做卷积次数与第一次之和,图像大小为((n-f)+1) * ((n-f)+1)

由此,可以暂时得到一个结论:nxn图像经过fxf卷积核得到图像大小的公式为((n-f)+1) * ((n-f)+1)

由上图能够明显看出,以上论述的情况的前提是卷积核每次移动一格,这里也是为了方便理解,上面情况是步长为1的情况,而有些时候,步长往往不为1,此时,卷积后的边长你是不是大概已经清楚了呢?

另外一种情景(步长不为1):

基于以上思考,假设当卷积核步长为3的时候,计算的过程依旧是将第一次卷积和移动次数相加得到边长,第一次卷积次数无疑就是1,只不过原来移动次数为n-f,而如今的卷积核移动得更快了,在n-f得总长度上加上由于步长变大的移动速度限制,一次移动3格。也就是说,现在的移动次数变为(n-f)/3,如图

在这里插入图片描述

所以,可以得到公式,卷积后图像的长和宽为(n-f)/s + 1

卷积存在问题

以上两种场景中,图像大小分别由6x6变为了4x4和2x2,原图像经过卷积操作得到的图像变小了。

缺点一:每次卷积,图像都会变小,6x6变为了4x4,6x6变为了2x2,多做几次卷积,你的输出图像会变得很小,可能变成1x1的大小,图像变小,会失去很多有用信息,因此图像变小是一个缺点。

缺点二:情景一中,图像边缘角落的像素点(边上四个角)仅被卷积计算了一次,因为它在3x3卷积核的一角,卷积核移动后,不能够再次对其计算。而区域中心被多次计算,边缘区域像素点在输出中采用较少,意味着丢失掉了边缘位置的信息

填充

为了解决这些问题,可以在原始图像周围添加一些像素点,如果把6x6图像填充成8x8图像,那么经过3x3卷积,(8-3)+1=6,得到的就是6x6的图像。习惯上,用0填充。如果p是填充数量,在情景一中,p=1,因为我们在周围一圈填充了像素点,输出变成了((n+2p - f) + 1)*((n+2p - f) + 1),(6+2-3+1)(6+2-3+1)=6x6与输入大小相同。

通过填充,角落像素信息发挥的作用较小这一缺点就被削弱了。这里我们填充的像素p=1。实际上填充多少像素,通常有两种选择,Valid卷积和Same卷积。

Valid卷积

Valid卷积意味着不填充。当你有nxn的图像,fxf的卷积核,s=1,将会输出一个(n-f+1)(n-f+1)的图像,这类似情景一。6x6图像,通过3x3卷积核,得到一个4x4输出。

Same卷积(一般用在s=1情况)

Same卷积,见名知意,填充之后,你的输出大小和输入大小是一样的。

s=1情况

s=1,根据n-f+1,填充后n变成n+2p,输出边长为n+2p-f+1。因此如果有nxn图像用p个像素填充,输出的大小就是(n+2p - f + 1)(n+2p - f + 1)。如果你想让n+2p - f + 1=n,使输入输出大小相等,你会通过等式求解p,那么p=(f-1)/2。
另外一种理解方式可以是把卷积核中心放在图像边缘上,这样的起始条件,填充相当于去掉卷积核中心一排的一半(p=(f-1)/2),使得输出和输入相同。

s !=1 情况

根据(n-f)/s + 1,填充后n变成n+2p,输出边长为(n+2p - f)/s + 1。因此如果有nxn图像用p个像素填充,输出的大小就是((n+2p - f)/s + 1)((n+2p - f)/s + 1)。如果你想让(n+2p - f)/s + 1=n,使输入输出大小相等,你会通过等式求解p,那么p=(s(n-1)+f-n)/2。

注:一般情况下Same卷积不会有s>1情况,因为就算s=2,实际的图像比较大,移动损失的像素点很多,要填充的话,就填充很多像素,然而当填充像素很多,意义就不大了。所以Same模式一般是s=1。

所以当f是一个奇数的时候,只要选择相应的填充尺寸,你就能确保得到和输入相同尺寸的输出。这也是为什么前面的例子,当过滤器是3×3时,使得输出尺寸等于输入尺寸,所需要的填充是(3-1)/2,也就是1个像素。另一个例子,当你的过滤器是5×5,如果f=5,然后代入那个式子,你就会发现需要2层填充使得输出和输入一样大,这是过滤器5×5的情况。


习惯上,计算机视觉中,f通常是奇数,甚至可能都是这样。你很少看到一个偶数的过滤器在计算机视觉里使用,我认为有两个原因。

其中一个可能是,如果f是一个偶数,那么你只能使用一些不对称填充。只有f是奇数的情况下,Same卷积才会有自然的填充,我们可以以同样的数量填充四周,而不是左边填充多一点,右边填充少一点,这样不对称的填充。

第二个原因是当你有一个奇数维过滤器,比如3×3或者5×5的,它就有一个中心点。有时在计算机视觉里,如果有一个中心像素点会更方便,便于指出过滤器的位置

也许这些都不是为什么f通常是奇数的充分原因,但如果你看了卷积的文献,你经常会看到3×3的过滤器,你也可能会看到一些5×5,7×7的过滤器。后面我们也会谈到1×1的过滤器,以及什么时候它是有意义的。

但是习惯上,推荐你只使用奇数的过滤器。我想如果你使用偶数f也可能会得到不错的表现,如果遵循计算机视觉的惯例,我通常使用奇数值的f。

你已经看到如何使用padding卷积,为了指定卷积操作中的padding,你可以指定p的值。也可以使用Valid卷积,也就是p=0。也可使用Same卷积填充像素,使你的输出和输入大小相同。以上就是padding,在接下来的笔记中我们讨论如何在卷积中设置步长。

参考:https://www.jianshu.com/p/4d3ec56e7d05

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:23:46  更:2022-07-17 16:24:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:14:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计