MMDetection3D库中的一些模块介绍

news2025/7/13 20:52:42

本文目前仅包含2个体素编码器、2个中间编码器、1个主干网络、1个颈部网络和1个检测头。如果有机会,会继续补充更多模型。
若发现内容有误,欢迎指出。

  MMDetection3D的点云数据一般会经历如下步骤/模块:

训练阶段
测试阶段
点云
体素化
体素编码器
中间编码器
主干网络
颈部网络
检测头
损失函数计算
预测结果生成

  下面分别介绍每个部分的一些典型模型。

0. 体素化函数

  在介绍体素编码器前,需要先介绍体素化函数,以理解体素编码器的输入参数含义。

0.1 mmcv.ops.voxelize中的Voxelization类

  • 初始化参数:
参数名称数据类型默认值含义取值说明
max_voxels(int, int)-最大体素数两个元素分别表示训练时和测试时的最大体素数
max_num_pointsint-体素内最大点数记为 M M M
point_cloud_rangeList(float)点云范围列表长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max]
voxel_sizeList(float)-每个体素的大小列表长为3,依次表示体素的 x , y , z x,y,z x,y,z尺寸,即[x_size,y_size,z_size]

注:将体素大小z_zise设置为与点云高度范围相同时,就可以实现柱体化操作。

  • forward函数:
参数名称数据类型默认值含义取值说明
inputTensor(float)-点云特征 ( n p , C ) (n_p,C) (np,C),其中 n p n_p np为点的数量, C C C为通道维度
featuresTensor(float)返回值1每个体素内的点 ( n , M , C ) (n,M,C) (n,M,C),其中 n n n为非空体素数,若第 i i i个体素内的点数 m i < M m_i<M mi<M,则features[i,j,:] j ≥ m i j\geq m_i jmi)为零向量
num_pointsTensor(int)返回值2每个体素内的点数 ( n , ) (n,) (n,),其中第 i i i个体素内的点数为num_points[i](即上文的 m i m_i mi
coorsTensor(int)返回值3每个体素的3维位置索引 ( n , 3 ) (n,3) (n,3),其中3表示z_id,y_id,x_id

0.2 MVXTwoStageDetector类中的体素化函数voxelize

  • 初始化:初始化mmcv.ops.voxelize中的Voxelization类为self.points_voxel_layer
  • voxelize函数:
参数名称数据类型默认值含义取值说明
pointsList(Tensor(float))-一个batch的点云列表长为batch size,其第 i i i个元素大小为 ( n i , p , C ) (n_{i,p},C) (ni,p,C)
voxelsTensor(float)返回值1每个体素内的点 ( N , M , C ) (N,M,C) (N,M,C),其中 N N N为整个batch的总非空体素数,即 N = ∑ i n i N=\sum_i n_i N=ini
num_pointsTensor(int)返回值2每个体素内的点数大小为 ( N , ) (N,) (N,)
coorsTensor(int)返回值3每个体素的batch索引和3维位置索引 ( N , 4 ) (N,4) (N,4),其中4表示batch_id,z_id,y_id,x_id

1. 体素编码器(VOXEL_ENCODERS)

1.1 HardSimpleVFE

  • 作用:将体素内的点取平均作为体素特征。通常搭配SparseEncoder中间编码器。
  • 初始化参数:
参数名称数据类型默认值含义取值说明
num_featuresint-点云的特征维度记为 C C C
  • forward函数:
参数名称数据类型默认值含义取值说明
featuresTensor(float)-每个体素内的点大小为 ( N , M , C ) (N,M,C) (N,M,C),可为MVXTwoStageDetector类中的voxelize函数输出
num_pointsTensor(int)-每个体素内的点数大小为 ( N , ) (N,) (N,),可为MVXTwoStageDetector类中的voxelize函数输出
coorsTensor(int)-每个体素的batch索引和3维位置索引大小为 ( N , 4 ) (N,4) (N,4),可为MVXTwoStageDetector类中的voxelize函数输出(在本函数中无实际作用,仅为和其余体素编码器有相同的输入)
返回值Tensor(float)返回值非空体素特征大小为 ( N , C ) (N,C) (N,C)

1.2 PillarFeatureNet

  用于点云的柱体表达编码。通常搭配PointPillarsScatter中间编码器。
在这里插入图片描述

  • 初始化参数:
参数名称数据类型默认值含义取值说明
in_channelsint-柱体的特征维度记为 C C C
feat_channelsTuple(int)--长度表示图中PFN的数量 N N N,第 i i i个元素表示第 i i i个PFN的输出通道数
with_distanceboolFalse表示是否将点到原点的距离附加在点的通道维度-
with_cluster_centerboolTrue表示是否将点到体素质心的三维偏移量附加在点的通道维度-
with_voxel_centerboolTrue表示是否将点到体素中心的三维偏移量附加在点的通道维度-
voxel_sizeList(float)-每个体素的大小列表长为3,依次表示体素的 x , y , z x,y,z x,y,z尺寸,即[x_size,y_size,z_size]
point_cloud_rangeTuple(float)-点云范围长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max]
norm_cfgdict归一化类型默认为BN1d设置归一化类型配置文件格式
modestr池化类型默认为最大池化设置池化类型'max’表示最大池化,'avg’表示均值池化
legacyboolTrue-若为True,会导致with_cluster_center=True时影响到原始特征,且若此时with_distance=True,则附加的特征会变为到体素中心的距离而非到原点的距离;为False时结果正常
  • forward函数:与HardSimpleVFE的forward函数输入和输出含义相同。

