Pytorch FasterRCNN官方代码学习笔记

这篇博客涵盖了从解决 AttachDebuggerTracing 问题到使用 PyTorch 进行图像处理和目标检测的多个方面。讨论了如何在张量中添加维度、对象元素打包、数据展开、元组操作以及张量初始化。还介绍了如何将基础锚点放在特征图上生成锚框,并展示了如何从不同级别的特征图中选择前k个得分最高的提案。
摘要由CSDN通过智能技术生成

1.attach_linux_amd64.so: undefined symbol: AttachDebuggerTracing的解决办法

2.如何给tensor添加新的维度?

  • 例如,图像的标准化实现
    • image - mean[:, None, None]) / std[:, None, None]

3.将两个不同的对象的对应位置的元素进行打包:

ratios = tuple(float(s) / float(s_orig) for s, s_orig in zip(new_size, original_size))

4.将tensor沿着某个维度铺开:

xmin, ymin, xmax, ymax = boxes.unbind(1)

5.元组加法

batch_shape = (len(images),) + max_size

6.对元组进行解压,构建新的tensor, 以及对tensor进行置零初始化,与此同时完成数据拷贝

batch_shape = (len(images),) + max_size
batched_imgs = images[0].new(*batch_shape).zero_()
for img, pad_img in zip(images, batched_imgs):
    pad_img[: img.shape[0], : img.shape[1], : img.shape[2]].copy_(img)

7.将数据转换为张量
下面的函数既可以完成对数的转化,也可以完成对列表和元组的转化

torch.as_tensor(data, dtype=None, device=None) → Tensor

8.生成anchor的过程
先考虑在原点生成base anchor(基于预定义好的大小以及anchor的长宽比),然后再通过构建网格的方式将base anchor放置到feature map的每一个点上,具体实现代码如下所示:

    def grid_anchors(self, grid_sizes, strides):
        anchors = []
        for size, stride, base_anchors in zip(
            grid_sizes, strides, self.cell_anchors
        ):
            grid_height, grid_width = size
            stride_height, stride_width = stride
            device = base_anchors.device
            shifts_x = torch.arange(
                0, grid_width, dtype=torch.float32, device=device
            ) * stride_width
            shifts_y = torch.arange(
                0, grid_height, dtype=torch.float32, device=device
            ) * stride_height
            shift_y, shift_x = torch.meshgrid(shifts_y, shifts_x)
            shift_x = shift_x.reshape(-1)
            shift_y = shift_y.reshape(-1)
            shifts = torch.stack((shift_x, shift_y, shift_x, shift_y), dim=1)

            anchors.append(
                (shifts.view(-1, 1, 4) + base_anchors.view(1, -1, 4)).reshape(-1, 4)
            )

        return anchors

9.如何针对FPN不同level的feature map来得到前k个得分较高的proposal

    def _get_top_n_idx(self, objectness, num_anchors_per_level):
        r = []
        offset = 0
        for ob in objectness.split(num_anchors_per_level, 1):
            num_anchors = ob.shape[1]
            pre_nms_top_n = min(self.pre_nms_top_n, num_anchors)
            _, top_n_idx = ob.topk(pre_nms_top_n, dim=1)
            r.append(top_n_idx + offset)
            offset += num_anchors
        return torch.cat(r, dim=1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值