以 Faster R-CNN 產生區域候選網路

使用 PyTorch 進行影像深度學習

Michal Oleszak

Machine Learning Engineer

區域與錨框(anchor box)

  • Region:影像中較小的區域,依視覺特徵分組,可能包含目標物件

region proposals

使用 PyTorch 進行影像深度學習

區域與錨框(anchor box)

  • Region:影像中較小的區域,依視覺特徵分組,可能包含目標物件

region proposals

  • Anchor box:不同大小與長寬比的預先定義邊界框範本
使用 PyTorch 進行影像深度學習

Faster R-CNN 模型

Faster R-CNN:R-CNN 的進階版本

rcnn layers

  • 主幹(卷積層)
1 Edward Raff。2022。Inside Deep Learning。
使用 PyTorch 進行影像深度學習

Faster R-CNN 模型

Faster R-CNN:R-CNN 的進階版本 rcnn layers

  • 主幹(卷積層)
  • 區域提議網路(RPN),用於產生邊界框候選
1 Edward Raff。2022。Inside Deep Learning。
使用 PyTorch 進行影像深度學習

Faster R-CNN 模型

Faster R-CNN:R-CNN 的進階版本

rcnn layers

  • 卷積層(主幹):產生特徵圖
  • 區域提議網路(RPN):產生邊界框候選
  • 分類器與回歸器:輸出最終預測
1 Edward Raff。2022。Inside Deep Learning。
使用 PyTorch 進行影像深度學習

區域提議網路(RPN)

region proposal network architecture

使用 PyTorch 進行影像深度學習

區域提議網路(RPN)

region proposal network architecture

  • 錨框產生器:
    • 產生不同大小與長寬比的一組錨框
使用 PyTorch 進行影像深度學習

區域提議網路(RPN)

region proposal network architecture

  • 錨框產生器:
    • 產生不同大小與長寬比的一組錨框
  • 分類器與回歸器:
    • 預測該框是否含物件,並給出座標
使用 PyTorch 進行影像深度學習

區域提議網路(RPN)

region proposal network architecture

  • 錨框產生器:
    • 產生不同大小與長寬比的一組錨框
  • 分類器與回歸器:
    • 預測該框是否含物件,並給出座標
  • 感興趣區域(RoI)池化:
    • 將 RPN 提議調整為固定大小,以供全連接層使用
使用 PyTorch 進行影像深度學習

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 進行影像深度學習

Fast R-CNN 損失函式

  • RPN 分類損失:
    • 區域是否含物件
    • 二元交叉熵
    • rpn_cls_criterion = nn.BCEWithLogitsLoss()

 

  • RPN 邊框回歸損失:
    • 邊界框座標
    • 均方誤差
    • rpn_reg_criterion = nn.MSELoss()
  • R-CNN 分類損失:
    • 多個物件類別
    • 交叉熵
    • rcnn_cls_criterion = nn.CrossEntropyLoss()

 

  • R-CNN 邊框回歸損失:
    • 邊界框座標
    • 均方誤差
    • rcnn_reg_criterion = nn.MSELoss()
使用 PyTorch 進行影像深度學習

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 進行影像深度學習

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 進行影像深度學習

一起來練習吧!

使用 PyTorch 進行影像深度學習

Preparing Video For Download...