どうも、カタミチです。
さて今日は、画像認識の進歩の流れの紹介ということになります。早速見てみましょう〜
画像認識タスク
画像認識タスクとして開催されているILSVRCについては何度も出てきましたね。2012年にAlexNetが従来手法の精度を圧倒し、ディープラーニングに基づくモデルとして初めて優勝しました。
2014年には、Inceptionモジュールを積層したGoogLeNetが優勝。ネットワークの層数が増えているため、ネットワークの途中に認識結果を出力する層を追加し、学習時に誤差を逆伝播する補助的な機構を導入しています。
また、同年、VGGというネットワーク構造の設計を単純化した手法も考案されています。
2015年には、超多層でも学習がうまくいくように考えられたSkip connectionを導入したResNetが優勝。この時点でエラー率はおよそ5%で、人間の識別精度を超えてきています。ただ、これで「人間の眼の代わりになる!」というわけではありません。ILSVRGではあくまで1000クラスの識別対象の中でどれか?を識別してるに過ぎないからです。なるほど、かなり限定された環境下の話って事ですね。それでも有用であることに間違いはありません。
以降、ResNetのカーネル数を増やしたWide ResNetや、Skip Connectionを工夫したDenseNetなどの派生モデルが登場しています。
2017年には、畳み込み層が出力した特徴マップに重み付けするAttention機構を導入した、Squeeze-and-Excitation Networks(SENet)が優勝。このAttention機構は様々なモデルに導入できる汎用的なアイデアであったため、以降の研究では様々なところで応用されています。
とりあえず、のちのち勉強する用に、モデルの名前だけ表にしておきますかねー。
参考にしてる書籍の第1版が2018年という事を考えると、さらに数年で年表が伸びている事は容易に想像つきますね。2022年の「現在」との差分を埋めていかないといけないですねー。
物体検出タスク
画像認識タスクは、物体の名称を出力するタスクでしたが、物体検出タスクは、入力画像に写る物体クラスの識別と、その物体の位置を特定するタスクです。この2つのタスクは別のタスクとして考えられるものなんですね。なるほど。
物体検出には、大まかな物体の位置を特定したあと、その物体クラスを識別する2段階モデルと、位置の特定とクラス識別を同時に行う1段階モデルがあります。
2段階モデルには、R-CNN、およびその後継モデルのFPN。1段階モデルにはYOLOとその後継モデルのSSDがあります。
R-CNNは、画像から物体候補領域をSelective Searchという方法でセグメンテーションし、この領域を一定の画像サイズにリサイズ後、CNNに出力します。最終判定にはサポートベクターマシン(唐突にここで出てくるのかー)によりクラス識別を行います。その後、R-CNNを高速化させた、Fast R-CNNやFaster R-CNNが登場します。…ネーミング、そのまんまやな(ふむ)
YOLOは、出力層を工夫して入力画像の各位置における物体領域らしさと矩形領域を直接出力する仕組みです。この「各位置」は、入力画像の画素単位ではなく、グリッドに分割した領域単位となっています。
SSDは、CNNの途中の特徴マップからYOLOのように領域単位で物体らしさと矩形領域を出力します。デフォルトボックスという矩形領域のテンプレートのようなパターンに対するズレを矩形領域の情報として出力する工夫も導入されているようです。
…うん、この節もやはり手強いですね。とりあえず、2段階モデルと1段階モデルがあって、どちらも研究がなされているということは分かりました。
セグメンテーションタスク
画像認識、物体識別ときて、次はこれ。画像の画素ごとに識別を行うタスクです。画像全体を対象とするセマンティックセグメンテーションと、物体検出した領域を対象とするインスタンスセグメンテーションがあります。後者は、物体識別の後続タスクで行う感じですかね。集団の歩行者一人ひとりを分離するのに使ったりするようです。前者は…何に使うんだろう?(汗)
個々の物体をそれぞれ分離しつつ、道路や建物などはひとまとめにするパノプティックセグメンテーションもあります。
CNNをセマンティックセグメンテーションタスクに利用した方法にFCNがあります。FCNは、全結合層を用いず、畳み込み層だけで構成するモデルを採用しています。
畳み込み層とプーリング層を繰り返し積層することで小さくなった特徴マップを徐々に拡大する構造を採用した方法にSegNetがあります。特徴マップを徐々に小さくしていく部分をエンコーダ、徐々に大きくしていく部分をデコーダと言います。エンコーダとかデコーダという言葉がまた出てきましたね。いろんな場面で登場するのでとりあえず出てくる都度覚えていくしかないですかねー。また、派生としてU-Netというモデルもあって、これはX線画像の医療画像診断に用いられているようです。具体例が出てくると親近感がわきますね。
さらに、エンコーダとデコーダの間にPyramid Pooling Moduleという複数の解像度で特徴を捉えるモジュールを追加したPSPNetというモデルもあります。
また、畳み込み演算をする位置を2画素ずつ空けて行う、Atrous convolutionを導入したモデルがDeepLabです。これに、エンコーダ・デコーダの構造や複数解像度の特徴を捉える機構を採用したモデルはDeepLabV3+と呼ばれています。(強そう)
ということで
画像認識、物体検出、セグメンテーションと、画像解析に関する3つのタスクと、それに関連するモデルが大量に出てきましたねー。果たしてこの中で今も現役で使われているのはどのくらいあるんですかねー。
いずれにせよ、やはり盛んな分野であることはヒシヒシと感じました。できればそれぞれちゃんと、理論も理解したいところですが果たして…。
ではまた。
勉強に使ってる書籍はこちら↓
深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版