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 相关文章推荐
浅析Git版本控制器使用
Dec 10 Python
浅谈python可视化包Bokeh
Feb 07 Python
python 字典修改键(key)的几种方法
Aug 10 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
基于Python 的语音重采样函数解析
Jul 06 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 Python
python中pymysql包操作数据库方法
Apr 19 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
如何在PHP中生成随机数
2020/06/04 PHP
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
python之DataFrame实现excel合并单元格
2021/02/22 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python 批量修改/替换数据的实例
2018/07/25 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
数控专业推荐信范文
2013/12/02 职场文书
如何写好升职自荐信
2014/01/06 职场文书
内衣营销方案
2014/03/15 职场文书
协议书样本
2014/04/23 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
个人先进事迹总结
2015/02/26 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技
SpringBoot Http远程调用的方法
2022/08/14 Java/Android