PyTorch 深度学习实战
方远
LINE China 数据科学家
10381 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 32 讲
开篇词 (1讲)
PyTorch 深度学习实战
15
15
1.0x
00:00/00:00
登录|注册

09 | 卷积(上):如何用卷积为计算机“开天眼”?

你好,我是方远。
现在刷脸支付的场景越来越多,相信人脸识别你一定不陌生,你有没有想过,在计算机识别人脸之前,我们人类是如何判断一个人是谁的呢?
我们眼睛看到人脸的时候,会先将人脸的一些粗粒度特征提取出来,例如人脸的轮廓、头发的颜色、头发长短等。然后这些信息会一层一层地传入到某一些神经元当中,每经过一层神经元就相当于特征提取。我们大脑最终会将最后的特征进行汇总,类似汇总成一张具体的人脸,用这张人脸去大脑的某一个地方与存好的人名进行匹配。
那落实到我们计算机呢?其实这个过程是一样的,在计算机中进行特征提取的功能,就离不开我们今天要讲的卷积。
可以说,没有卷积的话,深度学习在图像领域不可能取得今天的成就。 那么,就让我们来看看什么是卷积,还有它在 PyTorch 中的实现吧。

卷积

在使用卷积之前,人们尝试了很多人工神经网络来处理图像问题,但是人工神经网络的参数量非常大,从而导致非常难训练,所以计算机视觉的研究一直停滞不前,难以突破。
直到卷积神经网络的出现,它的两个优秀特点:稀疏连接与平移不变性,这让计算机视觉的研究取得了长足的进步。什么是稀疏连接与平移不变性呢?简单来说,就是稀疏连接可以让学习的参数变得很少,而平移不变性则不关心物体出现在图像中什么位置。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了卷积在计算机视觉和深度学习中的重要性和应用。作者首先引出了计算机视觉中特征提取的重要性,以及卷积在其中的作用,详细介绍了卷积的基本概念、计算方式以及在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-31
    2
    16
  • Geek_8a391d
    老师您好,因为都是迁移学习从来没有思考过卷积的原理知识,一直有一个疑问,卷积核里面的值究竟是如何确定的呢?不同的卷积核会对卷积结果起到一个什么样的影响呢?我看很多模型会使用[-1 0 1]这样的形式,这样是不是对图像做了一个水平的分割呢?您在文中提到的这一个卷积核又起到什么作用?我们是通过训练得到的卷积核还是通过经验提前确定的呢?

    作者回复: 你好,感谢你的留言。我刚接触卷积的时候跟你有相同的疑惑^^。卷积神经网络中的卷积参数都是通过训练得到的。 文中的提到的卷积是用在卷积神经网络中的,用来提取特征的。也有提前确定好的卷积参数,一般用在图像处理中,例如高斯blur等操作,都是事先确定好卷积参数的。

    2021-10-29
    8
  • Chloe
    老师讲的很好呀,kernel的概念用二维图像一说,马上就明白了。谢谢老师解惑

    作者回复: 你好,Chloe,感谢留言。 谢谢你的认可。^^

    2022-01-29
    2
  • 🚶
    是不是可以理解为每次训练都是为了确定合适的卷积核参数呢?

    作者回复: 你好,感谢你的留言。嗯嗯 可以这样理解^^

    2021-10-30
    2
  • lwg0452
    padding 为’same’时,stride 不可以为 1 以外的数值(会报错)。 个人理解:假如可以的话,用文中的例子计算输出特征图只有左上部分不是0,图像边缘信息还是丢失了,没有意义。

    作者回复: 你好,lwg0452,感谢你的留言。👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻。加油^^。如果可以的话,实现起来也比较麻烦,比较难判断输出特征图宽与高如何才能与输入的相同。

    2021-10-29
    1
  • Hong
    padding为’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
收起评论
显示
设置
留言
20
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部