自定义卷积核——pytorch
自定义卷积核——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相关推荐
- pytorch自定义卷积核权值参数
pytorch中构建卷积层一般使用nn.Conv2d方法,有些情况下我们需要自定义卷积核的权值weight,而nn.Conv2d中的卷积参数是不允许自定义的,此时可以使用torch.nn.functi ...
- Opencv3 Robert算子 Sobel算子 拉普拉斯算子 自定义卷积核——实现渐进模糊
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace c ...
- pytorch 自定义卷积核进行卷积--卷积核订制
镜像问题:tensorflow 卷积:设定特定卷积核 动机: 有时候我们希望对神经网络得到的张量进行特定的卷积操作,如求梯度,求边缘等. 或者,有时我们希望把图像进行预处理操作后输入神经网络,而这个预 ...
- PyTorch 自定义卷积核「数据」
在做一些模型分析的时候可能需要将卷积核内的参数定制化(eg:全为1),此时就没办法直接使用模型中定义好的卷积了,需要将其数据给修改下方能使用,但是其输入输出通道以及卷积核大小需要留用,在此就可以单独的 ...
- 卷积核权值初始化_CNN怎么自定义卷积核初始值?
诶呦,光热心了.问题没理解清楚.是卷积核初始化.不是网络初始化.卷积核初始化我也没做过.文档是这样写的. ParamAttr¶ class paddle.fluid.ParamAttr(name=No ...
- PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx 在写 PyTorch 代码时,我们会发现在 torch.nn.xxx 和 torch.nn.funct ...
- tensorflow 卷积:设定特定卷积核
镜像问题:pytorch 自定义卷积核进行卷积--卷积核订制 有时想用tensorflow的conv2d的卷积操作,实现一些特定的滤波操作,如patch求和.计算梯度等,这时可以通过设计特定的卷积核来 ...
- [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2
最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词. 本文使用了 Seq2Seq 模型,输入为 5 个中文字词,输出为 1 个中文字词. 目录 关于RNN 语料预处理 ...
- [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)
最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词. 本文使用了 Seq2Seq 模型,输入为5个中文字词,输出为一个中文字词. 目录 关于RNN 语料预处理 搭建数据 ...
最新文章
- 推荐阅读的多核编程技术书籍
- mybatis批量插入(insert)和批量更新(update)
- MySQL 调优基础(三) Linux文件系统
- C#音视频处理开源项目收录
- 1068. Find More Coins (30)
- 对携程处理结果表示满意
- 音频编辑软件有哪些?推荐几款简单的音频编辑软件
- 2020计算机二级office大纲,2020计算机二级考试MS OFFICE 考试内容大纲.doc
- echarts数字云
- Unity2D学习笔记Day12:敌人统一死亡动画+Class的继承(含虚函数virtual,重写override)
- 吴恩达亲述:如何高效阅读论文,开启一个新的领域!
- vue-生成二维码【生成、点击输入框内叉号移除生成的二维码、输入框聚焦】
- 约翰·卡马克和他的id Software
- 关于B/S模式系统的设计与实现
- object-position/object-fit
- 前端笔记:Grid布局
- python3 scrapy爬取智联招聘存mongodb
- 基础算法篇(七),确定性策略的DPG与DDPG
- python入门day06列表
- Java中,你真的了解你的对象吗?