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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
理解Python垃圾回收机制
Feb 12 Python
Python 查看文件的读写权限方法
Jan 23 Python
Flask之flask-script模块使用
Jul 26 Python
flask框架中勾子函数的使用详解
Aug 01 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
python脚本后台执行方式
Dec 21 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
python函数map()和partial()的知识点总结
May 26 Python
Django windows使用Apache实现部署流程解析
Oct 12 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与paypal整合方法
2010/11/28 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
小程序云开发实战小结
2018/10/25 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
Python之父谈Python的未来形式
2016/07/01 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
NumPy排序的实现
2020/01/21 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
创业大赛策划书
2014/03/01 职场文书
农村改厕实施方案
2014/03/22 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
企业法人代表证明书
2015/06/18 职场文书
关于军训的感想
2015/08/07 职场文书