データセット「KMNIST」について説明。7万枚の手書き文字(くずし字)の「画像+ラベル」データが無料でダウンロードでき、画像認識などのディープラーニングに利用できる。データセットをダウンロードできるPythonファイルについても紹介。
KMNISTデータセットに含まれるKuzushiji-MNIST(以下、KMNIST)は、「お」「き」「す」「つ」「な」「は」「ま」「や」「れ」「を」という10種類の手書き文字(=日本古典籍に含まれる、筆で書かれた「くずし字」)の画像データセットである(図1)。
特に古典書の筆字は、達筆過ぎて現代人には読みづらいところがある(図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と同じく)、
で構成される(※「ラベル」=正解を示す教師データ)。また、図2にも示すように、各画像のフォーマットは(MNISTと同じく)、
となっている(※「フィールド」=データを画像化する場合には「ピクセル」に対応する。RGBで作るグレースケールでは、0が黒で、255が白となり逆なので注意してほしい)。
なお、KMNISTでは厳密には、本稿で説明しているKuzushiji-MNISTを含む、下記の3種類が提供されている。より多くの文字種を使って機械学習したい場合にも活用できるだろう。
くずし字データベースおよびKMNISTデータセットは、いずれもCC BY-SA 4.0ライセンスとなっている。
データセットを引用する際に使える、その他の情報を以下にまとめておく。
実際にKMNISTを使うには、
に含まれるdownload_data.py(Pythonファイル)を利用することをお勧めする。
ちなみに、上記のリンク先からダウンロード可能な、
という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"]
Copyright© Digital Advantage Corp. All Rights Reserved.