当前位置:   article > 正文

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

tensorflow构造图片数据集

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

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


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

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

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

    第一步先贴代码:

  1. # -*- coding:utf-8 -*-
  2. import shutil
  3. import os.path
  4. data_label_dir = "./data/images_variant_trainval.txt"
  5. f = open(data_label_dir,'r')
  6. s = f.readlines()
  7. i = 1
  8. dict = {}
  9. for line in s:
  10. dict[line[:7]] = line[8:-1]
  11. print(dict)
  12. for key,value in dict.items():
  13. dir = "./images_variant_trainval/%s/" % (value)
  14. if not os.path.exists(dir):
  15. print("目录 ""%s"" 不存在!自动创建该目录..." % dir)
  16. os.makedirs(dir)
  17. jpgfile = "./data/images/%s" % (key + '.jpg')
  18. newfile = "./images_variant_trainval/%s/%s" % (value, key + '.jpg')
  19. shutil.copyfile(jpgfile,newfile)
  20. i += 1
  21. while (i%10000) == 0:
  22. print("程序正在运行中...")
  23. f.close()

    接下来逐行解释:

    第一部分:

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

   第一行代码:

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

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

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

    第二行代码:

  1. import shutil
  2. import os.path

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

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

    第二部分:

  1. data_label_dir = "./data/images_variant_trainval.txt"
  2. f = open(data_label_dir,'r')
  3. s = f.readlines()
  4. i = 1
  5. dict = {}
  6. for line in s:
  7. dict[line[:7]] = line[8:-1]
  8. 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()三者间的区别和用法参考:点击打开链接

    剩余代码:

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

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

 结果如图所示:

  第三部分:

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

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

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

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

    结果如图所示:


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

    第四部分:

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

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

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

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

    剩余代码:关闭文件。

    

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


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/123752
推荐阅读
相关标签
  

闽ICP备14008679号