全卷积网络(FCN)讨论区


#22

老哥 按照你上面的修改还是会报错 可以把整个代码贴一下吗?


#23

net添加层应该改为如下吧:
pretrained_net = models.resnet18_v2(pretrained=True)
net = nn.HybridSequential()
for layer in pretrained_net.features:
net.add(layer)
with net.name_scope():
net.add(
nn.BatchNorm(axis=1, in_channels=512),
nn.Activation(activation=‘relu’)
)

net.add(
    nn.BatchNorm(axis=1, in_channels=512),
    nn.Activation(activation='relu')
)

#24

不知道为什么我的代码在运行

height x width

input_shape = (320, 480)
voc_train = VOCSegDataset(True, input_shape)
voc_test = VOCSegDataset(False, input_shape)
时就dead kernal ,并不是后面的预训练模型造成的问题。


#25

我现在用的版本是0.12,难道这个也还有差别?
我现在这边是可以正常跑了,不知道你那里是怎样报错的
完整的代码如下:
from mxnet.gluon import nn
input_shape = (320, 480)

net = nn.HybridSequential()
for layer in pretrained_net.features:
net.add(layer)

net.add(nn.BatchNorm(axis=1, in_channels=512))
net.add(nn.Activation(activation=‘relu’))

num_classes = len(classes)
with net.name_scope():
net.add(
nn.Conv2D(num_classes, kernel_size=1,in_channels=512),
nn.Conv2DTranspose(num_classes, kernel_size=64, padding=16,strides=32)
)

from mxnet import init
conv_trans = net[-1]
conv_trans.initialize(init=init.Zero())
net[-2].initialize()
net[-4].initialize(init=init.Xavier())

x = nd.zeros((batch_size, 3, *input_shape))
net(x)

shape = conv_trans.weight.data().shape
conv_trans.weight.set_data(bilinear_kernel(*shape[0:3]))


#26


很迷啊 我的这一句报错了
shape = conv_trans.weight.data().shape


#27

conv_trans = nn.Conv2DTranspose(
3, in_channels=3, kernel_size=8, padding=2, strides=4)
conv_trans.initialize()
是不是conv_trans初始化部分有问题 报错信息是这样提示的


#28

是的,初始化出了问题。

x = nd.zeros((batch_size, 3, *input_shape))
net(x)

貌似是因为mxnet的initialize()是lazy的,需要真正进行一次计算才行,所以会有上面两行代码插在中间。
你看一下你的哪里是不是忘了弄了。


#29


print(‘Output:’, net(x).shape)注释掉就可以了


#30

对 加上net(x)的话不报错了
但是用gpu训练的话会报显存不足(显卡1070 8G)的错误 用CPU的话内存占了十几G 跑半天没有结果 感觉还是哪有问题


#31

老哥 你试了吗 改完之后就可以了吗?


#33

batchzise 改小一点,他是两个gpu


#34

可以的,我试了,应为整个网络中的倒数第四个layer还没有初始化,所以会报错


#35

这个问题我也遇到了,感觉应该是前面的问题。你试着把下面这行代码注释掉看一下内存的状况。

train_images, train_labels = read_images()


#36

我想知道net.out这里的问题您是怎么解决的


#37

统一回复下上面的问题,

  1. FCN需要更新下mxnet
  2. batch size设的比较大,我这里需要12G左右GPU 内存。CI是用双卡跑的。所以如果GPU显存不够需要调低batch size

#38

不是特别懂你这里的意思


#39

@mli 我看了FCN的原论文,作者在pool5 上upsample 得到FCN-32s,然后再在32x上upsample,同时融合了pool4的基础上再次upsample,获得FCN-16s。同理,得出FCN-8s。那么 ,为什么不直接再次upsample而是要融合pool4和pool3 呢?论文上给出的说法是‘Combining what and where’,‘Combining fine layers and coarse layers lets the model make local predictions that respect global structure.’但具体的原理并不清楚,恳请沫神讲解~


#42

你可以试一下直接upsample会怎么样。我感觉可能加一下效果好点,但没有仔细研究

感觉是mxnet安装问题?你是装在 /mx-maskrcnn/incubator-mxnet/python下,从原文件build的吗?


#46

请善用检索功能,现在改成classifier了


#47

from mxnet.gluon.model_zoo import vision as models
pretrained_net = models.resnet18_v2(pretrained=True)

(pretrained_net.features[-4:], pretrained_net.output)

第二句出问题了:

MXNetError: [20:03:14] D:\Program Files (x86)\Jenkins\workspace\mxnet\mxnet\dmlc-core\src\io\local_filesys.cc:166: Check failed: allow_null LocalFileSystem: fail to open “C:\Users\自宅用/.mxnet/models\resnet18_v2-8aacf80f.params”

模型看了应该是下好了的,不过这个D:\Program Files (x86)的路径就很迷,因为根本不存在。。。
环境是win10 1060 mxcu90