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实现的简单文本类游戏实例
Apr 28 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
解决echarts中饼图标签重叠的问题
May 16 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
php实现微信支付之现金红包
2018/05/30 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
Django后台admin的使用详解
2019/07/08 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
ORACLE十问
2015/04/20 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
综合实践活动方案
2014/02/14 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
爱国之歌(8首)
2019/09/29 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP