图像相关层之卷积锐化图片示例

简介: 图像相关层之卷积锐化图片示例

注意:黑白图只有1个通道数,彩色图却含有三个通道数。

学习总结:

  • Conv2d是torch.nn模块封装好的2维卷积模型
  • 相关图层锐化操作等操作不是直接修改卷积核,而是选择通过重新赋值修改Conv2d.weight.data的参数,但需要注意的是修改参数的前提是赋值的维度必须和原Conv2d.weight.data的维度保持一模一样
  • 输入通道数取决于数据当前的通道数,比如一开始输入的图像数据是一张彩色图,那么输入通道数就是3。
  • 关于卷积核和滤波器的关系(重要):卷积核看作是三维的(NI,A,A),输入通道数为 NI (视为卷积核的高),卷积核的长和宽都为 A,输出通道数 NO 可以看作是滤波器(过滤器)的数目,一个滤波器可以看作一个卷积核,那么就有 NO 个卷积核(NI,A,A)进行数据特征提取。注意:输入通道数一定在数据要在执行卷积模型(毕竟构造卷积模型后参数还可以再修改如conv.weight.data)前 和输入数据的通道数保持相同,比如彩色图输入通道数是3。
  • 池化就是在卷积核的基础上进一步提取原始图像数据特征,一般有最大化池化和平均池化
  • 顺手推荐一波深度学习卷积网络画图神器:ConvNetDraw

一、彩色图像输入,灰度输出(代码和结果如下)

1、卷积未池化

