卷积和边缘检测

垂直边缘检测器的卷积过程

最简单的垂直边缘检测


过滤器fliter在原图像上滚动。

size_输出维度 = size_输入维度 - size_过滤器维度 + 1


在过小的图片上检测时,可能会出现边缘过大的问题。但在大图片上,其可以很好地检测边缘。

区分正边和负边的边缘检测


上面是由明向暗,下面是由暗到明。

水平边缘检测

其他边缘检测的滤波器


Sobel滤波器增加了中间一行元素的权重,这使得结果的鲁棒性更高一些。
Scharr滤波器实际上是一种垂直边缘检测,翻转90°就是水平边缘检测。

随着深度学习的发展,我们学习到,当我们真正想去检测出复杂图像的边缘,我们不一定要去使用那些研究者所使用的9个数值。
我们可以把这9个数字当作9个参数,在之后通过反向传播算法去理解这9个参数。
相比于单纯的垂直和水平检测,这种方法可以找到任何角度的边缘。神经网络可以自动去学习一些低级的特征(比如边缘)。
反向传播可以让神经网络学习任何它所需的3×3滤波器,并在整幅图片上去应用它。

将这9个数都作为参数的思想,已经称为计算机视觉中最有效的思想之一。

Padding

不加Padding直接卷积的缺点

不加Padding的两个缺点:

  • 每次做卷积操作图像都会缩小。
  • 丢掉了图像的边缘位置的许多信息
    (如果你注意角落边的像素,这个像素点只被一个输出所触碰或者使用,而中间的像素点就会被许多3×3区域使用)

    合理设置Padding的值和过滤器的size,可以使得输出维度等同于输入维度。这样就解决了图像减小的缺点。
    而左上角涂绿的格子,影响了输出的4个格子。
    Padding的时候,习惯上用0来填充。

Padding多少个像素

通常有两个选择:

  • Valid卷积:不填充(no Padding)
  • Same卷积:使输入输出维度一致(Pad so that output size is the same as the input size)。

    习惯上,过滤器的size一般都是奇数的。
    原因大概有两个:
  • 采用偶数,就只能使用不对称填充。
  • 奇数维度的过滤器有中心点,有时在计算机视觉里,如果有一个中心像素点会更方便,便于之处滤波器的位置。

卷积步长

卷积中的步长是另一个构建卷积神经网络的基本操作。

[Z]为向下取整,也叫做进行板除(the floor of Z)。
3×3的过滤器必须完全处于图像中或者填充后的图像区域内,才输出相应的结果

卷积为何有效

单个三维过滤器的卷积


上面讨论的都是通道数为1的图像,而面对通道数大于1的图像,情况也会有所不同。
以3通道的RGB图像为例,相比于单通道的图像,数据相当于多了一个维度(从6×6变为6×6×3)。同样,卷积过程中用到的过滤器的通道数要与输入图像一致(对应PyTorch库中Conv2d()in_channel参数)。
但是最后输出的矩阵的维度仍为1。

具体的卷积过程如下:

过滤器与输入数据立方对应位置的数相乘,再求和,就得到了输出矩阵相应位置的一个数。

上面这张图告诉我们两个事情:

  • 我们可以关注某一个特定的通道,对应的操作就是单独对相应通道的滤波器进行设置。
  • 三维的输入数据立方 卷积 三维同深度过滤器,得到的是二维的输出矩阵。

多个三维过滤器的卷积

这样做的重要性在于:
你可以同时检测两个特征(比如水平和垂直特征),或者10个,或者128个,或者几百个不同的特征。
并且输出的通道会等于你要检测的特征数。

这张图的要点就是:
真正卷积的时候很多是用许多的不同的过滤器(Multiple filters)来卷积。采用的过滤器的种类数(或者叫个数),就等于输出数据立方的深度,对应PyTorch库中Conv2d()out_channel参数。

