連載
» 2021年12月16日 05時00分 公開

SVHN:ストリートビューでの家の番地(数字)の画像データセットAI・機械学習のデータセット辞典

データセット「SVHN」について説明。約10万枚(難易度が低いサンプルを含めると約63万枚)の「Googleストリートビューから切り抜いた家の番地における1文字分の数字」の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。TensorFlow、PyTorchにおける利用コードも紹介。

[一色政彦,デジタルアドバンテージ]
「AI・機械学習のデータセット辞典」のインデックス

連載目次

データセット解説

 SVHN(Street View House Numbers)データセット(以下、SVHN)は、Googleストリートビュー画像から家の番地を示す「複数桁の数字列」から、「0」〜「9」の1文字が「中央」に来るように小さくトリミングされた画像データセットである(図1)。数字に合わせて、ラベル(=正解を示す教師データ)も09となっている。

図1 SVHN含まれる「番地数字」の例 図1 SVHN含まれる「番地数字」の例
データセットの配布元: 「The Street View House Numbers (SVHN) Dataset」
出典: Yuval Netzer, Tao Wang, Adam Coates, Alessandro Bissacco, Bo Wu, Andrew Y. Ng, "Reading Digits in Natural Images with Unsupervised Feature Learning" NIPS Workshop on Deep Learning and Unsupervised Feature Learning 2011. (PDF)

 数字の画像データセットというとMNISTが有名だが、SVHNもそれを意識しており、「MNIST風(MNIST-likeやflavor to MNIST)」と表現されている。しかし、後述の画像フォーマットを見ると分かるように仕様は異なるので注意してほしい。

 用途としては、MNISTと同じく、主に画像認識となるだろう。違いは、MNISTが手書き数字だったのに対し、SVHNは現実世界のカラフルで印字された番地表記部分の数字となっている点だ。SVHNの方が画像認識する場合の難易度は高いと想定される。MNISTでは精度が高くなりすぎて使いづらいというケースで、このSVHNが利用できるだろう。

 番地の数字は、複数の桁で並んでいることが普通だ。つまり、1つの数字が中央に配置されるように加工されているとはいっても、その数字の両隣にある数字など気を散らすもの(distractors)が幾つか含まれる。例えば図1の4の左端にある画像の1枚は「814」という数字列で、中央にあるのは「4」という1文字だけなので、4が正解となる。こういった点でも、SVHNは難易度が高い。

 SVHNデータセット全体は、

  • 7万3257枚の訓練(Train)データ用の画像とラベル
  • 2万6032枚のテスト(test)データ用の画像とラベル
  • 53万1131枚の追加(extra)の訓練データ用の画像とラベル(難易度の低いサンプル)
  • 合計63万0420枚(extraを含めない場合は9万9289枚

で構成される。

 各画像のフォーマットは(MNIST風ではあるが若干仕様が異なり)、図2のように、

  • 24bit RGBフルカラー: R(赤)/G(緑)/B(青)の3色はそれぞれ「0」〜「255」の256段階
  • 32×高さ32フィールド(=1024フィールド)

となっている(「フィールド」=データを画像化する場合には「ピクセル」に対応する)。

図2 SVHNに含まれる画像データの内容 図2 SVHNに含まれる画像データの内容

引用のための情報

 このデータセットは、非営利目的にのみ使用できる(厳密には公式ページを確認してほしい)。公式ページによると「下記の論文を引用してください」と記載されている。

  • Yuval Netzer, Tao Wang, Adam Coates, Alessandro Bissacco, Bo Wu, Andrew Y. Ng, "Reading Digits in Natural Images with Unsupervised Feature Learning" NIPS Workshop on Deep Learning and Unsupervised Feature Learning 2011. (PDF)

 引用情報を以下にまとめておく。

  • 作成者: Yuval Netzer, Tao Wang, Adam Coates, Alessandro Bissacco, Bo Wu, Andrew Y. Ng
  • タイトル: Reading Digits in Natural Images with Unsupervised Feature Learning
  • カンファレンス: NIPS Workshop on Deep Learning and Unsupervised Feature Learning 2011
  • 公開日: 2011
  • URL: http://ufldl.stanford.edu/housenumbers

利用方法

 実際にSVHNを使うには、TensorFlow/PyTorchといった各ライブラリが提供する機能を利用することをお勧めする。以下ではその利用方法を紹介する。

 また、本稿で紹介したように32×32ピクセルの画像に加工される前の元の画像データが、SVHNの公式ページからダウンロードできる。画像内の数字部分には1文字1文字に対する境界ボックス(bounding boxes)の情報が別ファイル(具体的にはMATLABで読み込むことができるdigitStruct.matファイル)に格納されている。詳しくは公式サイトを参照してほしい。

TensorFlow Datasets

# !pip install tensorflow-datasets  # ライブラリ「TensorFlow Datasets」をインストール

import tensorflow_datasets as tfds

svhn_train = tfds.load(name='svhn_cropped', split='train')

リスト3 TensorFlowでSVHNを利用する基本的なコード

 TensorFlow/Kerasでは、TensorFlow Datasetsのsvhn_croppedデータセットを使えばよい。これは、tensorflow_datasetsモジュール(=tfds)のtfds.load()関数から利用できる。その関数のsplit引数で、3つのデータ種別(train/test/extra)を指定できる。

PyTorch

# !pip install torch torchvision  # ライブラリ「PyTorch」をインストール

import torch
import torchvision

svhn_data = torchvision.datasets.SVHN(
    './SVHN'
    split='train', download=True, transform=torchvision.transforms.ToTensor())

data_loader = torch.utils.data.DataLoader(svhn_data, batch_size=4, shuffle=True)

リスト4 PyTorchでSVHNを利用する基本的なコード

 PyTorchでは、torchvision.datasets.SVHNクラスのコンストラクター(厳密には__init__関数)でデータセットのオブジェクトを生成してデータをダウンロードすればよい。そのコンストラクターの引数splitで、3つのデータ種別(train/test/extra)を指定できる。

「AI・機械学習のデータセット辞典」のインデックス

AI・機械学習のデータセット辞典

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。