Tensorflow-slim 学习笔记(二)- 图像分类模型库

Tensorflow-slim 学习笔记(二)- 图像分类模型库

TensorFlow-Slim image classification model library

T F − s l i m TF-slim TFslim T e n s o r F l o w ( t e n s o r f l o w . c o n t r i b . s l i m ) TensorFlow(tensorflow.contrib.slim) TensorFlowtensorflow.contrib.slim的一个新的轻量级高级 A P I API API,用于定义,训练和评估复杂的模型。 该目录包含用于训练和评估使用 T F − s l i m TF-slim TFslim的几个广泛使用的卷积神经网络 ( C N N ) (CNN) CNN图像分类模型的代码。 它包含的脚本将允许您从头开始训练模型,或者从预先训练好的网络权重中对其进行微调。 它还包含下载标准图像数据集的代码,将下载的数据集转换为 T e n s o r F l o w TensorFlow TensorFlow的原生 T F R e c o r d TFRecord TFRecord格式,并使用 T F − S l i m TF-Slim TFSlim的数据读取和排队实用程序读取它们。 您可以轻松地在任何这些数据集上训练任何模型,如下所示。 我们还包括一个 J u p y t e r Jupyter Jupyter N o t e b o o k Notebook Notebook,提供了使用 T F − S l i m TF-Slim TFSlim进行图像分类的实例。 如果需要开发或修改自己的模型,请参阅主 T F − S l i m TF-Slim TFSlim官方主页。

安装

安装最新版本的TF-slim:

TF-Slim可以通过TensorFlow 1.0中的 tf.contrib.slim 使用。 要测试安装的环境是否可用,可以执行以下命令; 不报错即可。

python -c "import tensorflow.contrib.slim as slim; eval = slim.evaluation.evaluate_once"

安装TF-slim图像模型库:

如果要使用TF-slim来做图像分类,还需要安装 TF-Slim image models library ,这不是TF库的核心部分。 所以需要检查 tensorflow/models 如下:

cd $HOME/workspace
git clone https://github.com/tensorflow/models/

这样的话将会将 TF-Slim image models library 下载到 $HOME/workspace/models/research/slim(它会创建一个名为models / inception的目录,其中包含一个较旧版本的slim;可以忽略。)

要验证是否可以用的话,可以执行以下命令; 没有报错的话即可。

cd $HOME/workspace/models/research/slim
python -c "from nets import cifarnet; mynet = cifarnet.cifarnet"

准备数据集

作为这个库的一部分,我们已经提供了下载几个流行的图像数据集(下面列出)的脚本,并将其转换为 s l i m slim slim 格式。

DatasetTraining Set SizeTesting Set SizeNumber of ClassesComments
Flowers250025005Various sizes (source: Flickr)
Cifar1060k10k1032x32 color
MNIST60k10k1028x28 gray
ImageNet1.2M50k1000Various sizes

下载数据集并将其转换为 T F R e c o r d TFRecord TFRecord 格式

对于每个数据集,我们需要下载原始数据并将其转换为 T e n s o r F l o w TensorFlow TensorFlow的原生 T F R e c o r d TFRecord TFRecord格式。 每个 T F R e c o r d TFRecord TFRecord包含一个 T F − E x a m p l e TF-Example TFExample协议缓冲区。 下面我们演示如何为 F l o w e r s Flowers Flowers数据集执行此操作。

$ DATA_DIR=/tmp/data/flowers
$ python download_and_convert_data.py \
    --dataset_name=flowers \
    --dataset_dir="${DATA_DIR}"

当执行结束之后,您会发现创建了几个 T F R e c o r d TFRecord TFRecord文件:

$ ls ${DATA_DIR}
flowers_train-00000-of-00005.tfrecord
...
flowers_train-00004-of-00005.tfrecord
flowers_validation-00000-of-00005.tfrecord
...
flowers_validation-00004-of-00005.tfrecord
labels.txt

这些分别为训练和验证数据,每一类都有5个文件。 其中还有一个$ DATA_DIR / labels.txt文件,这个文件中包含从整型标签到类名称的映射。

您可以使用相同的脚本来创建 m n i s t mnist mnist c i f a r 10 cifar10 cifar10 数据集。 但是,对于 I m a g e N e t ImageNet ImageNet,您必须按照下面的说明进行操作。 您首先必须在 i m a g e − n e t . o r g image-net.org imagenet.org注册一个帐户。 另外,下载可能需要几个小时,数据集大小为 500 G B 500GB 500GB左右。

创建TF数据集描述符.

当TFRecord格式的数据集创建完成之后,就可以很容易的就定义一个Slim 数据集了,Slim 数据集存储的是指向数据文件的指针以及各种其他元数据,例如类标签,火车/测试拆分以及如何解析 TFExample原型等。 官网上已经发布了Cifar10ImageNetFlowersMNIST的TF-Slim数据集描述符。 下面是一个TF-Slim中使用DatasetDataProvider的据集描述符加载数据的例子:

import tensorflow as tf
from datasets import flowers

slim = tf.contrib.slim

# Selects the 'validation' dataset.
dataset = flowers.get_split('validation', DATA_DIR)

# Creates a TF-Slim DataProvider which reads the dataset in the background
# during both training and testing.
provider = slim.dataset_data_provider.DatasetDataProvider(dataset)
[image, label] = provider.get(['image', 'label'])

处理ImageNet数据的自动化脚本

使用ImageNet数据集来训练模型是一个常见的需求。 为了便于使用ImageNet数据集,官网上提供了一个自动化脚本,用于将ImageNet数据集下载并处理为本地TFRecord格式。

TFRecord格式由一组分片文件组成,其中每个条目是序列化的tf.Example原型。 每个tf.Example原型包含ImageNet图像(JPEG编码)以及元数据(如标签和边界框信息)。

官网上提供一个脚本来下载和转换ImageNet数据到TFRecord格式。 根据您的网络和计算机的速度,下载和预处理数据可能需要几个小时(最多半天)。 请耐心等待。

首先,需要在[ImageNet](http://image-net.org)上注册一个帐户才能访问数据。(记住用户名和密码)

运行脚本之前,大家要确保自己的硬盘的可用空间大于500G。 官网上选择 DATA_DIR = $ HOME/imagenet-data 作为存储位置。

运行下列脚本的时候,会提示输入用户名和密码,(就是上ImageNet的那个网站上注册的),之后只要等就可以了。

脚本如下:

# location of where to place the ImageNet data
DATA_DIR=$HOME/imagenet-data

# build the preprocessing script.
bazel build slim/download_and_preprocess_imagenet

# run it
bazel-bin/slim/download_and_preprocess_imagenet "${DATA_DIR}"

脚本的最后一句输出是这样的话,就证明完成了:

2016-02-17 14:30:17.287989: Finished writing all 1281167 images in data set.

当脚本结束时,您将在DATA_DIR中找到1024和128个训练和验证文件。 这些文件将分别与1024的模式和102412的模式相匹配。

之后在DATA_DIR中会有1024个训练集,128个验证集,这些文件将按照 train-???-of-1024validation-???-of-00128 的模式进行匹配。

这样就已经准备好使用ImageNet数据集进行训练或评估了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值