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设计一个代码统计工具
Apr 04 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
opencv python 傅里叶变换的使用
Jul 21 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
在pycharm中显示python画的图方法
Aug 31 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
Python urllib3软件包的使用说明
Nov 18 Python
python实现简单的学生管理系统
Feb 22 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实现的在线人员函数库
2008/04/09 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php简单截取字符串代码示例
2016/10/19 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
AngularJS快速入门
2015/04/02 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
python实现按关键字筛选日志文件
2019/12/24 Python
python3中布局背景颜色代码分析
2020/12/01 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
移除Selenium中window.navigator.webdriver值
2022/06/10 Python