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用GET方法上传文件
Mar 10 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
python笔记:mysql、redis操作方法
Jun 28 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
解决python "No module named pip" 的问题
Oct 13 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
python绘制规则网络图形实例
Dec 09 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
Python实现Word文档转换Markdown的示例
Dec 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
DedeCms模板安装/制作概述
2007/03/11 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
在Python中编写数据库模块的教程
2015/04/29 Python
python根据日期返回星期几的方法
2015/07/06 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python 爬虫图片简单实现
2017/06/01 Python
python模块smtplib学习
2018/05/22 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
医学院毕业生自荐信范文
2014/03/06 职场文书
政府门卫岗位职责
2014/04/29 职场文书
慈善晚会策划方案
2014/05/14 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL