当前位置: 首页 > news >正文

pytorch学习日记之图片的简单卷积、池化

导入图片并转化为张量

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
mymi = Image.open("pic/123.png")
# 读取图像转化为灰度图片转化为numpy数组
myimgray = np.array(mymi.convert("L"), dtype=np.float32)
# 可视化图片
plt.figure(figsize=(10, 10))
plt.imshow(myimgray, cmap=plt.cm.gray)
plt.show()# 将数组转化成张量
imh, imw = myimgray.shape
myimgray_t = torch.from_numpy(myimgray.reshape(1, 1, imh, imw))
print(myimgray_t.shape)

可视化图片内容如下图所示:
在这里插入图片描述

对灰度图像进行卷积提取图像轮廓

kersize = 5  # 定义边缘检测卷积核,并将维度处理为1*1*5*5
ker = torch.ones(kersize, kersize, dtype=torch.float32)*-1
ker[2, 2] = 24
ker = ker.reshape((1, 1, kersize, kersize))
# 进行卷积操作
# 设置卷积层,输入数为1,特征映射的数量为2,卷积核大小为之前边缘检测卷积核大小
# 卷积步长为默认1,输入填充数量为0,步幅默认为1,偏置为False
conv2d = nn.Conv2d(1, 2, (kersize, kersize), bias=False)
# 设置卷积时使用的核,第一个核使用边缘检测
conv2d.weight.data[0] = ker
# 对灰度图像进行卷积操作
imconv2dout = conv2d(myimgray_t)
# 对卷积后的输出进行维度压缩
imconv2dout_im = imconv2dout.data.squeeze()
print("卷积后的尺寸:", imconv2dout_im.shape)# 可视化卷积后的图像
plt.figure(figsize=(20, 10))
plt.subplot(1, 2, 1)
plt.imshow(imconv2dout_im[0], cmap=plt.cm.gray)
plt.subplot(1, 2, 2)
plt.imshow(imconv2dout_im[1], cmap=plt.cm.gray)
plt.show()

边缘检测后得到的图像如下图所示:
在这里插入图片描述

池化操作:

这一步骤主要是为了对特征进行进一步处理,池化层可以起到对数据进一步浓缩,从而缓解计算时对内存的需求。池化会选取一定大小区域,将该区域的额像素值使用一个代表元素表示。如果使用该区域的平均值代替则称为平均池化,如果使用最大值代替则称为最大池化,这两种方式的计算如下图所示:
在这里插入图片描述

最大池化代码以及结果:

# 对卷积后的图像进行最大池化
maxpool2 = nn.MaxPool2d(2, stride=2)
pool2_out = maxpool2(imconv2dout)
pool2_out_im = pool2_out.squeeze()
print("最大池化后的尺寸", pool2_out.shape)
# 可视化最大池化后的结果
plt.figure(figsize=(20, 10))
plt.subplot(1, 2, 1)
plt.imshow(pool2_out_im[0].data, cmap=plt.cm.gray)
plt.subplot(1, 2, 2)
plt.imshow(pool2_out_im[1].data, cmap=plt.cm.gray)
plt.show()

在这里插入图片描述
其中torch.nn.MaxPool2d(kernel_size,stride,padding=0,dilation=1,return_indices=False,ceil_mode=False)中包含了池化的一些参数设置,
kernel_size表示最大值池化的窗口大小,
stride是最大值池化窗口移动的步长,默认值是kernel_size,
padding为输入矩阵的每条边补充0的层数,主要作用是保持数据矩阵的大小减少信息损失(之前看的印象可能有点不对),
dilation是控制窗口中元素步幅的参数,
return_indices如果为True则返回最大值的索引,
ceil_mode如果等于True,计算输出信号大小的时候,会使用向上取整,默认是向下取整。
torch.nn.MaxPool2d()输入为:在这里插入图片描述
输出为:在这里插入图片描述
其中在这里插入图片描述

平均池化代码及结果:

# 卷积后的结果进行平均值池化
avgpool2 = nn.AvgPool2d(2, stride=2)
pool2avg_out = avgpool2(imconv2dout)
pool2avg_out_im = pool2avg_out.squeeze()
print(pool2avg_out.shape)# 可视化平均池化后的结果
plt.figure(figsize=(20, 10))
plt.subplot(1, 2, 1)
plt.imshow(pool2avg_out_im[0].data, cmap=plt.cm.gray)
plt.subplot(1, 2, 2)
plt.imshow(pool2avg_out_im[1].data, cmap=plt.cm.gray)
plt.show()

在这里插入图片描述
可以观察到,特征图像比最大化池化要淡化一点。

自适应平均池化代码及结果

下面使用nn.AdaptiveAvgPool2d()函数对卷积后的输出进行自适应平均值池化并可视化:


# 卷积后的结果进行自适应平均值池化
AdaAvgpool2 = nn.AdaptiveAvgPool2d(output_size=(100, 100))
# output_size参数指定输出特征映射的尺寸
pool2ada_out = AdaAvgpool2(imconv2dout)
pool2ada_out_im = pool2ada_out.squeeze()
print(pool2ada_out.shape)# 可视化自适应平均值池化后的结果
plt.figure(figsize=(20, 10))
plt.subplot(1, 2, 1)
plt.imshow(pool2ada_out_im[0].data, cmap=plt.cm.gray)
plt.subplot(1, 2, 2)
plt.imshow(pool2ada_out_im[1].data, cmap=plt.cm.gray)
plt.show()

在这里插入图片描述
池化后特征映射尺寸变小,图像更加模糊

相关文章:

pytorch学习日记之图片的简单卷积、池化

导入图片并转化为张量 import torch import torch.nn as nn import matplotlib.pyplot as plt import numpy as np from PIL import Image mymi Image.open("pic/123.png") # 读取图像转化为灰度图片转化为numpy数组 myimgray np.array(mymi.convert("L"…...

【java基础】抽象类和抽象方法

文章目录基本介绍抽象类抽象方法使用总结基本介绍 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就…...

RDD的内核调度【博学谷学习记录】

RDD的依赖关系RDD的依赖: 指的一个RDD的形成可能是有一个或者多个RDD得出, 此时这个RDD和之前的RDD之间产生依赖关系在Spark中, RDD之间的依赖关系,主要有二种依赖关系:1- 窄依赖:目的: 为了实现并行计算操作, 并且提高容错的能力指的: 一个RDD上的一个分区的数据, 只能完整的交…...

二叉树——二叉搜索树的最小绝对差

二叉搜索树的最小绝对差 链接 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,6,1,3] 输出:1 示例 2&…...

git的使用(终端输入指令)下

文章目录前言1、git 分支创建分支查看分支切换分支合并分支删除分支2.提交到远程仓库远程提交链接一下自己仓库总结前言 上章链接 :git的使用(终端输入指令)上 我们接着上着来说 上章把 git 的 功能实现了一部分,本章我们接着上文…...

python使用influxdb-client管理InfluxDB的bucket

bucket的概念类似数据库的“库”,同时每个库中的数据都因为存在“时间戳”,每个数据都会有一个对应的时间点 influxdb-client-python官方github页面:https://github.com/influxdata/influxdb-client-python 管理bucket的官方示例&#xff1…...

【c++】模板2—类模板

文章目录类模板语法类模板与函数模板区别类模板中成员函数常见时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件编写类模板与友元类模板语法 类模板作用: 建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚…...

基于SpringCloud的可靠消息最终一致性03:项目骨架代码(下)

上一节把整个项目的演示内容、项目结构、POM文件和配置文件都讲完了,接下来继续。 先安装并启动Nacos,然后在其中建立一个名为xiangwang-payment-dev.yaml的配置文件,内容为: # 指定运行环境 spring:autoconfigure:exclude: com.alibaba.druid.spring.boot.autoconfigure.D…...

