AI(人工知能)による「画像認識」は、「ディープラーニング」の登場により、
人の認識レベルを超える性能を達成し、 大きく注目されています。
また、将棋や囲碁の分野でも人工知能は大きく能力を向上しており、人類のチャンピオンに勝利するなど、私たちを驚かせました。
一見別のものに見える、画像と将棋・囲碁のAIですが、
実は裏では、どちらも、画像認識の仕組みを活用しているんです。
どういうことかと言いますと、
将棋や囲碁のデータのように、画像データでない場合も、
画像データの形式に整形することで、画像認識のように扱うことができるんです。
すると、ディープラーニングを活用することで、
画像認識のように性能向上が期待できる、という例が示されています。
つまり現在では、画像データに関係する人工知能の応用は、
画像認識だけにとどまらず、
(将棋や囲碁のように、全く別の)様々な分野で加速している状況です。
そこで本記事では、
- 画像認識ってなに?
- 人工知能が画像認識する仕組みとは?
- 人工知能が分類する仕組みってどうなっているの?
といったことについて知りたいあなたのために、
AIの画像認識の仕組みについて、サクッとまとめました。
本記事の概要
- 1 AI(人工知能)による画像認識「分類」の仕組みについて、サクッと学びたいあなたはこちらをどうぞ
- 1.1 画像認識の「分類」とは?
- 1.2 画像認識の分類(識別)の「仕組み」とは
- 1.3 画像処理 1番最初の入門書
- 1.4 AI、IoTを成功に導く データ前処理の極意
- 1.5 はじめてのパターン認識
- 1.6 データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)
- 1.7 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 1.8 ゼロから作るDeep Learning ❷ ―自然言語処理編
- 1.9 直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
- 1.10 Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
- 1.11 わかりやすいパターン認識
- 1.12 続・わかりやすいパターン認識―教師なし学習入門―
- 1.13 統計学入門 (基礎統計学Ⅰ)
- 1.14 日本統計学会公式認定 統計検定 2級 公式問題集2015〜2017年
- 1.15 統計解析のはなし―データに語らせるテクニック (Best selected Business Books)
- 1.16 やさしいPython入門
- 1.17 Pythonで理解する統計解析の基礎 (PYTHON×MATH SERIES)
- 1.18 Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理
- 1.19 Pythonプロフェッショナルプログラミング 第3版
- 1.20 統計的学習の基礎 ―データマイニング・推論・予測―
- 1.21 SPSSによる実践統計分析
- 1.22 統計的パターン認識と判別分析 (シリーズ 情報科学における確率モデル 1)
- 1.23 人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質
- 1.24 AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
AI(人工知能)による画像認識「分類」の仕組みについて、サクッと学びたいあなたはこちらをどうぞ
画像認識は、いくつかの技術があります。
画像の領域を分割する「領域分割」や、
いくつかの画像同士の対応関係を発見する「マッチング」などがあります。
今回の記事では、画像認識で最も一般的な「分類」という技術に焦点をあててサクッとまとめたいと思います。
画像認識の「分類」とは?
画像認識には「分類」と呼ばれるタスクがあります。
これは、画像に含まれる要素が、
- どのカテゴリーになるのかを分類する
という技術になります。
具体的に説明しますね。
例えば、家族の写真を人間が見れば
画像内の要素を、人、ペット、背景、のように
カテゴリーに分けることができますよね。
これと同じことを人工知能にやらせるのが
画像認識の分類という技術になります。
(ちなみにカテゴリーは任意に決めることができます)
ここで、「カテゴリー」と「クラス」という言葉について整理しておきたいと思います。
「カテゴリー」は、人間が定義したような、
結果として私たちが欲しい分け方の表現になります。
「クラス」も物事の分け方を表した言葉なのですが、
以下の点でカテゴリーと違います。
画像認識では、入力としての画像情報をそのまま使うわけではありません。
画像データを処理して、変換した後に、認識を行うのが一般的です。
(詳しくは以下で説明するのですが)
画像認識では、入力を変換して得られた情報などについて、
似たものをひとまとまりにして扱う、といったことが有効になる場合があります。
そして、このひとまとまりにしたものそれぞれを「クラス」と呼びます。
以下に画像認識の簡単な流れと、クラス・カテゴリーの関係を示します。
入力:元の画像情報
↓
画像情報を変換し、クラスに分けて、分類しやすくする
↓
データを分類する
↓
出力:画像に関するクラス情報を得て、それをもとにカテゴリー情報に分ける
このように、カテゴリーは、最終的に私たちがほしい分類の仕方となります。
一方、クラスは、分類しやすいように便宜上使う、グループ分けした情報のそれぞれのもの
ということになります。
なぜ、わざわざ、クラスを考えるの?ってことですが、
カテゴリーに従って画像認識するよりも、
画像情報をいったん変換し、変換情報に素直に従ったクラスを使って分類したほうが、
画像認識アルゴリズムの都合上、分類性能がいい場合が多くなるからです。
なので、カテゴリーでなく、クラスで分類する、というわけなんです。
(他の理由としては、クラス情報は、人間が認識の意味を理解するのに役立つ補足的な情報を表現している場合があったりします)
最後に、
クラスに分類されて出てきた出力を、カテゴリーと対応させて答えにする、
といったことをして、ほしかったカテゴリーに基づいた分類が完了となります。
画像認識の分類(識別)の「仕組み」とは
画像認識で分類を行う仕組みには、以下の流れがあります。
- どう、分類するのか決める
- 入力の前処理をする
- 特徴を選択する
- 分類法を選択する
- 分類法を訓練・学習する
- 後処理を行う
- 性能を評価する
といった仕組みで分類が実行されます。
(ちなみに、多くの本では、この分類を「識別(しきべつ)」ともいったりします)
(1), どう、分類するのか決める
画像の認識をしたいわけなんですが、
まずは、どんな情報を使って、画像の内容を分類するかを決めます。
望む分類をするには、どんな情報を使えばいいのか、を考えるわけです。
例えば、画像中のデータを、
- 色の情報で分類(識別)する
- 形で分類(識別)する
- 大きさで分類(識別)する
のように、どんな情報を使えばうまくいきそうかを検討します。
分類に使う情報を軸にした散布図などでデータを可視化してみます。
入力画像データの分布を考えた時に、分けたいカテゴリーの分布が、
それぞれ(ある程度)分かれているものを、分類の軸として選ぶと後がラクになります。
(2), 前処理
前処理では、実際の分類を行う前に、データを使いやすいようにします。
例えば、画像にノイズがあれば、ノイズを軽減・除去する画像処理を行います。
他にも、下で行う特徴選択などで使いやすいように、
画像データを適切に変換しておく、といったことも行うことがあります。
このようにして整えられたデータを使って、分類の中心的なプロセスにうつっていきます。
(3), 特徴選択
「特徴選択」とは、分類を行うための「特徴」を決めることを言います。
この特徴を使って、次のプロセスで分類を行うことになります。
特徴選択に似た言葉として「特徴抽出」がありますが、
特徴抽出はデータになんらかの処理をして、特徴を取り出す・作り出すことをいいます。
そして、この抽出された特徴の中から、分類をうまくいかせるための、
最小限の特徴だけを選びます。この選択を「変数選択」といいます。
(「次元削減(じげんさくげん)」と言ったりもします)
なので、特徴選択では、特徴抽出と変数選択の2つを行うことになります。
この結果、分類をうまくいくような(最小限の)特徴を得るわけです。
なぜ、変数選択して、特徴の次元を減らすの?ってとこですが、
1つ目は、計算コストの問題です。
次元が大きいと、計算コストが大きくなります。
2つ目は、これから行う、分類や学習を、うまくいきやすくするためです。
3つ目は、(識別アルゴリズムにもよりますが)
変数を減らすと、計算が安定に行える効果がある場合もあります。
つまり、適切に特徴を選ぶことで、計算をラク(少なく・安定)にして、
分類の性能を上げることができる、ということになります。
ちなみに、変数選択(次元削減)では、主成分分析、正準分析、部分空間法などの多変量解析の手法も活躍します。
変数選択でも役立つ、多変量解析について学びたいあなたはこちらもどうぞ↓
(4), 分類法(識別器)の選択
分類に使う特徴が決まったら、どんな手法を使って分類するかを考えます。
分類手法は、識別器と呼ばれることが多いかもしれません。
識別器は、特徴を入力し、クラスを出力します。
具体的な識別器には、以下のような様々な手法があります。
- 統計的な識別法
- ファジィ集合を用いた識別法
- ニューラルネットワークを用いた識別法
- ディープラーニング(深層学習)
- (遺伝的アルゴリズム)
- ・・・
識別器を選ぶ基準としては、分類(識別)性能が良いものを選ぶのが一般的です。
加えて、計算コストやシステム構築のしやすさ、保守性などの観点も考えます。
結局、どの識別器を使うのがいいの?ってところですが、
データや特徴に応じて、それぞれ個別に良い識別器がある、という感じで、
すべての場合に最高の性能を示す識別器はない、と思ってもらっていいかと思います。
なので、試行錯誤しながら良い識別器を見つける、といったことが必要になります。
1つの識別器で分類して分類精度を確認する、
他の識別器でも同様に分類する、
それぞれの識別器の精度を比較する、
といったことをやるわけです。
ただし、ディープラーニングの登場によって、状況が変わっています。
現在では、画像認識においては、性能面において、ディープラーニングが一番良い可能性が高い、
というのは多くの方の共通認識のように思います。
なので、画像認識のタスクが絡む応用をお考えでしたら、
識別器の候補としてディープラーニングを考える、
というのは1つの選択肢だと思います。
(5), 訓練・学習
(4)で選択した分類手法が、手持ちのデータをよく識別するためには、
識別器を、データによって訓練(学習)する必要があります。
「訓練」というのは、手持ちのデータを使って、最も性能が良くなるように、識別器が持つパラメータの値を決めることになります。
また「学習」という言い方もあります。
識別器は、正解データを使うことで、その識別器の間違う度合いを表現することができます。
どういうことかというと、例えば、リンゴの画像があり、正解クラスは果物、というデータが、前もって与えられたとします。
正解が分かっているデータがあれば、
りんごの画像を入力して、識別器を使って出力された答えが、果物だったら正解ですし、車だったら間違い、といった感じに判断することができます。(このように正解が分かっているデータを使った学習を「教師あり学習」と呼びます)
私たちは100%正解を出す識別器が欲しいのですが、それを目指すのが「学習」になります。
識別器はパラメータを変えると、正解するものもあれば不正解のものも出力するのが一般的です。
そこで、正解・不正解の度合いを数式で表現した「関数」を導入します。
この関数は、「評価関数」もしくは「損失関数」と呼んだりします。
そして評価関数を導入することによって、カテゴリー分けというタスクについて、「評価関数の最小化」というタスクに置き換えて処理をすることが可能になります。
このように、分類問題を、関数の最小化問題として解く場合に、これを「学習」と呼んでいます。
データを使って、識別器のパラメータを訓練、もしくは、評価関数の最小化による学習を行うことで、
識別器が、分類の性能を高めることができます。
ただの識別器から、目的のために学習した識別器に変えるわけです。
このようにして学習した識別器を使うことで、
新しい画像を分類する、というのが画像認識の肝になります。
ちなみに、ディープラーニングでは、ニューラルネットワークを何層にも重ねて使うので、パラメータの数が非常に多くなります。
その結果、評価関数の最小化自体がむずかしかったり、
良い性能は出る反面、計算コストが膨大になる
といった、性能とコストがトレードオフの関係になっています。
ディープラーニングは、私たちが普段使うPCでは実行が難しいので、
まだまだ気軽に深層学習、というわけにはいかないかと思います。
しかし、例えば、クラウドコンピューティングを使うなどすると、
ディープラーニングを行うハードルを大きく下げることが可能となっています。
(6), 後処理
基本的には、(5)までで目的を達成できる場合も多くあります。
しかし、識別器の出力であるクラスが、私たちが分類して欲しいカテゴリーと直接一致していない場合には、
クラスとカテゴリーの対応関係を決める必要があります。
あるクラスに出力されたものはこのカテゴリー、といった感じで、クラスとカテゴリーを対応させていきます。
これによって、識別器から出てきたクラスの情報を、
最終的にほしかった、カテゴリーへの分類にすることができます。
(*), 性能評価
どんな識別器を使えばいいの?というのは、悩みの1つになることが多いかと思います。
どれを採用するかは、識別器の性能を評価することで決定します。
(前もってどれがいいとは、基本的にわからない、ということになります)
識別器の性能評価では、主に以下の2点が考えられます。
1つ目は、「分類の精度」です。
できるだけ多くの正解を出力できるものが良い、という基準です。
2つ目は、「計算コスト」です。
分類には、学習が必要ですが、学習自体の難易度や、学習に時間がかかる場合には、(実用上は)使えない場合もあり得ます。
ディープラーニングは精度が高くなる可能性が高い反面、
計算コストは大幅に増え、それだけコンピュータ資源を必要とします。
資金も多く必要になるのは想像しやすいかと思います。
ビジネスや研究として、画像認識を行う時には、
資金や時間スケジュールなど、画像認識以外の状況も加味した上で、
認識システムを構築する必要がある、ということになります。
おすすめの方法は、とりあえず手元のPCでもできる分類を試してみて、最大限良い性能の識別器を作ってみることです。
その性能で、あなたのビジネスや研究の目的を果たせるかどうかを判断します。
チャンピオンデータが必要でしたらディープラーニングだと思いますが、
実用上満足、という性能であれば、他の手法でもうまく活用することで、
十分な場合も多くあるのではないでしょうか。
また、手法によっては、なぜその分類がいいのか?についての「理解」に関係する情報をあたえてくれる手法もあります。
- 出力性能さえよければいい
- なぜいい性能が出たのか理由を知りたい
といった点も選んだ手法によって得られたり、得られなかったります。
このように、今のところ万能な手法はなさそうなので、
様々な手法の長所短所を把握しておき、
それらを試しながら、総合的に検討してみる、
というのは1つの考え方ではないかと思います。
というわけで、本記事では、AI(人工知能)による画像認識「分類」の仕組みについて、
6つの手順に分けてご紹介しました。
こちらもございます↓
画像処理 1番最初の入門書
ちなみにこちらでご紹介した1日分のシリーズは、Kindle Unlimitedの登録することで、
無料で読むことが可能です。
お試し登録(解約できて無料)をしてみてはいかがでしょうか(初回30日間無料で体験できます)↓
AI、IoTを成功に導く データ前処理の極意
はじめてのパターン認識
データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロから作るDeep Learning ❷ ―自然言語処理編
直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
わかりやすいパターン認識
続・わかりやすいパターン認識―教師なし学習入門―
統計学入門 (基礎統計学Ⅰ)
日本統計学会公式認定 統計検定 2級 公式問題集2015〜2017年
統計解析のはなし―データに語らせるテクニック (Best selected Business Books)
やさしいPython入門
Pythonで理解する統計解析の基礎 (PYTHON×MATH SERIES)
Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理
Pythonプロフェッショナルプログラミング 第3版
統計的学習の基礎 ―データマイニング・推論・予測―
SPSSによる実践統計分析
統計的パターン認識と判別分析 (シリーズ 情報科学における確率モデル 1)
人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質
AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
こちらもございます
『画像処理・画像認識に関連する記事の一覧(目次)はこちらです』
『「微分積分」を基礎からわかるようになりたいあなたにチェックしてほしい良書、8冊はこちらです』
『「強化学習」を学びたいあなたにチェックしてほしい良書、7冊はこちらです』