11-09 周四 CNN 卷积神经网络基础知识

11-09 周四 CNN 卷积神经网络
时间版本修改人描述
2023年11月9日09:38:12V0.1宋全恒新建文档

简介

 学习一下CNN,卷积神经网络。使用的视频课程。视觉相关的任务:

  • 人脸识别

 卷积网络与传统网络的区别:

<img alt=image-20231109094400591 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094400591.png&pos_id=img-Z35hmB60-1699522025179)>

<img alt=image-20231109094414779 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094414779.png&pos_id=img-08hzm0rf-1699522028665)>

卷积神经网络是一个三维的数据,是h*w*c

整体架构

<img alt=image-20231109094649673 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094649673.png&pos_id=img-AGVXtOFG-1699522031824)>

  • 输入层
  • 卷积层
  • 池化层
  • 全连接层

卷积层

调度卷积核是5*5*3,也是一个立方体的。

 卷积神经网络也是使用一组权重参数进行加权求和得出的。

<img alt=image-20231109094831385 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109094831385.png&pos_id=img-pBCi31QD-1699522034969)>

注: 上图仅演示了一个通道,图像是3通道。

 相当于权重参数矩阵为:

<img alt=image-20231109095218835 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109095218835.png&pos_id=img-ZZahJ8Qu-1699522038141)>

 卷积神经网络的目的也是找到一组最佳的权重参数。

注: 卷积核的第三个维度一定要一样才行。卷积采用内积实现。Filter的尺寸一般为3, 5,7。 在进行卷积核的时候与卷积核的第三个维度数量相等。

<img alt=image-20231109105238890 src=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Fyanchenmochen%2Fimgs%2Fimgsimage-20231109105238890.png&pos_id=img-41nSowP4-1699522038975)>

 5x5x3代表一个卷积核,该卷积核的深度为3,与输入的深度相同。得到一个特征图,深度与输入图相同。卷积核可以有多个,则可以得到多个特征图。即Feature W0, Feature W1, … 经过多个卷积核得到多个特征图feture picture。

 如下图所示:

image-20231109105404933

 上图经过卷积层得到了28 * 28 * 6个特征图。

将经过卷积核卷积之后的图堆叠在一起,得到了特征图堆。并且,卷积应该经过多次,依次得到Low-level Feature, Mid-Level Feature, High-Level Feature。也就是说,一次卷积是不够的。

image-20231109110748134

 上图说明卷积核5 * 5 * 3得到的是一个值,一个立方体得到一个值。也就是说,一个图如果一个卷积核扫描完全部得到的是一个28 * 28 * 1的图。使用6个卷积核,则得到的卷积图是28 * 28 * 6.

 第二卷积是10个 5x5x6得到就是24 * 24 * 10。

卷积核涉及参数

image-20231109111654745
步长

步长为1,得到5 * 5, 而步长为2, 得到3 *3 。 相当于步长越小,得到的特征较多,越丰富。一般视觉任务使用的步长为1,但相应的计算量较大,文本类任务,也有使用步长为2.

image-20231109111744195
卷积核尺寸

卷积核尺寸越小,越细粒度。 一般是3 * 3。

边缘填充

+pad,边缘填充属性。

越往边界的点,被利用的次数越少。下图中原始输入是5 * 5,通过边缘填充在边缘上变成了7 * 7. 又不希望添加的值影响计算。所以一般使用zero padding。

image-20231109112224568
卷积计算公式
image-20231109113033603

 对于下面的案例,可以得到输出的尺寸:

image-20231109113251254

在听这个课程的时候,学习了卷积核的作用。卷积核的深度与输入是相同的,因此,卷积核是一个立方体。但是得到的结果确实一个平面。因为一个输入图像区域只得到了一个值

 具体可以参见 3D

 2D卷积可以参见 2D卷积

卷积参数共享

卷积参数共享一个巨大的好处就是参数共享,同样的一组参数对图像中每个小区域进行处理。相对于传统的神经网络,参数降低了非常多。

image-20231109134400604

10个 5 * 5 * 3卷积核,共75 * 10 =750个卷积参数 再加上10个偏置项共760个参数。

池化层

卷积层的特征点太多,会导致计算量过大。而且有些特征对于任务并不重要。因此可以通过池化进行瘦身。降采样 downsample。

image-20231109134807557

 降采样的方式有最大值采样,平均值采样。 降采样也有区域和步长。2 * 2 并且步长为2.池化层不涉及矩阵操作,而是仅仅筛选动作。

  • max pooling 最好的特征。
  • 平均值池化 average pooling 用的比较少。

