前言:
{
这几天也是没有进展。之前的多目标识别的理论基础实际上是YOLO1,但总是不成功,我就先把文件生成的代码优化一下。
}
正文:
{
tensorflow.python_io.TFRecordWriter(“参数”)会返回一个writer对象,之后直接调用 writer.write(“参数”)便可保存数据。
但是这个函数容易出2个问题,一是内存泄漏,这就需要用到writer.close();另一个问题我现在还没搞明白:保存数据的次数越多,速度就越慢,而且速度慢的时候CPU,内存和硬盘都是比较空闲的。
打个比方,程序刚开始运行的时候,1秒钟大概能生成2个文件;在生成第7000个文件的时候,大约2秒钟生成一个文件;当到10000个文件时,需要大约5秒钟才能生成一个文件,这时电脑资源都是比较空闲的。
我也在网上搜了一下,可能是我的搜索方式有问题,没搜到什么东西,也没在官网上找到相关信息[1]。
我试过多线程加速,但多线程还是会受到减速的影响。目前我没去研究代码,而是先用了一个笨方法:使用多线程,而且是在时间和空间上都使用多线程。
代码1是使用目前解决方案的VOC2012文件数据到TFRecord(标签中只有object的数据)的多线程转换。
#代码1
# -- coding: utf-8 --
'''
此文件实现JPG和xml标签到TFRecord的转换(VOC2012多进程版本),其中对每个JPG源文件都会生成一个TFRecord目标文件。
文件名“test_data_28.TFRecord”表示测试数据的第29个文件(第一个文件的文件号为0)。
-----------------2018.11.1------------------------------------------------
now the labels are changed to the numbers of objects in the images.
'''
import glob
import os.path
import time
import tensorflow as tf
import numpy as np
import gc
from tensorflow.python.platform import gfile
import xml.etree.ElementTree as ET
import dictionary
from m