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 相关文章推荐
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
django模板语法学习之include示例详解
Dec 17 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
Python Django Cookie 简单用法解析
Aug 13 Python
python进阶之自定义可迭代的类
Aug 20 Python
python 发送邮件的四种方法汇总
Dec 02 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
python爬取新闻门户网站的示例
Apr 25 Python
教你怎么用python selenium实现自动化测试
May 27 Python
Python中如何处理常见报错
Jan 18 Python
利用Python实时获取steam特惠游戏数据
Jun 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
PHP引用的调用方法分析
2016/04/25 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
PHP递归的三种常用方式
2019/02/28 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
layui table 参数设置方法
2018/08/14 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
详解Python中的__init__和__new__
2014/03/12 Python
python daemon守护进程实现
2016/08/27 Python
python基础教程之匿名函数lambda
2017/01/17 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python识别验证码图片实例详解
2020/02/17 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
财务总监管理职责范文
2014/03/09 职场文书
五年级学生评语
2014/04/22 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python