任务

 如下图,卷积层要经过relu, 非线性变换。卷积层和relu是一组。经过卷积组,池化,然后最后一个全连接FC进行分类。

 每个卷积组:

  • 卷积
  • Relu

 在卷积层最后进行全连接时,需要将特征图进行拉长操作,将图拉成一个特征向量。最后与分类数量个神经元进行全连接。

 一层神经网络: 带参数计算。relu是没有参数计算的。即激活没有参数。即POOL也没有参数计算的。如下图一共是7层神经网络。

image-20231109135323230

 特征图变化如下:

image-20231109135810731

 上图中转换即拉伸成向量。

Alexnet-2012

 227 * 227 * 3

image-20231109135941294

VGG-经典网络-2014

 VGG filter均为3 * 3,卷积核比较小,网络层数为16。在池化后,通过增加卷积次数,即增加特征图的数量来弥补池化的损失。但Alexnet训练8小时,VGG可能需要3天才能训练完成。

image-20231109140119211

 VGG 在实验室 16层的网络,比30层的时候效果好,因为深度学习,越深越好,但实验结果令人失望,深度学习进入低谷。

Resnet残差网络-2015

 何凯明的工作,将增加层数中具有促进效果的层数保留,网络训练的结果一定不会比之前差。

image-20231109140556245

 相当于残差网络拯救了深度学习神经网络。Resnet更加经典,更主流。

image-20231109141059014

 下图中橙色为Resnet,误差更小。

image-20231109141243759
感受野

 感受野有什么作用:希望感受野越来越大。3个3 * 3 得到的感受野为7 * 7, 那么与直接使用7 * 7的卷积核进行卷积需要的区别。

image-20231109141341031

 堆叠小的卷积核需要的参数越少,训练更快。而且小卷积核由于经过的relu次数多,非线性特征保存的更好。

image-20231109141930649

项目实战

构造神经网络

 conv + relu 是一个组合。

image-20231109142448589
  • in_channels : 通道数。

  • out_channels: 16,使用16个特征图。

  • kernel_size=5; 卷积核尺寸5 * 5

  • stride = 1; 步长。

  • padding=2 ; 边缘填充。

  • 前向传播得到预测结果

image-20231109143420839

训练

 使用pytorch进行训练。

image-20231109143610085

Vision模块

 TorchVision有许多的数据集。

  • 数据预处理

    • dataset数据集
  • 网络模块设置

    分类任务

    semantic segmentation

    object detection, instance segmentation and Person Keypoint Detection

    Video classfication

    • 甚至可以拿到别人的预训练模型
image-20231109144332156
  • 网络模型保存和测试
    • transforms
      • PIL Image

任务

任务介绍

 flowers 一共102种分类。

 要把数据和标签读进来。ImageFolder工具。

  • 数据预处理
    • DataLoader模块直接读取batch数据
  • 网络模块设置
    • 迁移学习
    • 需要把head层改一改 256 * 256 , 224 * 224
    • 训练时可以全部重新训练,也可以只训练咱们任务的层,本质目标是一致的。
  • 网络模型保存与测试

数据增强Data Augmentation

 让数据量更多。

 数据不够时,这样做。

 如何更好的利用数据,倾斜,水平和垂直翻转,旋转,放大和缩小,即得到一个新的数据。

image-20231109145738260

一般,网络的输入大小是固定的,因此,需要resize成预期大小。

 下面代码中CenterCrop(224)中心裁剪。

 RandomhorizontalFlip(p=0.5)概率值,是随机翻转的概率。

 亮度,对比度,饱和度 色相。

 transforms.Normalize() 即要进行标准化,参数1为均值, 参数2为标准差

 具体的样例代码:

image-20231109150211101

训练集做了标准化,则测试集也要做相同的标准化。

数据加载

image-20231109151656003

读取标签对应的名字

image-20231109154444863

展示下数据

image-20231109154714475 image-20231109154834989

迁移学习

image-20231109155033175

迁移学习的目标是用别人训练好的参数来执行任务。尽可能差异比较少一些。

 那么迁移学习,学那个部分呢:

  • A: 使用卷积层的权重参数进行初始化。
  • B: 将人家训练好的参数冻住。对全连接层进行重新定义。
    • 数据量越小,冻住的参数越多。不到10000.
    • 数据量10000多,两万。挑出来一些。

迁移学习,学习的非常快。迁移学习拿过来的模型都是经过大量实验的结果,经典网络结构,得到的结果更快也更好。如VGG, ResNet。

模型加载

 需要指定模型名称

image-20231109160756278

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
image-20231109160950304

需要修改最后全连接层,为当前用户的任务分类数目。

 加载模型,并使用预训练模型。

~/.cache/checkpoints/resnet152-b121ed2d.pth
model_ft = models.resnet152(pretrained=use_pretrained)
set_parameter_requires_grad(model_ft, feature_extract)
num_ftrs=model_ft.fc.in_features
model_ft.fc = nn.Sequential(nn.Linear(num_ftrs,102), nn.LogSoftmax(dim=1))
input_size= 224
image-20231109161238856

