引言:在我们进行关于卷积的学习过程中,总是充满好奇,尤其是在学习深度学习的过程中,哇哦!太神奇了,你输入一张图像给深度学习网络,它就会输出一张标有类别的输出图像(例如图像中有一只猫,输出图像就会使用矩形框标出猫所在的位置,并且在矩形框的上方给出识别结果:猫 这个种类)。但是关于卷积的部分学习,我只是知道:对一幅图像使用一个卷积核从上到下、从左到右不停地滑动,最后的输出图像就是卷积后的图像,但是对于输入图像的尺度总是不断地在缩小(不包括padding状态,因为它给图像填充的是黑白两种值,没有特殊的函数,并不能表示为图像的特征),也就是我们常见的(256,256)---》(128,128)----》(64,64)这类。我们能不能进行反变换,从(64,64)----》(128,128)----》(256,256),答案是可以的(我今天才发现,才疏学浅啦啦啦),下面一起来看看吧!!!
说了这么多,举个例子:(一目了然)
小怕们,快上车,抱紧我,要开车了。
1.先看效果图:
输入图像进入网络卷积后的图像
卷积逆变换后的图像
解释: 这幅图像是使用上面卷积网络的输出图像作为卷积逆变换网络的输入图像,然后经过逆变换的结果。
(一脸**)
2.详细过程:
输入图像----》卷积网络----》输出(作为逆变换网络的输入)-------》逆变换网络------最终输出。
(奥,原来如此,明白了,那具体的实现过程呢?)
不急!请看:
import torch from torch import nn class inverse_conv(nn.Module): def __init__(self): super(inverse_conv,self).__init__() self.layers1=nn.Sequential( nn.ConvTranspose2d(512, 128, (2, 2), stride=(2, 2)), nn.ReLU(inplace=True) ) self.layers2 = nn.Sequential( nn.ConvTranspose2d(128, 64, (2, 2), stride=(2, 2)), nn.ReLU(inplace=True) ) self.layers3 = nn.Sequential( nn.ConvTranspose2d(64, 32, (2, 2), stride=(2, 2)), nn.ReLU(inplace=True) ) self.layers4 = nn.Sequential( nn.ConvTranspose2d(32, 3, (2, 2), stride=(2, 2)), nn.ReLU(inplace=True) ) def forward(self,input): x=self.layers1(input) x=self.layers2(x) x=self.layers3(x) output=self.layers4(x) return output
#我们的故事还很多,待续。。。
3.重要的是=结束。
GAME OVER
如果理解错误,欢迎大家批评,及时纠正小琼的错误哦,真心感谢你的纠正!!!
如果小伙伴梦有疑问欢迎在评论区留言哦!!!
如果感觉不错的话!点个赞呗,不用客气!(O(∩_∩)O哈哈~)
欢迎和小伙伴梦一起学习,共同努力,加油!!!