KMNIST/Kuzushiji-MNIST:日本古典籍くずし字(手書き文字)データセットAI・機械学習のデータセット辞典

データセット「KMNIST」について説明。7万枚の手書き文字(くずし字)の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。データセットをダウンロードできるPythonファイルについても紹介。

» 2020年01月27日 05時00分 公開
[一色政彦デジタルアドバンテージ]
「AI・機械学習のデータセット辞典」のインデックス

連載目次

データセット解説

 KMNISTデータセットに含まれるKuzushiji-MNIST(以下、KMNIST)は、「お」「き」「す」「つ」「な」「は」「ま」「や」「れ」「を」という10種類の手書き文字(=日本古典籍に含まれる、筆で書かれた「くずし字」)の画像データセットである(図1)。

図1 KMNISTに含まれる「くずし字」の例 図1 KMNISTに含まれる「くずし字」の例
『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341

 特に古典書の筆字は、達筆過ぎて現代人には読みづらいところがある(図1の文字が読めないという人がほとんどではないだろうか)。そこで、機械学習やディープラーニングによる画像認識を行って、古文書のOCR研究やテキスト化、人間が古文書を読むのを手助けするのに役立てようという目的で、人文学オープンデータ共同利用センター*1によって作成されたのが、日本古典籍くずし字データセット(国文学研究資料館ほかが所蔵し、CODHが加工)のくずし字データベースである。そこからさらに、機械学習用として派生して作られたのが、KMNISTなのである。

*1 データサイエンス共同利用基盤施設(ROIS-DS)のデータ共有支援事業の一つである「人文学オープンデータ共同利用センター(CODH:Center for Open Data in the Humanities)」では、日本の古文書から抽出したさまざまなデータセットを公開している。データセットのオープン化を推進することで「データサイエンスに基づく人文学(人文情報学)」という新たな学問分野の創出などを目指している。


 KMNISTは、主に画像認識を目的としたディープラーニング/機械学習の研究や初心者向けチュートリアルで使われること、つまりMNISTの「くずし字版」(いわば強化版)として使われることを意識している。そのため例えば、MNISTは「0」〜「9」という10種類の手書き数字データセットとなっているが、KMNISTも前述した通り、10種類の手書き文字データセットとされているのである。MNISTが持つ「高い精度が出すぎてしまう」という欠点は、本稿で紹介するKMNISTによって補える可能性がある。

 KMNISTデータセット全体は(MNISTと同じく)、

  • 6万枚の訓練データ用(画像とラベル)
  • 1万枚のテストデータ用(画像とラベル)
  • 合計7万枚

で構成される(「ラベル」=正解を示す教師データ)。また、図2にも示すように、各画像のフォーマットは(MNISTと同じく)、

  • 8bitグレースケール(=色がないモノクローム): 白「0」〜黒「255」の256段階
  • 28×高さ28フィールド(=784フィールド)

となっている(「フィールド」=データを画像化する場合には「ピクセル」に対応する。RGBで作るグレースケールでは、0が黒で、255が白となり逆なので注意してほしい)。

図2 KMNISTに含まれる画像データの内容 図2 KMNISTに含まれる画像データの内容
『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341

 なお、KMNISTでは厳密には、本稿で説明しているKuzushiji-MNISTを含む、下記の3種類が提供されている。より多くの文字種を使って機械学習したい場合にも活用できるだろう。

  • Kuzushiji-MNIST 「おきすつなはまやれを」という10種類の手書き文字(くずし字)データセット
  • Kuzushiji-49 48種類のひらがな+1種類の踊り字「ゝ」で構成される手書き文字(くずし字)データセット
  • Kuzushiji-Kanji 全1632種類の漢字を含む手書き文字(くずし字)データセット

引用のための情報

 くずし字データベースおよびKMNISTデータセットは、いずれもCC BY-SA 4.0ライセンスとなっている。

  • 表示方法: 『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341
  • 表示方法(英語): "KMNIST Dataset" (created by CODH), adapted from "Kuzushiji Dataset" (created by NIJL and others), doi:10.20676/00000341
  • データ提供元の表示方法(オプション): 提供:人文学オープンデータ共同利用センター

 データセットを引用する際に使える、その他の情報を以下にまとめておく。

  • 作成者: オープンデータ共同利用センター(CODH:Center for Open Data in the Humanities)
  • タイトル: KMNISTデータセット(機械学習用くずし字データセット)
  • 公開日: Dec 08, 2018
  • 論文: arXiv:1812.01718 [cs.CV]
  • URL: https://github.com/rois-codh/kmnist

利用方法

 実際にKMNISTを使うには、

に含まれるdownload_data.py(Pythonファイル)を利用することをお勧めする。

 ちなみに、上記のリンク先からダウンロード可能な、

  • train-images-idx3-ubyte.gz / kmnist-train-imgs.npz:
     ……訓練データ用の画像(6万枚)
  • train-labels-idx1-ubyte.gz / kmnist-train-labels.npz:
     ……訓練データ用のラベル(6万枚)
  • t10k-images-idx3-ubyte.gz / kmnist-test-imgs.npz:
     ……テスト用の画像(1万枚)
  • t10k-labels-idx1-ubyte.gz / kmnist-test-labels.npz:
     ……テスト用のラベル(1万枚)

という4つのファイルが、.jpgのような一般的な画像ファイルではなく、「MNIST独自のフォーマット(.gzファイル)」と「NumPyフォーマット(.npzファイル)」を持つ単一(=複数の画像データがひとまとめになった形式)の画像データセットで提供されている。これらのファイルをダウンロードして読み込むプログラムを作成する必要があるわけだが、Python環境であればdownload_data.pyを使うことで、ムダな作業を減らすことができる。

 MNISTフォーマットの場合、独自の読み込み処理を記述する必要がある(MNISTファイルフォーマットの仕様は、MNIST公式ページの「FILE FORMATS FOR THE MNIST DATABASE」および「THE IDX FILE FORMAT」を確認してほしい)。一方、NumPyフォーマットの場合、Python環境であれば簡単にロードできるので便利だ。

 本稿では、NumPyフォーマットをお勧めする。参考までに、どのようなコードを書くことになるのか、コード例をリスト1に示しておく(詳しい説明は割愛するので、コメントを参考にしてほしい)。

# download_data.pyのコードを実行すると以下のように表示される
# Please select a download option:
# 1) Kuzushiji-MNIST (10 classes, 28x28, 70k examples)
# 2) Kuzushiji-49 (49 classes, 28x28, 270k examples)
# 3) Kuzushiji-Kanji (3832 classes, 64x64, 140k examples)
# > 1  # Kuzushiji-MNISTの「1」を入力
# Please select a download option:
# 1) MNIST data format (ubyte.gz)
# 2) NumPy data format (.npz)
# > 2 # NumPyフォーマットの「2」を入力

# download_data.pyのコード実行が完了すると、以下のファイルがダウンロードされる
!ls 
# kmnist-train-imgs.npz  kmnist-train-labels.npz
# kmnist-test-imgs.npz   kmnist-test-labels.npz

# 各ファイルからNumPyを使ってデータをロードする
import numpy as np
X_train = np.load('kmnist-train-imgs.npz')["arr_0"]
y_train = np.load('kmnist-train-labels.npz')["arr_0"]
X_test = np.load('kmnist-test-imgs.npz')["arr_0"]
y_test = np.load('kmnist-test-labels.npz')["arr_0"]

リスト1 KMNISTデータをNumPyフォーマットでロードするコード例

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

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

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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