hellochick / PSPNet-tensorflow

TensorFlow-based implementation of "Pyramid Scene Parsing Network".
326 stars 123 forks source link

Negative dimension size caused #5

Closed Hub-Tian closed 6 years ago

Hub-Tian commented 6 years ago

I am using my own data to train a new PSPNet, but error occured like this. The size of my data is [320,320], and I changed the parameters like INPUT_SIZE = '320,320' and IMG_MEAN. Could you give me some advice about this problem? Thanks!

Traceback (most recent call last): File "./train.py", line 216, in main() File "./train.py", line 121, in main net = PSPNet({'data': image_batch}, is_training=True, num_classes=args.num_classes) File "/home/tianyl/CCF/PSPNet-tensorflow-master/network.py", line 48, in init self.setup(is_training, num_classes) File "/home/tianyl/CCF/PSPNet-tensorflow-master/model.py", line 439, in setup .avg_pool(90, 90, 90, 90, name='conv5_3_pool1') File "/home/tianyl/CCF/PSPNet-tensorflow-master/network.py", line 21, in layer_decorated layer_output = op(self, layer_input, *args, **kwargs) File "/home/tianyl/CCF/PSPNet-tensorflow-master/network.py", line 193, in avg_pool data_format=DEFAULT_DATAFORMAT) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/ops/nn_ops.py", line 1744, in avg_pool name=name) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 48, in _avg_pool data_format=data_format, name=name) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op op_def=op_def) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2630, in create_op set_shapes_for_outputs(ret) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1909, in set_shapes_for_outputs shapes = shape_func(op) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1859, in call_with_requiring return call_cpp_shape_fn(op, require_shape_fn=True) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 595, in call_cpp_shape_fn require_shape_fn) File "/home/tianyl/anaconda2/envs/tensorflow1.3/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 659, in _call_cpp_shape_fn_impl raise ValueError(err.message) ValueError: Negative dimension size caused by subtracting 90 from 40 for 'conv5_3_pool1' (op: 'AvgPool') with input shapes: [4,40,40,2048].

hellochick commented 6 years ago

Hey, @Hub-Tian. Since the max pooling k_size [90, 90] is designed for input data [713, 713]. (output stride = 8 => 713 / 8). If you want to use [320, 320] as input, you can modify k_size in model.py:

        (self.feed('conv5_3/relu')
             .avg_pool(40, 40, 40, 40, name='conv5_3_pool1')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool1_conv')
             .batch_normalization(relu=True, name='conv5_3_pool1_conv_bn')
             .resize_bilinear(shape, name='conv5_3_pool1_interp'))

        (self.feed('conv5_3/relu')
             .avg_pool(30, 30, 30, 30, name='conv5_3_pool2')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool2_conv')
             .batch_normalization(relu=True, name='conv5_3_pool2_conv_bn')
             .resize_bilinear(shape, name='conv5_3_pool2_interp'))

        (self.feed('conv5_3/relu')
             .avg_pool(20, 20, 20, 20, name='conv5_3_pool3')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool3_conv')
             .batch_normalization(relu=True, name='conv5_3_pool3_conv_bn')
             .resize_bilinear(shape, name='conv5_3_pool3_interp'))

        (self.feed('conv5_3/relu')
             .avg_pool(10, 10, 10, 10, name='conv5_3_pool6')
             .conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool6_conv')
             .batch_normalization(relu=True, name='conv5_3_pool6_conv_bn')
             .resize_bilinear(shape, name='conv5_3_pool6_interp'))

If you have other question, feel free to ask me !

Hub-Tian commented 6 years ago

It worked after changing the parameters like you said. Thank you so much!