09 | 卷积(上):如何用卷积为计算机“开天眼”?
卷积
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了卷积在计算机视觉和深度学习中的重要性和应用。作者首先引出了计算机视觉中特征提取的重要性,以及卷积在其中的作用,详细介绍了卷积的基本概念、计算方式以及在PyTorch中的应用。特别是对卷积中的padding操作进行了详细阐述,解释了其作用和计算方式。文章还介绍了在PyTorch中使用卷积操作的相关参数和创建过程。通过清晰的语言和实例演示,读者可以快速了解卷积的基本概念和在深度学习中的实际应用。这篇文章适合对计算机视觉和深度学习感兴趣的读者阅读,能够帮助他们深入理解卷积的原理和操作方法。文章还提到了卷积的计算方式和在PyTorch中的实现,以及对padding为'same'时stride的数值的讨论,为读者提供了更多思考和学习的空间。
《PyTorch 深度学习实战》,新⼈⾸单¥59
全部留言(20)
- 最新
- 精选
- vcjmhg不可以,会出现ValueError: padding='same' is not supported for strided convolutions。 原因分析: 1. 引入padding = 'same'的目的实际上就是为了让输入特征保留更多的信息。而将stride设置成2,则是为了压缩特征,这和padding='same' 的作用刚好相反 2. 假定允许在padding = 'same'的情况下,将stride设置成2,则计算出来特征图,左侧和右侧的部分都会是0,提取到的这份部分特征是没有意义的。 此外我们在使用padding = 'same'时,一定要保证pytorch的版本大于等于1.9否则会出现RuntimeError: argument 1 (padding) must be tuple..这样的错误
作者回复: 你好,vcjmhg。感谢你的留言,👍🏻👍🏻👍🏻👍🏻^^
2021-10-31216 - Geek_8a391d老师您好,因为都是迁移学习从来没有思考过卷积的原理知识,一直有一个疑问,卷积核里面的值究竟是如何确定的呢?不同的卷积核会对卷积结果起到一个什么样的影响呢?我看很多模型会使用[-1 0 1]这样的形式,这样是不是对图像做了一个水平的分割呢?您在文中提到的这一个卷积核又起到什么作用?我们是通过训练得到的卷积核还是通过经验提前确定的呢?
作者回复: 你好,感谢你的留言。我刚接触卷积的时候跟你有相同的疑惑^^。卷积神经网络中的卷积参数都是通过训练得到的。 文中的提到的卷积是用在卷积神经网络中的,用来提取特征的。也有提前确定好的卷积参数,一般用在图像处理中,例如高斯blur等操作,都是事先确定好卷积参数的。
2021-10-298 - Chloe老师讲的很好呀,kernel的概念用二维图像一说,马上就明白了。谢谢老师解惑
作者回复: 你好,Chloe,感谢留言。 谢谢你的认可。^^
2022-01-292 - 🚶是不是可以理解为每次训练都是为了确定合适的卷积核参数呢?
作者回复: 你好,感谢你的留言。嗯嗯 可以这样理解^^
2021-10-302 - lwg0452padding 为’same’时,stride 不可以为 1 以外的数值(会报错)。 个人理解:假如可以的话,用文中的例子计算输出特征图只有左上部分不是0,图像边缘信息还是丢失了,没有意义。
作者回复: 你好,lwg0452,感谢你的留言。👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻。加油^^。如果可以的话,实现起来也比较麻烦,比较难判断输出特征图宽与高如何才能与输入的相同。
2021-10-291 - Hongpadding为’same’时,stride不能大于1,简单理解,当大于1时,相当于通过stride进行降级采样,输入特征图和输出特征图尺寸不可能相等了~ 老师,这么理解对吗?
作者回复: 嗯嗯 可以
2023-02-20归属地:上海 - chenyuping老师,您好,请问padding=1和same的效果是一样的吗? 对这个我有一点疑惑,padding=1是补一圈0,然后same的时候我看的例子是在右边和下边补0。感觉两者效果不一样吧,因为padding=1的时候,算下来会比原来的长宽,各多出一个像素吧? 另外,为什么valid 和same 的时候 stride只能是1,这个没有想明白。
作者回复: 你好,你的理解是对的。padding=1与same是不一样的。 stride=1的原因可以参考卷积输出尺寸的计算公式,其实是只要是奇数就行。 只不过只有等于1才有实际意义。
2022-10-10归属地:北京 - John(易筋)平移不变性(translation invariant)指的是CNN对于同一张图及其平移后的版本,都能输出同样的结果。这对于图像分类(image classification)问题来说肯定是最理想的,因为对于一个物体的平移并不应该改变它的类别。而对于其它问题,比如物体检测(detection)、物体分割(segmentation)来说,这个性质则不应该有,原因是当输入发生平移时,输出也应该相应地进行平移。这种性质又称为平移等价性(translation equivalence)。 稀疏连接学生认为是stride,可以跳过一些计算,池化层可以缩小图片大小。 参数的学习需要数据,由于数据中平移的分布一般都比较不均匀,引入平移的数据增强(augmentation)肯定是必要的。其实裁切(crop)就是一种平移的数据增强方式,因为不同裁切方式对应的patch之间的变换就是平移。而且这种方式相比于平移更加自然,没有周围的黑边padding,因此更加常用。总结起来,就是CNN的平移不变性主要是通过数据学习来的,结构只能带来非常弱的平移不变性,而学习又依赖于数据增强中的裁切,裁切相当于一种更好的图像平移。 希望老师点评,wx: zgpeace 参考:https://www.zhihu.com/question/301522740/answer/531606623
作者回复: 👍🏻,理解的很棒。 平移不变性我的理解跟你稍有不同。有限数据是很重要的,最好要保证数据的多样性,CNN本身就具有平移不变性的优点。两者结合才可以获得很好的效果。
2022-07-31归属地:北京 - 梁你好,老师,请问有无这些文章中的完整案例,直接看只言片语感觉比较吃力
作者回复: hi,梁,你好,谢谢你的留言。 在后续的实战中会有案例,你可以参考一下。
2022-06-06 - 亚林不能。 ValueError: padding='same' is not supported for strided convolutions
作者回复: 👍🏻👍🏻👍🏻^^
2022-05-16