我的图像分割结果图在白色补丁中包含黑色格子

时间:2018-07-03 01:32:59

标签: python image-segmentation pytorch deconvolution semantic-segmentation

enter image description here我正在使用Pytorch 0.4.0使用类似UNet的CNN架构进行图像分割。在最终分割结果中将前景标记为1,背景标记为0。我使用了预先训练的VGG功能提取器作为我的编码器,因此我需要多次对编码器输出进行上采样,但是结果显示出奇怪的晶格部分,如下所示:

我怀疑这些黑色形状的不同形状是由反卷积层引起的,据说反卷积层在官方文档的输入像素之间添加(s-1)零。反卷积层的超参数如下所示:

kernel_size = 3,stride = 2,padding = 1,output_padding = 1

(output_padding用于适应跳过连接功能的大小,例如,输入大小为40 * 30,我希望在一个反卷积层中将其大小放大两次,根据我的计算公式为:out = s(in-1) + k-2p,我必须使用填充1和输出填充1来保持大小,否则可能会有其他更好的选择,我不知道。)

我想知道产生黑色晶格的原因。它们看起来像是网格或方格图案,以及如何解决。此外,我还需要将所有反偶像层超参数调整为一个均匀或单独对其进行修改?

环境:Ubuntu 16.04,Pytorch 0.4.0,GTX 1080Ti, 上采样的架构是三个deconv层,它们是一个接一个的。

更新

我修改了deconv超参数后,(受noise in image segmentation result使用启发

kernel_size = 4,stride = 2,padding = 1

因此避免输出填充并满足尺寸要求。但是在100个时期之后,我遇到了类似的问题。

经过另外30个时代的训练之后,enter image description here

黑点只是散布着,似乎这些黑点只是改变了它们的样式并跳到另一种样式,我不知道为什么会发生。我不知道如何修改我的网络超参数。
self.conv1=Basic(1024,512,kernel_size=3,stride=1,padding=1)
        self.conv2=Basic(512,512,kernel_size=3,stride=1,padding=1)
        self.deconv1=Basic(512,256,kernel_size=4,stride=2,conv=False,padding=1)
        self.deconv2=Basic(256,128,kernel_size=4,stride=2,conv=False,padding=1)
        self.deconv3=Basic(128,64,kernel_size=4,stride=2,conv=False,padding=1)
        #output  480*640 segmap
        self.conv4=Basic(64,2,kernel_size=1,stride=1)
        # self.avgpool=nn.AvgPool2d(kernel_size=2,stride=2)

    def forward(self, input):
        input=self.conv1(input)
        input=self.conv2(input)
        input=self.deconv1(input)
        input=self.deconv2(input)
        input=self.deconv3(input)
        input=self.conv4(input)
        # print(input.shape)
        #a channel-wise probability map
        raw=input
        return raw`

0 个答案:

没有答案