見出し画像

ノンプログラミングでDeep Learningを使ってファッション画像の分類してみた

こんにちは。ビジネスのためのAI活用プラットフォーム「MatrixFlow」の開発者の一人です。

MatrixFlowで教師あり学習の画像分類機をサクッと作ってみました。
元データの準備は大変かと思いますが、画像をクラス別に分類したら、ディレクトリ内のファイル名を付番して一括変換すればできますね。
今回はFashion_Mnist(https://github.com/zalandoresearch/fashion-mnist)を使いました。

さて、ここからは下記MatrixFlow操作マニュアルにしたがって進めたいと思います。

まずは「データ管理」からzipファイルをUploadします。

画像2

このzipファイルの構造はマニュアル18参照の通り、①画像ディレクトリ②ラベルディレクトリからなります。
ラベルディレクトリにはcsvファイルで、1列目(Colmuns1)には①画像ディレクトリに含まれる画像データのファイル名、2列目(Colmuns2)にはクラス名を入力します。

キャプチャ

labels.csvがない場合は、画像をクラス別にディレクトリに格納しても実行可能です。

キャプチャ2

正常に取り込まれるとデータのサマリーが表示されます。
10クラスそれぞれ6,000枚ずつ画像があることが確認できました。

画像2

今回は前処理がないので「レシピ管理」に移行します。
テンプレートから「白黒画像の10分類CNN」を指定し「新規追加」しました。

画像3

レシピを確認します。
CNN(Convolutional Neural Network)ですね。

画像4

MatrixFlowを開いてからここまで10分かかってません。
お次は学習です。

画像5

パラメタは以下の通りです。
【テストデータ比率】0.02
【バッチサイズ】400
【エポック】40
【評価間隔】30

全60,000枚の画像を学習60,000×(1-0.02)=58,800枚、テスト60,000×0.02=1,200枚に分けました。
バッチサイズは「学習データ分割する際に、何個のデータを一つの塊(=バッチ)にするか」を決めるパラメタです。

キャプチャ3

エポック数は、上記147バッチを1データセットとしたときに、そのデータセットを何回繰り返し学習させるか決めるパラメタです。
以上から、学習回数は学習データ÷バッチサイズ×エポック数=58800÷400×40=5880回となります。

それでは、学習させてみましょう。

画像6

lossはぎゅんぎゅん下がっています。
train_lossは学習データ内でテストした際のloss(損失)、誤差です。
そのため、正解データは学習しているデータないに存在することになります。
test_lossはテストデータでテストした際のlossです。

同様に、accuracyは精度になります。

・train_lossがtest_lossを大きく下回る
・train_lossは減少し、test_lossが上昇し始める

と過学習(訓練データだけへの適応)を起こしていますので、望ましくない学習となります。
プロットを見ると1分間に110回程度学習していることになりますので、50分はかかりそうです。

3810/5880回時点までで、緩やかながらlossは右肩に下がり、accuracyは右肩上がりを維持しています。

画像7

5730時点でもまだ学習が進んでいますね。
過学習も起こしていません。

画像8

学習完了です。
精度は88%程度でしょうか?

推論を試したいと思います。

学習済みAIから先ほどのモデルを選択し、種類「分類」を選択します。
そして推論用データはlabelsのない、imagesだけが格納されたzipファイル「fashion_inference.zip」を用意しました。
こちらの画像にもファイル名に正解クラスが記載されているので、すぐに確認できます。

それでは「推論」してみましょう。

画像9

推論結果です。
シャツをプルオーバーと誤認識していますね。

画像10

次は全問正解です。

画像11

右上「Tシャツ・トップ」をドレスと誤認識しています。

画像12

右下、シャツをプルオーバーと誤認識しています。
誤りにも傾向がありそうですね。
一方、左下「シャツ」をシャツと分類しているのは目を見張ります。

画像13

右上、ドレスに見えるか、コートに見えるか……

画像15

左上もTシャツ・トップとドレスの推論が強く、ギリギリTシャツ・トップが誤って選ばれています。

画像14

と、人間(私)が見ても判別できるか怪しいものを誤識別しているような結果となり、中々の精度ではないかと思いました。
まだまだ学習できそうですので、時間をかければ精度9割は狙えるのでは!?

ここからは、上記学習済み白黒画像10分類学習機でリアルの服(カラフルな服)の分類を推論したいと思います。

画像16

色がついて正誤がわかりやすくなりました。
左上はドレス→コートに誤推論されていますね。
白黒画像判別でもドレスの推論結果は芳しくなかったので、色がついても良くなさそうです。
反面、ズボンは精度が白黒画像でも高かった気がするので期待したいですね(左下、早速間違っていますが……)

どんどん見ていきましょう。

画像17

左上はコート、右上はtシャツ・トップであってほしいところですね。
ただ、長袖(丈に比べて袖が長い場合)はシャツに分類されやすいのかもしれません。

画像18

右下以外すべて間違っていますね……(左上はドレス?プルオーバー?それとも正しい??)

画像19

右下だけ誤っていますが、スカートなので最早どこに分類されるべきかわかりませんね。

画像20

ドレスの分類精度は低いです。

ここまで70分、実際に手を動かしたのは20分、数クリックでDeep Learningを終えました!

せっかくなので、私の判断で推論用データをラベリングし、推論結果を評価しました。
表の見方は「ドレス18枚のうち2枚がドレスに、7枚がTシャツ・トップに分類された」といったものになります。

キャプチャ4

上記表をもとに、①再現率②適合率③F値を計算しました。
定義は割愛しますので各自お調べいただければと思います。
F値の平均は50%前後なので精度はよくないですね…とはいえ低すぎるとも言い切れません。

キャプチャ5

改善の余地は学習時間(回数)等のハイパーパラメタを調整する、色あり画像を学習させる、モデルを変更する等多々ありますので、ぜひお試しください。

このあと、学習済みモデルを「サービス管理」からAPI連携することもできます。

以上、MatrixFlowによる白黒画像分類機の作成でした。

ご愛読ありがとうございました~~!

【会社概要】
株式会社MatrixFlowは、「テクノロジーで世界をつくる」をミッションとするAIベンチャーです。大人から子供、ビジネスマンから学生、デザイナーからサイエンティストに至るまで、様々な人々がAIを活用し、素晴らしい着想を得たり、あっと言わせるクールな活動をすることを支援したいと考えています。その実現に向けた第一歩として、プログラミング不要のクラウド型AI構築プラットフォーム「MatrixFlow」を開発しております。また、様々な会社でのAI活用を推進するためにAIの受託開発・コンサルティング事業も行っております。
【会社情報】
設立 :2018年10月
本社 :東京都三鷹市
URL:https://www.matrixflow.net/
事業内容:プログラミング不要のAI構築プラットフォーム「MatrixFlow」の運営、および、AIの受託開発・コンサルティング
【お問い合わせ先】
E-mail:support@matrixflow.jp
窓口:MatrixFlowカスタマーサポート

この記事が気に入ったらサポートをしてみませんか?