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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
Python实现115网盘自动下载的方法
Sep 30 Python
Python实现新浪博客备份的方法
Apr 27 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
Python queue队列原理与应用案例分析
Sep 27 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
Python连接mysql方法及常用参数
Sep 01 Python
python3.9.1环境安装的方法(图文)
Feb 02 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 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入门速成教程
2007/03/19 PHP
php eval函数一句话木马代码
2015/05/21 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
htm调用JS代码
2007/03/15 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
React中的render何时执行过程
2018/04/13 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
python正则中最短匹配实现代码
2018/01/16 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
wxPython多个窗口的基本结构
2019/11/19 Python
python opencv如何实现图片绘制
2020/01/19 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
求职信需要的五点内容
2014/02/01 职场文书
机修工工作职责
2014/02/21 职场文书
2014年新教师工作总结
2014/11/08 职场文书