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

【计算机视觉】万字长文详解:卷积神经网络

在这里插入图片描述
以下部分文字资料整合于网络,本文仅供自己学习用!

一、计算机视觉概述

在这里插入图片描述
如果输入层和隐藏层和之前一样都是采用全连接网络,参数过多会导致过拟合问题,其次这么多的参数存储下来对计算机的内存要求也是很高的
在这里插入图片描述
解决这一问题,就需要用到——卷积神经网络

这是一种理解卷积的角度(至少在吴恩达老师这个教学视频中是),也是我之前没有想到的。其实在该刚开始接受卷积神经网络时,我一直很想弄清卷积的真正含义,为此也学习了一些,和有自己的一些理解,详见后文2.6小节!

二、卷积神经网络

2.1:卷积运算

卷积运算是卷积神经网络的基本组成单元之一

这里将从边缘检测(edge detection)入手,举例来介绍卷积神经网络

在这里插入图片描述
通过这种卷积运算,我们可以检测到图像的边缘:(我们把中间的3x3的矩阵称为:过滤器、边缘检测器、卷积核
在这里插入图片描述
下面来讲,如何将这种卷积运算作为基本单元,运用到卷积神经网络中。

  • 正边缘(positive edges)和负边缘(negative edges):由亮变暗和由暗变亮
    在这里插入图片描述

  • 其他的边缘检测器(卷积核)
    在这里插入图片描述

  • 如何让算法自己学习得到边缘检测器,而不是像上面那样手动设计(传统的计算机视觉)——卷积神经网络
    🦄原理就是把卷积核中的数看作参数,利用反向传播(back propagation)去学习
    在这里插入图片描述
    这种学习得到的卷积核,会比计算机视觉研究人员所精心选择的更加稳定

在具体讲如何利用反向传播来学习得到卷积核的这9个参数之前,让我们学习一下卷积神经网络——卷积计算的底层架构的非常重要的组成部分

2.1.1:填充(padding)

首先看不对图像做填充的情况:
即:nxn的图像和fxf的卷积核进行卷积,得到结果大小为:(n-f+1)x(n-f+q)
在这里插入图片描述

💐这样卷积的缺点有:

  • shrinky output:这样得到的卷积结果会比原图像小,而没通过一层这样的卷积,图像就会缩小,在深层卷积神经网络中,最后得到的图像就会非常的小
  • throw away info from the edge:丢失边缘像素的信息。即对比于图像中其他像素提供的信息,边缘像素在卷积过程中只被利用一次或少次,这样我们会丢失掉一些边缘信息。
    在这里插入图片描述
    所以为了解决这两个问题,使用填充,对原图像进行像素填充
    在这里插入图片描述

总结一下,上面其实涉及到两种常用卷积:

  • valid convolutions:即不对原图像进行任何填充
  • same convolutions:对原图像进行填充并且保证卷积结果图像和原图像大小相同
    在这里插入图片描述
    由上图可知,对于Same convolutions,我们通常需要保证卷积核fxff奇数时,才可保证p = (f-1)/2 ,使得卷积结果大小与原图像大小相同。这也解释了为什么通常我们所使用的卷积核大小都是3x35x5。另外一个原因是,当卷积核是奇数时,会有一个中心像素点,事实上对图像进行卷积时,这个特殊的中心像素点是不可或缺的(你可以试想一下如果卷积核是偶数,你该如何卷积),中心像素可以很好的描述卷积核的位置,使用奇数的卷积核这也是计算机视觉所约定俗成的一种传统。

2.1.2:步长(stride)

上文所讲到的,也是默认卷积运算中步长为1,事实上,步长也是可以设定的。和padding一样,步长不同,也会影响卷积结果。下图是设置步长为2时的卷积示例
在这里插入图片描述

总结一下:(注意,这里的向下取整的实际含义是,保证卷积核始终在原图像填充后的那个图像中,而不能超出)
在这里插入图片描述

2.1.3:交叉相关(cross-correlation)

这一小节其实是一个概念补充。事实上学过数字信号处理的话,对于图像卷积(图像其实就是一个2维的数字信号),会将卷积核进行翻转后,再进行元素相乘、相加。事实上在计算机视觉领域,省略了翻转这一步骤,而是直接进行相乘、相加,所以在数学领域会将其称为交叉相关(corss-correlation),但是在深度学习和计算机视觉及其相关文献中,通常还是会将其称为卷积(convolutions).
在这里插入图片描述

2.1.4:3维卷积

事实上,上面所讲到的卷积都是对于2维图像而言(也就是灰度图),也成为二维卷积。而对于包含RGB这种三维图像,则属于三维卷积

在这里插入图片描述
但是你可能和我一样有相同的疑问:这有什么用呢?得到的结果还是二维

像下图展示这样,通过设置3D卷积核不同通道的参数值,你可以选择只检测红色通道的边缘,同时把其他通道的卷积核的参数值设置为0.或者只是把三个通道的卷积核参数设置为一样,这样的意义在于即使输入进来的是RGB图像也可以不用将其转为灰度图像而直接进行卷积计算(效果也是一样的)。
在这里插入图片描述

还有一个问题,就是:上文中,我们只是单单检测一种边缘——垂直。如果想同时检测多种边缘呢?比如同时检测水平和竖直边缘。那么我们需要多个检测器,或者说多个3D卷积核、过滤器,就像下图这样。但是注意到,得到的卷积结果的第三维度的大小就是使用的3D卷积核的个数。
在这里插入图片描述

2.2:卷积网络的一层

对卷积结果进行每个元素相加偏差b,并对其进行非线性变化,再对各个3D卷积核得到的结果进行整合于是得到4x4x2的一层卷积网络的输出结果。

在这里插入图片描述

2.2.1:和传统神经网络的对比

其实过程还是一致的

  1. 首先进行线性运算,将输入a[0]和参数W(对应的就是卷积核)进行相乘再相加
  2. 再加上偏差b
  3. 最后通过激活函数(即进行非线性变换)

在上面例子中,我们有2个3D卷积核,也就是说有2个特征(features)——卷积核的个数代表特征,是必须get到的,特别是在之后理解为什么卷积神经网络的底层原理上(不是卷积神经网络是什么,而是卷积神经网络为什么能行)。

我们再来解释一下本文最开始提到的,传统的全连接神经网络容易过拟合的问题(图像增大,则参数增多),而为什么卷积网络不会。

如下图,不管输入图像多大,卷积网络这一层需要通过训练从而学习得到的参数个数总是固定的:(27+1)x10.由此可知,卷积神经网络不易产生过拟合(overfitting)的问题。
在这里插入图片描述

2.2.2:Summary of notations

在这里插入图片描述

注意:在一些文献中,会把通道数放在前面,宽、高放在后面

2.3:卷积神经网络的简单实例

如下图,经过几层卷积后,最后被一步会把得到的卷积结果进行flatten展平,输入进全连接神经网络,通过逻辑回归或softmax进行分类。
在这里插入图片描述

这里我们可以观察到的是,输入图像(通常比较大),但随着卷积神经网络的深入,与开始图像会保持大小几乎不变,但随着输入图像会逐渐变小,而通道数逐渐增加

2.3.1:超参数(hyperparameter)

如上图,我们把箭头下方的那些参数(filter的个数、步长、padding…)称为超参数,选择这些超参数是卷积神经网络设计过程中的主要工作。

2.3.2:组成

在一个典型的卷积神经网络中,完整应该由以下3部分组成

  • 卷积层
  • 池化层
  • 全连接层
    在这里插入图片描述

2.3.3:卷积层的多层叠加

我们前面提到过随着卷积层的深入,通道数增大而图像减小。这样得到的好处是,每层使用较小的卷积核如3x3也能获得更大的感受野,只要叠加更多的卷积层,就能让感受野覆盖到整个图片。这也是为什么我们需要使用多个卷积层进行叠加。

那什么又是感受野呢?

2.3.4:感受野(Receptive Field)

感受野是一个非常重要的概念,receptive field往往是描述两个feature maps A/B上神经元的关系,假设从A经过若干个操作得到B,这时候B上的一个区域areaB只会跟a上的一个区域areaA相关,这时候areaA成为areaB的感受野。用图片来表示:
在这里插入图片描述
在上图里面,map3里1x1的区域对应map2的receptive field是那个红色的7x7的区域,而map2里7x7的区域对应于map1的receptive field是蓝色的11x11的区域,所以map3里1x1的区域对应map 1的receptive field是蓝色的11x11的区域。

2.4:池化层

我们先来看两种池化类型的示例:
在这里插入图片描述

在这里插入图片描述

2.4.1:原理

池化操作的作用有两个

  • 减轻计算负担
  • 增加感受野

吴恩达老师在视频中也说到过,池化操作背后深刻的原理其实也不见得有人能说得透彻清除,本质上就是因为实验效果好,可以加。

其实非要去理解的话,也是可以的,因为图像本身就是存在冗余信息的,用4个像素所表示特征信息可以用1个像素代替。从原图像中进行最大值或均值采样后(也就是所谓的池化),可以更好的把图像中的特征得到、识别,既然这样,能加为什么不加呢?

还需要补充一点是,在alphaGo的算法背后,利用的也是卷积神经网络,不同的是只有卷积层而没有池化层,因为在棋盘上每一个像素点都至关重要,不能因为减轻计算负担而随意舍去。这也是理解池化的一个例子。

2.4.2:总结

需要注意两点

  • 池化层的超参数是人工设定的,不需要通过训练从而学习得到
  • 池化层的最大值和平均值采样是单独作用于输入的每一个通道的。池化结果的通道数和输入的通道数相同。
    在这里插入图片描述

2.5:完整的卷积神经网络示例

注意:由于池化层没有需要学习的参数,只有超参数,所以通常会把卷积层和池化层两层统称为一层——1 layer

在这里插入图片描述

当然,关于卷积层和池化层的安排,上图只是一种示例,实际上,还有可能是多个卷积层后面跟着一个池化层,或者一些特殊场景(如上文提到过的alphaGo的棋盘例子中)根本没有池化层。

在这里插入图片描述
你需要清除以下几点

  1. 池化层没有任何需要学习的参数
  2. 卷积层趋向于拥有越来越少的参数
  3. 多数参数存在于全连接神经网络上

2.6:卷积神经网络的原理

其实上文一直在谈的是——卷积神经网络是什么,由什么组成等等。但是我觉得最重要的还是理解:为什么,为什么卷积神经网络可以。(虽然在本文最开始也把传统的全连接神经网络和带卷积的神经网络进行的简单的对比,说明为什么需要采用卷积而不是全连接,但我觉得那只是一方面)

首先我们需要理解,卷积神经网络,其实是计算机视觉+深度学习。在之前的机器学习中我们知道,通过输入数据,可以很好的进行分类、回归。将计算机视觉和深度学习结合起来,其实本质还是一样的,不同的在于:输入的数据,这也是为什么需要加入卷积层,而不能直接运用全连接层处理数据的原因。

比如之前讲的预测房价,输入就是房子大小、年龄这些基本的单特征。而对于计算机而言,你给它一张图片,只是一个三维或者二维矩阵,没有任何特征信息,换句话来说,直接把图片输入到全连接神经网络,即将像素点作为特征,这样的特征难以利用和复用以及进行比较。而卷积层的作用呢?提取特征,而且是有用的可复用的局部特征。通过卷积层提取到特征,并输入到全连接层进行相应的和之前机器学习中学到的传统的全连接神经网络进行特征信息处理并进行预测一模一样。一言蔽之:卷积神经网络识别图像的第一步:利用卷积层提取图像的局部特征。
在这里插入图片描述
在这里插入图片描述

OK,现在我们理解了卷积的作用——提取图像中的特征信息。我们现在的问题就缩小到了——卷积为什么能提取特征?提取的特征又是如何形式的?为什么这种方式提取的特征有效?

2.6.1:特征提取

从上文所讲的卷积操作,以及下面卷积操作结果的直观感受:卷积操作确实能提取特征。例如下图就利用垂直卷积核和水平卷积核,将图像中的垂直边缘信息和水平边缘信息提取出来。

到这里我们知道两点

  • 卷积操作确实可以提取局部特征
  • 不同的特征需要设计不同的卷积核(而在神经网络中,卷积核中的参数无需手动设计,网络会自己学习
    在这里插入图片描述
    关于卷积操作为什么能提取特征背后的本质,和卷积核到底充当一个什么角色,深入理解的话,那就需要了解下面所讲的:傅里叶变换和加窗傅里叶变换

2.6.2:加窗傅里叶变换

卷积的本质是:二维的加窗傅里叶变换。学过信号与系统的话,大致对傅里叶变换有一个理解,我之前也专门写了一篇理解傅里叶变换的博客:傅里叶变换和其图像处理中的应用。这里的卷积核其实就是类比于傅里叶基,通过利用卷积核对二维图像数据进行卷积操作(加窗傅里叶变换),其实是将图像中和卷积核相似的特征信息提取出来(说白了,如果卷积核套在这块像素和卷积核想表达的特征相似,那么这次卷积得到的中心像素值就大,也就是这块存在这种卷积特征)。
在这里插入图片描述

这也是为什么上文讲卷积操作时,吴恩达老师会说,有几个卷积核,也就是有几个特征的含义。
在这里插入图片描述

不过需要注意的是,不像上图中那些规则的卷积核,神经网络中卷积核的样子(也就是卷积核的参数)是由反向传播学习得到的,具体卷积核的样子也是等到训练结束后才得知。
在这里插入图片描述

在这里插入图片描述

比如下面举例识别字母X的例子。我们假设一开始卷积核模板已经学习得到或者设计好,即以下三个特征(模式/卷积核/过滤器)。
在这里插入图片描述

当利用相应的模板(卷积核)对其进行卷积操作时,与模板特征匹配越高,在中心像素点位置的值也就越高(响应越高)——本质上就是,在这个位置捕捉到了这个卷积核对应的特征!

在这里插入图片描述
然后向之前一样,用过滤器将原图像分别卷积一遍,得到3个feature map

feature map 是特征图的意思,是指每个卷积核和输入卷积后形成的特征图,特征图的个数和卷积核的个数相同

在这里插入图片描述
思考:我们可以看到,这样得到的特征信息,包含两个方面:

  • 这个位置存在什么特征
  • 这个特征存在的位置

🪧结合位置+特征这两个信息,将其展平(并不会丢失信息),输入全连接神经网络,神经网络开始干活,对特征信息进行像传统神经网络该做的事情,进行预测。

当然,上面这个例子过于简单,只有一层,多层神经网络和池化我们也讲到,其实还是为了获得更大的感受野和减轻计算负担,本质上还是一样的!

所以为什么经常会看到说对比于传统的计算机视觉,卷积神经网络可以自己学习特征,说到底就是通过反向传播学习这些卷积核里的参数。

2.6.3:卷积神经网络特征图可视化

接下来我们对特征图feature map进行可视化,来深入了解:

定义了一个4层的卷积,每个卷积层分别包含9个卷积、Relu激活函数和尺度不等的池化操作,系数全部是随机初始化

输入原图:
在这里插入图片描述
第一层卷积后可视化的特征图:
在这里插入图片描述
第二层卷积后可视化的特征图:
在这里插入图片描述
第三层卷积后可视化的特征图:

在这里插入图片描述

第四层卷积后可视化的特征图:
在这里插入图片描述
从不同层可视化出来的特征图大概可以总结出一点规律:

  1. 浅层网络提取的是纹理、细节特征
  2. 深层网络提取的是轮廓、形状、最强特征(如猫的眼睛区域)——或者说是前面特征(卷积核)叠加效果的通用、最强特征(个人直觉上),但看一层的特征当然看起来似乎不可解释,但是实际上最后得到的特征图是建立在前面那么多卷积核作用之后的。
  3. 浅层网络包含更多的特征,也具备提取关键特征(如第一组特征图里的第4张特征图,提取出的是猫眼睛特征)的能力
  4. 相对而言,层数越深,提取的特征越具有代表性
  5. 图像的分辨率是越来越小的

以上是个人结合一些视频和文章资料学习、整合和加入自己理解所写,能力有限,若有欠妥地方,欢迎评论区讨论和指正!💐

相关文章:

【计算机视觉】万字长文详解:卷积神经网络

以下部分文字资料整合于网络,本文仅供自己学习用! 一、计算机视觉概述 如果输入层和隐藏层和之前一样都是采用全连接网络,参数过多会导致过拟合问题,其次这么多的参数存储下来对计算机的内存要求也是很高的 解决这一问题&#x…...

Vue3项目封装一个Element-plus Pagination分页

前言:后台系统分页肯定是离不开的,但是ui框架都很多,我们可以定义封装一种格式,所有项目按到这个结构来做. 实例: 第一步:在项目components组件新建一个分页组件,用来进行封装组件. 第二步:根据官方的进行定义,官方提供的这些,需要我们封装成动态模式 第三步:代码改造 <!-…...

node.js(nest.js控制器)学习笔记

nest.js控制器&#xff1a; 控制器负责处理传入请求并向客户端返回响应。 为了创建基本控制器&#xff0c;我们使用类和装饰器。装饰器将类与所需的元数据相关联&#xff0c;并使 Nest 能够创建路由映射&#xff08;将请求绑定到相应的控制器&#xff09;。 1.获取get请求传参…...

Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

文章目录 一、Builder模式二、工厂模式三、单例模式四、代理模式五、组合模式六、模板方式模式七、适配器模式八、装饰器模式九、迭代器模式 虽然我们都知道有23种设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;Mybatis源码中使用了大…...

用的到的linux-文件移动-Day2

前言&#xff1a; 在上一节&#xff0c;我们复习了cd大法和创建生成文件和文件夹的方法&#xff0c;介绍了一些“偷懒”&#xff08;高效&#xff09;的小技巧&#xff0c;本节&#xff0c;我们一起来探讨下&#xff0c;我们对文件移动操作时有哪些可以偷懒的小技巧~ 一、复制…...

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…...

【linux】文件修改记录

是的&#xff0c;在Linux上&#xff0c;您可以使用’ find 命令检查最近修改的文件。此实用程序可以搜索在指定天数内修改过的文件。你可以这样使用它: 查找主目录中最近24小时(1天)内修改过的文件。 find ~ -type f -mtime -1命令说明: -“~”表示您的主目录。 ’ -type f…...

Vue学习Element-ui

声明&#xff1a;本文来源于黑马程序员PDF讲义 Ajax 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是 互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2…...

存内计算技术—解决冯·诺依曼瓶颈的AI算力引擎

文章目录 存内计算技术背景CSDN首个存内计算开发者社区硅基光电子技术存内计算提升AI算力知存科技存算一体芯片技术基于存内计算的语音芯片的实现挑战 参考文献 存内计算技术背景 存内计算技术是一种革新性的计算架构&#xff0c;旨在克服传统冯诺依曼架构的瓶颈&#xff0c;并…...

数据结构--树

一、树的基本术语 结点:树中的一个独立单元 结点的度:结点下分支的个数 树的度:树中所有结点中度的最大值 非终端结点:度不为0的结点 双亲和孩子:结点下的子树称为该结点的孩子.相应地,该结点称为孩子的双亲 兄弟:同一个双亲的孩子之间 祖先:从根到该结点所经分支上的所…...

计算机网络_1.3电路交换、分组交换和报文交换

1.3电路交换、分组交换和报文交换 一、电路交换1、“电路交换”例子引入2、电路交换的三个阶段3、计算机之间的数据传送不适合采用电路交换 二、分组交换1、发送方&#xff08;1&#xff09;报文&#xff08;2&#xff09;分组&#xff08;3&#xff09;首部 2、交换节点3、接收…...

【AI视野·今日NLP 自然语言处理论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 15 Jan 2024 Totally 57 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Machine Translation Models are Zero-Shot Detectors of Translation Direction Authors Michelle Wastl, Ja…...

神经网络的一些常规概念

epoch&#xff1a;是指所有样本数据在神经网络训练一次&#xff08;单次epoch(全部训练样本/batchsize)/iteration1&#xff09;或者&#xff08;1个epochiteration数 batchsize数&#xff09; batch-size&#xff1a;顾名思义就是批次大小&#xff0c;也就是一次训练选取的样…...

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程 文章目录 前言一、引入依赖二、创建数据库连接简单链接连接选项开启日志调试 三、生成实体安装sea-orm-cli创建数据库表使用sea-orm-cli命令生成实体文件代码 四、增删改查实现新增数据主键查找条件查找查找用户名…...

SQL中limit的用法

在SQL中&#xff0c;LIMIT是一个用于限制返回结果行数的关键词。它可用于在查询结果中指定返回的行数&#xff0c;从而可以用于分页查询或限制结果集大小。 LIMIT关键词有两种常用的语法格式&#xff1a; LIMIT offset, count&#xff1a;该语法用于指定返回结果的起始位置和…...

vue3 [Vue warn]: Unhandled error during execution of scheduler flush

文章目录 前言一、报错截图二、排除问题思路相关问题 Vue3 优雅解决方法异步组件异同之处&#xff1a;好处&#xff1a;在使用异步组件时&#xff0c;有几个注意点&#xff1a; vue3 定义与使用异步组件 总结 前言 Bug 记录。开发环境运行正常&#xff0c;构建后时不时触发下面…...

【vue2源码】阶段一:Vue 初始化

文章目录 一、项目目录1、主目录2、打包入口 二、构造函数Vue的初始化1、创建 Vue 构造函数2、初始化内容分析2.1 initMixin2.2 stateMixin2.3 eventsMixin2.4 lifecycleMixin2.5 renderMixin 一、项目目录 源码版本&#xff1a;2.7.16 1、主目录 src |-- compiler # 包…...

14.java集合

文章目录 概念Collection 接口概念示例 Iterator 迭代器基本操作&#xff1a;并发修改异常增强循环遍历数组&#xff1a;遍历集合&#xff1a;遍历字符串&#xff1a;限制 list接口ListIteratorArrayList创建 ArrayList&#xff1a;添加元素&#xff1a;获取元素&#xff1a;修…...

二叉树顺序结构堆实现

目录 Test.c测试代码 test1 test2 test3 &#x1f387;Test.c总代码 Heap.h头文件&函数声明 头文件 函数声明 &#x1f387;Heap.h总代码 Heap.c函数实现 ☁HeapInit初始化 ☁HeapDestroy销毁 ☁HeapPush插入数据 【1】插入数据 【2】向上调整Adjustup❗ …...

正则表达式 与文本三剑客(sed grep awk)

一&#xff0c;正则表达式 &#xff08;一&#xff09;正则表达式相关定义 1&#xff0c;正则表达式含义 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意…...

【XR806开发板试用】全志 XR806 OpenHarmony 鸿蒙系统固件烧录

大家好&#xff0c;我是极智视界&#xff0c;本教程详细记录了全志 XR806 OpenHarmony 鸿蒙系统固件烧录的方法。 在上一篇文章《【嵌入式AI】全志 XR806 OpenHarmony 鸿蒙系统固件编译》中咱们已经编译生成了系统镜像&#xff0c;这里把这个编译出来的镜像烧录到 XR806 板子里…...

linux环境安装git、maven、jenkins等

重启 jenkins的命令&#xff1a; systemctl start jenkins 如果没有vim 命令 可以使用 yum install vim 安装 vim git 下载包地址 https://www.kernel.org/pub/software/scm/git/git-2.28.0.tar.gz 1.安装依赖环境&#xff1a; yum install -y curl-devel expat-devel ge…...

RabbitMQ快速上手

首先他的需求实在什么地方。我美哟明显的感受到。 它给我的最大感受就是脱裤子放屁——多此一举&#xff0c;的感觉。 他将信息发送给服务端中间件。在由MQ服务器发送消息。 服务器会监听消息。 但是它不仅仅局限于削峰填谷和稳定发送信息的功能&#xff0c;它还有其他重要…...

SpringBoot activemq收发消息、配置及原理

SpringBoot集成消息处理框架 Spring framework提供了对JMS和AMQP消息框架的无缝集成&#xff0c;为Spring项目使用消息处理框架提供了极大的便利。 与Spring framework相比&#xff0c;Spring Boot更近了一步&#xff0c;通过auto-configuration机制实现了对jms及amqp主流框架…...

视频智能识别安全帽佩戴系统-工地安全帽佩戴识别算法---豌豆云

视频智能识别安全帽佩戴系统能够从繁杂的工地、煤矿、车间等场景下同时对多个目标是否戴安全帽穿反光衣进行实时识别。 当视频智能识别安全帽佩戴系统发现作业人员没有戴安全帽、穿反光衣或者戴安全带&#xff0c;系统会及时报警提醒&#xff0c;并抓拍存档。 视频智能识别安…...

指针的深入理解(三)

这一节主要使用复习回调函数&#xff0c; 利用冒泡模拟实现qsort函数。 qsort 排序使用冒泡排序&#xff0c;主要难点在于运用元素个数和字节数以及基地址控制元素的比较&#xff1a; if里面使用了一个判断函数&#xff0c;qsort可以排序任意的数据&#xff0c;原因就是因为可…...

【Linux C | 网络编程】详细介绍 “三次握手(建立连接)、四次挥手(终止连接)、TCP状态”

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

主从数据库MySQL服务重启步骤与注意事项

主从数据库MySQL服务重启步骤与注意事项 实验环境&#xff1a; 172.20.26.34 &#xff08;主应用服务器&#xff09; 172.20.26.26 &#xff08;备应用服务器&#xff09; 172.20.26.37 &#xff08;主库服务器&#xff09; 172.20.26.38 &#xff08;从库服务器&…...

netlink学习

netlink是什么 netlink是Linux内核中的一种进程间通信&#xff08;IPC&#xff09;机制。它允许内核空间与用户空间之间&#xff0c;以及用户空间进程之间进行双向通信。 内核里的很多子系统使用netlink通信&#xff0c;包括网络管理&#xff08;Routing&#xff0c;Netfilt…...

地理空间分析10——空间数据分析中的地理编码与Python

目录 写在开头1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API1.3 Python中实现代码2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德地图…...