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深入学习之对象的属性
Aug 31 Python
Python中使用PDB库调试程序
Apr 05 Python
python保存字符串到文件的方法
Jul 01 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
Python绘制七段数码管实例代码
Dec 20 Python
Python进阶之尾递归的用法实例
Jan 31 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
python路径的写法及目录的获取方式
Dec 26 Python
python程序如何进行保存
Jul 03 Python
通过实例了解python__slots__使用方法
Sep 14 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 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扩展编写点滴 技巧收集
2010/03/09 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
浅谈Python数据类型之间的转换
2016/06/08 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
医务工作者先进事迹材料
2014/01/26 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
高级销售求职信
2014/02/21 职场文书
英语邀请函范文
2015/02/02 职场文书
音乐剧猫观后感
2015/06/04 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
浅谈Python协程asyncio
2021/06/20 Python
nginx 添加http_stub_status_module模块
2022/05/25 Servers
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android