linux如何彻底的删除文件

一、使用rm命令删除 直接用rm 先用ls -alt看下文件信息及拥有者等 可以看到拥有者是eve用户,所以在eve用户的终端中rm命令即可, 如果是root或者其他,则优先用root或其他账号进行删除 (base) eveEve:~$ ls -alt a.txt -rw-rw-r-- 1 eve eve …...

数据仓库Hive的安装和部署

1)去apache.hive.org官网下载hive 目前hive主要有三大版本,Hive1.x、Hive2.x、Hive3.x Hive1.x已经2年没有更新了,所以这个版本后续基本不会再维护了,不过这个版本已经迭代了很多年了,也是比较稳定的 Hive2.x最近一直…...

Python调用CANoe常见问题

一、Win32com已经安装成功但是在pycharm中提示错误 No module named win32com.clientPyCharm中出现unresolved reference的解决方法 一直提示需要升级pip版本Pywin32已成功安装,但仍提示没有win32com模块...

一起Talk Android吧(第五百零七回:图片滤镜ImageFilterView)

文章目录背景介绍功能介绍图片滤镜图片圆角图片缩放图片旋转图片平移各位看官们大家好,上一回中咱们说的例子是"如何调整组件在约束布局中的角度",这一回中咱们说的例子是" 图片滤镜ImageFilterView"。闲话休提,言归正转&#xff0c…...

Java 解释器和即时解释器(JIT)之间的区别

区别是: 翻译 .class (字节码文件) 的粒度和方式不同 解释器是一个逐条解释并执行字节码指令的组件,每次**只翻译一条**指令并执行,然后再翻译下一条指令。 它的翻译粒度是一条指令,而且是按需翻译&#x…...

Acwing 蓝桥杯 第二章 二分与前缀和

今天来补一下之前没写的总结,题是写完了,但是总结没写感觉没什么好总结的啊,就当打卡了789. 数的范围 - AcWing题库思路:一眼二分,典中典先排个序,再用lower_bound和upper_bound维护相同的数的左界和右界就…...

CSDN原力增长规则解读 实测一个月

CSDN原力越来越难了,当然,这对生态发展来说也是好事。介绍下原力增长有哪些渠道吧。发布原创文章:10分/次,每日上限为15分、2篇回答问题:1分/次,每日上限2分,2回答发动态:1分/次&…...

HDMI协议介绍(三)--InfoFrame

目录 Auxiliary Video information (AVI) InfoFrame AVI InfoFrame包结构 Header Body 举个例子 附录 Audio InfoFrame Audio InfoFrame包结构 Header Body Vendor Specific InfoFrame Vendor Specific InfoFrame包结构 Header Body AVI/AUDIO/VSI Infoframe都…...

【RocketMQ】源码详解:Broker端消息储存流程、消息格式

消息存储流程 入口: org.apache.rocketmq.remoting.netty.NettyRemotingAbstract#processRequestCommand org.apache.rocketmq.broker.processor.SendMessageProcessor#asyncProcessRequest 消息到达broker后会经过netty的解码、消息处理器等,最后根据…...

IoT项目系统架构案例2

项目背景 1.这个项目是对之前的案例的升级改造参考:IoT项目系统架构案例_iot案例_wxgnolux的博客-CSDN博客2.基于方案1的项目实施过程中碰到的问题,对硬件设备标准化的理念及新的功能需求(如根据天气预报温度调水温,APP界面可操作性优化等)•采用目前IoT主流厂商的架…...

Vue echarts封装

做大屏的时候经常会遇到 echarts 展示,下面展示在 Vue2.7 / Vue3 中对 echarts (^5.4.0) 的简单封装。 文章首发于https://blog.fxss.work/vue/echarts封装.html,样例查看 echarts 封装使用 props 说明 参数说明类型可选值默认…...

蓝桥杯入门即劝退(二十二)反转字符(不走寻常路)

