Faster R-CNN による領域提案ネットワーク

PyTorch で学ぶ画像向け Deep Learning

Michal Oleszak

Machine Learning Engineer

領域とアンカーボックス

  • Region(領域):画像内で注目物体を含む可能性のある,小さな範囲。視覚的特徴でグループ化

region proposals

PyTorch で学ぶ画像向け Deep Learning

領域とアンカーボックス

  • Region(領域):画像内で注目物体を含む可能性のある,小さな範囲

region proposals

  • アンカーボックス:サイズや形があらかじめ定義されたバウンディングボックスのテンプレート
PyTorch で学ぶ画像向け Deep Learning

Faster R-CNN モデル

Faster R-CNN:R-CNN の改良版

rcnn layers

  • バックボーン(畳み込み層)
1 Edward Raff. 2022. Inside Deep Learning.
PyTorch で学ぶ画像向け Deep Learning

Faster R-CNN モデル

Faster R-CNN:R-CNN の改良版 rcnn layers

  • バックボーン(畳み込み層)
  • バウンディングボックス提案用の RPN(領域提案ネットワーク)
1 Edward Raff. 2022. Inside Deep Learning.
PyTorch で学ぶ画像向け Deep Learning

Faster R-CNN モデル

Faster R-CNN:R-CNN の改良版

rcnn layers

  • 畳み込み層(バックボーン):特徴マップ
  • 領域提案ネットワーク(RPN):バウンディングボックス提案
  • 予測用の分類器と回帰器
1 Edward Raff. 2022. Inside Deep Learning.
PyTorch で学ぶ画像向け Deep Learning

領域提案ネットワーク(RPN)

region proposal network architecture

PyTorch で学ぶ画像向け Deep Learning

領域提案ネットワーク(RPN)

region proposal network architecture

  • アンカー生成器:
    • さまざまなサイズと縦横比のアンカーボックスを生成
PyTorch で学ぶ画像向け Deep Learning

領域提案ネットワーク(RPN)

region proposal network architecture

  • アンカー生成器:
    • さまざまなサイズと縦横比のアンカーボックスを生成
  • 分類器と回帰器:
    • ボックスに物体があるかを判定し,座標を出力
PyTorch で学ぶ画像向け Deep Learning

領域提案ネットワーク(RPN)

region proposal network architecture

  • アンカー生成器:
    • さまざまなサイズと縦横比のアンカーボックスを生成
  • 分類器と回帰器:
    • ボックスに物体があるかを判定し,座標を出力
  • RoI プーリング:
    • RPN 提案を全結合層用に固定サイズへリサイズ
PyTorch で学ぶ画像向け Deep Learning

PyTorch による RPN

from torchvision.models.detection.rpn import AnchorGenerator


anchor_generator = AnchorGenerator( sizes=((32, 64, 128),), aspect_ratios=((0.5, 1.0, 2.0),), )
from torchvision.ops import MultiScaleRoIAlign


roi_pooler = MultiScaleRoIAlign( featmap_names=["0"], output_size=7, sampling_ratio=2, )
PyTorch で学ぶ画像向け Deep Learning

Fast R-CNN の損失関数

  • RPN の分類損失:
    • 領域に物体があるか否か
    • バイナリ交差エントロピー
    • rpn_cls_criterion = nn.BCEWithLogitsLoss()

 

  • RPN のボックス回帰損失:
    • バウンディングボックス座標
    • 二乗誤差(MSE)
    • rpn_reg_criterion = nn.MSELoss()
  • R-CNN の分類損失:
    • 複数クラス分類
    • 交差エントロピー
    • rcnn_cls_criterion = nn.CrossEntropyLoss()

 

  • R-CNN のボックス回帰損失:
    • バウンディングボックス座標
    • 二乗誤差(MSE)
    • rcnn_reg_criterion = nn.MSELoss()
PyTorch で学ぶ画像向け Deep Learning

PyTorch による Faster R-CNN

from torchvision.models.detection import FasterRCNN


backbone = torchvision.models.mobilenet_v2(weights="DEFAULT").features
backbone.out_channels = 1280
model = FasterRCNN( backbone=backbone, num_classes=num_classes, rpn_anchor_generator=anchor_generator, box_roi_pool=roi_pooler, )
PyTorch で学ぶ画像向け Deep Learning

PyTorch による Faster R-CNN

事前学習済み Faster R-CNN を読み込む

from torchvision.models.detection.faster_rcnn import FastRCNNPredictor

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(weights="DEFAULT")

クラス数と分類器の入力サイズを定義

num_classes = 2

in_features = model.roi_heads.box_predictor.cls_score.in_features

必要なクラス数の分類器に置き換える

model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)
PyTorch で学ぶ画像向け Deep Learning

Laten we oefenen!

PyTorch で学ぶ画像向け Deep Learning

Preparing Video For Download...