设置那些层需要训练

 如下的参数中:

  • model_name 指定了要使用的模型
  • 102 指定了目标分类数
  • feature_extract: 是否要冻住某些模型
  • use_pretrained: 是否要使用预训练模型。
image-20231109162034134

 显示那些参数需要重新开始训练。

image-20231109162256882

优化器设置

使用了学习率的衰减函数。效果会更稳定一些。

image-20231109162434659

训练模块

image-20231109162708803 image-20231109162807802 image-20231109162853156 image-20231109162948140 image-20231109163103654

保存模型参数权重字典

准确率

优化器参数权重字典

image-20231109163159034 image-20231109163341371

开始训练

model_fit, val_acc_history, train_acc_history, valid_losses, train_losses, LRs = train_model(model_ft, dataloaders, criterion, optimizer, num_epoches=10, is_inception=(model_name=='inception'))

测试网络效果

完整训练

 将所有参数的require_grad设置为TRue,将学习率调整的小一些,以为之前用了别人的网络参数,学习率过大,可能会破坏掉之前的训练参数。

<img alt= src=https://cdn.jsdelivr.net/gh/yanchenmochen/imgs/imgsimage-20231109165735676.png>

Load the checkpoint

 加载之前保存的最好的模型继续开始训练。

image-20231109165911702

实际测试

image-20231109170534039

加载模型

image-20231109170632279

测试数据预处理

image-20231109170839775

 将一张图像处理成输入。

得到处理结果

8是因为batchsize。

image-20231109171021606 image-20231109171107236 image-20231109171137736

总结

 看了一天这个课程,终于看完了,对于卷积神经网络也算是有了更加进一步的理解了。现在就是要多多实战,敲代码就好了。现在还有点困惑的点包括:

  • 优化器的选择
  • 损失函数的选择
     不过,这个课程让自己对于卷积的理解加深了许多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑怎么录制视频,录制的视频怎么剪辑?

在现今数字化的时代&#xff0c;视频成为了人们日常生活中不可或缺的一部分。因此&#xff0c;对于一些需要制作视频教程、录制游戏或者是进行视频演示的人来说&#xff0c;电脑录屏已经成为了一个必不可少的工具。那么&#xff0c;对于这些人来说&#xff0c;如何选择一个好用…

Zigbee—网络层地址分配机制

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;孤雏 0:21━━━━━━️&#x1f49f;──────── 4:14 &#x1f504; ◀️ ⏸ ▶️ ☰ &#x1f497;关注…

大厂面试题-MySQL中的RR隔离级别,到底有没有解决幻读问题?

就MySQL中的RR(Repeatable Reads)事务隔离级别&#xff0c;到底有没有解决幻读问题发起了激烈的讨论。 一部分人说有&#xff0c;一部分人说没有。 结论&#xff0c;MySQL中的RR事务隔离级别&#xff0c;在特定的情况下会出现幻读的问题。 所谓的幻读&#xff0c;表示在同一…

景联文科技加入中国人工智能产业发展联盟(AIIA),与行业各方共促AI产业发展

近日&#xff0c;景联文科技加入中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;与行业各方共同挖掘人工智能数据的更多价值&#xff0c;破解中国人工智能AI数据短缺难题。 中国人工智能产业发展联盟&#xff08;简称AIIA&#xff09;是在国家发改委、科技部…

GIS入门,xyz地图瓦片是什么,xyz数据格式详解,如何发布离线XYZ瓦片到nginx或者tomcat中

XYZ介绍 XYZ瓦片是一种在线地图数据格式,由goole公司开发。 与其他瓦片地图类似,XYZ瓦片将地图数据分解为一系列小的图像块,以提高地图显示效率和性能。 XYZ瓦片提供了一种开放的地图平台,使开发者可以轻松地将地图集成到自己的应用程序中。同时,它还提供了高分辨率图像和…

红海云签约和兆服饰,科技引领服饰行业人力资源数字化转型

和兆服饰从事多品牌多品类经营管理&#xff0c;旗下拥有POLOSPORT、POLOKIDS、CARTELO等国际品牌。作为一个主打POLO文化的服饰品牌&#xff0c;诞生于美国的POLOSPORT拥有现代感的产品设计、系列化的产品搭配、全方位的服务&#xff0c;是最具美国马球精神的休闲时尚服饰品牌之…

攻防世界题目练习——Web引导模式(四)(持续更新)

题目目录 1. shrine2. very_easy_sql3. fakebook 1. shrine 打开网页题目内容如下&#xff1a; 是一段代码&#xff0c;我们把它还原一下&#xff1a; import flask import osapp flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) #这里应该是将config配置里…

