热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

反卷积(TransposedConvolution)详细推导

0、简介问题:计算机视觉中的反卷积(deconvolution)是使用了独立的可训练参数还是把前面的卷积核转置?关于计算机视觉中的反卷积(

0、简介

问题:计算机视觉中的反卷积(deconvolution)是使用了独立的可训练参数还是把前面的卷积核转置?关于计算机视觉中的反卷积(deconvolution)还是没太弄懂,我原以为反卷积的卷积核中的参数也是训练出来的,只是因为放大了输出所以叫反卷积,可今天看到讲关于卷积神经网络可视化的文章,卷积神经网络的对特征图卷积核的可视化可以采用deconvolution的方法,而且是把前面的卷积核转置一下就直接用,而不是独立的训练其中参数,如下图:
在这里插入图片描述
答:
框架里实现的是独立的可训练参数,自己看一下pytorch代码,或者Keras代码就清楚了。但是CNN可视化这篇论文里的反卷积是前面卷积核的转置,仅仅是为了可视化而已

1、什么是反卷积?

上采样(Upsample)

在应用在计算机视觉的深度学习领域,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(e.g.:图像的语义分割),这个采用扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。

反卷积(Transposed Convolution)
上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling),我们这里只讨论反卷积。这里指的反卷积,也叫转置卷积,它并不是正向卷积的完全逆过程,用一句话来解释:

反卷积是一种特殊的正向卷积,先按照一定的比例通过补 [公式] 来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。


2、反卷积的数学推导

正向卷积的实现过程
假设输入图像input尺寸为4x4,元素矩阵为:
在这里插入图片描述
卷积核kernel尺寸为3x3,元素矩阵为:
在这里插入图片描述
步长strides=1,填充padding=0,即i=4,k=3,s=1,p=0,则按照卷积计算公式
在这里插入图片描述
输出的图像output的尺寸为2x2

用矩阵乘法描述卷积

input的元素矩阵展开成一个列向量X
在这里插入图片描述
把输出图像output的元素矩阵展开成一个列向量Y:
在这里插入图片描述
对于输入的元素矩阵X和 输出的元素矩阵 Y,用矩阵运算描述这个过程:
在这里插入图片描述
通过推导,我们可以得到稀疏矩阵 C :

在这里插入图片描述
反卷积的操作就是要对这个矩阵运算过程进行逆运算,即通过 CY 得到 X ,根据各个矩阵的尺寸大小,我们能很轻易的得到计算的过程,即为反卷积的操作:

在这里插入图片描述
但是,如果你代入数字计算会发现,反卷积的操作只是恢复了矩阵 X 的尺寸大小,并不能恢复 X 的每个元素值,本文最后会在 tensorflow 平台进行这个实验

在此之前,我们先给出反卷积图像尺寸变化的公式。

反卷积的输入输出尺寸关系

在进行反卷积时,简单来说,大体上可分为以下两种情况:
在这里插入图片描述
Relationship 1:
在这里插入图片描述
此时反卷积的输入输出尺寸关系为:
在这里插入图片描述
在这里插入图片描述
如上图所示,我们选择一个输入 input 尺寸为 3x3 ,卷积核 kernel 尺寸为 3x3 ,步长 strides=2,填充 padding=1,即 i=3,k=3,s=2,p=1 ,则输出 output 的尺寸为 o=2x(3-1)-2+3=5

Relationship 2:
在这里插入图片描述
此时反卷积的输入输出尺寸关系为:
在这里插入图片描述
在这里插入图片描述
如上图所示,我们选择一个输入 input 的尺寸为 3x3 ,卷积核 kernel 的尺寸为 3x3,步长 strides=2,填充 padding=1 ,即 i=3,k=3,s=2,p=1 ,则输出 output 的尺寸为o=2x(3-1)-2+3+1=6

反卷积在 FCN 中的应用

在图像语义分割网络 FCN-32s 中,上采样反卷积操作的输入每张 {\E heatmap} 的尺寸是 7x7
,我们希望进行一次上采样后能恢复成原始图像的尺寸 224x224 ,代入公式:
在这里插入图片描述

根据上式,我们可以得到一个关于 s,k,p 三者之间关系的等式:
在这里插入图片描述
通过实验,最终找出了最合适的一组数据:
在这里插入图片描述


推荐阅读
author-avatar
潇潇-77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有