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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python实现类的创建与使用方法示例
Jul 25 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
python获取带有返回值的多线程
May 02 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
BBS(php & mysql)完整版(一)
2006/10/09 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
videocapture库制作python视频高速传输程序
2013/12/23 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Django Celery异步任务队列的实现
2019/07/24 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
保安自我鉴定范文
2013/12/08 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
七匹狼男装广告词
2014/03/21 职场文书
党员承诺书内容
2014/03/26 职场文书
园艺师求职信
2014/04/27 职场文书
销售团队口号大全
2014/06/06 职场文书