自己写的制作 city的语义分割tfrecord  适用于deeplabv3+

自用

"""Converts PASCAL dataset to TFRecords file format."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function import argparse
import io
import os
import sys
import natsort
import PIL.Image
import tensorflow as tf from utils import dataset_util parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='/home/a/dataset/cityscapes/',
help='Path to the directory containing the PASCAL VOC data.') parser.add_argument('--output_path', type=str, default='./dataset',
help='Path to the directory to create TFRecords outputs.') parser.add_argument('--train_data_list', type=str, default='./dataset/train.txt',
help='Path to the file listing the training data.') parser.add_argument('--valid_data_list', type=str, default='./dataset/val.txt',
help='Path to the file listing the validation data.') parser.add_argument('--image_data_dir', type=str, default='leftImg8bit',
help='The directory containing the image data.') parser.add_argument('--label_data_dir', type=str, default='gtFine',
help='The directory containing the augmented label data.') def dict_to_tf_example(image_path,
label_path):
"""Convert image and label to tf.Example proto. Args:
image_path: Path to a single PASCAL image.
label_path: Path to its corresponding label. Returns:
example: The converted tf.Example. Raises:
ValueError: if the image pointed to by image_path is not a valid JPEG or
if the label pointed to by label_path is not a valid PNG or
if the size of image does not match with that of label.
"""
with tf.gfile.GFile(image_path, 'rb') as fid:
encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = PIL.Image.open(encoded_jpg_io)
if image.format != 'PNG':
raise ValueError('Image format not PNG') with tf.gfile.GFile(label_path, 'rb') as fid:
encoded_label = fid.read()
encoded_label_io = io.BytesIO(encoded_label)
label = PIL.Image.open(encoded_label_io)
if label.format != 'PNG':
raise ValueError('Label format not PNG') if image.size != label.size:
raise ValueError('The size of image does not match with that of label.') width, height = image.size example = tf.train.Example(features=tf.train.Features(feature={
'image/height': dataset_util.int64_feature(height),
'image/width': dataset_util.int64_feature(width),
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/format': dataset_util.bytes_feature('png'.encode('utf8')),
'label/encoded': dataset_util.bytes_feature(encoded_label),
'label/format': dataset_util.bytes_feature('png'.encode('utf8')),
}))
return example
def scanDir_img_File(dir):
for root, dirs, files in os.walk(dir, True, None, False): # 遍列目录
for f in files:
yield os.path.join(root,f) def scanDir_lable_File(dir):
for root, dirs, files in os.walk(dir, True, None, False): # 遍列目录
# 处理该文件夹下所有文件: for f in files:
if os.path.isfile(os.path.join(root, f)):
a = os.path.splitext(f)
lable = a[0].split('_')[4]
# print(lable)
if lable in ('labelTrainIds'):
# print(os.path.join(root,f))
yield os.path.join(root,f) def create_tf_record(output_filename,
image_dir,
label_dir):
"""Creates a TFRecord file from examples. Args:
output_filename: Path to where output file is saved.
image_dir: Directory where image files are stored.
label_dir: Directory where label files are stored.
"""
imgg = []
writer = tf.python_io.TFRecordWriter(output_filename) img = scanDir_img_File(image_dir)
for imgs in img:
imgg.append(imgs)
image_list = natsort.natsorted(imgg) lable = scanDir_lable_File(label_dir)
lablee = []
for lables in lable:
lablee.append(lables)
label_list = natsort.natsorted(lablee)
for image_path,label_path in zip(image_list,label_list):
print(image_path,label_path)
try:
tf_example = dict_to_tf_example(image_path, label_path)
writer.write(tf_example.SerializeToString())
except ValueError:
tf.logging.warning('Invalid example: %s, ignoring.') writer.close() def main(unused_argv):
if not os.path.exists(FLAGS.output_path):
os.makedirs(FLAGS.output_path) tf.logging.info("Reading from CITY dataset")
train_image_dir = os.path.join(FLAGS.data_dir, FLAGS.image_data_dir,'train')
train_label_dir = os.path.join(FLAGS.data_dir, FLAGS.label_data_dir,'train')
val_image_dir = os.path.join(FLAGS.data_dir, FLAGS.image_data_dir, 'val')
val_label_dir = os.path.join(FLAGS.data_dir, FLAGS.label_data_dir, 'val') train_output_path = os.path.join(FLAGS.output_path, 'city_train.record')
val_output_path = os.path.join(FLAGS.output_path, 'city_val.record') create_tf_record(train_output_path, train_image_dir, train_label_dir)
create_tf_record(val_output_path, val_image_dir, val_label_dir) if __name__ == '__main__':
tf.logging.set_verbosity(tf.logging.INFO)
FLAGS, unparsed = parser.parse_known_args()
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
 

Python 实现文件复制、删除的更多相关文章

  1. python之文件复制

    python文件复制操作. # -*- coding: utf-8 -*- import shutil import os # file_path = 'C:\\Users\\WT\\Desktop\ ...

  2. Java文件复制删除操作合集

    import java.io.*; public class FileOperate { public FileOperate() { } /** * 新建目录 * @param folderPath ...

  3. python之文件操作-复制、剪切、删除等

    以下是把sourceDir目录下的以.JPG结尾的文件所有拷贝到targetDir目录下: <span style="font-size:18px;">>> ...

  4. python中文件的复制

    python中文件的复制 python的os模块有很多文件目录相关的函数,但没有提供直接复制文件的函数,当然可以通过边都边写的方式复制文件.想要直接复制文件可以通过shutil模块 shutil模块是 ...

  5. Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件

    文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件 by:授客 QQ:1033553122 测试环境: Python版本:Python 3.3.2 Win7 64 代码实践 # ...

  6. [WinAPI] API 9 [文件的删除、复制和移动功能]

    Windows系统为文件的删除.复制.重命名或移动文件提供了相应的API函数.删除文件使用DeleteFile函数:复制文件使用CopyFile函数:重命名文件和移动文件实际是一个操作,使用MoveF ...

  7. ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)

    ASP FSO操作文件(复制文件.重命名文件.删除文件.替换字符串)FSO的意思是FileSystemObject,即文件系统对象.FSO对象模型包含在Scripting 类型库 (Scrrun.Dl ...

  8. Python当前文件路径与文件夹删除操作

    前言: Python的文件操作跟Java存在部分差异.由于项目需要,近期使用python进行模块开发时遇到一些常见的文件操作便上网搜罗了一番,感觉众说纷纭.因此,结合自身的使用场景,贴一段python ...

  9. python实现某目录下将多个文件夹内的文件复制到一个文件夹中

    现实生活中,我们经常有这样的需求,如下图,有三个文件夹,文件夹1内含有1.txt文件 文件夹2中内含有2.txt文件,文件夹3中含有3.txt文件.我们有时候需要把1.txt, 2.txt, 3.tx ...

随机推荐

  1. Factory Method (工厂模式)

    什么是工厂设计模式 根据名字即可了解,工厂肯定是用来生产产品的,在我们的程序开发中,需要用到不同的类,对于熟悉SSH.SSM开发的可以知道,在初期学习的时候,总是有一个框架提供好的的factory供我 ...

  2. Android 加载GIF图最佳实践

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/75578109 本文出自[赵彦军的博客] 起因 最近在项目中遇到需要在界面上显示一个 ...

  3. mysql报错ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

    23:29:02/2017-05-03 现象描述:在Command Line Client可以登陆,但是在命令提示符cmd下登陆出错. 我最终的解决办法是: 我先去看了一下我的my.ini配置文件. ...

  4. Ubuntu 安装LAMP

    简要记录一下. 环境准备 虚拟机环境 lz@starnight:~$ sudo -i [sudo] password for lz: root@starnight:~# cat /etc/issue ...

  5. Hive入门学习--HIve简介

    现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hi ...

  6. ambari安装集群下安装kafka manager

    简介: 不想通过kafka shell来管理kafka已创建的topic信息,想通过管理页面来统一管理和查看kafka集群.所以选择了大部分人使用的kafka manager,我一共有一台主机mast ...

  7. 关于Spring的HibernateTemplate的findByExample方法使用时的一点注意。

    此前我们已经介绍了HibernateTemplate的使用配置方法,但是对其使用没有仔细说明.因为最近比较忙,我先不去介绍,而是重点说明一下容易引起问题的findByExample方法. 我尝试反编译 ...

  8. QT中对内存的管理

    在QT中,一切继承自QT自有类的类,如果存在parent指针,那么当parent指针delete时,该类中的指针(它们都属于parent指针对应的child指针)也会被delete.综上,如果我们的窗 ...

  9. Java多线程问题

    一. Java多线程: Java给多线程编程提供了内置的支持.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线 ...

  10. Linux 操作系统基础知识

    1.操作系统总体介绍 •CPU: 就像人的大脑,主要负责相关事情的判断以及实际处理的机制.查询指令: cat /proc/cpuinfo•内存: 大脑中的记忆区块,将皮肤.眼睛等所收集到的信息记录起来 ...