1.1 代码一

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
# if image.mode != 'L':
#     image = image.convert('L')
input = to_tensor(image).unsqueeze(0) # 将图片转换为tensor
# 锐化卷积核
# 为修改conv.weight.data重新赋值做准备
kernel = t.ones(3,3,3)/9  # 准备
kernel[1][1][1] = 1 # 准备
conv = nn.Conv2d(3,1,3,1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
# print(conv.weight.data.size())
conv.weight.data = kernel.view(1,3,3,3) # 必须和封装的Conv2d函数中的conv.weight.data维度一致 滤波器数目(输出通道);输入通道(卷积的高);卷积长宽
out = conv(V(input))
to_pil(out.data.squeeze(0)).show() # 将tensor转换成图像并显示图片

1.2 代码二

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
if image.mode != 'L': # 彩色图转换为黑白图
    image = image.convert('L')
input = to_tensor(image).unsqueeze(0)
# 锐化卷积核
# 为修改conv.weight.data重新赋值做准备
kernel = t.ones(3,3)/9
kernel[1][1] = 1
conv = nn.Conv2d(1,1,3,1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
# print(conv.weight.data.size())
conv.weight.data = kernel.view(1,1,3,3) # 必须和封装的Conv2d函数中的conv.weight.data维度一致
out = conv(V(input))
to_pil(out.data.squeeze(0)).show() # 将tensor转换成图像并显示图片

2、池化未卷积

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
if image.mode != 'L': # 彩色图转换为黑白图
    image = image.convert('L')
input = to_tensor(image).unsqueeze(0)
# 锐化卷积核
# kernel = t.ones(3,3)/9
# kernel[1][1] = 1
# conv = nn.Conv2d(1,1,(3,3),1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
# conv.weight.data = kernel.view(1,1,3,3) 
# out = conv(V(input))
# 池化层
pool = nn.AvgPool2d(2,2)
out = pool(V(input))
to_pil(out.data.squeeze(0)).show() # 显示图片

3、卷积及池化

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
if image.mode != 'L': # 彩色图转换为黑白图
    image = image.convert('L')
input = to_tensor(image).unsqueeze(0)
# 锐化卷积核
kernel = t.ones(3,3)/9
kernel[1][1] = 1
conv = nn.Conv2d(1,1,3,1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
conv.weight.data = kernel.view(1,1,3,3) 
out = conv(V(input))
# 池化层
pool = nn.AvgPool2d(2,2)
out = pool(out)
to_pil(out.data.squeeze(0)).show() # 显示图片

二、彩色图像输入,彩色输出(代码和结果如下)

1、卷积未池化

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
# if image.mode != 'L':
#     image = image.convert('L')
input = to_tensor(image).unsqueeze(0)
# 锐化卷积核
kernel = t.ones(3,3,3,3)/9
kernel[1][1][1][1] = 1
conv = nn.Conv2d(3,3,3,1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
conv.weight.data = kernel.view(3,3,3,3) 
out = conv(V(input))
to_pil(out.data.squeeze(0)).show() # 显示图片

2、池化未卷积

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
# if image.mode != 'L': # 彩色图转换为黑白图
#     image = image.convert('L')
input = to_tensor(image).unsqueeze(0)
# 锐化卷积核
# kernel = t.ones(3,3)/9
# kernel[1][1] = 1
# conv = nn.Conv2d(1,1,3,1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
# conv.weight.data = kernel.view(1,1,3,3) 
# out = conv(V(input))
# 池化层
pool = nn.AvgPool2d(2,2)
out = pool(V(input))
to_pil(out.data.squeeze(0)).show() # 显示图片

3、卷积及池化

from PIL import Image
import torch as t
from torch import nn
from torch.autograd import Variable as V
from torchvision.transforms import ToTensor,ToPILImage
to_tensor = ToTensor() # 创建Totensor对象,可以将图片转换为tensor
to_pil = ToPILImage() # 创建ToPILImage对象,可以将tensor转换成图像
image = Image.open('E:/pythonProjecttest/mg.png') # 图片提取
# if image.mode != 'L': # 彩色图转换为黑白图
#     image = image.convert('L')
input = to_tensor(image).unsqueeze(0)
# 锐化卷积核
kernel = t.ones(3,3,3,3)/9
kernel[1][1][1][1] = 1
conv = nn.Conv2d(3,3,3,1,bias=False) # 设置输入通道数、输出通道数、卷积核大小、步长、...偏置
conv.weight.data = kernel.view(3,3,3,3) # 卷积核必须数量一致
out = conv(V(input))
# 池化层
pool = nn.AvgPool2d(2,2)
out = pool(out)
to_pil(out.data.squeeze(0)).show() # 显示图片


相关文章
|
机器学习/深度学习 算法 计算机视觉
yolov8人脸识别-脸部关键点检测(代码+原理)
yolov8人脸识别-脸部关键点检测(代码+原理)
|
应用服务中间件 Linux API
acme.sh 快速实现 https 证书颁发与自动续期
借助acem.sh来迅速实现 let's encrypt 的泛域名 ssl 证书颁发与续期,基本上五分钟就可以解决战斗
4261 0
|
11月前
|
机器学习/深度学习 人工智能 编解码
【AI系统】Transformer 模型小型化
本文介绍了几种轻量级的 Transformer 模型,旨在解决传统 Transformer 参数庞大、计算资源消耗大的问题。主要包括 **MobileVit** 和 **MobileFormer** 系列,以及 **EfficientFormer**。MobileVit 通过结合 CNN 和 Transformer 的优势,实现了轻量级视觉模型,特别适合移动设备。MobileFormer 则通过并行结构融合了 MobileNet 和 Transformer,增强了模型的局部和全局表达能力。
480 8
【AI系统】Transformer 模型小型化
|
Linux 数据安全/隐私保护 Windows
更换(Pypi)pip源到国内镜像
pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.
247485 2
|
编解码 监控 算法
高动态范围成像:超越人眼的视觉体验
【10月更文挑战第15天】高动态范围成像(HDR)通过捕捉更广泛的亮度范围,超越传统图像和人眼的极限,提供卓越的视觉体验。本文深入解析HDR的基本原理、技术特点及其在摄影、电影、游戏、医学影像和工业检测等领域的广泛应用,展现其引领视觉技术革命的独特魅力。
|
12月前
|
人工智能 自然语言处理 搜索推荐
浪潮信息 Yuan-embedding-1.0 模型登顶MTEB榜单第一名
浪潮信息Yuan-Embedding-1.0模型在C-MTEB评测基准中荣获Retrieval任务第一名,推动中文语义向量技术发展
1781 7
浪潮信息 Yuan-embedding-1.0 模型登顶MTEB榜单第一名
|
数据可视化
ggGenshin&Genshinpalette|SCI绘图遇上原神,不输于CNS正刊调色板
本文介绍了两个R包——`ggGenshin`和`Genshinpalette`,它们提供了基于热门游戏《原神》角色色彩的调色板,用于数据可视化。`ggGenshin`包包含了一系列与游戏角色相关的颜色,可以方便地应用到`ggplot2`图形中,而`Genshinpalette`包则提供了更多角色的配色选项。通过这两个包,用户可以直接使用预设的配色方案,提升图表的视觉效果。文中还展示了使用这些调色板绘制的一些示例图表。
1023 1
|
机器学习/深度学习 PyTorch 算法框架/工具
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
571 0
|
机器学习/深度学习 并行计算 PyTorch
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
3051 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南