【画像処理】ニューラルネットワークやディープラーニングって何?
mocal designの佐藤です。
あけましておめでとうございます。本年もよろしくお願いいたします。
これまでブログ記事のなかで機械学習を用いたデータ分析(クラスタリング、分類、回帰、時系列分析)について説明してまいりました。
本日はニューラルネットワークやディープラーニングについて説明したいと思います。
WEB制作会社はもちろん、私の本業である中古ブランド買取業界でもディープラーニングの画像処理を用いたAI真贋鑑定なるものを導入する企業が増えてきました。
ニューラルネットワークやディープラーニングはこれまで説明してきた機械学習とは何が違うのか?
本日はそのメカニズムを簡単に説明していきたいと思います。
まず、ニューラルネットワークやディープラーニングを説明するにあたり、画像認識の初歩的な知識が必要となります。
本題に入る前に画像データとは何なのかというお話をしましょう。
画像認識の初歩的な知識
横方向に1280ピクセル、縦方向に720ピクセル。
ここにHD(ハイビジョン)と呼ばれる画像のサイズがあります。
これは横方向に1280のマス、縦方向に720のマスがあるということです。
ですので、画素の次元で言うと1280x720=合計921,600の画素があるということになります。
実はこの約92万の画素には、1つ1つ情報が入っています。
それぞれ0から255(上限)という数字が入っており、0は無色、数字が大きくなるほど色が濃くなります。
HDサイズの画像処理をするとなると92万ものデータを同時に処理しなければなりません。
そのため、これまでお伝えした従来のシンプルな機械学習では適応できませんという話になるのです。
しかも、HDサイズの画像処理を行うためには92万のデータが揃えば良いのかというとそれだけではありません。
カラーの画像であれば色はRGBという考え方があります。
Rはレッドだけが格納された層。
Gはグリーンだけが格納された層。
Bはブルーだけが格納された層。
その層3枚のつながりがカラー画像なのです。
RGBにもそれぞれ0から255までのパラメータが存在します。
この図をご覧ください。
Rの数値が255なら赤。
Rの数値が255、Gが0、Bが255なら紫色が出力されます。
HDサイズのカラー画像には921,600画素×3枚=約276万のデータがはいっているということになります。
ですので、276万の回帰係数を学習するために、276万のデータ処理が必要なのはおわかりいただけましたでしょうか。
そこで登場したのがニューラルネットワークという考え方です。
ニューラルネットワークはできるだけその問題を解決しようという思いの元、作られたモデルです。
ニューラルネットワークはCNN (Convolutional Neural Network) とも呼ばれます。
また別名、畳み込みニューラルネットワークとも呼ばれます。
ニューラルネットワークの構成は大きく3種類に分けられます。
①畳み込み
②プーリング
③ソフトマックス
本日はこの3つの処理とニューラルネットワークの学習について説明していきたいと思います。
畳み込み
みなさんはスマホアプリや画像編集ソフトで画像にフィルタをかけたことはありますか?
画像に対してフィルタをかければ、ぼやけたり、カラー画像をグレースケールにしたり、その他にも様々な処理ができますよね。
ニューラルネットワークを語るうえでフィルタをかける作業は外せない重要なポイントです。
ここではフィルタをかける処理のことを畳み込みと言います。
それではフィルタをどのようにかけるか具体的に説明しましょう。
フィルタは画像全部に渡って左上から右にかけます。
一列掛け終わったら、一個下がってまた左から右にという操作をZの文字をなぞるようにかけていきます。
フィルタをかけるとどのような効果が得られるでしょう?
皆さんのご存じの通り、フィルタをかけると、フィルタ効果を得た新しい変換画像が生成されます。
説明の通りフィルタには様々な種類があり、フィルタを変えることにより、出てくる処理結果の内容が変わってきます。
つまりフィルタというものは、画像にどんな処理をするかということを定義したものだと思ってください。
この畳み込みという作業では、画像上の枠や濃淡の境目を強調するフィルタをよく使います。
その境目を強調するフィルタを使うと、画像認識で重要な「エッジを抽出する」ことができます。
これが畳み込みの原理で、フィルタを何度もかけるという操作がニューラルネットワークという操作の挙動となります。
ポイント 畳み込みはエッジ、特徴を抽出する処理のこと。
次に具体的にフィルタを使って何をしているかということも説明しましょう。
簡単な例を説明してみましょう。
ニューラルネットワークの基礎的な実験を紹介します。
サインペンで書いた0から9までの手書きの数字を判別するというものがあります。
手書きの1という数字を入力したら「答えは1です。1の確率は89%です」と返すモデルです。
画像という2次元の情報から答えを導くこのモデルにフィルタをかけていきます。
まず、手書きの元画像を入力します。
それとは別に、縦方向の中央に111という数字が並んでいるフィルタがあるとしましょう。
(実際のフィルタの大きさも3マス×3マスというものが多いです。)
図の場所にフィルタをかけると0、0、0、255、255、255、255、255、255という数字が表れます。
つまり「0の部分には色がついていない。」
「255は色がついている」ということを、抽出したことになります。
この縦方向のフィルタは縦方向のエッジを抽出するのに向いているフィルタになります。
今回は数字の1を読み取るのに縦方向のフィルタを使いました。
様々な画像を認識するには縦方向だけでなく、横方向や斜め方向のフィルタを持っておくと良いと思いませんか?
2という数字を認識するためには斜め方向のエッジを抽出するのに向いているフィルタがあると便利そうです。
横方向に111というフィルタ、横方向に111というフィルタ、斜め方向に111というフィルタ。
ニューラルネットワークでは様々な種類のフィルタをたくさん持つことができます。
重要なのはフィルタの数を増やせば増やすほど、画像から色んな特徴を抽出することができるということです。
つぎに畳み込みと同じく重要な概念としてプーリングという操作があるので、それを紹介しましょう。
プーリング
プーリングも先ほどのようなフィルタを使います。
畳み込みと同じように3×3のフィルタを用いて、左上からZの文字を書くように特徴を抽出します。
畳み込みと違うのは、プーリングではそのなかでフィルタが0~225のパラメータの最大値を取ってくるという処理をするという点です。
最大値をとって新しい変換画像を生成する作業がプーリングです。
3×3のフィルタを使って画像の最大値をとるため、フィルタをかけた変換画像は元画像よりも画素数が小さくなります。
ポイント/プーリングは画像から強い信号を取り出す処理。
次にソフトマックスを説明しましょう。
ソフトマックス
ソフトマックスは信号を確率値に変換する処理です。
これまで同様、手書きの数字を入力して「正解は何ですか」と整数の値を返してもらうケースで話をしましょう。
ここでのソフトマックスはフィルタをかけて変化させた画像に対して、0から9の整数にするという操作のことです。
実際の画像処理は畳み込み→プーリング→ソフトマックスのような順番で行われますが、具体的にどのような流れになるか?ということを説明しましょう。
まずは画像を入力します。
元の画像にフィルタをかけて(畳み込み、プーリング)新たな変換画像を生みます。
出来上がった変換画像に再度繰り返し別のフィルタをかけて、新たな変換画像を作ります。
先ほども説明した通り、畳み込みやプーリングを繰り返すと画像が小さくなります。
最初は1280x720のHDデータでも畳み込みとプーリングを繰り返せば、最終的には8×8のサイズになります。
8×8画素ですので=64個の特徴が抽出されるということです。
さらにこの64個に全結合(次元集約)という操作をして10個の特徴に絞ります。
すると、最終的にその10個がそれぞれ数値を吐くようになっています。
その値が何かというと、
・0から9までの数値のなかから入力した手書きの値が何であるか?
・また、その確率は何%かという数値です。
つまり、正解を当てる作業、確率を導く作業がソフトマックスです。
もう一度言いますが、ソフトマックスは信号を確率値に変換する処理のことです。
ニューラルネットワークは何をしているかというとどんなフィルタを使えば正解と確率の誤差を埋められるかという学習をしているのです。
入力した手書きの数字が「80%の確率で0という文字」だと判断するとしましょう。
その場合、20%の誤差(推定ミス)が発生したといえます。
20%の誤差をなくすようなフィルタを学習しなさいというのがCNNの学習です。
次に、正解値の0という文字をどう当てているのかということを説明しましょう。
正解値はArgMaxという関数を使って導きだします。
我々人間は0の可能性が80%という確率値が知りたいのではなく、一番確率値が高い答えは0なのかどうかを知りたいのです。
ArgMaxの構造はシンプルで一番高い確率を出した答えは何?と質問したのに対して、最大値をとるのは0ですよと返してくれるのです。
それでは誤差はどのように学習するのでしょうか。
ニューラルネットワークは誤差逆伝播(バックプロパゲーション)という学習をしています。
一般的に情報は入力→出力の方法で伝達されますが、誤差を出した場合に望ましい出力との誤差を入力方面に戻してあげる事により、最終的に正しい出力が得られるようにしているのです。
ニューラルネットワークの学習
図をご覧ください。これがニューラルネットワークの簡単な流れです。
畳み込みやプーリングなどを繰り返して、最後にソフトマックスをかけて数値で判断します。
ここでは1回目の操作のことを1stレイヤーと呼びます。
2回目の操作のことを2ndレイヤーと呼びます。
ニューラルネットワークのなかでたくさんのレイヤーが使われているものをディープラーニングといいます。
ディープラーニングとはディープなレイヤーを持っているニューラルネットワークのことなのです。
ちなみにレイヤーが1つや2つだけなら、ディープラーニングとは呼びません。
実際には1つのレイヤーで128や256枚以上のフィルタを用います。
そのレイヤーを何重にも重ねたものがディープラーニングです。
レイヤーを増やし、フィルタも増やせば特徴量が大きくなるので、画像から様々な特徴を抽出することができます。
つまり、ディープラーニングはこれまでの機械学習と比べて、モデルの性能が高いと言い換えることもできますね。
開発にあたり、CNNやディープラーニングは検討しなければならない項目が非常に多いです。
なぜならいくつフィルタを使うか、レイヤーを使うかは開発者が自由に決めることができるからです。
実際の開発現場では今回はこんな畳み込みをしよう。
今回はプーリングを何回しよう。
そのあともう一回畳み込みをしよう。
というように、ネットワークの構造を自分で定義して作ります。
本日はニューラルネットワークやディープラーニングについて簡単に説明いたしました。
おわかりいただけましたでしょうか?
当社では本日説明した画像処理を
・PyTorch、TorchVision(物体分類用のモデルを作成する際に利用)などを用いて行います。
「当社(当店)もニューラルネットワークやディープラーニングに興味がある」
「話だけ聞いてみたい」
という方はビデオサービスZOOMを使って20分の無料コンサルをすることができますので、是非ホームページのCONTACTページからお問い合わせください
(通常コンサルは30分5,000円です)。
小平でホームページ制作、経営コンサルティング
mocal design 佐藤 大樹
東京都小平市南町1-27-10
✉ info@ofb.jp