easy-Fpn源码解读(五):rpn

本文详细解读了easy-Fpn项目的第五部分,重点在于region_proposal_network.py文件的代码分析,揭示了RPN在网络中的工作原理和实现细节。
摘要由CSDN通过智能技术生成

easy-Fpn源码解读(五):rpn

region_proposal_network.py代码解析

from typing import Tuple, List

import numpy as np
import torch
from torch import nn, Tensor
from torch.nn import functional as F

from bbox import BBox
from nms.nms import NMS


class RegionProposalNetwork(nn.Module):

    def __init__(self, num_features_out: int, anchor_ratios: List[Tuple[int, int]], anchor_scales: List[int], pre_nms_top_n: int, post_nms_top_n: int):
        super().__init__()

        self._features = nn.Sequential(
            nn.Conv2d(in_channels=num_features_out, out_channels=512, kernel_size=3, padding=1),
            nn.ReLU()
        )
        # 通道数从256维升至512维

        self._anchor_ratios = anchor_ratios
        self._anchor_scales = anchor_scales

        num_anchor_ratios = len(self._anchor_ratios)
        num_anchor_scales = len(self._anchor_scales)
        num_anchors = num_anchor_ratios * num_anchor_scales

        self._pre_nms_top_n = pre_nms_top_n
        self._post_nms_top_n = post_nms_top_n

        self._objectness = nn.Conv2d(in_channels=512, out_channels=num_anchors * 2, kernel_size=1)
        self._transformer = nn.Conv2d(in_channels=512, out_channels=num_anchors * 4, kernel_size=1)
        # 因为是1*1的kernel,所以不会改变特征图的size,
        # 对一个特征图像上的每一个点来说,会生成num*anchors个anchor,而每个anchor都有两个前景/背景概率
        # 和4个坐标位置,因此对于self._objectness来说两个通道对应一个anchor,而对于self._transformer来说
        # 4个通道对应一个anchor。这4个通道是一个anchor的四个位置的修正偏移量。
        # 所以在forward的里,才会将通道数换至最后一维,再展开。这样每一行就会对应一个anchor

    def forward(self, features: Tensor, image_width: int, image_height: int) -> Tuple[Tensor, Tensor]:
        features = self._features(features)
        objectnesses = self._objectness(features)  # anchor前景/背景修正
        transformers = self._transformer(features)  # anchor位置偏移量修正

        # permute函数将tensor的维度换位:num*CWH -> num*WHC
        #
        # contiguous()一般在permu
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值