cedro-blog

MASK R-CNNで、画像から物体を検出し、形を推定する

1.はじめに

 画像の何処に何が写っているかを推定することを物体検出と言います。今回は、これに加えてそれがどんな形をしているかも推定(セグメンテーション)する、Mask R-CNNをご紹介します。

2.Mask R-CNNとは?

 Mask R-CNNは、Faster R-CNNの拡張版なので、まずFaster R-CNNから説明します。

  Faster R-CNNは、CNNを用いて物体の候補領域を抽出し、領域位置とクラスの確率を同時に推定するモデルです。つまり、物体にバウンディングボックスを掛け、どのクラスに属するかを出力します。

  Mask R-CNNではこれに加えて、バウンディングボックス内のピクセル単位でクラス分類を行うモデルです。つまり、物体の形も推定するわけです。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、Githubからのコードのコピーや必要なライブラリーのインストールなどセットアップを行います。詳細は、Google Colab のノートブックを参照下さい。

 次に、下記のコードで、ライブラリーやモデルのインポートと初期設定を行います。

 36行目の IMAGE_DIR = os.path.join(ROOT_DIR, “images”) で物体検知を行う対象ファイルのフォルダーを指定しています。この場合は、Mask_RCNN/images を指定していることになります。

 そして、下記のコードで、学習済みの重みを読み込んで、物体検出を行います。クラス分類は「the teddy bear class」と呼ばれるもので、81種類の物体についてクラス分類を行います。

 これはパフィームのビデオです。パフィームの3人はしっかり検出(全て確率100%)されています。コスチュームの形状の関係か、「かしゆか」のスカートがハンドバックと誤検出されていますが、確率は78.1%と低いです。

 これも、パフィームの3人はしっかり検出(全て確率100%)され、壁に埋め込んだTVも検出されています。なぜか「のっち」の左腕が、野球のバットと誤検出されていますが、確率は74.5%と低いです。

 スケートボードやパラソルなど、クラスに登録してある様々なものが検出されています。

 では、また。

(オリジナル)https://github.com/matterport/Mask_RCNN

(Twitter投稿)

動画の途中のフレームにMask R-CNNを掛けたものを投稿しました。

新たな動画バージョンをTwitterへ投稿しました。