Region network proposals กับ Faster R-CNN

Deep Learning สำหรับภาพด้วย PyTorch

Michal Oleszak

Machine Learning Engineer

Region และ anchor box

  • Region: พื้นที่ส่วนย่อยของภาพที่อาจมีวัตถุที่สนใจ โดยจัดกลุ่มตามลักษณะทางภาพ

region proposals

Deep Learning สำหรับภาพด้วย PyTorch

Region และ anchor box

  • Region: พื้นที่ส่วนย่อยของภาพที่อาจมีวัตถุที่สนใจ โดยจัดกลุ่มตามลักษณะทางภาพ

region proposals

  • Anchor box: เทมเพลต bounding box ที่กำหนดไว้ล่วงหน้าในขนาดและรูปทรงต่างๆ
Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Faster R-CNN

Faster R-CNN: R-CNN เวอร์ชันขั้นสูง

rcnn layers

  • Backbone (convolutional layers)
1 Edward Raff. 2022. Inside Deep Learning.
Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Faster R-CNN

Faster R-CNN: R-CNN เวอร์ชันขั้นสูง rcnn layers

  • Backbone (convolutional layers)
  • Region proposal network (RPN) สำหรับเสนอ bounding box
1 Edward Raff. 2022. Inside Deep Learning.
Deep Learning สำหรับภาพด้วย PyTorch

โมเดล Faster R-CNN

Faster R-CNN: R-CNN เวอร์ชันขั้นสูง

rcnn layers

  • Convolutional layers (backbone): feature maps
  • Region proposal network (RPN): เสนอ bounding box
  • Classifier และ regressor สำหรับสร้างการทำนาย
1 Edward Raff. 2022. Inside Deep Learning.
Deep Learning สำหรับภาพด้วย PyTorch

Region proposal network (RPN)

สถาปัตยกรรม region proposal network

Deep Learning สำหรับภาพด้วย PyTorch

Region proposal network (RPN)

สถาปัตยกรรม region proposal network

  • Anchor generator:
    • สร้างชุด anchor box ในขนาดและอัตราส่วนต่างๆ
Deep Learning สำหรับภาพด้วย PyTorch

Region proposal network (RPN)

สถาปัตยกรรม region proposal network

  • Anchor generator:
    • สร้างชุด anchor box ในขนาดและอัตราส่วนต่างๆ
  • Classifier และ regressor:
    • ทำนายว่า box มีวัตถุหรือไม่ และระบุพิกัด
Deep Learning สำหรับภาพด้วย PyTorch

Region proposal network (RPN)

สถาปัตยกรรม region proposal network

  • Anchor generator:
    • สร้างชุด anchor box ในขนาดและอัตราส่วนต่างๆ
  • Classifier และ regressor:
    • ทำนายว่า box มีวัตถุหรือไม่ และระบุพิกัด
  • Region of interest (RoI) pooling:
    • ปรับขนาด RPN proposal ให้คงที่สำหรับ fully connected layers
Deep Learning สำหรับภาพด้วย PyTorch

RPN ใน PyTorch

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, )
Deep Learning สำหรับภาพด้วย PyTorch

ฟังก์ชัน loss ของ Fast R-CNN

  • ค่า loss การจำแนก RPN:
    • region มีวัตถุหรือไม่
    • binary cross-entropy
    • rpn_cls_criterion = nn.BCEWithLogitsLoss()

 

  • ค่า loss การถดถอย bounding box ของ RPN:
    • พิกัด bounding box
    • mean squared error
    • rpn_reg_criterion = nn.MSELoss()
  • ค่า loss การจำแนก R-CNN:
    • หลายคลาสของวัตถุ
    • cross-entropy
    • rcnn_cls_criterion = nn.CrossEntropyLoss()

 

  • ค่า loss การถดถอย bounding box ของ R-CNN:
    • พิกัด bounding box
    • mean squared error
    • rcnn_reg_criterion = nn.MSELoss()
Deep Learning สำหรับภาพด้วย PyTorch

Faster R-CNN ใน PyTorch

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, )
Deep Learning สำหรับภาพด้วย PyTorch

Faster R-CNN ใน PyTorch

โหลด Faster R-CNN ที่ผ่านการเทรนมาแล้ว

from torchvision.models.detection.faster_rcnn import FastRCNNPredictor

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

กำหนดจำนวนคลาสและขนาด input ของ classifier

num_classes = 2

in_features = model.roi_heads.box_predictor.cls_score.in_features

แทนที่ classifier ของโมเดลด้วยตัวที่มีจำนวนคลาสตามต้องการ

model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)
Deep Learning สำหรับภาพด้วย PyTorch

มาฝึกกันเถอะ!

Deep Learning สำหรับภาพด้วย PyTorch

Preparing Video For Download...