PyTorch深度学习中卷积神经网络(CNN)的讲解及图像处理实战(超详细 附源码)

简介: PyTorch深度学习中卷积神经网络(CNN)的讲解及图像处理实战(超详细 附源码)

需要源码和图片集请点赞关注收藏后评论区留言私信~~~

一、卷积神经网络简介

卷积神经网络是深度学习中最常用的一种网络结构,它作为一种深度神经网络结构,擅长处理图像相关的问题,能够将目标图像降维并提取特征,以进行分类识别等运算

二、卷积神经网络核心思想

1:局部感知

图像的局部像素之间往往存在着较强的相关性,局部感知正是利用了这一特性,每次只针对图像的局部信息进行感知,得到特征图,而后在更深层次的网络中继续对所得特征图的局部信息进行高维感知,以此从局部到整体来获取图像信息,使用局部感知时,神经元只和下一层的部分神经元进行连接,每一个局部感知区域都对应着一个卷积核,此外剧本感知大大降低了网络的参数。

2:权值共享

类似于局部感知,同样从像素相关性和参数缩减方面进行考虑。它实现的是多层像素共享一个卷积核的功能,之所以可以这样处理图像,是因为像素相关性高的局部区域往往具有相同的纹理特征,可以用同一个卷积核来学习这部分特征

3:下采样

在实际工作中,通常需要下采样技术对各层特征图进行压缩处理,减少后续网络的权重参数,减少过拟合问题,便于提起图像的高维特征

三、卷积神经网络结构

1:输入层

2:卷积层

基于图像的空间局部相关性分别抽取图像局部特征,通过将这些局部特征进行连接,形成整体特征

单通道与多通道卷积层示意图如下

3:激励层

用于将卷积层的输出结果进行非线性映射

4:池化层

其功能在于降低数据量,减少参数数量,从而预防网络过拟合。分为最大池化与平均池化

5:全连接层

与传统神经网络相同,使用一个或多个神经元来输出预测数据

四、CNN处理图像实战

原图片如下

转换为灰度图效果如下 转换时只需要在imshow中指定输出的颜色格式即可变换

将图像背景转换为蓝色

转换为黄色

BrBG颜色效果如下

五、代码

部分源码如下

