【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022
前言
本文分享BEV感知方案中,具有代表性的方法:BEVFormer。
它基于Deformable Attention,实现了一种融合多视角相机空间特征和时序特征的端到端框架,适用于多种自动驾驶感知任务。
主要由3个关键模块组成:
- BEV Queries Q:用于查询得到BEV特征图
- Spatial Cross-Attention:用于融合多视角空间特征
- Temporal Self-Attention:用于融合时序BEV特征
基本思想:使用可学习的查询Queries表示BEV特征,查找图像中的空间特征和先前BEV地图中的时间特征。
采用3D到2D的方式,先在BEV空间初始化特征,通过在BEV高度维度“升维”形成3D特征。再通过映射关系,使用多层transformer与每个图像2D特征进行交互融合,最终再得到BEV特征。
论文地址:BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers
代码地址:https://github.com/fundamentalvision/BEVFormer
一、框架思路
看看BEVFormer的设计思路,它使用可学习的查询Queries表示BEV特征。BEV Queries是一种栅格形状的可学习参数,它通过注意力机制在多视角图像中查询和聚合特征。
通过BEV Queries,查找图像中的空间特征和先前BEV地图中的时间特征,得到融合和更新后查询特征,也就是BEV特征。
一开始得到BEV特征并不准确,通过不断融合特征和更新后,得到的BEV Queries也就是准确的BEV特征了。
下面看看BEVFormer的框架思路,可以分为7步组成,如下图所示:
- 输入多视角图像,经过主干网络提取图像特征,形成多视角特征图。
- 通过BEV Queries,首先查询先前时序的BEV特征,融合对应的特征。再融合图像的空间特征。
- 融合了时间和空间特征的BEV Queries,也就是BEV特征。
- BEV特征后面接不同任务头,比如:3D检测、BEV分割、轨迹预测等等。
BEVFormer的主体由6层结构相同的编码器层组成,每一层都是基于:
- 时序自注意力(Temporal Self-attention)
- 加法(Add)标准化(Norm)
- 空间交叉注意力(Spatial Cross-attention)
- 加法(Add)标准化(Norm)
- 前馈网络(Feed Forward)
- 加法(Add)标准化(Norm)
详细分析模型前向推理过程:
-
在时间点t,将车辆上多个视角的相机图像输入到主干网络中,输出各图像的多尺度特征,表示为 ,其中 i 是第i个视角相机的特征, n是相机视角的总数。同时,保留时间点t-1的BEV特征 。
-
在每个BEVFormer编码器层中,首先使用BEV Queries Q 通过时间自注意力(Temporal Self-attention, TSA)模块从中查询并融合时域信息,得到修正后的BEV Queries Q′。
-
然后,对TSA修正过的BEV Queries Q′,通过空间交叉注意力(Spatial Cross-attention, SCA)模块从多摄像头特征中查询并融合空间信息,得到进一步修正的BEV Queries Q′′。
-
将经过两次修正的BEV Queries Q′′ 输入到前馈网络计算,然后输出,作为下一个编码器层的输入。
-
如此堆叠6层,即经过6轮微调,时间点t的统一BEV特征 就生成了。
-
最后,将BEV特征作为任务头的输入,比如:3D检测头和地图分割头。
二、关键设计——BEV Queries 查询得到BEV特征图
BEV平面(Bird's-Eye View,鸟瞰视图)是一个以车辆自身为中心的,被划分成许多小方格的二维平面。
这个平面的高度H和宽度W代表了:在x轴(横向)和y轴(纵向)上的栅格数量。
BEV平面直观地反映了车辆周围的物理空间,其中每个小方格代表现实世界中的一定面积,例如s米。
比如针对nuScenes数据集,可能会定义BEV平面的栅格尺寸为200x200,这意味着这个平面可以覆盖从车辆中心向各个方向延伸51.2米的区域。在这种情况下,每个小方格(栅格)代表的实际面积是0.512米。
关键要的:
1、BEV Queries是一组预先定义的、具有栅格形状的可学习参数, 维度是H*W*C,用来捕获围绕自车的BEV特征。
简单来说,一旦学习完成,BEV Queries就会变成BEV features,即鸟瞰视图特征。
2、BEV Queries的高度H和宽度W,与BEV平面在x轴(横向)和y轴(纵向)的栅格尺寸保持一致,这意味着它们也具有与BEV平面类似的特性,即直观地映射车辆周围的物理空间。
然而,BEV Queries的C维,即在通道(channel)维度上的尺寸,并不直接对应于BEV平面z轴的物理空间尺寸。
3、每个位于(x, y)位置的query都仅负责表征其对应的小范围区域。轮番查询“空间信息”和“时间信息”,生成BEV特征图。
重点:BEV Queries在模型中经过连续的微调和转换,最终成为BEV features。
三、核心内容——Spatial Cross-Attention融合多视角空间特征
通过BEV Queries查询和融合空间信息,BEV Queries表示整幅栅格图,BEV Query表示其中一个网格,步骤如下:
- 将每个BEV Query拉升为一个支柱。在z方向进行lift操作,预测该网格的离散高度,形成N个高度值。预定义它们对应的高度范围是-5m到3m。结合该网格的x,y坐标,生成N个3D参考点。
- 通过相机内外参,将柱子中的3D参考点投影到视图中,得到2D点,数量记为V_num。正常一个3D参考点,对应1~2幅多视图,毕竟不能所有相机都看到同一个物体。
- 从命中视图中的区域中采样特征。采用Deformable Attention,把像平面上的这些投影点作为2D图像参考点,在其周围进行特征采样。
- 最后,每个3D参考点有V_num个特征图,进行加权求和。每个网格有N个3D参考点,形成的特征图,进行加权求和,最终输出多视角空间特征。
如下图所示,一个3D参考点(x, y, z),投影到多视角图中,只有2幅是对应的。这样很正常,毕竟相机是四周安装的,不可能所有相机都看到同一个物体。
四、核心内容——Temporal Self-Attention融合时序BEV特征
受到经典的循环神经网络(RNN)的启发,BEV特征 可以被视作一种能够传递序列信息的“记忆体”。
在这种框架下,每一个时刻生成的BEV特征 都是基于上一时刻的BEV特征 来获取所需的时序信息。
- 这种方法的优势在于,它能够动态地获取所需的时序特征,而不是像简单地堆叠不同时刻的BEV特征那样,仅能获取固定长度的时序信息。
- 这种动态获取时序特征的方式使得BEV特征能够更加有效地反映出环境的动态变化,比如车辆的移动或周围环境的变化。
融合时序BEV特征,通过BEV Queries 查询时间信息,步骤如下:
- 根据自我运动对齐两个时刻的BEV图。两个时刻是指上一时刻和当前时刻。目前是使得相同索引位置的栅格,对应于现实世界中的同一位置。
- 从过去时刻BEV图的和当前采样特征。
- 对过去和当前BEV图中采样的特征进行加权求和。
- 使用RNN风格迭代收集历史BEV图特征。
思路流程:
- 在给定时间点t-1的BEV特征的情况下,首先需要根据自我运动(ego motion)将对齐到时间点t。
- 这个对齐过程确保了和 在相同索引位置的栅格对应于现实世界中的同一位置。这样对齐后的BEV特征记作 。
- 在时间点t,位于网格中A处的BEV query所代表的物体可能是静态的(不动的)或者是动态的(在移动中)。
- 这个物体在时间点t-1会出现在的 A周围。因此,为了采集特征,使用可变形注意力机制(deformable attention)以 A为参考点,在其周围进行特征采样。
通过这种方式,模型能够更加准确地捕捉到物体随时间的动态变化。
可变形注意力允许模型关注于相邻时刻在空间上对应但位置可能略有变化的特征,从而有效地捕捉动态物体的运动轨迹和静态物体的稳定性。
这种方法在处理时序数据时,特别是在动态和复杂的环境中,如自动驾驶场景下,显得尤为重要和有效。
五、任务头
得到的BEV特征用于后面的感知任务,具体以下特征。
- 多任务学习:3D目标检测和地图语义分割。
- 可迁移性:常用的2D检测头,都可以通过很小的修改迁移到3D检测上。
在3D目标检测方面,论文借鉴了2D目标检测器Deformable DETR(可变形的DEtection TRansformer)的设计思路,并发展出了一种端到端的3D目标检测头。这种检测头的修改和特点包括:
-
输入:使用单尺度的BEV特征 作为检测头的输入。这与Deformable DETR通常使用多尺度特征的做法不同。
-
预测输出:与预测2D边界框不同,3D目标检测头预测3D边界框和物体的速度。。
-
候选目标集合:继承DETR方法的优势,在预测时生成有限数量的候选目标集合。在开源工程中,这个集合的大小通常设置为300个目标。
-
无需NMS后处理:由于这种end-to-end的检测头直接预测目标集合,因此不需要传统的非极大值抑制(Non-Maximum Suppression, NMS)后处理。这是一个显著的优势,因为NMS通常是目标检测流程中的一个复杂且效率较低的步骤。
在地图分割方面,论文参考了2D分割方法Panoptic SegFormer来设计map segmentation head。
基于BEV的地图分割在本质上与常见的语义分割任务类似。作者采用了以下关键设计:
-
Mask Decoder:使用mask decoder,这是一种专门用于分割任务的解码器,能够有效地处理不同尺寸的特征图,并产生准确的分割mask。
-
Class-Fixed Queries:采用类别固定的查询(class-fixed queries)设计。这种设计方式允许模型为每个特定的语义类别(如汽车、车辆、道路可通行区域和车道线)生成特定的查询。这些查询随后被用于查找和分割图像中对应的对象或区域。
通过这种方式,map segmentation head可以有效地对各种道路和交通元素进行精确的分割,如区分车辆、道路、车道线等。这种方法的优势在于,它能够直接从BEV特征中提取出复杂的道路和交通场景信息,为自动驾驶车辆提供准确的环境理解和导航信息。
六、训练和推理设计
训练设计:
-
时间选择:对于给定的时间点t,在过去2秒内随机选择3个时刻,分别是t-3、t-2和t-1。
-
BEV特征生成:在这3个初始时刻,循环生成BEV特征集 { , , }。在此阶段,不计算梯度,即不进行反向传播优化。
-
Temporal Self-Attention的特殊情况:在计算第一个时刻t-3的temporal self-attention输出时,由于它之前没有BEV特征,因此使用它自身的特征作为前序时刻的输入。在这种情况下,temporal self-attention暂时退化成了普通的self-attention。
推理设计:
-
时间序列处理:在推理过程中,按照时间顺序计算图像序列中的每一帧。
-
BEV特征的持续利用:前序时刻的BEV特征被保持并用于后续时刻的处理。这样,模型在每个时刻都能利用之前时刻的信息。
-
在线推理策略:这种按时间顺序处理并保留前序BEV特征的方法是一种在线(online)推理策略。这种策略在实际应用中通常更高效,因为它能够实时处理连续的输入数据,并持续更新对环境的理解。
七、实现测试与效果
在论文中,针对BEV模型的实现和实验,采取了以下关键的配置和设计决策:
Backbone的选择:
- ResNet101-DCN:使用了从FCOS3D训练得到的参数。
- VoVnet-99:采用了从DD3D训练得到的参数。
多尺度特征和FPN输出:
- 默认情况下,使用FPN(Feature Pyramid Network)输出的多尺度特征,其尺寸包含1/16、1/32、1/64。值得注意的是,在代码中实际上使用了1/8尺寸的特征,例如nuScenes数据集中的116x200的FPN输出。
- 同时,将维度C(通道数)设置为256。
BEV Queries的尺寸设置:
- 在nuScenes数据集实验中,BEV queries的尺寸设置为200x200,对应在x和y方向的感知范围均为[-51.2m, 51.2m],BEV Grid的尺寸精度为0.512m。
- 在Waymo数据集实验中,BEV queries的尺寸设置为300x220,x方向的感知范围为[-35.0m, 75.0m],y方向为[-75.0m, 75.0m],BEV Grid的尺寸精度为0.5m。自车中心位于BEV的(70,150)位置。
Spatial Cross-Attention模块:
- 对每个BEV query,在spatial cross-attention模块中设置 N 个3D参考点,预定义它们对应的高度范围是-5m到3m。
采样点的选择:
- 对每个2D图像参考点(即3D参考点在2D视图上的投影点),在其周围选取4个采样点送入Spatial Cross-Attention。
训练配置:
- 默认情况下,训练24个epoch,学习率设定为一个特定值。
Baselines的选择:
- 为了合理评估task heads的影响并与其他生成BEV方法进行公平比较,选择了VPN和Lift-Splat作为baselines。在这些baseline模型中,保留了原有的task heads和其他设置,但将它们head之前的部分替换为BEVFormer。
BEVFormer的静态版本:
- 在论文中,通过将temporal self-attention修改为普通的self-attention,从而将BEVFormer转变为一个静态模型,命名为BEVFormer-S。这个版本不使用历史BEV Features。
效果对比:
分享完成~
相关文章:
【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022
前言 本文分享BEV感知方案中,具有代表性的方法:BEVFormer。 它基于Deformable Attention,实现了一种融合多视角相机空间特征和时序特征的端到端框架,适用于多种自动驾驶感知任务。 主要由3个关键模块组成: BEV Que…...
Amazon Toolkit — CodeWhisperer 使用
tFragment--> 官网:https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具,感慨颇多。下面是安装 和使用的分享。 CodeWhisperer,亚马逊推出的实时 AI 编程助手,是一项基于机器学习…...
Flink SQL填坑记2:Flink和MySQL的Bigdata类型不同导致ClassCastException报错
最近在开发Flink SQL的时候,需要关联Kafka事实表和MySQL维表,得到的数据写入Phoenix表中,但是其中有个字段,Kafka表、MySQL表和Phoenix表都是BigData类型,但是在实现的时候却报“java.math.BigInteger cannot be cast to java.lang.Long”异常,从报错信息来看,是由于Big…...
本地MinIO存储服务如何创建Buckets并实现公网访问上传文件
文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…...
通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题
问题描述: 在最近的一个项目中,有一个存在较久,并且只在内部城域网可访问的一个使用Shiro框架进行安全管理的Java应用,该应用部署在Tomcat服务器上。起初,应用程序可以通过HTTP协议访问,一切运行都没…...
Backend - Django 项目创建 运行
目录 一、配置环境 二、创建 Django 项目 (一)新建文件夹 (二)打开文件夹 (三)打开运行终端 (四)创建基础项目 (五)创建app 1. 安装Django …...
C# .Net学习笔记—— Expression 表达式目录树
一、什么是表达式目录树 (1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的…...
《论文阅读28》Unsupervised 3D Shape Completion through GAN Inversion
GAN,全称GenerativeAdversarialNetworks,中文叫生成式对抗网络。顾名思义GAN分为两个模块,生成网络以及判别网络,其中 生成网络负责根据随机向量产生图片、语音等内容,产生的内容是数据集中没有见过的,也可…...
一个正则快速找到在ES中使用profile的时产生慢查询的分片
在es中使用profile分析慢查询的时候,往往因为分片过多,或者因为查询条件太复杂,分析的结果几十万行。在kibana上点半天,也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…...
链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)
在上一篇文章中,我们探索了顺序表这一基础的数据结构,它提供了一种有序存储数据的方法,使得数据的访 问和操作变得更加高效。想要进一步了解,大家可以移步于上一篇文章:探索顺序表:数据结构中的秩序之美 今…...
Python tkinter控件全集之组合选择框 ttk.ComboBox
Tkinter标准库 Tkinter是Python的标准GUI库,也是最常用的Python GUI库之一,提供了丰富的组件和功能,包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等,方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…...
Axure之中继器的使用(交互动作reperter属性Item属性)
目录 一.中继器的基本使用 二.中继器的动作(增删改查) 2.1 新增 2.2 删除 2.3 更新行 2.4 效果展示 2.5 模糊查询 三.reperter属性 在Axure中,中继器(Repeater)是一种功能强大的组件,用于创建重复…...
数字化医疗新篇章:构建智能医保支付购药系统
在迎接数字化医疗时代的挑战和机遇中,智能医保支付购药系统的建设显得尤为重要。本文将深入介绍如何通过先进的技术实现,构建一套智能、高效的医保支付购药系统,为全面建设健康中国贡献力量。 1. 引言 随着医疗科技的飞速发展,…...
11_12-Golang中的运算符
**Golang **中的运算符 主讲教师:(大地) 合作网站:www.itying.com** **(IT 营) 我的专栏:https://www.itying.com/category-79-b0.html 1、Golang 内置的运算符 算术运算符关系运算符逻辑运…...
k8s-ingress特性 9
TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时,会自动重定向到hostname.html 示例: 测试 版本的升级迭代,之前利用控制器进行滚动更新,在升级过程中无法做到快速回滚 更加平滑的升级࿱…...
【redis】redis系统实现发布订阅的标准模板
目录 简介参数配置代码模板 简介 Redis发布订阅功能是Redis的一种消息传递模式,允许多个客户端之间通过消息通道进行实时的消息传递。在发布订阅模式下,消息的发送者被称为发布者(publisher),而接收消息的客户端被称为…...
Python 时间日期处理库函数
标准库 datetime >>> import datetime >>> date datetime.date(2023, 12, 20) >>> print(date) 2023-12-20 >>> date datetime.datetime(2023, 12, 20) >>> print(date) 2023-12-20 00:00:00 >>> print(date.strfti…...
第二十二章 : Spring Boot 集成定时任务(一)
第二十二章 : Spring Boot 集成定时任务(一) 前言 本章知识点: 介绍使用Spring Boot内置的Scheduled注解来实现定时任务-单线程和多线程;以及介绍Quartz定时任务调度框架:简单定时调度器(Simp…...
关于“Python”的核心知识点整理大全32
目录 12.6.4 调整飞船的速度 settings.py ship.py alien_invasion.py 12.6.5 限制飞船的活动范围 ship.py 12.6.6 重构 check_events() game_functions.py 12.7 简单回顾 12.7.1 alien_invasion.py 12.7.2 settings.py 12.7.3 game_functions.py 12.7.4 ship.py …...
【krita】实时绘画 入门到精通 海报+电商+装修+人物
安装插件 首先打开comfyUI,再打开krita,出现问题提示, 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git krita基础设置 设置模型 设置lora (可设置lora强度 增加更多…...
云原生系列2-CICD持续集成部署-GitLab和Jenkins
1、CICD持续集成部署 传统软件开发流程: 1、项目经理分配模块开发任务给开发人员(项目经理-开发) 2、每个模块单独开发完毕(开发),单元测试(测试) 3、开发完毕后,集成部…...
50ms时延工业相机
华睿工业相机A3504CG000 参数配置: 相机端到端理论时延:80ms 厂家同步信息,此款设备帧率上线23fps,单帧时延:43.48ms,按照一图缓存加上传输显示的话,厂家预估时延在:80ms 厂家还有…...
CPU缓存一致性问题
什么是可见性问题? Further Reading :什么是可见性问题? 缓存一致性 内存一致性 内存可见性 顺序一致性区别 CPU缓存一致性问题 由于CPU缓存的出现,很好地解决了处理器与内存速度之间的矛盾,极大地提高了CPU的吞吐能…...
35道HTML高频题整理(附答案背诵版)
1、简述 HTML5 新特性 ? HTML5 是 HTML 的最新版本,它引入了很多新的特性和元素,以提供更丰富的网页内容和更好的用户体验。以下是一些主要的新特性: 语义元素:HTML5 引入了新的语义元素,像 <article&g…...
【powershell】Windows环境powershell 运维之历史文件压缩清理
🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁&am…...
【Linux】Linux线程概念和线程控制
文章目录 一、Linux线程概念1.什么是线程2.线程的优缺点3.线程异常4.线程用途5.Linux进程VS线程 二、线程控制1.线程创建2.线程终止3.线程等待4.线程分离 一、Linux线程概念 1.什么是线程 线程是进程内的一个执行流。 我们知道,一个进程会有对应的PCB,…...
Flink cdc3.0同步实例(动态变更表结构、分库分表同步)
文章目录 前言准备flink环境docker构建mysql、doris环境数据准备 通过 FlinkCDC cli 提交任务整库同步同步变更路由变更路由表结构不一致无法同步 结尾 前言 最近Flink CDC 3.0发布, 不仅提供基础的数据同步能力。schema 变更自动同步、整库同步、分库分表等增强功…...
国产Apple Find My认证芯片哪里找,伦茨科技ST17H6x芯片可以帮到您
深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…...
肺癌相关知识
写在前面 大概想了解下肺癌相关的知识,开此贴做记录,看看后续有没有相关的生信文章思路。 综述 文章名期刊影响因子Lung cancer immunotherapy: progress, pitfalls, and promisesMol Cancer37.3 常见治疗手段有surgery, radiation therapy, chemoth…...
ChimeraX使用教程-安装及基本操作
ChimeraX使用教程-安装及基本操作 1、访问https://www.cgl.ucsf.edu/chimerax/download.html进行下载,然后安装 安装完成后,显示界面 2、基本操作 1、点击file,导入 .PDB 文件。 (注:在 alphafold在线预测蛋白》点…...
濮阳免费网站建设/互联网营销具体做什么
SqlServer2005在表上按右键,dao打开du表,来编辑,这种情况zhi下的dao数据默认情况下是全部,不是你版想要的结果,你在工具栏权上点一个sql的小图标,会变成sql,修改成你的sql,然后执行&…...
网站防劫持怎么做/网络营销的认知
正如大家所知,配置防火墙的方法有两种,第一种是链接console线输命令的方法,第二种是在网页上进行试图化配置,更加的直观,明了。今天我们就简单的讲一下华为防火墙视图化的配置。首先在华为模拟器中搭建个个环境如下&am…...
wordpress 屏蔽搜索/企业公司网站建设
本题要求编写程序,计算平方根序列123⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S,精确到小数点后两位。题目保…...
建设银行招聘网站甘肃分行/信息流优化师证书
管理 Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性。chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。该命令的基本格式为:[rootlocal…...
js 访问wordpress/免费发布推广的网站有哪些
微软利用OAuth2为RESTful API提供了完整的鉴权机制,但是可能微软保姆做的太完整了,在这个机制中指定了数据持久化的方法是用EF,而且对于用户、权限等已经进行了封装,对于系统中已经有了自己的用户表,和不是采用EF做持久…...
南京高端网站建设工作室/百度搜索引擎推广步骤
web应用程序 本质 socket服务端 浏览器本质是一个socket客户端1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应。比较底层,繁琐,有专用的服务器软件,如:Apache Nginx2. 应用程序,实现具体逻辑WSGI&…...