【Dataiku】手書き文字画像認識をノーコードでやってみる

 

はじめに

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データに対するスコアリング

使用するモデル(Image Classification)

畳み込みニューラルネットワーク(CNN)を用いて、画像分類を行いました。

<CNNとは?>

主に、畳み込み・プーリング・全結合という3つの層からなり、画像分類の際に用いられます。

  1. 畳み込み

    画像の小さな領域ごとに特徴を抽出します。(例:色、形、模様など)

  1. プーリング

    抽出した特徴を圧縮して、データのサイズを小さくします。

  1. 全結合

    画像が何を表しているか判断し、分類します。

ハンズオン

前準備

Folderの作成
DATASETからFolderを選択して、train用とtest用のFolderをそれぞれ作成します。
Folder作成画面
Folderへのデータ追加
作成したFolderに、それぞれtrainデータとtestデータを加えます。 train_Folder:train.zip
train.zip
test_Folder:test.zip
test.zip
Folder Contentsの取得
それぞれのFolderに対して、List Folder Contentsレシピを用いてpath情報などを読み込みます。 まず、List Folder Contentsを選択します。
List Folder Contents 選択
次に、再度List Folder Contentsを実行します。
List Folder Contents 実行結果
出力結果:train_folder_files
train_folder_files 結果
train_masterの読み込み
DATASETの「Upload your files」からtrain_masterを読み込みます。
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
Concatenate columns の設定
出力結果:train_folder_files_prepared
train_folder_files_prepared 結果
Joinレシピによる結合
Joinレシピを用いて、train_folder_files_preparedとtrain_masterを結合します。
Joinレシピ 選択画面
Join設定:
Left:train_folder_files_prepared(file_name)
Right:train_master(file_name)
How:内部結合
Join設定
出力結果:
Join出力結果
最終出力:train_folder_files_joine
最終結合結果
LabによるImage Classificationでのモデル構築
LabのImage Classificationを用いて、画像分類モデルを構築します。 まず、Labをクリックします。
Labクリック
次に、Image Classificationを選択します。
Image Classification 選択
Image Classificationの設定:
select target:category_id
Image folder:train_Folder
Image Classification 設定結果
Basic設定(Target設定)
Basic設定
*filter displayed classesを選択すると、category_id毎にフィルターをかけることができます。(例:3でフィルター)
フィルター設定
Train(データ量が多いためサンプリングしています):
Train設定
Summary画面:
Summary画面
EXPLAINABILITY:Confusion matrix
Confusion matrix
デプロイ
作成したモデルをデプロイします。 まず、DEPLOYをクリックします。
DEPLOYクリック
次に、CREATEをクリックします。
CREATEクリック
Scoreを選択します。
Score設定
Input dataset、Managed folderを選択して、CREATE RECIPEをクリックします。
CREATE RECIPE設定
最後に、RUNをクリックします。
RUNクリック
出力結果:test_folder_files
test_folder_files 結果

提出

提出する列の絞り込み
まず、Prepareをクリックします。
Prepareクリック
次に、Concatenate columnsを用いて「ファイル名+.png」の値を作成します。
column to concatenate:basename、extension
Delimiter to use:.
Output column:file_name
Concatenate columns 設定
不要な列を削除します。
不要な列削除
出力結果:test_folder_files_scored_prepared
出力結果
Export
Export処理を実行します。
Export画面
次に、DOWNLOAD設定を行います。
Format:csv(*.csv)
Separator:\t
With header:チェックを外す
DOWNLOAD設定
最後に、ファイル名を.tsvに変更して保存します。
ファイル名変更
SIGNATEでの提出
提出するファイルを選択して、投稿をクリックします。
SIGNATE 提出画面

スコアの確認

結果として、46%の手書き数字を正しく分類するモデルをノーコードで作成することができました。
スコア確認

改善案

モデルを構築する際に、Data Augmentationタブで以下の項目を変更すると、精度向上につながる可能性があります。

  1. Color:色の拡張を有効にする(色相、コントラスト、明るさを変更)
  1. Affine:画像の反転を適用
  1. Crop:画像をランダムに切り抜く

また、トレーニングデータはサンプリングして使用していましたが、データ量を増やすことでさらなる精度向上が期待できると思います。

その他、クラスリバランスを行い、全ての数字が教師データに均等に含まれるようにするなど、試すことができることはたくさんあります。

感想

Dataikuで画像分類モデルを完全ノーコードで構築できるため、コーディングするよりも簡単に実行できます。特に初学者にとっては、手軽に機械学習を体験できる点が魅力だとおもいます。

今回の全量データでモデルを構築する際、インストール版では約2日かかりました。そのため、モデル構築の際にTrainingタブのPretrained modelで’EfficientNet B0’を選択したり、Cloud版を利用することで、学習時間を短縮できるかもしれません。

画像分類は、物体検知や顔認証、部品の異常検知などの様々な業務に応用可能な分野です。

みなさまもこの記事をきっかけに、Dataikuで画像分類を試してみてはいかがでしょうか?

ShtockData

お問い合わせフォーム

お問い合わせ項目を選択してください