吴恩达神经网络和深度学习-学习笔记-29-卷积的基础知识相关推荐

  1. 吴恩达神经网络与深度学习——深度神经网络

    吴恩达神经网络与深度学习--深度神经网络 深度神经网络 符号 前向传播 矩阵维度 m个样本 为什么使用深层表示 搭建深层神经网络块 正向传播和反向传播 前向和反向传播 前向传播 反向传播 参数和超参数 ...

  2. 吴恩达神经网络和深度学习

    [前言] 在学习了深度学习和神经网络之后,为什么我要以博客的形式来做笔记?这CSDN有那么多的优秀文章,我自己写的都比不上 别人的我写的真的有意义吗,为什么我要浪费大量的时间去做这项工作?我相信一句话 ...

  3. 吴恩达神经网络与深度学习——浅层神经网络

    吴恩达神经网络与深度学习--浅层神经网络 神经网络概述 神经网络表示 计算神经网络的输出 m个样本的向量化 for loop 向量化 向量化实现的解释 激活函数 sigmoid tanh函数 ReLu ...

  4. 吴恩达神经网络和深度学习-学习笔记-38-使用开源的方案+迁移学习+数据增强data augmentation

    使用别人的开源成果 想要用现成的网络,最好在网络上找到开源的实现,这要比从头开始实现快得多. 比如:直接在Google上搜索resnets github,找到合适的后点击下载会得到URL,然后在cmd ...

  5. 吴恩达神经网络和深度学习-学习笔记-28-端到端的深度学习(end-to-end deep learning )

    深度学习最令人振奋的最新动态之一,就是端到端深度学习end-to-end deep learning的兴起. 什么是"端到端深度学习" 以前有一些数据处理系统或学习系统,它们需要多 ...

  6. 吴恩达神经网络和深度学习-学习笔记-8-梯度消失与爆炸 + 梯度检测

    梯度消失与爆炸 介绍 直观理解是: 权重W只比1(即单位矩阵)大一点,深度神经网络的激活函数将爆炸式增长. 权重W只比1(即单位矩阵)小一点,深度神经网络的激活函数将指数式递减. 虽然我(吴恩达老师) ...

  7. 吴恩达-神经网络和深度学习课程-学习心得(一)

    前言: 陆陆续续学完了吴恩达老师在网易云课堂上开设的深度学习工程师微专业的部分内容(01.神经网络与深度学习,04.卷积神经网络,02.改善深层神经网络),在进一步应用实践之前,对之前的学习的内容做个 ...

  8. 吴恩达神经网络和深度学习-学习笔记-39-计算机视觉现状

    Data vs hand-engineering 你可以把大部分的机器学习问题看成是在你的数据相对较少的地方,应用到你拥有大量数据的地方. 我们今天有相当数量的语音识别数据,至少相对于这个问题的复杂性 ...

  9. 吴恩达神经网络和深度学习-学习笔记-22-误差分析

    单一误差分析 假设我们面对一个猫分类器的准确率不够的原因. 队友看了一下算法分类出错的例子,注意到算法将一些够狗分类为猫. 在这种条件下,我们应不应该做一个项目专门处理狗?比如搜集更多的狗的图片,或者 ...

  10. 吴恩达神经网络和深度学习-学习笔记-21-何时该改变开发集+测试集或指标

    需要我们改变开发集+测试集或指标的情况,是现有的指标或开发测试集并不能帮助我们选择出最好的模型! 如果你的评估指标,无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标. (加权来排除某一类 ...

最新文章

  1. 计算机组成原理 — CPU — 流水线与执行周期
  2. Fliptile(状压+思维)
  3. 你遇到的面试官是「伯乐」吗?
  4. Linux crontab定时执行任务
  5. LeetCode 21. 合并两个有序链表 golang
  6. UVA 11452 Dancing the Cheeky-Cheeky
  7. C++项目中编译部分C的代码
  8. java读写文件操作
  9. Java集合详解2:LinkedList和Queue
  10. paip.提升用户体验------c++ 拖曳使用总结..
  11. 【气动学】基于matlab改进的遗传和粒子群算法高斯烟羽模型模拟气体扩散【含Matlab源码 1061期】
  12. 值得推荐的C/C++框架和库
  13. 连肌肉颤动都清晰可见!3D人体模型自动生成算法,一作来自北大图灵班 | SIGGRAPH...
  14. 太阳能光伏发电系统的组成
  15. Python可视化数据学习
  16. classpath、path、JAVA_HOME的作用及JAVA环境变量配置 (转)
  17. Xavier NX+KU040图像处理卡
  18. content root修改问题
  19. 互联网裁员下的人生百态,你了解多少
  20. Unity3D相机操控(完整模拟Scene视图操作)

热门文章

  1. python是什么 自学-自学python用什么系统好
  2. lda主题模型困惑度_主题模型(三):LDA主题个数选择
  3. 各大软件的 java版本_Java 各个版本的软件 1.4 1.5 5.0 6.0
  4. 手机所有录音功能失效_疯狂打CALL!小米手机自带扫描文字功能,一秒识别所有文字信息!...
  5. 蓝桥2014c++真题:神奇算式
  6. 【python笔记】可迭代对象和迭代器
  7. Kafka设计解析(一)- Kafka背景及架构介绍
  8. Jmeter模拟加密密码登录
  9. 根据一张表更新另一张表
  10. ECharts力导向布局图增加滚动条