Pytorch 实现sobel算子的卷积操作详解


Posted in Python onJanuary 10, 2020

卷积在pytorch中有两种实现,一种是torch.nn.Conv2d(),一种是torch.nn.functional.conv2d(),这两种方式本质都是执行卷积操作,对输入的要求也是一样的,首先需要输入的是一个torch.autograd.Variable()的类型,大小是(batch,channel, H,W),其中batch表示输入的一批数据的数目,channel表示输入的通道数。

一般一张彩色的图片是3,灰度图片是1,而卷积网络过程中的通道数比较大,会出现几十到几百的通道数。H和W表示输入图片的高度和宽度,比如一个batch是32张图片,每张图片是3通道,高和宽分别是50和100,那么输入的大小就是(32,3,50,100)。

如下代码是卷积执行soble边缘检测算子的实现:

import torch
import numpy as np
from torch import nn
from PIL import Image
from torch.autograd import Variable
import torch.nn.functional as F
 
 
def nn_conv2d(im):
  # 用nn.Conv2d定义卷积操作
  conv_op = nn.Conv2d(1, 1, 3, bias=False)
  # 定义sobel算子参数
  sobel_kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')
  # 将sobel算子转换为适配卷积操作的卷积核
  sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3))
  # 给卷积操作的卷积核赋值
  conv_op.weight.data = torch.from_numpy(sobel_kernel)
  # 对图像进行卷积操作
  edge_detect = conv_op(Variable(im))
  # 将输出转换为图片格式
  edge_detect = edge_detect.squeeze().detach().numpy()
  return edge_detect
 
def functional_conv2d(im):
  sobel_kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32') #
  sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3))
  weight = Variable(torch.from_numpy(sobel_kernel))
  edge_detect = F.conv2d(Variable(im), weight)
  edge_detect = edge_detect.squeeze().detach().numpy()
  return edge_detect
 
def main():
  # 读入一张图片,并转换为灰度图
  im = Image.open('./cat.jpg').convert('L')
  # 将图片数据转换为矩阵
  im = np.array(im, dtype='float32')
  # 将图片矩阵转换为pytorch tensor,并适配卷积输入的要求
  im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
  # 边缘检测操作
  # edge_detect = nn_conv2d(im)
  edge_detect = functional_conv2d(im)
  # 将array数据转换为image
  im = Image.fromarray(edge_detect)
  # image数据转换为灰度模式
  im = im.convert('L')
  # 保存图片
  im.save('edge.jpg', quality=95)
 
if __name__ == "__main__":
  main()

原图片:cat.jpg

Pytorch 实现sobel算子的卷积操作详解

结果图片:edge.jpg

Pytorch 实现sobel算子的卷积操作详解

以上这篇Pytorch 实现sobel算子的卷积操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python装饰器使用实例:验证参数合法性
Jun 24 Python
python实现数据写入excel表格
Mar 25 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python实现简易版学生成绩管理系统
Jun 22 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 #Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 #Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 #Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 #Python
Pytorch 保存模型生成图片方式
Jan 10 #Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 #Python
python如何获取apk的packagename和activity
Jan 10 #Python
You might like
PHP实现文件安全下载
2006/10/09 PHP
php $_ENV为空的原因分析
2009/06/01 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
Python如何批量生成和调用变量
2020/11/21 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
什么是serialVersionUID
2016/03/04 面试题
小学优秀班干部事迹材料
2014/05/25 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js