はじめに
システムエンジニアとして10年以上の経験がありますが、AI画像認識技術は初学者です。
AIを用いた技術を基礎から学びたく、教育訓練給付制度(専門実践教育訓練)を活用しAidemyのAIアプリ開発講座を受講しました。
本ブログはAidemy Premiumのカリキュラムの一環で、受講修了条件を満たすために公開しています。
本記事の概要
-
どんな人に読んで欲しいか
AI画像認識技術(CNN画像解析)を利用した、シンプルな画像分類アプリケーションの実装方法を知りたい方 -
この記事に書くこと、わかること
実際のプログラム・コード
AIによる画像分類モデルの作成、モデルを利用したアプリの作成の流れ -
この記事で扱わないこと
実装内容の細かな説明
開発環境
-
Google Colaboratory
モデルの作成・実行はGoogle Colab上で行いました。
Pythonのバージョンは3.10.12 -
Windows 11
Flaskによるアプリ作成・実行はWindowsローカルPC上で行いました。
Pythonのバージョンは3.11.5
アプリ作成の目的
講座で学習した内容を活用し、CNN1 画像認識技術を用いたシンプルなアプリを作成すること。分類対象となる材料については個人的な興味に基づくものではなく、学んだ内容の復習も兼ね、シンプルな分類を自らのコーディングで再現したいという狙いがあります。
自分の興味ある事をもとに画像認識プログラムを作ろうとすると、材料となるデータセットの準備等で時間がかかってしまうこともあるため、既存のデータセットを使って容易に学習を行いやすいような課題を設定しました。
アプリの概要
スマホが手軽なカメラとして利用されるにつれ、アルバム内に膨大な写真データが保存されるようになりました。一方でそれらの画像は、単に風景や人物といった一般的な写真だけでなく、スクリーンショットや文書等を撮影したドキュメント画像も多く含まれるようになっています。また、思い出を残す写真とは異なり、ドキュメント画像はメモ代わりに撮影され、一定期間の後には削除することになることが多いです。
Googleフォトなどのクラウド写真サービスを用いれば、ドキュメント画像を分類することができますが、そういったクラウドサービスを介さずとも画像を分類できたら便利ではないかと考え、今回AIによる画像認識技術を用いてそれらを分類するアプリを作成することとしました。
単純明快な問題設定ですので、今回は2クラス分類と多クラス分類を行い、手法の違いもおさらいします。
作成したプログラム①2クラス分類
まず、一般画像とドキュメント画像の2種類を区別する、2クラス分類(二値分類)のアプリケーションを作成しました。
実装内容の詳細は以下の記事を参照ください。
2クラス分類:写真画像とドキュメント画像を分類するAIアプリ
作成したプログラム②多クラス分類
次に、前項の2クラス分類プログラムをもとに、区別対象としてアート画像を追加し、多クラス分類(三値分類)を行うアプリケーションを作成しました。
2クラスと3クラス以上の多クラスでは、使用する活性化関数や損失関数に差異があるため、それらの違いをおさらいするために別々のアプリケーションを成果物として設定しました。
実装内容の詳細は以下の記事を参照ください。
多クラス分類:写真画像とドキュメント画像、アート画像の3クラスを分類するAIアプリ
学習モデルを活用したプログラム例
前項の2クラス分類モデルをもとに、任意のフォルダからドキュメント画像を別のフォルダに移動するプログラムを作成しました。
対象フォルダをソース内で指定し、ローカルでPythonを実行する簡易的な作りですが、画像フォルダを整理するのに使うことができます。
実装内容の詳細は以下の記事を参照ください。
フォルダからドキュメント画像を移動する参考プログラム
結果概要
2クラス分類、多クラス分類ともに、材料となるデータセット量や学習量において低コストで高い学習効率を実現しました。これは、学習対象である画像の種類間の差異が際立っていたことが要因と思われます。
それでも、モデル作成時にはパラメータ間違いなどで精度が上がらないことはありました。そういった場合に、読み込む画像枚数を増やしたり、学習回数を増やしたりして検証することもあったので、あらかじめ十分な量の学習材料(画像枚数)を用意できていたのはよかったです。
今後の活用
今回はシンプルな題材で、2クラス分類と多クラス分類のモデルを作成することができました。この基本的な方法を応用すれば、さまざまな画像を用いた分類に対応できると思います。
例えば、人の目には明らかな違いが分かるものの、分類したい対象資源が大量にある場合、このような機械学習による分類を用いれば、作業時間を大幅に減らすことができます。
一方で、人の目にも判別しがたいような微細な違いを機械学習で分類するためには、そのための適切・適量の材料(データセット)や学習精度を向上させるためのパラメータ設定が必要になるでしょう。
おわりに
AIを用いた画像認識技術は未知の世界でしたが、基本的な方法を習得すれば、利用する側が頭を悩ませて難しいパラメータ設定などをせずとも利用することができることを、実践を通して実感することができました。もちろん、より深い領域に踏み込もうと思えばさらに複雑な世界が広がっていることでしょうが、まずは入り口に立つことができたと思います。
-
CNN=Convolutional Neural Network(畳み込みニューラルネットワーク) ↩