![深度学习图像识别技术:基于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=1739413780-zUSlONB62Yo8dBMYyDeVjZIx3D2GAq8E-0-6fde8ed2e1bc3129c5a10ebb2c27b05e)
图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=1739413780-tXVFf42mxy8Rd1PJpVDzyVa9bACsclg4-0-403e7bdb1327c6e7c21a4dffec9bf9a4)
图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=1739413780-8Wp0BMLSTkjmzL9wMasMFHYvP7woTn6x-0-771218755e9c7d5756286a41b37e99b0)
请将[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=1739413780-y37wEMAcQGUUNiQihpgQRKMR5pH8TkHe-0-b62ef0898d7e8f775ad99667e983f1f5)
同样,eval标注数据转换为csv文件的完整命令为
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/90_03.jpg?sign=1739413780-UOPy5vcxV8ZHRt53v3pgd0LlvjEDjEIA-0-b5ec9b305c295a2276ee71d9615424c1)
运行结果如图3-29所示。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/90_04.jpg?sign=1739413780-IwQWe9lb57SXTXtSyqDcD64OXdrrfiax-0-4d8c2d6893305b89b4f04c64dc1510e4)
图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=1739413780-qaFnP3lASwxsHCp96WaYNsm6yBGI2IsP-0-f94266203c927f3a3f725abda34683cb)
图3-30 修改generate_tfrecord.py
代码清单3-3 3个标签对应的程序
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/91_02.jpg?sign=1739413780-ZXDkQaZn2uTCSaxN04xTxPuEm3EDzPNa-0-fa98017059d23ab2fbaa60ac85f431ac)
第二步,进入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=1739413780-oDIqkI5PY8IYT5y3lfwO6cqROBIiCUow-0-582b02ef1c395faed2bc5828739ca1ea)
请将[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=1739413780-QAxKl8jDt4E7mIzYrYsenJu0kkM4Bnzp-0-96b6668b62a8a28002316737d46bd145)
同样,eval_labels.csv文件转换为eval.tfrecord文件的完整命令为
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/92_03.jpg?sign=1739413780-bGSG6of0B8hCCPn3GM0FB1OsYVzgTWjL-0-0e0204461dcb1c61251abddf6fce08d5)
运行结果如图3-31所示。
![](https://epubservercos.yuewen.com/31903E/20255828801879906/epubprivate/OEBPS/Images/92_04.jpg?sign=1739413780-7NxLCdv6d568bfbWhLOKn9t2LomOHCUz-0-cde0757342d44273843f8d4b15072540)
图3-31 csv文件转换为tfrecord文件