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下的twisted框架入门指引
Apr 15 Python
Python中的推导式使用详解
Jun 03 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
numpy matrix和array的乘和加实例
Jun 28 Python
python 多个参数不为空校验方法
Feb 14 Python
python实现控制COM口的示例
Jul 03 Python
tensorflow如何批量读取图片
Aug 29 Python
python重要函数eval多种用法解析
Jan 14 Python
python对XML文件的操作实现代码
Mar 27 Python
python 实现汉诺塔游戏
Nov 28 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 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
一些星际专用术语解释
2020/03/04 星际争霸
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
python 算法 排序实现快速排序
2012/06/05 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python中字符串的格式化方法小结
2016/05/03 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
替换python字典中的key值方法
2018/07/06 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
用django设置session过期时间的方法解析
2019/08/05 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
为什么说python更适合树莓派编程
2020/07/20 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
办公室保洁员岗位职责
2013/12/02 职场文书
初中生个人学习的自我评价
2013/12/04 职场文书
公司会计岗位职责
2014/02/13 职场文书
设计专业自荐信
2014/06/19 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis