データセット「CIFAR-100」について説明。6万枚の物体カラー写真(動植物や機器、乗り物など100種類)の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。Keras/tf.keras、TensorFlow、PyTorchにおける利用コードも紹介。
CIFAR-100データセット(Canadian Institute For Advanced Research)(以下、CIFAR-100)は、100種類の「物体カラー写真」(動植物や機器、乗り物など100種類)の画像データセットである(図1、Alex Krizhevsky氏/Vinod Nair氏/Geoffrey Hinton氏によって、オブジェクト認識用画像データセット「80 Million Tiny Images」から収集されて作成されたサブセットである)。
100種類のクラス内容は、表1の右側にある[クラス(Classes)]列(20行×5列)に示す通りだ(※表1では、「<クラスインデックス>:英語名(日本語名)」で表記した)。なお、クラスインデックスの番号が4、30、55、……とバラバラなのは、元々が「英語のabc順」で付番されていたためだ。abc順だと分かりづらいので、筆者が分類カテゴリー順(=上位クラス→クラスの順)に並べ直した。
また、表1の左側にある[上位クラス(Superclass)]は、100種類の小分類を5個ずつまとめて、20種類にした大分類である。このようにCIFAR-100の正解ラベル(=正解を示す教師データ)としては、通常のクラス(細かい:fine)か、上位のスーパークラス(粗い::coarse)を選択できる。
上位クラス(Superclass) | クラス(Classes) | ||||
---|---|---|---|---|---|
0: aquatic mammals (水生哺乳類) |
4: beaver (ビーバー) |
30: dolphin (イルカ) |
55: otter (カワウソ) |
72: seal (アザラシ) |
95: whale (クジラ) |
1: fish (魚) |
1: aquarium fish (観賞魚) |
32: flatfish (ヒラメ) |
67: ray (エイ) |
73: shark (サメ) |
91: trout (マス) |
2: flowers (花) |
54: orchids (蘭) |
62: poppies (ポピー) |
70: roses (バラ) |
82: sunflowers (ひまわり) |
92: tulips (チューリップ) |
3: food containers (食品容器) |
9: bottles (ボトル) |
10: bowls (ボウル) |
16: cans (缶) |
28: cups (カップ) |
61: plates (皿) |
4: fruit and vegetables (果物と野菜) |
0: apples (りんご) |
51: mushrooms (きのこ) |
53: oranges (オレンジ) |
57: pears (洋ナシ) |
83: sweet peppers (パプリカ) |
5: household electrical devices (家電) |
22: clock (時計) |
39: computer keyboard (コンピューターのキーボード) |
40: lamp (ランプ) |
86: telephone (電話) |
87: television (テレビ) |
6: household furniture (家具) |
5: bed (ベッド) |
20: chair (椅子) |
25: couch (ソファー) |
84: table (テーブル) |
94: wardrobe (ワードローブ) |
7: insects (昆虫) |
6: bee (蜂) |
7: beetle (カブトムシ) |
14: butterfly (蝶) |
18: caterpillar (毛虫) |
24: cockroach (ゴキブリ) |
8: large carnivores (大型の肉食動物) |
3: bear (クマ) |
42: leopard (ヒョウ) |
43: lion (ライオン) |
88: tiger (トラ) |
97: wolf (オオカミ) |
9: large man-made outdoor things (大型の建造物) |
12: bridge (橋) |
17: castle (城) |
37: house (家) |
68: road (道路) |
76: skyscraper (超高層ビル) |
10: large natural outdoor scenes (大自然の風景) |
23: cloud (雲) |
33: forest (森) |
49: mountain (山) |
60: plain (平野) |
71: sea (海) |
11: large omnivores and herbivores (大型の雑食動物と草食動物) |
15: camel (ラクダ) |
19: cattle (牛) |
21: chimpanzee (チンパンジー) |
31: elephant (象) |
38: kangaroo (カンガルー) |
12: medium-sized mammals (中型の哺乳類) |
34: fox (キツネ) |
63: porcupine (ヤマアラシ) |
64: possum (フクロネズミ) |
66: raccoon (アライグマ) |
75: skunk (スカンク) |
13: non-insect invertebrates (昆虫ではない無脊椎動物) |
26: crab (カニ) |
45: lobster (ロブスター) |
77: snail (カタツムリ) |
79: spider (クモ) |
99: worm (ミミズ) |
14: people (人) |
2: baby (赤ちゃん) |
11: boy (少年) |
35: girl (少女) |
46: man (成人男性) |
98: woman (成人女性) |
15: reptiles (爬虫類) |
27: crocodile (ワニ) |
29: dinosaur (恐竜) |
44: lizard (トカゲ) |
78: snake (ヘビ) |
93: turtle (カメ) |
16: small mammals (小型の哺乳類) |
36: hamster (ハムスター) |
50: mouse (ねずみ) |
65: rabbit (ウサギ) |
74: shrew (トガリネズミ) |
80: squirrel (リス) |
17: trees (木) |
47: maple (もみじ) |
52: oak (オーク) |
56: palm (ヤシ) |
59: pine (松) |
96: willow (柳) |
18: vehicles 1 (車両1) |
8: bicycle (自転車) |
13: bus (バス) |
48: motorcycle (オートバイ) |
58: pickup truck (ピックアップトラック) |
90: train (電車) |
19: vehicles 2 (車両2) |
41: lawn-mower (芝刈り機) |
69: rocket (ロケット) |
81: streetcar (路面電車) |
85: tank (タンク) |
89: tractor (トラクター) |
CIFAR-100は、主に画像認識を目的としたディープラーニング/機械学習の研究や初心者向けチュートリアルで使われている。CIFAR-100は上記の通り100クラス(種類)となっており少し複雑だが、よりシンプルで手軽な内容として10クラス版であるCIFAR-10も提供されている。
CIFAR-100データセット全体は、
で構成される。また、図2にも示すように、各画像のフォーマットは、
となっている(※「ピクセル」=画素のこと。RGB形式であるため、簡単に画像化できる)。
このデータセットは、基本的に自由に使用できる(※ライセンスは指定されていない。CC(Creative Commons)でいう「パブリック・ドメイン・マーク 1.0」相当と考えられる。データの取得元を明記する場合は、以下を参考にしてほしい)。
データセットを引用する際に使える情報を以下にまとめておく。
実際にCIFAR-100を使うには、Keras/TensorFlow/PyTorchといった各ライブラリが提供する機能を利用することをお勧めする。ムダな作業を省いて、効率的に使えるためだ。
以下に、それぞれのライブラリで「どのようなコードを書くとCIFAR-100が使えるか」の典型的なコードを簡単に示しておく(※コードの詳細は解説しない)。基本的に各ライブラリは、CIFAR-100データセットを自動的にダウンロードして使いやすい形にロードしてくれる機能を提供している。また最後に、ラベル名の定義コードも紹介する。
※なお、sklearn.datasets.fetch_openml()関数で取得できるCIFAR-100データセットは見つけられなかったので、scikit-learnでの利用方法については省略した。
# !pip install tensorflow # ライブラリ「TensorFlow」をインストール
# !pip install keras # tf.kerasの場合は不要だが、Kerasを使う場合はライブラリ「Keras」をインストール
from tensorflow.keras.datasets import cifar100 # tf.kerasを使う場合(通常)
#from keras.datasets import cifar100 # tf.kerasではなく、Kerasを使う必要がある場合はこちらを有効にする
(train_images, train_labels), (test_images, test_labels) = cifar100.load_data(
label_mode='fine') # =全100クラス。'coarse'=上位20個のスーパークラス
tf.keras.datasets.cifar10.load_data()関数を、引数label_modeを指定して呼び出せばよい。引数label_modeに'fine'(細かい)を指定すると全100クラスが取得できる。上位20個のスーパークラスを取得したい場合は'coarse'(粗い)を指定すればよい。
# !pip install tensorflow tensorflow-datasets # ライブラリ「TensorFlow」と「TensorFlow Datasets」をインストール
import tensorflow_datasets as tfds
cifar100_train = tfds.load(name="cifar100", split="train")
print(cifar100_train)
# <DatasetV1Adapter shapes: {coarse_label: (), image: (32, 32, 3), label: ()}, types: {coarse_label: tf.int64, image: tf.uint8, label: tf.int64}>
TensorFlow Datasetsで使用できるデータセットは、TensorFlow Datasetsにまとめられており、tensorflow_datasetsモジュール(=tfds)のtfds.load()関数から利用できる。
個々のデータから'label'キーにより取得できる数値が、通常(fine)のクラスインデックスである。'coarse_label'キーにより取得できる数値は、スーパークラス(coarse)のクラスインデックスだ。
# !pip install torch torchvision # ライブラリ「PyTorch」をインストール
import torch
import torchvision
cifar100_data = torchvision.datasets.CIFAR100(
'./cifar-100', train=True, download=True,
transform=torchvision.transforms.ToTensor())
data_loader = torch.utils.data.DataLoader(cifar100_data, batch_size=4, shuffle=True)
torchvision.datasetsクラスのコンストラクター(厳密には__init__関数)でデータセットのオブジェクトを生成してデータをダウンロードし、torch.utils.data.DataLoaderクラスのコンストラクターでデータローダーのオブジェクトを生成してデータをロードする。
個々のデータ(img, target)のtargetに通常(fine)のクラスインデックスが入っている。スーパークラス(coarse)には対応していない(※CIFAR100/CIFAR10クラスのソースコードを少し改変することで、比較的簡単に対応することは可能)。
上記のようなライブラリを使わずに手動でCIFAR-100データセットを利用する場合は、CIFAR-100の公式ページ上にある、
という3つのファイルから、目的に合致するものをダウンロードすればよい。各ファイルの仕様やデータのロード方法については、公式ページを確認してほしい。
クラスが100個もあると、ラベル名を記述するのも一苦労する(というか筆者が苦労した)。コピー&ペーストで省力化できるよう、サンプルの定義コードを以下に掲載しておく。スーパークラス(20個)、通常のクラスの順で示す。
super_class_names = [
'aquatic mammals', # 0:水生哺乳類
'fish', # 1:魚
'flowers', # :花
'food containers', # 3:食品容器
'fruit and vegetables', # 4:果物と野菜
'household electrical devices', # 5:家電
'household furniture', # 6:家具
'insects', # 7:昆虫
'large carnivores', # 8:大型の肉食動物
'large man-made outdoor things', # 9:大型の建造物
'large natural outdoor scenes', # 10:大自然の風景
'large omnivores and herbivores', # 11:大型の雑食動物と草食動物
'medium-sized mammals', # 12:中型の哺乳類
'non-insect invertebrates', # 13:昆虫ではない無脊椎動物
'people', # 14:人
'reptiles', # 15:爬虫類
'small mammals', # 16:小型の哺乳類
'trees', # 17:木
'vehicles 1', # 18:車両1
'vehicles 2', # 19:車両2
]
class_names = [
'apples', # 0:りんご
'aquarium fish', # 1:観賞魚
'baby', # 2:赤ちゃん
'bear', # 3:クマ
'beaver', # 4:ビーバー
'bed', # 5:ベッド
'bee', # 6:蜂
'beetle', # 7:カブトムシ
'bicycle', # 8:自転車
'bottles', # 9:ボトル
'bowls', # 10:ボウル
'boy', # 11:少年
'bridge', # 12:橋
'bus', # 13:バス
'butterfly', # 14:蝶
'camel', # 15:ラクダ
'cans', # 16:缶
'castle', # 17:城
'caterpillar', # 18:毛虫
'cattle', # 19:牛
'chair', # 20:椅子
'chimpanzee', # 21:チンパンジー
'clock', # 22:時計
'cloud', # 23:雲
'cockroach', # 24:ゴキブリ
'couch', # 25:ソファー
'crab', # 26:カニ
'crocodile', # 27:ワニ
'cups', # 28:カップ
'dinosaur', # 29:恐竜
'dolphin', # 30:イルカ
'elephant', # 31:象
'flatfish', # 32:ヒラメ
'forest', # 33:森
'fox', # 34:キツネ
'girl', # 35:少女
'hamster', # 36:ハムスター
'house', # 37:家
'kangaroo', # 38:カンガルー
'computer keyboard', # 39:コンピューターのキーボード
'lamp', # 40:ランプ
'lawn-mower', # 41:芝刈り機
'leopard', # 42:ヒョウ
'lion', # 43:ライオン
'lizard', # 44:トカゲ
'lobster', # 45:ロブスター
'man', # 46:成人男性
'maple', # 47:もみじ
'motorcycle', # 48:オートバイ
'mountain', # 49:山
'mouse', # 50:ねずみ
'mushrooms', # 51:きのこ
'oak', # 52:オーク
'oranges', # 53:オレンジ
'orchids', # 54:蘭
'otter', # 55:カワウソ
'palm', # 56:ヤシ
'pears', # 57:洋ナシ
'pickup truck', # 58:ピックアップトラック
'pine', # 59:松
'plain', # 60:平野
'plates', # 61:皿
'poppies', # 62:ポピー
'porcupine', # 63:ヤマアラシ
'possum', # 64:フクロネズミ
'rabbit', # 65:ウサギ
'raccoon', # 66:アライグマ
'ray', # 67:エイ
'road', # 68:道路
'rocket', # 69:ロケット
'roses', # 70:バラ
'sea', # 71:海
'seal', # 72:アザラシ
'shark', # 73:サメ
'shrew', # 74:トガリネズミ
'skunk', # 75:スカンク
'skyscraper', # 76:超高層ビル
'snail', # 77:カタツムリ
'snake', # 78:ヘビ
'spider', # 79:クモ
'squirrel', # 80:リス
'streetcar', # 81:路面電車
'sunflowers', # 82:ひまわり
'sweet peppers', # 83:パプリカ
'table', # 84:テーブル
'tank', # 85:タンク
'telephone', # 86:電話
'television', # 87:テレビ
'tiger', # 88:トラ
'tractor', # 89:トラクター
'train', # 90:電車
'trout', # 91:マス
'tulips', # 92:チューリップ
'turtle', # 93:カメ
'wardrobe', # 94:ワードローブ
'whale', # 95:クジラ
'willow', # 96:柳
'wolf', # 97:オオカミ
'woman', # 98:成人女性
'worm', # 99:ミミズ
]
Copyright© Digital Advantage Corp. All Rights Reserved.