Я выполняю сегментацию изображения с помощью UNet-подобной архитектуры CNN с помощью Pytorch 0.4.0. Он помечает передний план как 1, а фон как 0 в конечном результате сегментации. Я использую предварительный -тренированный экстрактор признаков VGG в качестве моего кодировщика, поэтому мне нужно много раз повышать дискретизацию вывода кодировщика. Но результат показывает странную решетчатую часть в результате, например: /LBvH7.jpg" alt="">
I suspect these different shape of black parttern were caused by the deconvolutional layers.It's said that deconv layer add (s-1) zeros between the input pixel in the official documentation.the deconvolutional layer's hyperparameter are listed below:kernel_size=3,шаг=2,заполнение=1,output_padding=1
Меня интересует причина, по которой создается черная решетка. Они выглядят как сетка или квадратная часть. И как это решить. Кроме того, мне нужно настроить все гиперпараметры слоя деконвации на одну униформу или изменить их отдельно?
среда:Ubuntu 16.04,Pytorch 0.4.0,GTX 1080Ti,архитектура апсэмплинга это три слоя деконв,они идут друг за другом.
Обновлять
после того, как я изменил гиперпараметр deconv (вдохновленный шумом в результате сегментации изображения, используйте
kernel_size=4,шаг=2,заполнение=1
таким образом, чтобы избежать заполнения вывода и удовлетворить размер. Но после 100 эпох я столкнулся с аналогичной проблемой. src="https://i.stack.imgur.com/nyvIU.jpg" alt="">
после еще 30-этапного обучения это выглядит так:
the black points just scattered,It seems these black points just change their parttern and jump into another parttern,I don't know why it occurs.I'm don't know how to modify my network hyperparameter.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`
input = F.sigmoid(input)
. Таким образом, мы ограничиваем пиксели диапазоном 0-1. Затем, поскольку вы хотите выполнить бинарную сегментацию, добавьтеinput = input>0.5
. Таким образом, мы устанавливаем пиксели со значением выше 0,5 равными 1, а те, которые меньше 0,5, равными 0. ЕслиF
не удается, выполнитеimport torch.nn.functional as F
. Отпишите потом результат :) - person Manuel Lagunas   schedule 03.07.2018