【Docker】设置容器系统字符集zh_CN.UTF-8退出失效:关于Docker容器配置环境变量,再次进入失效问题

设置容器系统字符集zh_CN.UTF-8退出失效&#xff1a;关于Docker容器配置环境变量&#xff0c;再次进入失效问题 修改正在运行的Docker容器内的字符集: 先进入Docker容器&#xff1a;docker exec -it 容器ID /bin/bash查看是否支持中文字符集&#xff1a;locale -a | grep zh&a…

PCIe寄存器之二

关键字索引&#xff1a; CAP_PM 对应&#xff1a;Capabilities: [c0] Power Management CAP_MSI 对应&#xff1a;Capabilities: [c8] MSI CAP_MSIX对应&#xff1a;Capabilities: [e0] MSI-X CAP_EXP 对应&#xff1a;Capabilities: [70] Express (v2) Endpoint 以上 [] 内的…

uni-app前端H5页面底部内容被tabbar遮挡

问题&#xff1a; 在用uniapp写小程序的时候&#xff0c;底部有一部分内容没显示出来&#xff0c;被底部的tabbar遮挡住了 解决&#xff1a; 给最外部的view设置样式padding-bottom: var(--window-bottom)&#xff0c;如下 参考&#xff1a; 参考1 参考2 使用 uni-app 框…

推送效率低?MobPush带着APP消息推送一站式解决方案来了

随着移动应用竞争的日趋激烈&#xff0c;如何拉新促活&#xff0c;保持用户粘性成为各大APP的运营的焦点和核心。作为一种有效的营销和用户保留工具。APP消息推送可以有效提高用户参与度&#xff0c;增强用户忠诚度&#xff0c;并最终提高业务效益。然而随着各大APP推送的高度同…

UML与PlantUML简介

UML与PlantUML 1、UML与PlantUML概述2、PlantUML使用 1、UML与PlantUML概述 UML&#xff08;Unified Modeling Language&#xff09;是一种统一建模语言&#xff0c;为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言&#xff0c;独立于任何具体程序设计语言…

YOLOv8-Seg改进: 分割小目标系列篇 | SPD-Conv,提升分割小目标和弱小分割图精度

🚀🚀🚀本文改进:SPD-Conv由一个空间到深度(SPD)层和一个无卷积步长(Conv)层组成,可以应用于大多数CNN体系结构,特别是在处理低分辨率图像和分割小目标等更困难的任务时。 🚀🚀🚀SPD-Conv 分割小目标检测首选,暴力涨点 🚀🚀🚀YOLOv8-seg创新专栏:http:…

什么是Node.js的NVM(Node Version Manager)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

YOLOv5检测界面-PyQt5实现

1.将detect.py运用到界面 要将 YOLOv5 的检测结果与 PyQt 界面结合&#xff0c;你需要进行一些额外的步骤。以下是一个简单的示例代码&#xff0c;展示如何使用 YOLOv5 进行目标检测并在 PyQt 界面中显示结果。 首先&#xff0c;确保你已经安装了必要的库&#xff1a; pip …

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…

单源最短路的简单应用

1.dijkstra维护最长路 下面这个是讨论区的一个佬的理解&#xff0c;非常的nice 总结一句话&#xff0c;dijkstra的贪心保证了每次选定的点在之后都不会被其他点所更新了 同理维护最长路的时候我们发现&#xff0c;如果权值是0-1的话&#xff0c;选定的最大值在之后不会变的更大…

5G边缘计算网关的功能及作用

5G边缘计算网关具有多种功能。 首先&#xff0c;它支持智能云端控制&#xff0c;可以通过5G/4G/WIFI等无线网络将采集的数据直接上云&#xff0c;实现异地远程监测控制、预警通知、报告推送和设备连接等工作。 其次&#xff0c;5G边缘计算网关可以采集各种数据&#xff0c;包…

只改一个参数让Golang GC耗时暴降到1/30!

&#x1f449;导读 Golang GC 问题的处理网上有比较多的参考文章与教程&#xff0c;本文则聚焦在一次实际业务场景中遇到的问题&#xff0c;并将问题排查处理的全过程详细地做了整理记录&#xff0c;相信对各位 Gopher 有较大参考价值。 &#x1f449;目录 1 问题现象 2 确定原…

玄子Share-HTML5知识手册

玄子Share-HTML5知识手册 前言&#xff1a; 这一版 HTML 笔记&#xff0c;算是我写的第四版了&#xff0c;第三版对照课本编写&#xff0c;第四版则是对照 MDN 官方文档编写&#xff0c;不论是术语亦或专业性&#xff0c;都更上一层 文章依托 MDN 文档&#xff0c;拓展了大量课…