tensorflow-deeplab-resnet-master之npy2ckpt.py【.npy如何转.ckpt】

准备工作

代码

github地址:https://github.com/DrSleep/tensorflow-deeplab-resnet

一、代码理解

(一)程序实现过程

在这里插入图片描述

1、参数设置

在这里插入图片描述

2、搭建网络结构

在这里插入图片描述

(二)核心脚本network.py结构

在这里插入图片描述

二、代码调试

(一)修改代码,设置所需文件及输出文件相关参数

在这里插入图片描述
在这里插入图片描述

(二)错误1-获得的输入图像的色彩通道数c_i格式不正确

1、报错

【TypeError: unsupported operand type(s) for /: ‘Dimension’ and ‘int’】
在这里插入图片描述

2、原因分析

  • 获得输入图像色彩通道数的代码:
    在这里插入图片描述
  • 输出c_i的类型及其中存储的数值:
    在这里插入图片描述
  • 我们需要的是一个int型的数值,但是得到的却是bimension,所以我们需要对取得的TensorShape做一定修改,将其转换成list型,然后再从中取得色彩通道数。

3、解决方案

(三)错误2-使用len()函数获取map型数据的长度

1、报错

【TypeError: object of type ‘map’ has no len()】
在这里插入图片描述

2、原因分析

变量类型为map,无法通过len()函数获取其长度

3、解决方案

  • 查看后续代码,修改input_shape的类型并不会对代码造成影响,故我直接将其转换为list型数据:
    在这里插入图片描述

(四)错误3-参数值传递出错

1、报错

【TypeError: not all arguments converted during string formatting】
在这里插入图片描述

2、原因分析

  • 出错位置:
  • 出错原因:参数设置错误
    在未使用参数名传参时,会将参数值传递给函数中对应位置的参数,按照原始语句【return tf.nn.softmax(input, name)】会导致函数【tf.nn.softmax()】中,参数axis的值为变量name的值,导致后续错误
    在这里插入图片描述

3、解决方案

  • 加上参数名传值
    在这里插入图片描述

(五)错误4-字典对象不具有’iteritems’属性

1、报错

【AttributeError: ‘dict’ object has no attribute ‘iteritems’】
在这里插入图片描述

2、原因分析

  • 查找出错点:
    在这里插入图片描述
  • 分析:在python3.5中:iteritems变为items

3、解决方案

  • 对代码做如下修改:
    在这里插入图片描述

(六)错误5-生成的zfnet的参数格式与.npy中参数格式不一致

1、报错

  • 【tensorflow.python.framework.errors_impl.InvalidArgumentError: Dimension 0 in both shapes must be equal, but are 6400 and 9216. Shapes are [6400,4096] and [9216,4096]. for ‘fc6_1/Assign’ (op: ‘Assign’) with input shapes: [6400,4096], [9216,4096].】
  • 【ValueError: Dimension 0 in both shapes must be equal, but are 6400 and 9216. Shapes are [6400,4096] and [9216,4096]. for ‘fc6_1/Assign’ (op: ‘Assign’) with input shapes: [6400,4096], [9216,4096].】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、原因分析

  • 直接使用caffe model转tensorflow model得到的zf.py文件中的padding设置为’VALID’和’SAME’两种值之一,但在计算输出的图像的width和height时采用上采样,无法得到原始定义的ZFNet网络参数格式。

3、解决方案

将定义ZFNet的脚本修改成下列形式:

class DeepLabZFNetModel(Network):
    def setup(self, is_training, num_classes):
        (self.feed('data')
             .conv(7, 7, 96, 2, 2, padding='VALID', name='conv1')
             .lrn(1, 1.666666624563125e-05, 0.75, name='norm1')
             .max_pool(3, 3, 2, 2, padding='SAME', name='pool1')
             .conv(5, 5, 256, 2, 2, padding='VALID', name='conv2')
             .lrn(1, 1.666666624563125e-05, 0.75, name='norm2')
             .max_pool(3, 3, 2, 2, padding='SAME', name='pool2')
             .conv(3, 3, 384, 1, 1, padding='SAME', name='conv3')
             .conv(3, 3, 384, 1, 1, padding='SAME', name='conv4')
             .conv(3, 3, 256, 1, 1, padding='SAME', name='conv5')
             .max_pool(3, 3, 2, 2, padding='VALID', name='pool5')
             .fc(4096, name='fc6')
             .fc(4096, name='fc7')
             .fc(1000, relu=False, name='fc8')
             .softmax(name='prob'))

三、运行结果

  • 生成.ckpt文件
    在这里插入图片描述

参考


版权声明:本文为qq_38273984原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。