Tensorflow之构建自己的图片数据集TFrecords(一)

    接触Tensorflow一个月以来,总算有点感觉。最近一边查文档一边自己摸索,利用Tensorflow构建了自己的图片数据集TFrecords。接下来,我将步骤及用到的相关知识一一记录下来,望大家指点。

    用到的原始数据形式截图如下:(用的是fgvc-aircraft-2013b数据集)


    制作这个数据集我分成了两步:

        第一步:将图片按照给定txt里面的标签复制到指定文件夹中;

        第二步:将指定文件夹里的图片制作成Tfrecord格式。

    第一步先贴代码:

# -*- coding:utf-8 -*-
import shutil
import os.path

data_label_dir = "./data/images_variant_trainval.txt"
f = open(data_label_dir,'r')
s = f.readlines()
i = 1
dict = {}
for line in s:
    dict[line[:7]] = line[8:-1]
print(dict)
for key,value in dict.items():
    dir = "./images_variant_trainval/%s/" % (value)
    if not os.path.exists(dir):
        print("目录 ""%s"" 不存在!自动创建该目录..." % dir)
        os.makedirs(dir)
    jpgfile = "./data/images/%s" % (key + '.jpg')
    newfile = "./images_variant_trainval/%s/%s" % (value, key + '.jpg')
    shutil.copyfile(jpgfile,newfile)
    i += 1
    while (i%10000) == 0:
        print("程序正在运行中...")
f.close()

    接下来逐行解释:

    第一部分:

# -*- coding:utf-8 -*-
import shutil
import os.path

   第一行代码:

# -*- coding:utf-8 -*-
     PY文件当中是不支持中文的,即使你输入的注释是中文也不行,为了解决这个问题,就需要把文件编码类型改为UTF-8的类型,输入这个代码就可以让PY源文件里面有中文了。

    建议你写代码之前都把这句话加上,因为不管是注释还是弹出消息提示,免不了的要输入中文,所以这个基本是必须的。

    (具体参考:点击打开链接

    第二行代码:

import shutil
import os.path

    shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来记忆模块的名称。该模块拥有许多文件(夹)操作的功能,包括复制、移动、重命名、删除等等。(具体参考:点击打开链接

    os模块包含普遍的操作系统功能。本文用它是为了查找文件路径。(具体参考:点击打开链接

    第二部分:

data_label_dir = "./data/images_variant_trainval.txt"
f = open(data_label_dir,'r')
s = f.readlines()
i = 1
dict = {}
for line in s:
    dict[line[:7]] = line[8:-1]
print(dict)

    第一行代码:

data_label_dir = "./data/images_variant_trainval.txt"

    将txt地址传给参数data_label_dir。该文件中含有图片的名称和对应的标签,其txt文件部分如图所示:(前者为图片名称,后者为标签)


    第二行代码:

f = open(data_label_dir,'r')

    以只读方式打开文件。(关于文件打开方式详见:点击打开链接

    第三行代码:

s = f.readlines()

    该方法每次读出一行内容。(关于Python中read()、readline()和readlines()三者间的区别和用法参考:点击打开链接

    剩余代码:

dict = {}
for line in s:
    dict[line[:7]] = line[8:-1]
print(dict)

    建立空字典。对于txt文件中的每一行建立键值对。dict[line[:7]] = line[8:-1]表示提取图片名称为键,对应型号为值。空格算一个字符,从左往右数,第一个字符为1;从右往左数,第一个字符为-1。

 结果如图所示:

  第三部分:

for key,value in dict.items():
    dir = "./images_variant_trainval/%s/" % (value)
    if not os.path.exists(dir):
        print("目录 ""%s"" 不存在!自动创建该目录..." % dir)
        os.makedirs(dir)

    第一行代码:读取字典中的键值对。

    第二行代码:以值(飞机型号)为文件名传递给参数dir。

    剩余代码:如果该地址不存在,则创建该地址的文件夹。

    结果如图所示:


    碰到的问题:在text中有两个飞机型号为F-16A/B,F/A-18,反斜杠"\"是DOS和Windows系统里代表文件目录的符号,不能在文件名里使用,而出现斜杠"/"时,系统会等同为反斜杠"\"。如果一定要用斜杠作文件名的话,只能用全角符号里的斜杠,在把中文输入法里的月牙点成满月里就可以用了。但是我试过之后在后续查找时又出现了问题,因此就没改,创建了子文件夹。

    第四部分:

    jpgfile = "./data/images/%s" % (key + '.jpg')
    newfile = "./images_variant_trainval/%s/%s" % (value, key + '.jpg')
    shutil.copyfile(jpgfile,newfile)
    i += 1
    while (i%10000) == 0:
        print("程序正在运行中...")
f.close()

    第一二行代码:将旧文件地址传给参数jpgfile,将新文件夹地址传给newfile。

    第三行代码:将旧文件夹中的图片复制给新文件夹中。

    第四五六行代码:每完成10000张图片的复制,输出”程序正在运行中”,以提示程序正在运行

    剩余代码:关闭文件。

    

    关于将图片数据集制作成TFrecords格式详见文章《Tensorflow之构建自己的图片数据集TFrecords(二)》点击打开链接


  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值