![深度学习图像识别技术:基于TensorFlow Object Detection API和OpenVINO? 工具套件](https://wfqqreader-1252317822.image.myqcloud.com/cover/997/38485997/b_38485997.jpg)
3.6 创建TensorFlow TFRecord文件
TensorFlow官方建议使用TensorFlow TFRecord格式文件向TensorFlow模型输入训练数据,速度最快,效率最高。TensorFlow内核很多数据处理机制都是基于TFRecord文件做的优化。
TFRecord格式文件是TensorFlow定义的二进制文件,基于Google Protocol Buffers这个跨平台跨语言序列化结构数据的协议标准。
TFRecord格式文件的扩展名是*.tfrecord。
3.6.1 将*.xml文件转换为*.csv文件
TensorFlow Object Detection API框架提供了一个*.tfrecord文件转换工具,要求首先将多个*.xml文件转换为一个*.csv文件,具体步骤如下。
第一步,请将本书提供的scripts文件夹复制到tf_train文件下,这是用于转换*.xml文件到*.tfrecord文件的用Python脚本写的工具,直接使用,无需开发。文件夹结构如图3-27所示。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/89_01.jpg?sign=1739173045-se7gGf3O1mpHnP1pvdGhIAG2hEXcIn89-0-b267d2d9678930ee3bcd37bdc88ef9a9)
图3-27 复制scripts文件夹到tf_train文件夹
preprocessing文件夹中的各文件作用如下。
● xml_to_csv.py用于将多个*.xml文件转换为一个*.csv文件。
● generate_tfrecord.py用于将*.csv文件转换为*.tfrecord文件。
第二步,由于这两个工具都使用了pandas库,所以请用命令conda install pandas安装pandas库,如图3-28所示。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/89_02.jpg?sign=1739173045-BSlYB01dbq0aWVuiOKc2RKjROiD3z0Wq-0-6e420d710a86a86228b92b2759d80586)
图3-28 安装pandas库
第三步,进入tf_train\scripts\preprocessing文件夹,在文件夹地址栏中输入“cmd”,启动Windows命令行终端,然后输入命令“conda activate tf_gpu”,激活tf_gpu虚拟环境,并输入命令,命令格式如下。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/90_01.jpg?sign=1739173045-Fl1OswZvCOWMXBDIfqeMd2pAloNgqOUd-0-f90c29df784c5ea520d546ce34949912)
请将[PATH_TO_IMAGES_FOLDER]替换为images文件夹的绝对路径,本书是D:\tf_train\workspaces\cats_dogs\images。
请把[PATH_TO_ANNOTATIONS_FOLDER]替换为annotations文件夹的绝对路径,本书是D:\tf_train\workspaces\cats_dogs\annotations。
请将xxx_labels.csv替换为对应的train_labels.csv或者eval_labels.csv。
train标注数据转换为csv文件的完整命令为
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/90_02.jpg?sign=1739173045-p3Y4MyFVKoQ2wSReHuYZZHwnz9Nnt3jA-0-e719ccacdaffcbb785c5c99e5c606cd0)
同样,eval标注数据转换为csv文件的完整命令为
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/90_03.jpg?sign=1739173045-wNc5ziwzn2WYuPsTEuA6j6Mxijst31pm-0-7540fcdf533037ab6609e358f691e083)
运行结果如图3-29所示。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/90_04.jpg?sign=1739173045-cAFBFhvwqnJtq8eK1nxZbblj2IPToGga-0-557c21fe24cbdb9c9d7fd283ebfe209b)
图3-29 xml文件转换为csv文件
3.6.2 将*.csv文件转换为*.tfrecord文件
用generate_tfrecord.py将*.csv文件转换为*.tfrecord文件,具体步骤如下。
第一步,用文本编辑器打开generate_tfrecord.py文件,由于本书使用了2个label(标签),所以修改第28~49行源代码,如图3-30所示。
若使用了3个label(标签),则下图方框中的程序如代码清单3-3所示。更多标签以此类推。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/91_01.jpg?sign=1739173045-X4bqDqijSmP0DjZCFfrNW3J4bKoo0J9R-0-a015bf46d4a94c6a7bf2fb53dda11ca1)
图3-30 修改generate_tfrecord.py
代码清单3-3 3个标签对应的程序
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/91_02.jpg?sign=1739173045-C69u2uOXLC6cPVHYuHrtgsRaTKL6VfVZ-0-06c41643d629262054e45905dd31d57e)
第二步,进入tf_train\scripts\preprocessing文件夹,在文件夹地址栏中输入“cmd”,启动Windows命令行终端,然后输入命令“conda activate tf_gpu”,激活tf_gpu虚拟环境并输入命令,命令格式如下。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/92_01.jpg?sign=1739173045-MX0RGxiicHF05Ne2xL9Nr9u2sR8Jr9p0-0-9c3a7ec7f7bb89845211536ae89088bf)
请将[label_name0]、[label_name1]替换为标签名字,本书是cat和dog,需要注意的是:标签名字中不能有空格。
请将[PATH_TO_IMAGES_FOLDER]替换为images文件夹的绝对路径,本书是D:\tf_train\workspaces\cats_dogs\images。
请将[PATH_TO_ANNOTATIONS_FOLDER]替换为annotations文件夹的绝对路径,本书是D:\tf_train\workspaces\cats_dogs\annotations。
将xxx_labels.csv替换为对应的train_labels.csv或者eval_labels.csv,把xxx.tfrecord替换为对应的train.tfrecord或者eval.tfrecord。
train_labels.csv文件转换为train.tfrecord文件的完整命令为
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/92_02.jpg?sign=1739173045-irxAdX8D8FeObGQ898ZfVVLcirLZ1XQC-0-da4abd9058752a213fe0e2926a78ca62)
同样,eval_labels.csv文件转换为eval.tfrecord文件的完整命令为
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/92_03.jpg?sign=1739173045-WOnOKyJbsiqzMqQ0dZs6MGAf1JKK5z06-0-c6d8b7b4e8bd26b6b2328786403cce14)
运行结果如图3-31所示。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/92_04.jpg?sign=1739173045-F34uuJlIO6EuNYkdotpze9mLOzHXt1DW-0-21437ff38698f0352888232fba054cdf)
图3-31 csv文件转换为tfrecord文件