深度学习图像识别技术:基于TensorFlow Object Detection API和OpenVINO? 工具套件
上QQ阅读APP看书,第一时间看更新

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所示。

图3-27 复制scripts文件夹到tf_train文件夹

preprocessing文件夹中的各文件作用如下。

● xml_to_csv.py用于将多个*.xml文件转换为一个*.csv文件。

● generate_tfrecord.py用于将*.csv文件转换为*.tfrecord文件。

第二步,由于这两个工具都使用了pandas库,所以请用命令conda install pandas安装pandas库,如图3-28所示。

图3-28 安装pandas库

第三步,进入tf_train\scripts\preprocessing文件夹,在文件夹地址栏中输入“cmd”,启动Windows命令行终端,然后输入命令“conda activate tf_gpu”,激活tf_gpu虚拟环境,并输入命令,命令格式如下。

请将[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文件的完整命令为

同样,eval标注数据转换为csv文件的完整命令为

运行结果如图3-29所示。

图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所示。更多标签以此类推。

图3-30 修改generate_tfrecord.py

代码清单3-3 3个标签对应的程序

第二步,进入tf_train\scripts\preprocessing文件夹,在文件夹地址栏中输入“cmd”,启动Windows命令行终端,然后输入命令“conda activate tf_gpu”,激活tf_gpu虚拟环境并输入命令,命令格式如下。

请将[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文件的完整命令为

同样,eval_labels.csv文件转换为eval.tfrecord文件的完整命令为

运行结果如图3-31所示。

图3-31 csv文件转换为tfrecord文件