はじめに
SIGNATEの練習問題:手書き文字認識をDataikuでやってみました。
URL:https://signate.jp/competitions/100
本記事では、Dataikuを使用して、ノーコードで手書き文字認識を行うための実装手順について解説します。
概要
手書き数字の画像データに対して、10種類のラベルの1つを割り当てるモデルを作成する

- データ
- 種別:画像
- サンプル数:60,000
- 使用データ(データのダウンロードはこちら)
- 学習用画像データ
- 学習用画像データとラベルIDの対応表
- 評価用画像データ
- 評価指標
- 正解率(Accuracy)
- 投稿方法
- 1列目に評価用画像データのファイル名、2列目に予測したラベルIDを記入したファイル。
- ヘッダなしの.tsv形式で提出。
- 使用するレシピ
- Visual recipes
- List Folder Contents:フォルダー内のファイルパス、ファイル名などを取得
- Prepare:様々なデータ処理が可能
- Concatenate columns:指定した列をConcatする
- Join:結合
- Lab
- Image Classification:画像分類
- Other receipes
- Score:testデータに対するスコアリング
- Visual recipes
使用するモデル(Image Classification)
畳み込みニューラルネットワーク(CNN)を用いて、画像分類を行いました。
<CNNとは?>
主に、畳み込み・プーリング・全結合という3つの層からなり、画像分類の際に用いられます。
- 畳み込み
画像の小さな領域ごとに特徴を抽出します。(例:色、形、模様など)
- プーリング
抽出した特徴を圧縮して、データのサイズを小さくします。
- 全結合
画像が何を表しているか判断し、分類します。
ハンズオン
前準備
Folderの作成
DATASETからFolderを選択して、train用とtest用のFolderをそれぞれ作成します。
Folderへのデータ追加
作成したFolderに、それぞれtrainデータとtestデータを加えます。 train_Folder:train.zip

Folder Contentsの取得
それぞれのFolderに対して、List Folder Contentsレシピを用いてpath情報などを読み込みます。 まず、List Folder Contentsを選択します。


train_masterの読み込み
DATASETの「Upload your files」からtrain_masterを読み込みます。
実装
train_masterとの結合処理
train_Folder内の.pngファイルに対して、train_masterを結合しCategory_idを付与します。 (※Prepareレシピを用いて、結合句を作成します。train_masterのfile_name列は「ファイル名+.png」のため、その形式に整形する必要があります。) まず、Concatenate columnsを用いて「ファイル名+.png」の値を作成します。column to concatenate:basename、extension Delimiter to use:. Output column:file_name


Joinレシピによる結合
Joinレシピを用いて、train_folder_files_preparedとtrain_masterを結合します。
Left:train_folder_files_prepared(file_name) Right:train_master(file_name) How:内部結合



LabによるImage Classificationでのモデル構築
LabのImage Classificationを用いて、画像分類モデルを構築します。 まず、Labをクリックします。

select target:category_id Image folder:train_Folder






デプロイ
作成したモデルをデプロイします。 まず、DEPLOYをクリックします。





提出
提出する列の絞り込み
まず、Prepareをクリックします。
column to concatenate:basename、extension Delimiter to use:. Output column:file_name



Export
Export処理を実行します。
Format:csv(*.csv) Separator:\t With header:チェックを外す


SIGNATEでの提出
提出するファイルを選択して、投稿をクリックします。
スコアの確認
結果として、46%の手書き数字を正しく分類するモデルをノーコードで作成することができました。
改善案
モデルを構築する際に、Data Augmentationタブで以下の項目を変更すると、精度向上につながる可能性があります。
- Color:色の拡張を有効にする(色相、コントラスト、明るさを変更)
- Affine:画像の反転を適用
- Crop:画像をランダムに切り抜く
また、トレーニングデータはサンプリングして使用していましたが、データ量を増やすことでさらなる精度向上が期待できると思います。
その他、クラスリバランスを行い、全ての数字が教師データに均等に含まれるようにするなど、試すことができることはたくさんあります。
感想
Dataikuで画像分類モデルを完全ノーコードで構築できるため、コーディングするよりも簡単に実行できます。特に初学者にとっては、手軽に機械学習を体験できる点が魅力だとおもいます。
今回の全量データでモデルを構築する際、インストール版では約2日かかりました。そのため、モデル構築の際にTrainingタブのPretrained modelで’EfficientNet B0’を選択したり、Cloud版を利用することで、学習時間を短縮できるかもしれません。
画像分類は、物体検知や顔認証、部品の異常検知などの様々な業務に応用可能な分野です。
みなさまもこの記事をきっかけに、Dataikuで画像分類を試してみてはいかがでしょうか?