Faster R-CNN을 통한 영역 제안 네트워크

PyTorch로 배우는 이미지 딥러닝

Michal Oleszak

Machine Learning Engineer

영역과 앵커 박스

  • 영역(Region): 관심 객체가 있을 수 있는 이미지의 작은 부분. 시각적 특성으로 묶임

region proposals

PyTorch로 배우는 이미지 딥러닝

영역과 앵커 박스

  • 영역(Region): 관심 객체가 있을 수 있는 이미지의 작은 부분

region proposals

  • 앵커 박스: 다양한 크기와 형태의 미리 정의된 바운딩 박스 템플릿
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...