pytorch使用DCN

news/2024/11/8 23:06:21/

pytorch使用DCN

  • 前言
  • 正文

前言

关于DCN可形变卷积神经网络相信大家也都不陌生,使用额外的feature map区学习offset,以此达到可形变的效果。感觉和attention比较相似?
但是网络实现的代码版本各不相同,编译环境存在很多难以协调等等的问题。而MMopenlab是一个非常不错的工具,其有着实现可形变卷积的方法,因此本文只是做一个引入,如何像正常使卷积一样的使用DCN

正文

from mmcv.ops import DeformConv2dPack
import torch
from torch import nn
from thop import profile
import timeclass Conv(nn.Module):def __init__(self,indim,outdim,kerner=3,stride=1):super(Conv, self).__init__()self.conv1 = nn.Conv2d(indim,outdim,kernel_size=kerner,stride=stride,padding=kerner//2)self.act = nn.LeakyReLU(0.1)self.bn = nn.BatchNorm2d(outdim)def forward(self,x):return self.bn(self.act(self.conv1(x)))class Dconv(nn.Module):def __init__(self, indim, outdim, kerner=3, stride=1):super(Dconv, self).__init__()self.conv1 = DeformConv2dPack(indim, outdim, kernel_size=kerner, stride=stride, padding=kerner // 2,deform_groups=2)self.act = nn.LeakyReLU(0.1)self.bn = nn.BatchNorm2d(outdim)def forward(self, x):return self.bn(self.act(self.conv1(x)))

接下来是对两个定义的结构进行测试

conv1 = Conv(128,256).cuda()
dconv1 = Dconv(128,256).cuda()
input = torch.randn(4,128,640,640).cuda()t1 = time.time()
out1 = conv1(input)
t2 = time.time()
print('conv:',t2-t1)
total = sum([param.nelement() for param in conv1.parameters()])
print("Number of parameter: %.2fM" % (total / 1e6))
out2 = dconv1(input)
t3 =time.time()
print('dconv:',t3-t2)
total = sum([param.nelement() for param in dconv1.parameters()])
print("Number of parameter: %.2fM" % (total / 1e6))print(out1.shape)
print(out2.shape)

相比较正常的CONV而言,DCN的参数量更大一些。
在这里插入图片描述


http://www.ppmy.cn/news/335137.html

相关文章

C++语言cin和cout的详解

代码编译运行环境 QT creator 1.cin和cout简介 cin是C编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象&am…

DCGAN

转自:https://blog.csdn.net/liuxiao214/article/details/74502975 首先是各种参考博客、链接等,表示感谢。 1、参考博客1:地址 ——以下,开始正文。 2017/12/12 更新 解决训练不收敛的问题。 更新在最后面部分。 1、DCGAN的…

dilation conv 和 deconv

最近工作要用到dilation conv,在此总结一下空洞卷积,并和deconv进行对比。 dilation conv 首先空洞卷积的目的是为了在扩大感受野的同时,不降低图片分辨率和不引入额外参数及计算量(一般在CNN中扩大感受野都需要使用s>1的con…

【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析

【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一、加载 UEFI 默认应用程序1.1 LaunchDefaultBDSApps()1.1 LaunchAppFromGuidedFv() 二、QcomChargerApp应用程序初始化2.1 入口函数 QcomChargerApp_Entry()2.2 充电初始化 QcomChargerApp_Initia…

nvidia驱动,cuda与cudnn的关系

一关系阐述: (1)NVIDIA的显卡驱动程序和CUDA完全是两个不同的概念哦!CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的…

cin、cout的使用

cin、cout的使用 基本内容&#xff1a; (1)有关流对象cin、cout和流运算符的定义等信息是存放在C的输入输出流库中的&#xff0c;因此在程序中使用cin、cout和流运算符&#xff0c;就必须使用预处理命令把头文件stream包含到本文件中. 示教&#xff1a;#include <iostream…

DCC:Deep continuous clustering

文章&#xff1a;NIPS’17 代码&#xff1a;TensorFlow实现&#xff1b;Pytorch实现 经典的聚类算法具有离散结构&#xff1a;需要重新计算质心和数据点之间的关联&#xff0c;或者需要合并假定的聚类。 在任何一种情况下&#xff0c;优化过程都会被离散的重新配置打断。 连续…

Rockchip RK3588 kernel dts解析之PCIe

Rockchip RK3588 kernel dts解析之PCIe 文章目录 Rockchip RK3588 kernel dts解析之PCIeRK3588控制器RK3588 PHY使用限制DTS配置解析硬件设计软件DTS配置其他常见的PCIE配置对应的DTS配置实例pcie3.0phy拆分2个2Lane RC, 3个PCIe 2.0 1Lane(comboPHY)pcie3.0phy拆分为4个1Lane,…