2. 中间编码器(MIDDLE_ENCODERS)

2.1 SparseEncoder

在这里插入图片描述

  • 初始化参数:
参数名称数据类型默认值含义取值说明
in_channelsint-输入通道数记为 C C C
sparse_shapeList(int)-体素空间的shape列表长为3,依次表示 z , y , x z,y,x z,y,x方向的体素数
orderTuple(str)(‘conv’, ‘norm’, ‘act’)表示卷积、归一化和激活函数的顺序-
norm_cfgdict归一化类型默认为BN1d归一化类型设置配置文件格式
base_channelint-第一个卷积的输出通道数-
output_channelsint-最后一个卷积的输出通道数-
encoder_channelsTuple(Tuple(int))-每层的输出通道维度外层元组长度为阶段数(图中 N N N),内层元组长度为每阶段层数(图中 L L L
encoder_paddingsTuple(Tuple(int))-每层的填充值内外层元组长度分别与encoder_channels相同
block_typestr-使用的模块类型可为’conv_module’或’basicblock’(区别如图)
  • forward函数:
参数名称数据类型默认值含义取值说明
voxel_featuresTensor(float)-非空体素特征 ( N , C ) (N,C) (N,C) N N N为体素数;该参数通常是VOXEL_ENCODERS的输出
coorsTensor(int)-非空体素坐标 ( N , 4 ) (N,4) (N,4),该参数通常是体素化函数的输出
batch_sizeint-batch size记为 B B B
spatial_featuresTensor(float)返回值BEV特征图大小为 ( B , C ′ , H , W ) (B,C',H,W) (B,C,H,W),其中 H H H为宽度(y_size), W W W为长度(x_size

2.2 PointPillarsScatter

  用于点云的柱体表达编码。可搭配PillarFeatureNet体素编码器。

  • 作用:将柱体特征根据柱体坐标和batch_id生成BEV特征图。
  • 初始化参数:
参数名称数据类型默认值含义取值说明
in_channelsint-输入通道数-
output_shapeList(int)-输出BEV特征图的大小长度为2,分别为BEV特征图的宽度 H H Hy_size)和长度 W W Wx_size
  • forward函数:与SparseEncoder的forward函数输入和输出含义相同。

3. 主干网络(BACKBONES)

3.1 SECOND

  SECOND主干网络通常搭配SECONDFPN颈部网络。前面可搭配体素操作(如HardSimpleVFE + SparseEncoder)或柱体操作(如PillarFeatureNet + PointPillarsScatter)。
在这里插入图片描述

  • 初始化参数:
参数名称数据类型默认值含义取值说明
in_channelsint-输入的体素特征维度-
out_channelsList(int)-每个阶段的输出通道数长度为图中 L L L
layer_numsList(int)-每阶段的卷积层数(图中 N N N长度与out_channels相同
layer_stridesList(int)-每阶段第一个卷积的步长长度与out_channels相同
conv_cfgdict默认卷积类型为Conv2d设置卷积类型配置文件格式
norm_cfgdict默认归一化类型为BN设置归一化类型配置文件格式
  • forward函数:
参数名称数据类型默认值含义取值说明
xTensor(float)-点云的BEV表达 ( B , C , H , W ) (B,C,H,W) (B,C,H,W),通常为MIDDLE_ENCODERS的输出
返回值List(Tensor(float))返回值输出为点云的多尺度BEV特征列表长度等于尺度数,每个尺度特征图大小为 ( B , C i , H i , W i ) (B,C_i,H_i,W_i) (B,Ci,Hi,Wi)

4. 颈部网络(NECKS)

4.1 SECONDFPN

  SECONDFPN颈部网络通常搭配SECOND主干网络。
在这里插入图片描述

  • 初始化参数:
参数名称数据类型默认值含义取值说明
in_channelsList(int)-表示各尺度特征通道数与SECOND的out_channels相同
out_channelsList(int)-每个DeConv的输出通道数长度为图中 L L L
upsample_stridesList(int)-上采样步长每个上采样块的上采样比例
conv_cfgdict默认卷积类型为Conv2d设置卷积类型配置文件格式
norm_cfgdict默认归一化类型为BN设置归一化类型配置文件格式
upsample_cfgdict默认上采样方式为DeConv上采样方式配置文件格式
use_conv_for_no_strideboolFalse--

use_conv_for_no_stride=False且upsample_stride=1时,或upsample_stride>1时使用upsample_cfg搭建DeConv卷积,否则(即use_conv_for_no_stride=True且upsample_stride=1,或upsample_stride<1)使用conv_cfg搭建Conv2d卷积

  • forward函数:
参数名称数据类型默认值含义取值说明
xList(Tensor(float))-点云多尺度BEV特征列表长度为尺度数,可直接使用SECOND的输出
返回值List(Tensor(float))返回值多尺度融合后的BEV特征列表长度为1

5.检测头(DENSE_HEADS)

检测头模块需要注意两点:
  一是loss函数的计算以及预测结果的生成均是在检测头中实现的方法;
  二是检测头初始化一般都有train_cfg和test_cfg两个参数,但在配置文件中,这两个参数往往需要写到检测器模型(DETECTOR)中而非检测头中。

5.1 CenterHead

  CenterPoint的检测头。可搭配SECOND + SECONDFPN结构使用。
在这里插入图片描述

  • 初始化参数:
参数名称数据类型默认值含义取值说明
in_channelsList(int)-输入通道数与颈部网络的输出通道数相同
shared_conv_channelint-第一个共享卷积的输出通道维度-
biasstr’auto’第一个共享卷积层的偏置项设置-
tasksList(dict)-dict为{'num_class': int, 'class_names': List(str)}的结构;列表的每一个元素对应图中的一个SeperateHead结构(即对不同的类别,head的网络参数可能不同)
num_heatmap_convsint-每个中心热图头的卷积数-
common_headsdict--可包含如’reg’(BEV位置偏差)、‘hei’(离地高度)、‘dim’(尺寸)、‘rot’(旋转角)、‘vel’(速度)等项;每一项的值为二元组(int,int):第一元素为最终维度,第二元素为head中的卷积层数(对应图中 N N N
norm_bboxboolTrue是否对数归一化边界框尺寸作为估计值-
conv_cfgdict默认卷积类型为Conv2d设置卷积类型配置文件格式
norm_cfgdict默认归一化类型为BN2d设置归一化类型配置文件格式
bbox_coderdict默认BBOX_CODERS类型为CenterPointBBoxCoder类设置BBOX_CODERS类型配置文件格式
loss_clsdict默认LOSS类型为GaussianFocalLoss设置分类任务的LOSS类型配置文件格式
loss_bboxdict默认LOSS类型为L1Loss设置回归任务的LOSS类型配置文件格式
seperate_headdict默认为SeperateHead类设置SeperateHead的参数配置文件格式,其中需要手动设置的初始化参数包括:head_conv为Head卷积的中间维度;final_kernal为Head卷积核大小

  train_cfg和test_cfg均为字典格式,这里单独拿出来介绍:

  • train_cfg包含:
参数名称数据类型含义取值说明
grid_sizeList(int)原始体素空间的shape列表长为3,依次表示 x , y , z x,y,z x,y,z方向的体素数
point_cloud_rangeList(float)点云范围列表长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max]
voxel_sizeList(float)体素大小列表长为3,依次表示体素的 x , y , z x,y,z x,y,z尺寸,即[x_size,y_size,z_size]
out_size_factorint下采样倍数最后BEV预测的大小为grid_size//out_size_factor
max_objsint最大检测物体数量会取至多max_objs个物体计算热图回归目标
dense_regfloat与max_objs相乘作为最终的最大检测数量可固定为1,仅设置max_objs即可
gaussian_overlapfloat计算高斯半径时的参数与真实物体尺寸一起用于计算高斯半径,从而生成热图的真值
min_radiusfloat最小高斯半径防止上述计算出来的高斯半径过小
code_weightsList(float)计算损失时的各项权重长度与边界框参数编码项数相同,如边界框编码包含3维位置、3维尺度,以及朝向角的正余弦值则长度应为8
  • test_cfg包含:
参数名称数据类型含义取值说明
post_center_limit_rangeList(float)后处理时物体中心的范围列表长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max];该范围一般略大于点云范围
nms_typestrNMS方法的类型只能是’circle’(CenterPoint文章提到的NMS方法)或’rotate’(常规的NMS方法)
nms_thrfloatrotate NMS的IoU阈值仅在nms_type='rotate’时需要设置
score_thresholdfloatrotate NMS的分数筛选阈值仅在nms_type='rotate’时需要设置,nms前仅筛选满足分数大于该阈值的物体
pre_max_sizeintrotate NMS前考虑的最大物体数量仅在nms_type='rotate’时需要设置,多余的预测会被丢弃(若需要全部考虑,可设置为None)
post_max_sizeintrotate NMS或circle NMS后保留的最大物体数量-
min_radiusList(float)circle NMS的最小半径仅在nms_type='circle’时需要设置,长度为tasks数;第 i i i项对应第 i i i个task的物体BEV中心距离阈值
  • forward函数(训练和测试阶段均会调用):
参数名称数据类型默认值含义取值说明
featsList(Tensor(float))-(多尺度)特征图通常为颈部网络的输出
返回值Tuple(List(dict))返回值BEV上的预测结果外层元组长为任务数,内层列表长为尺度数,字典的键为’heatmap’以及common_heads中的键(如’reg’、‘hei’、‘dim’、‘rot’),值为相应Head的输出Tensor(大小为 ( B , ∗ , h , w ) (B,*,h,w) (B,,h,w)
  • loss函数(训练阶段调用):
参数名称数据类型默认值含义取值说明
pred_dictsTuple(List(dict))-BEV下的预测结果检测头模块forward函数的输出结果
gt_bboxes_3dList(Tensor(float))-真实边界框参数列表长为batch size,Tensor为 ( n b , box_dim ) (n_b,\textup{box\_dim}) (nb,box_dim),其中 n b n_b nb表示该帧的真实边界框数量
gt_labels_3dList(Tensor(int))-真实边界框类别标签列表长为batch size,Tensor为 ( n b , ) (n_b,) (nb,)
返回值dict返回值损失字典包含各任务的分类损失和回归损失,格式为{'task0.loss_heatmap': float, 'task0.loss_bbox': float, 'task1.loss_heatmap': float, ...}
  • get_bboxes函数(测试阶段调用):
参数名称数据类型默认值含义取值说明
pred_dictsTuple(List(dict))-BEV预测下的预测结果检测头模块forward函数的输出结果
img_metasList(dict)-数据信息检测器模型forward函数输入中的img_meta项;列表长为batch size
返回值List(List(Tensor))-最终的检测结果外层列表长为batch_size,内层列表长为3,分别是预测的边界框参数 ( n b pred , box_dim ) (n_b^\textup{pred},\textup{box\_dim}) (nbpred,box_dim)、分数 ( n b pred , ) (n_b^\textup{pred},) (nbpred,)和类别标签 ( n b pred , ) (n_b^\textup{pred},) (nbpred,)

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

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

相关文章

骨传导原理是什么,佩戴骨传导耳机的过程中对于耳道有无损害

随着新时代的到来&#xff0c;我们周围的数码产品逐渐被新产物所替代&#xff0c;以往在耳机市面上&#xff0c;普遍都是入耳式耳机&#xff0c;但长时间佩戴这种耳机的话对于我们耳道来说是有着不可逆的伤害&#xff0c;而在近几年骨传导耳机的出现&#xff0c;打破了传统耳机…

18.Redis系列之AOF方式持久化

本文学习redis7两大持久化技术之一&#xff1a;AOF&#xff08;Append Only File&#xff09;日志追加方式持久化备份与还原&#xff0c;重写以及AOF方式的优缺点 1. AOF相关配置 首先我们先简单了解下Redis7中AOF相关配置 // 开启AOF方式持久化&#xff0c;默认no appendon…

基于真实场景解读 K8s Pod 的各种异常

在 K8s 中&#xff0c;Pod 作为工作负载的运行载体&#xff0c;是最为核心的一个资源对象。Pod 具有复杂的生命周期&#xff0c;在其生命周期的每一个阶段&#xff0c;可能发生多种不同的异常情况。K8s 作为一个复杂系统&#xff0c;异常诊断往往要求强大的知识和经验储备。结合…

骚戴独家笔试---SQL笔试

SQL笔试训练 查询结果去重 两种答案 查找某个年龄段的用户信息 查找除复旦大学的用户信息 三种答案 用where过滤空值练习 三种答案 查询NULL时&#xff0c;不能使用比较运算符(或者< >)&#xff0c;需要使用IS NULL运算符或者IS NOT NULL运算符。 操作符混合运用 我这里…

力扣 792. 匹配子序列的单词数

题目 给定字符串 s 和字符串数组 words, 返回 words[i] 中是s的子序列的单词个数 。 字符串的 子序列 是从原始字符串中生成的新字符串&#xff0c;可以从中删去一些字符(可以是none)&#xff0c;而不改变其余字符的相对顺序。 例如&#xff0c; “ace” 是 “abcde” 的子序…

java spring引用外部jar包并使用

spring引用外部jar包并使用1、将jar包放到src/main/resources/lib2、编辑pom.xml文件build下面加入resources&#xff0c;不加话的打包会找不到资源3、project structure中引入该lib1、将jar包放到src/main/resources/lib 2、编辑pom.xml文件 打开pom文件&#xff0c;找到相应…

计算机网络基本知识

计算机网络基本知识 计算机网络定义&#xff1a;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 1.1计算机网络在信息时代作用 1.2因特网概述 1.2.1网络、互联网、因特网 网…

DeepLab V1学习笔记

DeepLab V1摘要相关的工作遇到的问题和解决的方法信号下采样空间不变性(spatial insensitivity/invariance)论文的优点(贡献)网络的模型空洞卷积CRF多尺度预测模型总结实验结果Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs论文地址 : D…

[附源码]java毕业设计乒乓球俱乐部管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【光学】基于Matlab模拟干涉条纹图

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

亿级万物互联新时代的物联网消息中间件EMQX调研

简介 最近去某餐厅吃饭&#xff0c;进门时智能门自动打开房门同时来一句"欢迎光临"&#xff0c;然后伸手到门口的洗手台&#xff0c;水管无接触自动出水&#xff0c;端起菜盘走向台子选择自己喜欢的菜品&#xff0c;最后将菜盘放在智能结账机上&#xff0c;智能结账…

代码随想录算法训练营第三天|LeetCode 203.移除链表元素 、707.设计链表 、206.反转链表

LeetCode 203.移除链表元素 题目链接&#xff1a;203.移除链表元素 链表的定义&#xff1a; // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };ListNode(i…

数据结构实验教程-第一套

1&#xff0e;在平衡二叉树中插入一个结点后造成了不平衡&#xff0c;设最低的不平衡结点为A&#xff0c;并已知A的左孩子的平衡因子为1&#xff0c;右孩子的平衡因子为0&#xff0c;则应作_型调整以使其平衡。 A.LL B.LR C.RL D.RR答案为a&#xff0c;错选了c。 平衡因子 左子…

model.py篇

model.py篇 目录如下&#xff1a; 引言找LeNet5网络结构书写代码测试结果函数解释 引言 卷积主要用于特征的提取&#xff0c;而model.py则是为了从输入信息中筛选出我们需要的信息。 我们在阅读完论文后&#xff0c;对我们需要的模型进行搭建&#xff0c;下以LeNet5的model…

子域名访问计数(哈希表、字符串、索引)

力扣地址&#xff1a;力扣 网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" &#xff0c;二级域名为 "leetcode.com" &#xff0c;最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com&…

【Struts2】idea快速搭建struts2框架

文章目录什么是SSH框架&#xff1f;Struts2框架1、struts2的环境搭建1.1 创建web项目&#xff08;maven&#xff09;&#xff0c;导入struts2核心jar包1.2 配置web.xml&#xff08;过滤器&#xff09;&#xff0c;是struts2的入口&#xff0c;先进入1.3 创建核心配置文件struts…

力扣(LeetCode)13. 罗马数字转整数(C++)

模拟 罗马数字和掰手指数数的区别在于&#xff0c;IV/IXIV/IXIV/IX 这类倒着数数的&#xff0c;和阿拉伯数字最大的区别在于 555 的 10k10^k10k 倍 k∈Nk\isin Nk∈N &#xff0c;需要被表示出来。所以除了记录 I/X/C/MI/X/C/MI/X/C/M ——1/10/100/10001/10/100/10001/10/100…

五种IO模型

文章目录什么是IO操作系统的IO五种IO模型阻塞IO非阻塞IO多路转接IO(复用IO)信号驱动IO异步IO同步异步什么是IO IO,即input/output,IO模型即输入输出模型,而比较常见且听说的便是磁盘IO,网络IO. 按照冯诺依曼结构的来看,假设我们把运算器、控制器、存储器三个设备看做一个整体…

Kruskal算法求最小生成树

输入样例&#xff1a; 4 5 1 2 1 1 3 2 1 4 3 2 3 2 3 4 4输出样例&#xff1a; 6适用于稀疏图&#xff0c;快&#xff1b; 实现步骤&#xff1a; 1.将所有边将权重从小到大排序&#xff1b;sort&#xff1b;O&#xff08;mlogm&#xff09; 2.枚举每条边a,b&#xff1b;权…

RabbitMQ的 AMQP协议都是些什么内容呢

之前也讲述过关于 RabbitMQ 的相关内容&#xff0c;比如他们的配置&#xff0c;以及 RabbitMQ 整合 SpringBoot 使用&#xff0c;而且自己使用过之后&#xff0c;就会在自己的简历上面写上自己使用 RabbitMQ 实现了什么功能&#xff0c;但是这就会导致&#xff0c;有些面试官就…