MaskRCNN徹底解説:古典にして最強!物体検出からインスタンスセグメンテーションまで、ピクセル単位で捉える手法のすべて!
こんにちは、ゆずかきです。
ここからは、「Mask R-CNN」 という、物体検出タスクだけでなくインスタンスセグメンテーションをも実現する強力なフレームワークについて、一つの技術ブログ記事としてまとめてみたいと思います。
今回取り上げる「Mask R-CNN」は、Faster R-CNNを発展させて“各物体領域のピクセルごと”にマスクを生成し、高精度なインスタンスセグメンテーションを同時に行うという画期的な手法です。論文「Mask R-CNN」(Kaiming He ら, 2017) はすでに数年が経過しましたが、依然としてSOTA級の高い評価を得ており、様々な分野への応用も進んでいます。
それでは、論文の内容を一通り振り返りながら、できるだけ噛み砕いて説明していきましょう。
論文URL
👇
Mask R-CNN
§本記事の構成
- はじめに: Mask R-CNNとは?
- 論文の背景
- Mask R-CNNのアーキテクチャ概説:Faster R-CNNからの進化
- RoIAlignとピクセル単位の整合性:なぜ重要か?
- 学習ロス関数と出力設計:バイナリマスク vs マルチクラス
- 主要な実験結果:COCO & Cityscapes
- 応用: 人物キーポイント検出にも活かせる柔軟性
- まとめ & おわりに
インスタンスセグメンテーションの分野で、Mask R-CNNがどれほど強力で汎用的かを順を追って見ていきましょう。
§はじめに: Mask R-CNNとは?
論文の正式名称は、
Mask R-CNN
著者は、Kaiming He, Georgia Gkioxari, Piotr Dollár, Ross Girshick(Facebook AI Research)であり、arXivに2017年3月に投稿され、2018年1月に改訂版が掲載されています。
Mask R-CNNは、一言でいうと、Faster R-CNNに「マスク(領域分割)用のブランチ」を追加した 物体検出+インスタンスセグメンテーションのためのフレームワークです。
- Faster R-CNN が提案する2段階方式(RPN + RoIヘッド)を引き継ぎつつ、各領域のマスクをPixel-to-Pixelで予測 するための追加ブランチを持つ。
- 単にブランチを足しただけではなく、RoIAlign という新しい層(レイヤー)を導入して、ピクセル単位での座標のずれを解消 している。
- 結果として、高品質なセグメンテーションマスクと高精度なバウンディングボックス検出をマルチタスクで同時に実現可能。
「物体検出だけでなく、ピクセルごとの領域まで求めたい」という課題に対して、Mask R-CNNは現実的な速度と高精度を両立するソリューションとして、今なお多くの研究・実装のベースに採用されています。
§論文の背景
ディープラーニングの登場以前、物体検出とセグメンテーションは別々の文脈で研究されていました。
- 物体検出:DPM (Deformable Parts Model) などがあり、分類器をスライディングウィンドウ的に適用する流れ
- セマンティックセグメンテーション:ピクセル単位でクラス判別する流れ
その後、R-CNNファミリー (R-CNN → Fast R-CNN → Faster R-CNN) によってRegion Proposalを用いた物体検出が急速に進化し、SPPnetやFaster R-CNNで高速化と高精度化が大きく進みました。
一方、セグメンテーション分野ではFCN (Fully Convolutional Network) が登場し、画素単位でのクラス予測(セマンティックセグメンテーション)が主流に。
しかし、このセマンティックセグメンテーションは、あくまでもクラスごとにピクセルを塗り分けるだけで、“同じクラス内の別個のインスタンス” を区別できないという課題がありました。そこで、“インスタンス単位” の領域分割、いわゆるインスタンスセグメンテーションが盛り上がってきたわけです。
- インスタンスセグメンテーション=物体検出と画素単位のマスクを統合したもの
- 当時は複雑な多段プロセスが提案されていたり、領域候補をセマンティックに分割する方法(FCISなど)も考えられていた。
- しかし、高精度かつシンプルな実装で、Faster R-CNNのフレームワークを拡張した手法としてMask R-CNN が登場し、話題を集めた。
§Mask R-CNNのアーキテクチャ概説:Faster R-CNNからの進化
Mask R-CNNの構造は、Faster R-CNNの2ステージ構造を踏襲しつつ、追加でマスク予測ブランチを持っています。
- Stage 1: RPN(Region Proposal Network)
- 画像全体から物体がありそうな領域候補(bounding box)を数百個レベルで生成する。
- Stage 2: RoIヘッド(Fast R-CNN相当)
- RoIAlignを使って領域特徴を取り出し、分類(Which class?) と バウンディングボックス回帰 を実施。
- 並行してマスク予測ブランチを通し、各RoI領域をピクセル単位でセグメンテーションするマスクを生成。
具体的には、Faster R-CNNにはクラス分類とバウンディングボックス回帰用の出力が存在しますが、Mask R-CNNではさらに「RoIごとのマスク出力 (m×m)」を追加します。
- 損失関数は、[L = L_\mathrm{cls} + L_\mathrm{box} + L_\mathrm{mask}] のように定義され、マスク用の損失が加わります。
- バイナリマスク(クラスごとに独立したマスクを出す)を前提としており、各クラス間での競合は起こさない設計。
ここでキーポイントとなるのが、RoIAlign という仕組みです。
§RoIAlignとピクセル単位の整合性:なぜ重要か?
従来のFaster R-CNNやFast R-CNNでは、RoIPool という層が使われていました。
- RoIPoolは座標を量子化(四捨五入等)し、対応するピクセル領域をMax Poolingなどで集約して固定サイズに変換する。
- バウンディングボックス分類には有効だが、ピクセル単位の正確な位置合わせが崩れるという欠点があった(少しのズレは分類タスクにはさほど影響しないが、マスク生成には大きく影響する)。
RoIAlign は、
- 量子化を行わず、浮動小数点座標をそのまま扱う。
- バイリニア補間(bilinear interpolation)によって、より正確に該当する特徴マップの値をサンプリング。
- ピクセル単位での正確なアラインメントを実現。
これにより、マスクを描画する際のズレやギザギザ感を大幅に低減し、高精度なインスタンスセグメンテーションを可能にしています。
- 実験では、RoIAlignの導入だけでAPが3~5ポイント以上上昇するケースが見られ、特にIoUが高い(つまり厳密な位置評価)条件で顕著な改善が得られたとされています。
§学習ロス関数と出力設計:バイナリマスク vs マルチクラス
Mask R-CNNのマスクブランチは、FCN( Fully Convolutional Network )スタイルで構築され、m×m サイズの出力を得ます(論文では28×28など)。
バイナリマスクをクラス別に用意
- 例えばKクラスある場合、クラスごとに1チャンネルのバイナリマスクを出力し、合計Kチャンネルのマスクを得る。
- 学習時は「正解クラスkのマスクだけを損失に加える」方式で、マスクとクラス分類を分離。
- マスクの画素ごとに sigmoid(2値)を用いたバイナリクロスエントロピーを計算する。
これにより、「クラスは別途分類ブランチで決定し、マスクはあくまでバイナリ出力」 と割り切ることで、多クラスの相互競合を避けることができ、学習が安定かつ精度向上につながると論文は述べています。
RoIAlign後の空間サイズ
- RoIAlign でm×mの特徴マップを取り出し、それをCNN or 反転畳み込み(Deconv)でより高解像度(2倍など)にアップサンプリングしながらマスクを推定することが多い。
- こうした空間情報をそのまま利用するFCN構造が、マスクの品質向上に重要。
- 以前のR-CNN系では全結合 (fc層) でベクトル化しがちだったが、maskはピクセル構造を保つ必要があるため、FCN形式が有効。
§主要な実験結果:COCO & Cityscapes
Mask R-CNNは、MS COCO や Cityscapesなどの大規模データセットで評価されており、インスタンスセグメンテーションと物体検出の両面で高い性能を示しています。
COCOデータセット
- インスタンスセグメンテーション性能 (mask AP)
- ResNet-101 + FPN バックボーンで 35.7% (test-dev)
- より深いResNeXt-101を使うと ~37% 程度まで向上
- 同時期の先行手法 FCIS や MNC と比較して数ポイント高いAP。しかもシンプルな設計
- 物体検出性能 (box AP)
- Mask R-CNNのうち、maskブランチを無視して箱だけ見るとFaster R-CNN以上のAP
- マルチタスク学習によりバウンディングボックスの精度も向上する(分類精度が向上するなどの効果)
- COCO 2016チャレンジ優勝モデルに匹敵または上回るレベル。
- 推論速度
- ResNet-101-FPNのケースで5fps (約200ms/image) 前後
- ResNet-50-FPNならさらに高速化可能
- 大規模学習でも1〜2日程度で収束し、比較的開発がしやすい。
Cityscapesデータセット
- 都市景観のシナリオ (自動運転など) 用に撮影された高解像度画像
- 人・車・トラック等が複数重なり合うシーンが多く、同一クラス内の重なりが大きいことが特徴
- Mask R-CNNを適用したところ、従来の特化手法より大幅な性能向上を示す(AP ~26.2% → ~32.0% など)
- データが少ないクラス(バス、トラックなど)には苦戦するが、COCO事前学習を活用することでパフォーマンス向上が得られる。
§応用: 人物キーポイント検出にも活かせる柔軟性
論文では、人物キーポイント検出(Human Pose Estimation) への応用例も紹介されています。
- 各キーポイントを“1ピクセルだけのマスク” として扱い、Mask R-CNNでK個のキーポイントをそれぞれKチャネルのバイナリマスクで予測するという発想。
- 実際にCOCO Keypoint データセットで評価し、当時のSOTAと同等またはそれ以上の性能を発揮した。
- さらに、バウンディングボックス検出、マスク生成、キーポイント検出をマルチタスクとして同時に行っても、高いAPを維持しながら推論速度5fps程度を実現。
この柔軟性( マスク出力を任意の概念的2D表現に拡張可能 )は、Mask R-CNNがさまざまな分野に応用される大きな要因の一つです。
§まとめ & おわりに
Mask R-CNN は、
- Faster R-CNN の2ステージ検出構造に 「マスクブランチ」 を追加するだけで、インスタンスセグメンテーションを同時に実現
- その際、RoIAlign によって ピクセル単位のアラインメント を確保することで、高品質なマスクを出力可能
- マスクはクラスごとのバイナリ出力 とし、分類ブランチと分離する設計が学習を安定化
結果、COCOやCityscapes などの大規模ベンチマークで、物体検出 (box AP) とマスク (mask AP) の両面でSOTA級性能を示しました。
- マルチタスク学習により、箱検出精度も向上する副次効果。
- Mask R-CNNフレームワーク上で、キーポイント検出などにも柔軟に拡張可能。
2017年の発表当初から現在に至るまで、Mask R-CNNはインスタンスセグメンテーションの定番フレームワークとして使われ続けています。細かい工夫(FPN、ResNeXt、Non-localなど)を組み合わせるとさらに精度が伸び、COCOチャレンジでも多数のトップチームが採用するなど、実装のベースラインとしても非常に優秀な存在となっています。
今後の展望としては、
- マスクブランチ をさらに高度化し、輪郭精度を向上させる取り組み
- Transformer系アーキテクチャ と組み合わせた研究(DETRの拡張版など)
- Video, 3Dへの応用、または異なる概念(ポーズ、パーツ、リッチな属性情報)をマスク出力に含める可能性
などが考えられます。Mask R-CNNが提唱したRoIAlign とマルチタスク学習のコンセプトは、今後も広く継承されていくでしょう。
🔑この記事のポイントまとめ
- Mask R-CNN:Faster R-CNNにマスクブランチを追加し、インスタンスセグメンテーションを同時に実現
- RoIAlign:従来のRoIPoolの座標量子化問題を解消し、ピクセル単位の正確な特徴抽出が可能
- バイナリマスク(クラス別):クラス分類は別ブランチが担当し、マスクはピクセル単位の2値出力をクラスごとに用意
- COCO, CityscapesでSOTA級性能:高速かつ高精度のため、今でもベースライン手法として広く利用
- 汎用性が高く、キーポイント検出や他の2D表現(ポーズ、領域属性など)へ容易に拡張可能
以上、Mask R-CNN の論文をかいつまんで解説しました。2017年発表の古典的な技術とはいえ、高速かつインスタンス単位での高精度領域検出という課題に対していまだに非常に有効な手段であり、多くのコンペティションやプロダクション実装でも利用されています。これからインスタンスセグメンテーションを学ぶ・実装する方は、ぜひ抑えておきたいフレームワークですね。
最後までお読みいただき、ありがとうございました!
§参考文献(論文リンク)
- Mask R-CNN: httpss://arxiv.org/abs/1703.06870
- GitHub – Matterport’s Mask R-CNN Implementation (Keras + TensorFlow): httpss://github.com/matterport/Mask_RCNN
- GitHub – PyTorch Implementation of Mask R-CNN: httpss://github.com/multimodallearning/pytorch-mask-rcnn
ディスカッション
コメント一覧
まだ、コメントがありません