精华内容
下载资源
问答
  • 卷积运算

    2018-03-05 14:06:34
    卷积运算,两个输入张量(输入数据和卷积核)进行卷积,输出代表来自每个输入的信息张量。 tf.nn.conv2d完成卷积运算。 卷积核(kernel),权值、滤波器、卷积矩阵或模版,filter。 权值训练习得。 卷积核(filter参数)...
    """
    卷积运算,两个输入张量(输入数据和卷积核)进行卷积,输出代表来自每个输入的信息张量。
    tf.nn.conv2d完成卷积运算。
    卷积核(kernel),权值、滤波器、卷积矩阵或模版,filter。
    权值训练习得。
    卷积核(filter参数)权值数量决定需要学习卷积核数量。
    通道,计算机器视觉,描述输出向量。
    RGB图像,3个代表秩1张量[red,green,blue]通道。
    输出与input_batch同秩张量,与卷积核维数相同。
    两个张量卷积生成特征图(feature map)。
    特征图为输出添加新层代表张量卷积。访问输入批数据和特征图元素用相同索引,可了解输入与kernel卷积运算值变化。层,输出新维度。
    
    计算机视觉卷积价值,修改卷积核strides(跨度)参数实现输入降维。
    strides参数使卷积核无需遍历每个输入元素,跳过部分图像像素。
    kernel在input_batch滑动,跨过部分元素,每次移动以input_batch一个元素为中心。
    位置重叠值相乘,乘积相加,得卷积结果。逐点相乘,整合两个输入。设置跨度,调整输入张量维数。
    降维减少运算量,避免重叠感受域。strides参数格式与输入向量相同(image_batch_size_stride、image_height_stride、image_width_stride、image_channels_stride)。
    
    边界填充,卷积核与图像尺寸不匹配,填充图像缺失区域。
    TensorFlow用0填充。padding参数控制conv2d零填充数或错误状态。
    SAME:卷积输出输入尺寸相同,不考虑滤波器尺寸,缺失像素填充0,卷积核扫像素数大于图像实际像素数。
    VALID:考虑滤波器尺寸。尽量不越过图像边界,也可能边界被填充。
    
    data_format修改数据格式。
    NHWC指定输入输出数据格式,[batch_size(批数据张量数)、in_height(批数据张量高度)、in_width(批数据张量宽度)、in_channels(批数据张量通道数)]。
    NCHW指定输入输出数据格式,[batch_size(批数据张量数)、in_channels(批数据张量通道数)、in_height(批数据张量高度)、in_width(批数据张量宽度)]。
    
    TensorFlow滤波器参数指定输入卷积运算卷积核。
    滤波器使用特定模式突出图像中感兴趣特征。图像与边缘检测卷积核的卷积输出是所有检测边缘区域。
    tf.minimum和tf.nn.relu使卷积值保持在RGB颜色值合法范围[0,255]内。
    卷积核初值随机设定,训练迭代,值由CNN学习层自动调整,训练一迭代,接收图像,与卷积核卷积,预测结果与图像真实标签是否一致,调整卷积核。
    
    """
    import tensorflow as tf
    input_batch = tf.constant([
            [#第1个输入
                [[0.0],[1.0]],
                [[2.0],[3.0]]
            ],
            [#第2个输入
                [[2.0],[4.0]],
                [[6.0],[8.0]]
            ]
        ])
    print input_batch
    kernel = tf.constant([
            [
                [[1.0, 2.0]]
            ]
        ])
    print kernel
    conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1, 1, 1, 1], padding='SAME')#conv2d卷积运算
    print conv2d
    sess = tf.Session()
    print sess.run(conv2d)
    lower_right_image_pixel = sess.run(input_batch)[0][1][1]
    lower_right_kernel_pixel = sess.run(conv2d)[0][1][1]
    print lower_right_image_pixel, lower_right_kernel_pixel
    input_batch2 = tf.constant([
            [#第1个输入(6x6x1)
                [[0.0],[1.0],[2.0],[3.0],[4.0],[5.0]],
                [[0.1],[1.1],[2.1],[3.1],[4.1],[5.1]],
                [[0.2],[1.2],[2.2],[3.2],[4.2],[5.2]],
                [[0.3],[1.3],[2.3],[3.3],[4.3],[5.3]],
                [[0.4],[1.4],[2.4],[3.4],[4.4],[5.4]],
                [[0.5],[1.5],[2.5],[3.5],[4.5],[5.5]]
            ]
        ])
    print input_batch2
    kernel2 = tf.constant([#卷积核(3x3x1)
            [[[0.0]], [[0.5]], [[0.0]]],
            [[[0.0]], [[1.0]], [[0.0]]],
            [[[0.0]], [[0.5]], [[0.0]]]
        ])
    print kernel2
    conv2d2 = tf.nn.conv2d(input_batch2, kernel2, strides=[1, 3, 3, 1], padding='SAME')
    print conv2d2
    print sess.run(conv2d2)
    lower_right_image_pixel2 = sess.run(input_batch2)[0][1][1]
    lower_right_kernel_pixel2 = sess.run(conv2d2)[0][1][1]
    print lower_right_image_pixel2, lower_right_kernel_pixel2
    input_batch3 = tf.constant([
            [#第1个输入(6x6x1)
                [[0.0,1.0,2.0],[1.0,2.0,3.0]],
                [[0.1,1.1,2.1],[1.1,2.1,3.1]],
                [[0.2,1.2,2.2],[1.2,2.2,3.2]],
                [[0.3,1.3,2.3],[1.3,2.3,3.3]],
                [[0.4,1.4,2.4],[1.4,2.4,3.4]],
                [[0.5,1.5,2.5],[1.5,2.5,3.5]]
            ]
        ])
    print input_batch3
    kernel3 = tf.constant([
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ],
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[8., 0., 0.],[0., 8., 0.],[0., 0., 8.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ],
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ]
        ])
    print kernel3
    conv2d3 = tf.nn.conv2d(input_batch3, kernel3, strides=[1, 1, 1, 1], padding='SAME')
    print conv2d3
    activation_map3 = sess.run(tf.minimum(tf.nn.relu(conv2d3), 255))
    print activation_map3
    lower_right_image_pixel3 = sess.run(input_batch3)[0][1][1]
    lower_right_kernel_pixel3 = sess.run(conv2d3)[0][1][1]
    print lower_right_image_pixel3, lower_right_kernel_pixel3
    kernel4 = tf.constant([
            [
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]]
            ],
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[5., 0., 0.],[0., 5., 0.],[0., 0., 5.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ],
            [
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]]
            ]
        ])
    print kernel4
    conv2d4 = tf.nn.conv2d(input_batch3, kernel4, strides=[1, 1, 1, 1], padding='SAME')
    print conv2d4
    activation_map4 = sess.run(tf.minimum(tf.nn.relu(conv2d4), 255))
    print activation_map4
    lower_right_image_pixel4 = sess.run(input_batch3)[0][1][1]
    lower_right_kernel_pixel4 = sess.run(conv2d4)[0][1][1]
    print lower_right_image_pixel4, lower_right_kernel_pixel4
    展开全文
  • 矩阵卷积运算的具体过程,很简单

    万次阅读 多人点赞 2019-04-24 18:45:14
    最近在看图像处理,卷积运算这一块也查了很多,但是感觉都写的太复杂,我这里简单的写一下卷积到底是一个什么计算过程。 假设有一个卷积核h,就一般为3*3的矩阵: 有一个待处理矩阵x: h*x的计算过程分为三步...

    最近在看图像处理,卷积运算这一块也查了很多,但是感觉都写的太复杂,我这里简单的写一下卷积到底是一个什么计算过程。

    假设有一个卷积核h,就一般为3*3的矩阵:

    有一个待处理矩阵x:

    h*x的计算过程分为三步

    第一步,将卷积核翻转180°,也就是成为了

    第二步,将卷积核h的中心对准x的第一个元素,然后对应元素相乘后相加,没有元素的地方补0。

    这样结果Y中的第一个元素值Y11=1*0+2*0+1*0+0*0+0*1+0*2+-1*0+-2*5+-1*6=-16

    第三步每个元素都像这样计算出来就可以得到一个输出矩阵,就是卷积结果

    ……………………

    像这样计算,其他过程略了。

    最后结果

    注意:

    我这里是用0补全原矩阵的,但我们不一定选择0。在Opencv的cvFilter2D函数中,就没有使用0来补全矩阵,而是用了边缘拷贝的方式,下一篇我会介绍Opencv的CvFilter2D函数卷积运算过程。

     

    展开全文
  • 二维卷积运算之C语言实现二维卷积运算之C语言实现 二维卷积运算之C语言实现二维卷积运算之C语言实现
  • 主要讲下实际卷积运算中关于padding=same和padding=valid的输出特征图的大小,以及池化后特征图的大小。 1. 正文 1. 卷积运算 特别说明:卷积(除不尽)向下取整!!!! 特别说明:卷积(除不尽)向下取整!!!! ...
  • MATLAB中实现卷积运算和理论分析中的卷积运算有什么区别。 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下...

    MATLAB中实现卷积运算和理论分析中的卷积运算有什么区别。

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 卷积运算原理

    千次阅读 2019-12-26 22:08:56
    卷积运算 内容选自吴恩达老师的深度学习课程当中,在此记录。以边缘检测为例,介绍卷积是如何进行运算的。 一、边缘检测示例 首先是垂直边缘检测,对左边的一个6×6的灰度图像进行卷积运算,中间3×3的即为我们通常...

    卷积运算
    内容选自吴恩达老师的深度学习课程当中,在此记录。以边缘检测为例,介绍卷积是如何进行运算的。
    一、边缘检测示例
    首先是
    首先是垂直边缘检测,对左边的一个6×6的灰度图像进行卷积运算,中间3×3的即为我们通常说的核或者过滤器。从左边的矩阵左上角开始,利用过滤器在该矩阵上进行计算,对应元素相乘后求和,得到一个数值,例如左上角第一个3×3的矩阵,进行卷积后,得到右边4×4矩阵的第一个元素,即-5,以此类推。
    在这里插入图片描述
    若以图像的形式进行展示,经过边缘检测后,卷积计算结果如上图所示。假设左边即为原始图像,由于像素分布的原因,左边亮,右边暗,经过卷积后,得到图像中的中间垂直边缘,即原始图像中明暗分割的地方。
    在这里插入图片描述
    有垂直边缘检测,也有水平边缘检测,对垂直边缘检测的核旋转90度即可用于水平边缘检测,原理过程如上图所示。
    总结:1.卷积即是在图像中利用过滤器进行操作,每次卷积计算后,都会缩小图像的尺寸。
    2.卷积后得到的图像矩阵大小规律:
    假设原图是n×n的矩阵,核为f×f,则进行卷积运算后,得到的矩阵为(n-f+1)×(n-f+1)
    3.由于核的具体参数需针对不同情况进行设置,所以利用卷积神经网络对未知的核大小进行训练,得到具体参数。
    二、padding
    假设有100层的卷积层,对一张图像进行卷积后,每次卷积都会缩小图像的尺寸,结果得到一张尺寸很小的图像,因此,为了避免这一问题,在进行卷积运算之前可以先对图像进行填充操作。
    在这里插入图片描述
    上图为老师讲解的过程截图,大概意思是首先对图像填充一层像素点,即原始的6×6变成了8×8,然后进行卷积运算,因此,得到的结果不是4×4,而是和原始图像一样的大小,即6×6。结果对应公式为:(n+2p-f+1)×(n+2p-f+1)
    p=padding=1(在这里填充了一层即为1)
    三、Valid and Same convolutions
    在这里插入图片描述
    通常卷积有Valid(无填充)和Same(有填充)两种卷积方式
    注:核大小为什么通常是奇数?
    1.如果核为偶数,图像会进行不对称填充,为奇数时,Same卷积才会自然填充到整个图像。
    2.奇数的核会有一个中心点,有一个中心像素点,便于找到核的位置。

    视频链接:https://mooc.study.163.com/learn/2001281004?tid=2001392030#/learn/content?type=detail&id=2001729325&cid=2001724505

    展开全文
  • 加速卷积运算

    2019-09-15 17:02:09
    解析卷积高速计算中的细节 超详细的Tengine GEMM矩阵乘法汇编教程 Winograd,GEMM 卷积--加速的卷积运算
  • pytorch演示卷积和反卷积运算

    万次阅读 2018-05-13 10:24:09
    (1)卷积运算 (1)反卷积运算(转置卷积) 下载ppt https://pan.baidu.com/s/1UdBmFD6J5WOzfXF4pg4acw
  • 复习卷积运算

    2019-09-01 10:22:43
    复习卷积运算https://www.cnblogs.com/shine-lee/p/9932226.html
  • 最近也在学习深度学习,第一步就是把卷积运算搞定了,用C代码实现多通道多输出的卷积运算非常有助于理解卷积原理,然后算法就可以跨平台运行啦。我是从嵌入式转到做深度学习的,现在的工作内容也是把别人做好的算法...
  • 卷积运算和相关运算的区别

    千次阅读 2020-03-17 16:24:39
    卷积运算和相关运算的区别 https://www.zhihu.com/question/32067344
  • python实现卷积运算,有调用函数和不调用函数两种方法都写在里面了,可以帮助理解卷积
  • 主要介绍了Python使用scipy模块实现一维卷积运算,结合实例形式分析了scipy模块的功能及使用scipy模块进行一维卷积运算的相关操作技巧,需要的朋友可以参考下
  • 多维卷积运算

    千次阅读 2018-09-25 10:13:37
    多维卷积运算 如果输入的图片是灰度图,每个像素点的值是一个整数,只需使用2D卷积运算。 但如果输入的图片是彩色的,每个像素点的值是1个由3个整数组成的组,例如(R,G,B)=(155,23,222). 对于这样多维的输入图片,...
  • 卷积运算C代码

    2014-06-18 15:35:13
    卷积运算在数字信号处理中应用广泛,我自己运行过,代码没有错误,分享一下
  • verilog实现矩阵卷积运算

    千次阅读 多人点赞 2019-05-24 09:23:19
    verilog实现卷积运算 卷积的运算原理 卷积是一种线性运算,是很多普通图像处理操作的基本算法之一。它提供了两个数组相乘的方式,两个数组拥有不同的大小,但是具有相同的维数,生成了一个用于相同维数的新数组。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,772
精华内容 1,908
关键字:

卷积运算