首页 > 其他分享 >CoordConv实现

CoordConv实现

时间:2023-02-07 22:46:05浏览次数:44  
标签:CoordConv __ 实现 self torch ret ins feat

import torch
import torch.nn as nn
'''
An alternative implementation for PyTorch with auto-infering the x-y dimensions.
paper: An intriguing failing of convolutional neural networks and the CoordConv solution

https://zhuanlan.zhihu.com/p/443583240
https://blog.csdn.net/oYeZhou/article/details/116717210

'''
class AddCoords(nn.Module):

    def __init__(self, with_r=False):
        super().__init__()
        self.with_r = with_r

    def forward(self, ins_feat):
        """
        Args:
            x: shape(batch, channel, x_dim, y_dim)
        """
        batch_size, _, x_dim, y_dim = ins_feat.size()
        # 生成从-1到1的线性值
        x_range = torch.linspace(-1, 1, ins_feat.shape[-1], device=ins_feat.device)
        y_range = torch.linspace(-1, 1, ins_feat.shape[-2], device=ins_feat.device)
        y, x = torch.meshgrid(y_range, x_range) # 生成二维坐标网格
        y = y.expand([ins_feat.shape[0], 1, -1, -1]) # 扩充到和ins_feat相同维度
        x = x.expand([ins_feat.shape[0], 1, -1, -1])
        coord_feat = torch.cat([x, y], 1) # 位置特征
        ret = torch.cat([ins_feat, coord_feat], 1) # concatnate一起作为下一个卷积的输入
        if self.with_r:
            rr = torch.sqrt(torch.pow(x - 0.5, 2) + torch.pow(y - 0.5, 2))
            ret = torch.cat([ret, rr], dim=1)
        return ret


class CoordConv(nn.Module):
    def __init__(self, in_channels, out_channels, with_r=False, **kwargs):
        super().__init__()
        self.addcoords = AddCoords(with_r=with_r)
        in_size = in_channels+2
        if with_r:
            in_size += 1
        self.conv = nn.Conv2d(in_size, out_channels, **kwargs)

    def forward(self, x):
        ret = self.addcoords(x)
        ret = self.conv(ret)
        return ret

 

标签:CoordConv,__,实现,self,torch,ret,ins,feat
From: https://www.cnblogs.com/dxscode/p/17100049.html

相关文章

  • redis实现分布式锁释放锁和分布式锁实现可重入性
    本文为上一篇redis使用setnx实现分布式锁的增加篇重在体会思想与开源的框架自然是无法比拟的 如果当前线程已经获取到锁的情况下,不需要重复获取锁,而是直接复用。 ......
  • redis使用setnx实现分布式锁
     packagecom.shanhe.service;importcom.shanhe.entity.CommodityDetails;importcom.shanhe.lock.impl.RedisLockImpl;importcom.shanhe.mapper.CommodityDetail......
  • C++ Day14 借助智能指针实现文本查询查询
    一、设计思路数据结构:1、读取文件时,要记住文件的每一行,并且要将每一行分解为独立的单词vector<string>vec;istringstream2、输出时提供每个单词与其关联的行号,且......
  • 10.11循环处理的实现方法
    接下来,让我们继续解析汇编语言的源代码,看一下for循环及if条件分支等C语言程序的流程控制是如何实现的。代码清单10-8是将局部变量i作为循环计数器“连续进行10次......
  • 10.12条件分支的实现方法
    下面让我们来看一下条件分支的实现方法。条件分支的实现方法同循环处理的实现方法类似,使用的也是cmmp指令和跳转指令,这一点估计大家也预料到了。没错,条件分支就是利用这......
  • js实现距离放假的倒计时
    1<divid="time1">23</div>4<script>5functionmytime(){6varnewtime=newDate().getTime()7varendtime=newDate("2023/2/1617:00:00").getTime(......
  • 快速实现一个简单阉割版的HashMap
    简单实现一个底层数据结构为数组+链表的HashMap,不考虑链表长度超过8个时变为红黑树的情况。1.示例图2.分析需求put数据时:key值hash后的索引处没有元素,需要创建链......
  • rxjs 实现动态异步调度系统
     通过mergemap操作符:实现任务池的限制,通过defer操作符:延迟创建可观察对象实现异步task的队列等待。最终输出结果2,1,3,4符合预期 importReact,{useState,us......
  • Oracle VM VirtualBox网络在主机模式下实现访问外网
    提前条件:虚拟机网络已设置为主机模型目标是将能上网的网卡共享给虚拟主机的网卡  操作步骤:1.在主机上打开能上网的网卡,上面是WLAN,打开属性 2.切换到共享,选择......
  • m基于FPGA的cordic算法实现,输出sin和cos波形
    1.算法描述       CORDIC(CoordinateRotationDigitalComputer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数、双曲线、指数、对数......