2021年令和3年 画像 機械学習 cnn
Sequentialクラスのpredict関数により、入力した画像の各クラスごとのスコアを算出し、画像分類を行います。
一般的な機械学習では、特徴量と分類器は手動で選択されるのに対して、ディープラーニングでは特徴量の抽出とモデリングは自動的に行われます。
一般的にディープラーニング開発を行う場合、大量の学習用データが必要となりますが、Kerasには、いくつかの有名なデータセットをダウンロードしてプログラムに読み込むための機能があります。本記事で使用するサンプルプログラムでは、その機能を利用して画像分類用の既存データセットであるCIFAR10を使用します。
ニューラルネットワークではこの情報伝達プロセスをエッジという部分で”重み”という機械的な方法で模倣します。
これまでの技術では現実世界(環境)から得られるパターン(特徴)認識を機械に学習させることが非常に難しかったため、AIを生かした技術はなかなか発展しませんでした。
keras.modelsモジュールのload_model関数を使用し、cifar10_cnn.pyで作成、保存した学習済みモデルのニューラルネットワーク構造と重みを読み込みます。
ディープラーニングは機械学習のひとつの特殊な形と言えるものです。通常の機械学習のワークフローは、画像からマニュアルで特徴量を抽出することからスタートします。そして、抽出した特徴量を使って画像内の物体を分類するモデルを作成します。一方、ディープラーニングでは、特徴量は画像から自動的に抽出されます。また、ディープラーニングは「エンドツーエンドな学習」を実行できます。つまり、ネットワークは生の画像データと、分類など処理すべきタスクを与えられ、自動的にその処理方法を学習していきます。
シカの画像を分類してみたところ、シカの特徴である角がないためか、馬と誤判定されました。スコアを見ると、次点でシカ、その次は犬と予測されたことがわかります。
この分野で重要なのは、画像の特徴をどのように取り込むかです。これまでのニューラルネットワークでは画像処理の際に多くの画像特徴情報を失っていましたが、CNNによって画像をそのまま2次元で処理できる様になりました。
本記事では、解凍したexamplesフォルダの下の、cifar10_cnn.pyという名前のソースコードを使用して画像分類を行います。
連載の最終回となる今回は、Keras公式のサンプルプログラムを実行してディープラーニングによる画像分類を行います。
cifar10_cnn.pyは、画像をairplaneやautomobileなどの10クラスに分類(正確には、それぞれのクラスに該当しそうか、程度を表すスコアを計算)するCNNモデルを学習、評価するサンプルプログラムです。
本記事では、サンプルプログラムのソースコードを用いて、画像分類の処理の流れについても説明を行います。
ダウンロードしたexamplesフォルダには、今回使用したcifar10_cnn.py以外にも多くのサンプルコードがあります。例えば、cifar10_resnet.pyでは、Modelクラスを使ってより複雑なニューラルネットワークを定義しています。この記事とこれらのサンプルコードを参考に、Kerasの実装への理解を深め、ディープラーニングエンジニアの第一歩を踏み出してみましょう。
ボードゲームで最も難しいと言われている囲碁には約10の360乗通りという天文学数的な組み合わせが考えられるため、人間最強の棋士に勝つには今までの機械学習方法では到底不可能でした。