import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
import torch.nn.functional as F
from PIL import Image
import matplotlib.pyplot as plt
import pylab
############################################get_ipython().run_line_magic('matplotlib', 'inline')
im = Image.open(r'C:\Users.jpg').convert('L')   # 读入一张灰度图的图片
im = np.array(im, dtype='float32')    # 将其转换为一个矩阵
am = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(im)
print(am)
# 可视化图片
plt.imshow(im.astype('uint8'), cmap='gray')
pylab.show()
# 将图片矩阵转化为 pytorch tensor,并适配卷积输入的要求
print(am.shape)
im = torch.from_numpy(im.reshape((1, 1, im.shape[0], im.shape[1])))
am = torch.from_numpy(am.reshape((1, 1, am.shape[0], am.shape[1])))
print(im)
print(am)
# 使用 nn.Conv2d
conv1 = nn.Conv2d(1, 1, 3, bias=False)    # 输入通道数,输出通道数,核大小,定义卷积
sobel_kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], dtype='float32')   # 定义轮廓检测算子
sobel_kernel = sobel_kernel.reshape((1, 1, 3, 3))   # 适配卷积的输入输出
conv1.weight.data = torch.from_numpy(sobel_kernel)  # 给卷积的 kernel 赋值
edge1 = conv1(Variable(im))         # 作用在图片上
#edge2 = conv1(Variable(am))
edge1 = edge1.data.squeeze().numpy()      # 将输出转换为图片的格式
#edge2 = edge2.data.squeeze().numpy()
plt.imsh
# 使用 F.conv2d
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))
edge2 = F.conv2d(Variable(im), weight)          # 作用在图片上
edge2 = edge2.data.squeeze().numpy()          # 将输出转换为图片的格式
pw()
# 使用 nn.MaxPool2d
pool1 = nn.MaxPool2d(2, 2)
print('before max pool, image shape: {} x {}'.format(im.shape[2], im.shape[3]))
small_im1 = pool1(Variable(im))
small_im1 = small_im1.data.squeeze().numpy()
print('after max pool, image shape: {} x {} '.format(small_im1.shape[0], small_im1.shape[1]))
pl)
# F.max_pool2d
print('before max pool, image shape: {} x {}'.format(im.shape[2], im.shape[3]))
small_im2 = F.max_pool2d(Variable(im), 2, 2)
small_im2 = small_im2.data.squeeze().numpy()
print('after max pool, image shape: {} x {} '.format(small_im1.shape[0], small_im1.shape[1]))
ow()
#输入数据
cs = np.array([[0,0,0,1,0,1,2],[0,1,1,1,1,0,0],[0,1,1,2,2,0,1],[0,0,1,2,2,1,1],[0,0,0,1,1,0,1],[0,0,2,1,2,1,0],[1,0,1,2,0,0,1]],dtype='float32')
cs = torch.from_numpy(cs.reshape((1, 1, cs.shape[0], cs.shape[1])))
conv1 = nn.Conv2d(1, 1, 3, bias=False)
# 定义卷积核
0,0,0,0]],[[0,0,0,0,0,0,0],[0,2,1,2,0,1,0],[0,1,2,0,0,1,0],[0,0,1,0,2,1,0],[0,2,0,1,2,0,0],[0,1,0,0,1,0,0],[0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0],[0,0,0,1,2,0,0],[0,0,2,1,0,0,0],[0,1,0,0,0,1,0],[0,2,0,0,0,2,0],[0,1,1,2,1,0,0],[0,0,0,0,0,0,0]]],dtype='float32')
cs = torch.from_numpy(cs.reshape(1,cs.shape[0],cs.shape[1],cs.shape[2]))
conv2 = nn.Conv2d( in_channels=3, out_channels=2, kernel_size=3, stride=2, padding=0,bias=True)
# 定义卷积核
conv2_kernel = np.array([[[[-1, 0, 1], [0, 0, 0], [1, -1, 1]],[[-1,1,1],[0,1,0],[1,0,0]],[[1,-1,1],[-1,1,0],[0,1,0]]],[[[0, 0, 1], [1, -1, 1], [0, 0, 1]],[[1,0,1],[-1,0,-1],[0,-1,0]],[[0,1,1],[-1,-1,0],[1,1,0]]]], dtype='float32')
# 适配卷积的输入输出
conv2_kernel = conv2_kernel.reshape((2, 3, 3, 3))
pylab.show()
# 定义偏置项
'''
conv2_bias = np.array([1,0])
conv2.weight.data = torch.from_numpy(conv2_kernel)
conv2.bias.data = torch.from_numpy(conv2_bias)
final2 = conv2(Variable(cs))
print(final2)
'''

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
CNN中的注意力机制综合指南:从理论到Pytorch代码实现
注意力机制已成为深度学习模型的关键组件,尤其在卷积神经网络(CNN)中发挥了重要作用。通过使模型关注输入数据中最相关的部分,注意力机制显著提升了CNN在图像分类、目标检测和语义分割等任务中的表现。本文将详细介绍CNN中的注意力机制,包括其基本概念、不同类型(如通道注意力、空间注意力和混合注意力)以及实际实现方法。此外,还将探讨注意力机制在多个计算机视觉任务中的应用效果及其面临的挑战。无论是图像分类还是医学图像分析,注意力机制都能显著提升模型性能,并在不断发展的深度学习领域中扮演重要角色。
121 10
|
2月前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
196 1
|
2月前
|
机器学习/深度学习 编解码 算法
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
46 0
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。
|
3月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
69 0
|
5月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
**核心程序**: 完整版代码附中文注释,确保清晰理解。 **理论概述**: 利用CNN从视频中学习步态时空特征。 **系统框架**: 1. 数据预处理 2. CNN特征提取 3. 构建CNN模型 4. 训练与优化 5. 识别测试 **CNN原理**: 卷积、池化、激活功能强大特征学习。 **CASIA数据库**: 高质量数据集促进模型鲁棒性。 **结论**: CNN驱动的步态识别展现高精度,潜力巨大,适用于监控和安全领域。
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
189 1
|
4月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)原理与实践
【8月更文挑战第31天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力脱颖而出。本文将深入浅出地探讨卷积神经网络(CNN)这一核心组件,解析其在图像识别等领域的应用原理,并通过Python代码示例带领读者步入实践。我们将从CNN的基本概念出发,逐步深入到架构设计,最后通过一个简易项目展示如何将理论应用于实际问题解决。无论你是深度学习的初学者还是希望深化理解的实践者,这篇文章都将为你提供有价值的洞见和指导。
|
5月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
【7月更文挑战第31天】在数据驱动时代,Python凭借其简洁性与强大的库支持,成为数据分析与机器学习的首选语言。**数据分析基础**从Pandas和NumPy开始,Pandas简化了数据处理和清洗,NumPy支持高效的数学运算。例如,加载并清洗CSV数据、计算总销售额等。
63 2
|
5月前
|
机器学习/深度学习 人工智能 数据挖掘
从0到1构建AI帝国:PyTorch深度学习框架下的数据分析与实战秘籍
【7月更文挑战第30天】PyTorch以其灵活性和易用性成为深度学习的首选框架。
70 2

热门文章

最新文章