自定义卷积核——pytorch

自定义一些常见的滤波器卷积核,定义成类,可以在网络框架中直接调用


定义类,写入自定义卷积核,用于网络处理图片

高斯滤波器写入网络框架

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import numpy as np
import cv2
import matplotlib.pyplot as pltclass Gaussfilter(nn.Module):def __init__(self, channels=1, kernel_size=3, sigma=1.5):super(Gaussfilter, self).__init__()self.channels = channelsself.k_size = kernel_sizeself.sigma = sigmax_data, y_data = np.mgrid[-(self.k_size) // 2 + 1:(self.k_size) // 2 + 1, -(self.k_size) // 2 + 1:(self.k_size) // 2 + 1]x_ = torch.FloatTensor(x_data.astype(np.float32)).unsqueeze(0).unsqueeze(0)y_ = torch.FloatTensor(y_data.astype(np.float32)).unsqueeze(0).unsqueeze(0)g = torch.exp(-((x_ ** 2 + y_ ** 2) / torch.tensor(2.0 * self.sigma ** 2)))g = g / torch.sum(g)kernel = torch.FloatTensor(g)# kernel = np.repeat(kernel, self.channels, axis=0)self.weight = nn.Parameter(data=kernel, requires_grad=False)def __call__(self, x):  # 输入的X应该维度增加过.unsqueeze(0).unsqueeze(0)x = x.unsqueeze(0).unsqueeze(0)x = F.conv2d(x, self.weight, stride=1,  padding=1, groups=self.channels)return x

定义类,调用类测试自定义高斯滤波器卷积核,实现将图像高低频信息分离。方便网络单独处理单频信息。

"""
test
"""
input_x = plt.imread('F:/BGR_demo/monarch_gray.jpg')
# cv2.imshow("input_x", input_x)
input_x = Variable(torch.from_numpy(input_x.astype(np.float32)/255))
gaussian_conv = Gaussfilter(1, 3, 1.5)
out_x = gaussian_conv(input_x)
img_H = input_x - out_x
out_x = (out_x.squeeze(0).squeeze(0)*255).data.numpy().astype(np.uint8)
img_H = (img_H.squeeze(0).squeeze(0)*255).data.numpy().astype(np.uint8)
# cv2.imshow("out_x", out_x)
# cv2.waitKey(0)
cv2.imshow("img_H", img_H)
cv2.waitKey(0)

自定义卷积核——pytorch相关推荐

  1. pytorch自定义卷积核权值参数

    pytorch中构建卷积层一般使用nn.Conv2d方法,有些情况下我们需要自定义卷积核的权值weight,而nn.Conv2d中的卷积参数是不允许自定义的,此时可以使用torch.nn.functi ...

  2. Opencv3 Robert算子 Sobel算子 拉普拉斯算子 自定义卷积核——实现渐进模糊

    #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace c ...

  3. pytorch 自定义卷积核进行卷积--卷积核订制

    镜像问题:tensorflow 卷积:设定特定卷积核 动机: 有时候我们希望对神经网络得到的张量进行特定的卷积操作,如求梯度,求边缘等. 或者,有时我们希望把图像进行预处理操作后输入神经网络,而这个预 ...

  4. PyTorch 自定义卷积核「数据」

    在做一些模型分析的时候可能需要将卷积核内的参数定制化(eg:全为1),此时就没办法直接使用模型中定义好的卷积了,需要将其数据给修改下方能使用,但是其输入输出通道以及卷积核大小需要留用,在此就可以单独的 ...

  5. 卷积核权值初始化_CNN怎么自定义卷积核初始值?

    诶呦,光热心了.问题没理解清楚.是卷积核初始化.不是网络初始化.卷积核初始化我也没做过.文档是这样写的. ParamAttr¶ class paddle.fluid.ParamAttr(name=No ...

  6. PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx

    PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx 在写 PyTorch 代码时,我们会发现在 torch.nn.xxx 和 torch.nn.funct ...

  7. tensorflow 卷积:设定特定卷积核

    镜像问题:pytorch 自定义卷积核进行卷积--卷积核订制 有时想用tensorflow的conv2d的卷积操作,实现一些特定的滤波操作,如patch求和.计算梯度等,这时可以通过设计特定的卷积核来 ...

  8. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2

    最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词. 本文使用了 Seq2Seq 模型,输入为 5 个中文字词,输出为 1 个中文字词. 目录 关于RNN 语料预处理 ...

  9. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)

    最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词. 本文使用了 Seq2Seq 模型,输入为5个中文字词,输出为一个中文字词. 目录 关于RNN 语料预处理 搭建数据 ...

最新文章

  1. 推荐阅读的多核编程技术书籍
  2. mybatis批量插入(insert)和批量更新(update)
  3. MySQL 调优基础(三) Linux文件系统
  4. C#音视频处理开源项目收录
  5. 1068. Find More Coins (30)
  6. 对携程处理结果表示满意
  7. 音频编辑软件有哪些?推荐几款简单的音频编辑软件
  8. 2020计算机二级office大纲,2020计算机二级考试MS OFFICE 考试内容大纲.doc
  9. echarts数字云
  10. Unity2D学习笔记Day12:敌人统一死亡动画+Class的继承(含虚函数virtual,重写override)
  11. 吴恩达亲述:如何高效阅读论文,开启一个新的领域!
  12. vue-生成二维码【生成、点击输入框内叉号移除生成的二维码、输入框聚焦】
  13. 约翰·卡马克和他的id Software
  14. 关于B/S模式系统的设计与实现
  15. object-position/object-fit
  16. 前端笔记:Grid布局
  17. python3 scrapy爬取智联招聘存mongodb
  18. 基础算法篇(七),确定性策略的DPG与DDPG
  19. python入门day06列表
  20. Java中,你真的了解你的对象吗?

热门文章

  1. 接口测试之代码实例21讲--接口测试基础入门
  2. 小白的笨笨知识【用原生js实现一个倒计时项目】
  3. 对FEAL-4的线性***
  4. 短线选股的四大核心要素
  5. linux进程d和z的转换,linux进程状态D和Z的处理 (转)
  6. linux中ugo什么权限,Linux权限机制:UGO | 昆特斯的控
  7. 函数调用前加(void)什么意思
  8. hive的load踩过的坑
  9. 面对有钱任性的科技巨头,夹缝中的初创企业该何去何从?
  10. 思科(Cisco)日志分析工具