欢迎关注点赞评论,共同学习,共同进步! ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章…...

BUUCTF:[网鼎杯 2018]Fakebook 漏洞链深度剖析:从SQL注入到SSRF的实战利用

1. 初探Fakebook:信息收集与源码泄露 打开题目链接后,我习惯性地在URL后添加/robots.txt进行探测。这个文件就像网站的"藏宝图",经常能发现开发者不想被公开的路径。果然,在这里发现了/user.php.bak这个备份文件。下载后…...

国标通气帽、DN200通气帽与市政管道通气帽怎么选?

我第一次接触通气帽这玩意儿,是在一个闷热的下午。工地上尘土飞扬,师傅递给我一个金属罩子,说:“这是通气用的,别小看它。”我当时还纳闷:不就是个帽子嘛,能有多大讲究?后来才明白&a…...

Qt 批量读取Excel数据:从性能瓶颈到优化实践

1. 为什么Qt读取Excel会卡成PPT? 第一次用Qt操作Excel表格时,我兴冲冲写了个循环读取单元格的代码。结果打开包含5000行数据的文件后,进度条像蜗牛爬坡,鼠标指针转成彩色圆圈,程序直接卡成PPT幻灯片模式——这场景估计…...

2026论文降AI实战SOP:保留排版格式,8款工具与结构级优化指南

内容ai率检测数值太高,不得不熬夜改了一遍又一遍,润色到想吐,结果检测报告上数字还是不尽人意,截止日期越逼越近,真的是没办法了。 我花了整整三天,把2026全网热门的几十款降AI工具通通测了个遍&#xff0…...

DDrawCompat:让经典DirectX游戏在Windows 11重获新生的技术桥梁

DDrawCompat:让经典DirectX游戏在Windows 11重获新生的技术桥梁 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/…...

终极指南:如何设计完美的HTTP API - 10个实用技巧让你的API更专业

终极指南:如何设计完美的HTTP API - 10个实用技巧让你的API更专业 【免费下载链接】http-api-design HTTP API design guide extracted from work on the Heroku Platform API 项目地址: https://gitcode.com/gh_mirrors/ht/http-api-design HTTP API设计是构…...

CDFControl工具详解,搞定云桌面黑屏、卡顿、随机掉线疑难故障

一 前言 在企业Citrix云桌面运维工作中,我们经常遇到一类无明确报错、间歇性复现的疑难故障。常规Windows事件查看器日志干净无报错,常规DDC控制台监控无异常,但终端用户会频繁出现登录黑屏、会话卡顿、虚拟机随机掉线、VDA注册超时等问题。 很多运维人员遇到此类问题只能…...

告别混乱!WPF项目如何用ResourceDictionary优雅管理样式和转换器(附完整项目结构)

告别混乱!WPF项目如何用ResourceDictionary优雅管理样式和转换器(附完整项目结构) 当WPF项目从Demo阶段步入正式开发,资源管理往往会成为第一个"拦路虎"。我曾接手过一个中型设备管理系统的UI重构,打开项目时…...

开源硬件测试框架OpenClaw Harness:从GPIO到CI/CD的自动化测试实践

1. 项目概述:一个开源硬件测试框架的诞生最近在折腾一些嵌入式开发和硬件原型项目,发现一个挺普遍的问题:当你手头有一堆传感器、执行器或者自己设计的电路板时,怎么高效、可靠地对它们进行功能测试和性能验证?用万用表…...

仅剩72小时可获取的2026终极对比手册(含Prompt工程调优参数表、国产信创环境适配补丁包、等保2.0三级适配验证清单):ChatGPT与Gemini,你选错一个就多花237万年运维成本

更多请点击: https://intelliparadigm.com 第一章:ChatGPT与Gemini 2026年全面对比的基准定义与评估范式 为确保跨模型评估的科学性与可复现性,2026年主流AI基准已统一采用**多维动态评估范式(MDEP)**,该范…...