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へ投稿しました。
こちら動かそうとしていますが、
%tensorflow_version 1.x
にて
ValueError: Tensorflow 1 is unsupported in Colab.
と出てしまい、うまく動かないようです。
初歩的なつまづきだと思うのですが…
もいたさん
情報ありがとうございます。
Colabでtensorflow_1.xのサポートが終了したことによってエラーが発生しています。
なので、%tensorflow_version 1.x は削除して、最初にtensorflowと関連するライブラリをインストールすればOKです。
具体的には、下記のコードを最初に実行します。
!pip install tensorflow==1.13.1
!pip install tensorflow-gpu==1.13.1
!pip install keras==2.2.4
!pip install h5py==2.10.0
!pip install numpy==1.19.5
実行後必ず「ランタイムの再起動」を実行します。後は、そのままです(%tensorflow_version 1.x のみ削除)。
※!pip install h5py==2.10.0は現時点では不要ですが、将来を見越してです。
※numpyは様々なライブラリに使われているため、切り替えには「ランタイムの再起動」が必要です。