テストデータ (MNIST IDX形式)

お知らせ

2018/4/15 手書き文字認識用データセット(難読版)を公開しました。

2016/4/14 前処理の質を改善したデータを公開しました。また、今までのトレーニングデータの4倍規模の画像データを公開しました。

2016/4/11 本日公開したデータに問題がありました。最新版をfaxocr-numbers-20160411c.zipとして再公開しています。

2016/4/10 公開データで、28x28とすべき画像サイズを20x20としてしまっていました。4/11版では修正されています。申し訳ありません。

データの概説

このページでは、私たちのシステムで用いているOCRのトレーニングデータ、テスト用データを公開しています。

テストデータに含まれる手書き数字画像の元ファイル(抜粋)

こちらのファイル(faxocr-numbers-20160411c.zip)に、MNISTデータセットと同一のIDX形式で、トレーニング用データセット、テスト用データセットが含まれています。ファイルの内訳は下記の通りです。idx1ファイルはラベルデータ、idx3ファイルは対応する画像データを含んでいます。ファイル形式の詳細は、The MNIST DATABASE of handwritten digitsページの最下部をご確認下さい。なお、MNISTデータと異なり、画像データはモノクロ画像で、手書きで無い活字も含まれています。また、トレーニングデータは、クラス毎の画像数がバランスしていません。その他、ファイルに不具合がある場合は、できる限り対応させて頂きますので、お気軽にご連絡下さい。

トレーニング用データセット [小] (各1711 images)

28 x 28 pixels

faxocr-training-28_train_labels.idx1

faxocr-training-28_train_images.idx3

48 x 48 pixels

faxocr-training-48_train_labels.idx1

faxocr-training-48_train_images.idx3

トレーニング用データセット [中] (各6709 images)

28 x 28 pixels

faxocr-numbers-28_train_labels.idx1

faxocr-numbers-28_train_images.idx3

48 x 48 pixels

faxocr-numbers-48_train_labels.idx1

faxocr-numbers-48_train_images.idx3

テスト用データセット (各249 images)

28 x 28 pixels

faxocr-mustread-28_train_labels.idx1

faxocr-mustread-28_train_images.idx3

48 x 48 pixels

faxocr-mustread-48_train_labels.idx1

faxocr-mustread-48_train_images.idx3

なお、それぞれのデータセットには、以下の数字が含まれています。

ファイル概要

  • faxocr-numbers-20160410.zip / 最初の公開データ
  • faxocr-numbers-20160411.zip / 画像サイズを20x20から28x28へ修正
  • faxocr-numbers-20160411c.zip / IDXデータに統合する前に、48x48 → 28x28への縮小+アンチエイリアシング
  • faxocr-numbers-20160414.zip / 前処理の改善、より多量のトレーニングデータを追加
  • numbers-sample.zip / トレーニング用データセット(中)の元画像

利用に際してのお願い

データを公開するのは、私たちのKOCRと他の処理系の性能を比較し、今後の改良に生かすことを目的としています。とりわけ、「MNISTと同サイズの28 x 28とKOCRが内部的に利用してきた48 x 48での性能差」、「公開したトレーニングデータとMNISTデータ、それぞれで学習した際の性能差」に興味があります。それにより、i) トレーニングデータを増やせばよいのか、ii) 前処理や特徴量抽出を改善すればよいのか、iii) 学習モデルを変えればよいのか、今後の改良の方向性を決めたいと考えています。

そうした由来のデータですので、本データを利用された方は、もし差し支えなければ結果をこちらまでお知らせ頂ければ大変助かります。

もちろん、本データの公開により集まった知見を生かし、KOCRを改良して下さる方も大募集しています。

【現在の性能】

※ テスト用データセット249件の正答率

※2. 元画像は同じですが、それぞれ前処理が異なっています

データの由来

トレーニング用データ [小]: Githubに登録されたKOCRのリポジトリ中の数字データ3117ファイルから、罫線が含まれていない数字を抽出したうえで、極度に類似した画像を除外したデータに、いくつかの画像を手作業で追加しています。なお、KOCRのリポジトリ中に収載されているデータは、このFaxOCRシステムを利用して収集しました。

トレーニング用データ [中]: FaxOCRシステムを利用して収集したデータから、テスト用データを削除したもの。

テスト用データ: 我々のFaxOCRを実際に利用した際に初期のKOCRが誤読した手書き数字のうち、これは読めないと困るという数字を目視で選択したデータセットです。

IDXファイル生成前の元画像データ:

それぞれのデータの元となった画像ファイルは、実際のファックスから切り出した、サイズもまちまちでノイズが混入した画像ファイルです。上記のIDXファイルの生成に際しては、ノイズを除去し、文字部分を拡大したうえでセンタリングし、deskew処理する等の前処理を行っています。ただし、前処理の精度も完全ではありません。そこで、処理前の元画像ファイル(PNG)と前処理後の画像ファイルも合わせて公開します。

なお、上記のサンプルの通り、本データにはペンによる字が混在しています。その結果、ノイズ除去のためにモルフォロジー演算を行うと、穴がつぶれたり(上記サンプル6)、間隔がつぶれたり(上記5・9)と、一筋縄ではいきません。当方の最新コード(未コミット)では、現在、224/249程度を認識しています。(2016年1月)

OpenCV上のSVMでのPOLYカーネルの利用について

LeCunのMNISTページによると、MNISTデータをSVMで認識する場合、Gaussianカーネルよりも多項式カーネルの方が性能が良いようです。ただ、KOCRが利用しているopencv(version 2)では、RBFカーネルのサンプルコードは多数見つかるものの、POLYカーネルのサンプルコードがどうも見つかりません。とりわけ、train_auto()を用いた学習に際して、degreeを固定する方法がどうも分かりません。いろいろ試した末、当方では下記のようなコードを用いていますが、もし正しいreferenceをご存知の方は教えていただければ助かります。(opencvのソースを読んでしまう方が、話が早いのかも知れませんが)

なお、2行目のparam.degreeに設定するだけだと(degree_gridにパラメータを設定しないと)、学習時間が12倍近くになります。

性能がごく僅か落ちる印象です。僅かに落ちたり、僅かに上がったりします。(2016/4/14 追記)

    param.kernel_type = CvSVM::POLY;
    param.degree = 9;

    CvParamGrid degree_grid = CvSVM::get_default_grid(CvSVM::DEGREE);
    degree_grid.min_val = 5.0;
    degree_grid.max_val = 9.0;
    degree_grid.step = 2.0;

    svm_ = new CvSVM();
    svm_->train_auto(Direction, Classlabel, NULL, NULL, param,
                       50,
                       svm.get_default_grid(CvSVM::C),
                       svm.get_default_grid(CvSVM::GAMMA),
                       svm.get_default_grid(CvSVM::P),
                       svm.get_default_grid(CvSVM::NU),
                       svm.get_default_grid(CvSVM::COEF),
                       degree_grid
                       );