YOLOV3在win10+TensorFlow环境下的学习运用----------一、环境搭建

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Dataloader

我们是来实现YoloV3的,说到dataload,我想告诉大家第一个干货:使用tensorflow官方的datasets库. 如果你不看本教程,这个大部分人肯定不知道,来看看人家tensorflow给你准备了多少数据集的dataset类:https://github.com/tensorflow/datasets
tensorflow/datasetsload 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文件。后面就只需要读取

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值