chun2495 发表于 2020-10-13 14:05:58

【人工智能 图像分割 原创首发】第五章 用训练好的网络测试

这一节我利用训练出的.pb网络测试下自己的图片

新建一个python文件“6deeplab_predictions.py”,输入代码如下
# 时间:2020.09.14
# 作用:调用pb文件批量生成deeplabv3预测图
# 输入:图像文件夹,pb模型文件
# 输出:文件预测图
# 注意:原始图片里不要有其他文件,包括.DS_Store、文件夹等。

import tensorflow as tf
import numpy as np
import os
from PIL import Image

Image.MAX_IMAGE_PIXELS = 400000000
image_wide = 400
image_high = 320
imagedir = '/Users/zhengyuchun/Desktop/Anaconda/pre_images/'
pbpath = "./exp/mydata_train/export/frozen_inference_graph.pb"

imagelist = os.listdir(imagedir)
rgbim = np.zeros((image_high, image_wide, 3), 'uint8')
R = rgbim[:, :, 0]
G = rgbim[:, :, 1]
B = rgbim[:, :, 2]

img = tf.placeholder(tf.uint8, , name="img")
with open(pbpath, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        output = tf.import_graph_def(graph_def, input_map={"ImageTensor:0": img}, return_elements=["SemanticPredictions:0"])

sess = tf.Session()

for i in range(0, len(imagelist)):
        path = os.path.join(imagedir, imagelist)   # 带文件名的路径
        filename = os.path.splitext(imagelist)# 文件名
        filetype = os.path.splitext(imagelist)# 后缀".jpg"
        print('正在处理 '+path)

        image = Image.open(path)
        image = np.asarray(image)
        image = np.expand_dims(image, axis=0).astype(np.uint8)

        result = sess.run(output, feed_dict={img: image})

        grayim = np.squeeze(result)

        # 将灰度图像转换为rgb图像,根据自己的类别数目修改相应的颜色
        for k in range(0, image_high):
                for j in range(0, image_wide):
                        if grayim == 1:
                                R = 128
                                B = 0
                                G = 0
                        elif grayim == 0:
                                R = 0
                                B = 0
                                G = 0

        rgbim = Image.fromarray(np.uint8(rgbim))
        savedir = os.path.join(imagedir, filename + '.png')
        rgbim.save(savedir)
        rgbim = np.zeros((image_high,image_wide, 3), 'uint8')
        R = rgbim[:, :, 0]
        G = rgbim[:, :, 1]
        B = rgbim[:, :, 2]


运行就可以了,切记源图像不能是8bit的图片,而且源文件夹不能有其他文件和文件夹(文件夹下ls -la查看是否有其他文件,比如:包括.DS_Store、文件夹等)。

运行结果如下


可以看出,预测还是很准确的。

Pioneermcu 发表于 2020-10-13 14:38:11

这东西好玩!

thepresent 发表于 2020-10-17 11:20:27

你好楼主,我按照你的方法训练了一个模型,前四章都正常。第五章使用训练好的结果测试这里,我没有在/exp/mydata_train目录下找到export文件夹,也没有找到frozen_inference_graph.pb文件。这个文件在deeplab\g3doc\deeplabv3_mnv2_pascal_trainval文件夹里倒是有一个,不过看修改日期是2018年的,肯定不是训练生成的。麻烦问一下这是怎么回事啊?是不是因为我训练失败了?

chun2495 发表于 2020-10-17 15:29:46

【人工智能 图像分割 原创首发】第四(二)章 用训练好的网络测试

thepresent 发表于 2020-10-17 11:20
你好楼主,我按照你的方法训练了一个模型,前四章都正常。第五章使用训练好的结果测试这里,我没有在/exp/m ...

不好意思,漏掉了一个环节。
第四章训练完毕后,还需要将训练好的网络冻结,生成.pb格式。
新建一个.sh 文件,输入代码如下:
cd ..
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

python deeplab/export_model.py \
--checkpoint_path='./deeplab/exp/mydata_train/train/model.ckpt-46781' \
--export_path='./deeplab/exp/mydata_train/export/frozen_inference_graph.pb' \
--model_variant="mobilenet_v2" \
--num_classes=2 \
--decoder_output_stride=16 \


model.ckpt-46781'改为你自己训练的最终文件就行。

thepresent 发表于 2020-10-17 20:08:04

chun2495 发表于 2020-10-17 15:29
不好意思,漏掉了一个环节。
第四章训练完毕后,还需要将训练好的网络冻结,生成.pb格式。
新建一个.sh...

这个是在train文件夹生成的文件,没有你说的类似的格式啊。是不是我生成的有什么问题?

chun2495 发表于 2020-10-17 21:07:59

thepresent 发表于 2020-10-17 20:08
这个是在train文件夹生成的文件,没有你说的类似的格式啊。是不是我生成的有什么问题? ...

没问题,你的就是这个 model.ckpt-100
页: [1]
查看完整版本: 【人工智能 图像分割 原创首发】第五章 用训练好的网络测试