使用 Faster R-CNN 的区域网络建议

使用 PyTorch 进行图像深度学习

Michal Oleszak

Machine Learning Engineer

区域与锚框

  • 区域(Region):图像中较小的、按视觉特征分组且可能包含目标的区域

region proposals

使用 PyTorch 进行图像深度学习

区域与锚框

  • 区域(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 进行图像深度学习

Passons à la pratique !

使用 PyTorch 进行图像深度学习

Preparing Video For Download...