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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
Python实现修改IE注册表功能示例
May 10 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
对python判断是否回文数的实例详解
Feb 08 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
Python 控制终端输出文字的实例
Jul 12 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 Python
python神经网络编程之手写数字识别
May 08 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 程序员也要学会使用“异常”
2009/06/16 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
JavaScript日历实现代码
2010/09/12 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
jQuery实现跨域
2015/02/03 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
python3将变量输入的简单实例
2020/08/19 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
体育专业个人的求职信范文
2013/09/21 职场文书
公司端午节活动方案
2014/02/04 职场文书
1亿有多大教学反思
2014/05/01 职场文书
副处级干部考察材料
2014/05/17 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
阅兵口号
2014/06/19 职场文书
小学亲子活动总结
2014/07/01 职场文书
人力资源管理求职信
2014/08/07 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
关于教师节的广播稿
2015/08/19 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL