zoukankan      html  css  js  c++  java
  • 完整工程,deeplab v3+(tensorflow)代码全理解及其运行过程,长期更新

    前提:ubuntu+tensorflow-gpu+python3.6

    各种环境提前配好

    1.下载工程源码

    网址:https://github.com/tensorflow/models

    下载时会遇到速度过慢或中间因为网络错误停止,可以换移动网络或者用迅雷下载。

    2.测试环境

    先添加slim路径,每次打开terminal都要加载路径

    # From tensorflow/models/research/
    export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

    运行测试1

    # From tensorflow/models/research/
    python deeplab/model_test.py

    测试2

    # From tensorflow/models/research/deeplab
    sh local_test.sh

    3.处理数据标签

    处理标签为单通道,运行下面代码即可

    import numpy as np
    from PIL import Image
    from keras.preprocessing.image import load_img, img_to_array
    import os
     
    classes = ['background', 'aeroplane', 'bicycle', 'bird', 'boat',
               'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'dining table',
               'dog', 'horse', 'motorbike', 'person', 'potted plant',
               'sheep', 'sofa', 'train', 'tv/monitor']
     
    colormap = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128],
                [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0], [192, 0, 0],
                [64, 128, 0], [192, 128, 0], [64, 0, 128], [192, 0, 128],
                [64, 128, 128], [192, 128, 128], [0, 64, 0], [128, 64, 0],
                [0, 192, 0], [128, 192, 0], [0, 64, 128]]
     
    # 利用下面的代码,将标注的图片转换为单通道的label图像
    cm2lbl = np.zeros(256**3)
    for i, cm in enumerate(colormap):
        cm2lbl[(cm[0]*256+cm[1])*256+cm[2]] = i
     
     
    def image2label(im):
        # 输入为标记图像的矩阵,输出为单通道映射的label图像
        data = im.astype('int32')
        idx = (data[:, :, 0]*256+data[:, :, 1])*256+data[:, :, 2]
        return np.array(cm2lbl[idx])
     
     
    def change_label(label_url, label_name):
     
        label_img = load_img(label_url)
        label_img = img_to_array(label_img)
        label_img = image2label(label_img)  # 将图片映射为单通道数据
        print(np.max(label_img))
     
        label_single = Image.fromarray(label_img)
        label_single = label_single.convert('L')
     
        save_path = './datasets/VOC2012/Label'
        save_path = os.path.join(save_path, label_name)  # 确定保存路径及名称
        label_single.save(save_path)
     
     
    val_file_path = './datasets/VOC2012/ImageSets/trainval.txt'  # 文件名存放路径
    label_file_path = './datasets/VOC2012/SegmentationClass'  # 原label存放路径
     
    with open(val_file_path, 'r') as f:
        file_names = f.readlines()
        count = 0
        for name in file_names:
            count += 1
            name = name.strip('
    ')  # 去掉换行符
            label_name = name + '.png'  # label文件名
            label_url = os.path.join(label_file_path, label_name)
            print('这是第 %s 张' % count)
            print(label_url)
            change_label(label_url, label_name)

    4.运行build_voc2012_data.py 生成 .tfrecord数据

    5. 运行train.py训练模型

  • 相关阅读:
    Android 异步请求通用类
    Android 异步下载
    Eclipse 使用 VS Emulator for android 调试环境配置 步骤
    android ListView 可缩放,支持左右上下手势
    安卓中自定义控件引用
    java中的可释放资源定义,类似c#中的using
    java 实现自定义事件
    c# android 全局捕获未处理异常
    java android 捕获未处理异常
    java 中异常处理示例并捕获完整异常内容
  • 原文地址:https://www.cnblogs.com/ywheunji/p/10557416.html
Copyright © 2011-2022 走看看