- Dataloader
我们是来实现YoloV3的,说到dataload,我想告诉大家第一个干货:使用tensorflow官方的datasets库. 如果你不看本教程,这个大部分人肯定不知道,来看看人家tensorflow给你准备了多少数据集的dataset类:https://github.com/tensorflow/datasets
load coco之前,先从mnist来体验一下tfds (先安装一下tensorflow_datasets):
import tensorflow as tf
import tensorflow_datasets as tfds
tf.enable_eager_execution()
dataset = tfds.load(name="mnist", split=tfds.Split.TRAIN)
# Build your input pipeline
dataset = dataset.shuffle(1024).batch(32).prefetch(tf.data.experimental.AUTOTUNE)
for features in dataset.take(1):
image, label = features["image"], features["label"]
上面简单的演示了一下如何从tensorflow导入数据,当然这还只是第一步,还没有涉及到如何准备自己的数据,但是请大家记住两点:
标准的数据导入方式,最好使用tf.data.DatasetAPI;
不要使用老版本的一些API,比如上面的eager模式其实没有必要,更不需要从contrib import,因为2.0没有contrib了, 2.0以下还是得加。
以前你可能会看到一些采用 make_one_shot_iter() 这样的方法导入数据。同样,这个方法也被弃用了,直接用 take(1).
OK, 让我们来导入一个稍微复杂一点的分类数据吧,用fashion-mnist:
import tensorflow as tf
import tensorflow_datasets as tfds
dataset, metadata = tfds.load('fashion_mnist', as_supervised=True, with_info=True)
print(metadata)
train_dataset, test_dataset = dataset['train'], dataset['test']
train_dataset = train_dataset.shuffle(100).batch(12).repeat()
for img, label in train_dataset.take(1):
img = img.numpy()
print(img.shape)
print(img)
我这里尽量的精简代码。这基本上就涵盖了我们需要的所有步骤,我们可以归纳一下,在最新版本的tensorflow中, 如何构建一个自己的dataset loader:
所有的data最终都是一个 tf.data.Dataset ;
熟悉 tf.data.Dataset 的一些相关操作比如shuffle,repeat等可以简单的对数据进行一些处理;
在for循环里面就可以拿到你需要的input和label;
在上面这个例子中,你就可以拿到你需要的数据的了(每一个epoch训练所需):
(12, 28, 28, 1)
[[[[ 0]
[ 0]
[ 0]
...
[ 0]
[ 0]
[ 0]]
[[ 0]
[ 0]
[ 0]
...
]]]
上面的尺寸12,是因为我们之前设定了一个12的batchsize,通道为1是因为我们的数据只有一个通道。请注意,这一点跟pytorch不同,pytorch是通道位于长宽前面,当然这影响不大,因为如果你稍有不慎写错了你的网络会出问题,最终你是能够发现的.
接下来要来一点复杂点的操作了,接下来我们要构造一个自己的dataset类,它属于tf.data.Dataset类型,它返回的一张图片,以及图片里面目标的boundingbox的array(多个目标有多个box,每个box是4个点坐标)。这为我们后面输入到yolov3模型之中做准备。我们有两种方式来做:
用tfrecord,实现提取数据保存到tfrecord中,但我认为这种操作方式比较麻烦;
直接在线的从本地读取数据,边训练边读,这也是pytorch的运作方式
尽管我们有这些方式可以选择,但是我们需要选择一种最理智的方式,也就是一劳永逸的方式,采用第一种应该是最好的。这样我们以后所有的检测类型数据集,都可以使用一个统一化的tfrecord接口来读取,而你要做的,仅仅只是写一个脚本将检测数据标注转化为tfrecord文件。后面就只需要读取

本文介绍了在TensorFlow环境下如何使用tensorflow_datasets库加载数据,强调了使用tf.data.Dataset API的重要性。文章详细讲解了如何将COCO数据集转换为TFRecord文件,包括数据的归一化处理、坐标存储格式,以及如何从TFRecord文件中读取数据。通过这种方式,可以提高数据读取效率,为YOLOV3模型的训练做好准备。
最低0.47元/天 解锁文章
598

被折叠的 条评论
为什么被折叠?



