文献总结:NIPS2023——车路协同自动驾驶感知中的时间对齐(FFNet)
FFNet
- 一、文献基本信息
- 二、背景介绍
- 三、相关研究
- 1. 以自车为中心的3D目标检测
- 2. 车路协同3D目标检测
- 3. 特征流
- 四、FFNet网络架构
- 1. 车路协同3D目标检测任务定义
- 2. 特征流网络
- 2.1 特征流生成
- 2.2 压缩、传输与解压缩
- 2.3 车辆传感器数据与基础设施特征流融合
- 3. 特征流网络训练流程
- 五、实验部分
- 1. 实验设置
- 2. 实验比较
- 3. 消融实验
- 六、总结
一、文献基本信息
文章标题 | Flow-Based feature fusion for vehicle-infrastructure cooperative 3d object detection |
---|---|
会议 | NIPS(NeurIPS) |
作者 | Haibo Yu;Yingjuan Tang;Enze Xie;Jilei Mao;Ping Luo;Zaiqing Nie |
单位 | The University of Hongkong;Institute for AI Industry Research (AIR), Tsinghua University;Beijing Institute of Technology;Shanghai AI Laboratory |
日期 | 2023年11月3日 |
论文链接 | https://arxiv.org/abs/2311.01682 |
代码链接 | https://github.com/haibao-yu/FFNet-VIC3D |
摘要:使用自车和基础设施传感器的协同数据可以显著提升自动驾驶感知能力。然而,时间同步的不确定性和通信限制导致了融合无法对齐的问题,这限制了路侧数据的使用。为了解决上述问题,作者提出了一个新的协同检测框架——特征流网络(FFNet)特征流网络是一个基于流的特征融合网络,可以用特征预测模块来预测未来时刻的特征并帮助更好地同步车辆和路侧传感器特征。相比从静态图像传输提取特征,FFNet传输了时间一致的连续路侧图像特征流。此外,作者引入了一种自注意力训练方法,可以使FFNet根据基础设施传感器图像的序列,生成带有未来时刻预测能力的特征流。在DAIR-V2X数据集上的实验结果表明,FFNet比现有的协同检测方法好,且与原始数据相比仅仅需要1/100的传输成本。 |
文章整体框架:
二、背景介绍
3D目标检测是自动驾驶中的重要任务,其提供了周围障碍物的位置和类别等重要信息。传统3D目标检测方法依赖于自车传感器数据,这限制了感知范围,并且在长距离检测和盲点检测中表现不好,带来了许多安全隐患。为了解决这些挑战,车路协同自动驾驶范式得到了更多关注,尤其是基于相机和激光雷达的路侧传感器,这些传感器比自车安装的位置更高,提供了更广泛的感知视野。通过补充额外的路侧传感器数据,可能会获得更有意义的信息,并提高自动驾驶感知能力。在这篇文章中,作者聚焦于解决车路协同3D目标检测任务(vehicle-infrastructure cooperative 3D, VIC3d),来增强面对挑战性交通场景时,自动驾驶系统的安全性和性能。
车路协同目标检测问题可以定义为通信带宽限制下的多传感器感知问题,目前有两个主要的挑战:
- 基础设施数据可能被不同的车辆接收,自车接收的数据和路侧传感器的数据存在同步时间的不确定性(时延不是固定的)
- 车端和路侧设备的通信带宽是有限的
为了解决上述的两个挑战,现有的主要融合框架包括三个:
融合类型 | 说明 |
---|---|
前融合(early fusion) | 传输原始数据进行融合 |
后融合(late fusion) | 传输检测结果进行融合 |
中间融合(middle fusion) | 传输提取特征进行融合 |
因为中间融合的方法相较于前融合降低了通信带宽的限制,相较于后融合有效提升了融合的精度,所以大部分学者采用的是中间融合的方案。然而,现有的中间融合方案忽视了时间同步的挑战,导致了时间融合的不对齐。因此,作者提出了FFNet来解决该问题,本文的贡献如下:
- 本文提出了一个基于流的特征融合框架来解决车路协同目标检测任务。FFNet传输特征流来为特征融合生成对齐特征,提供了一个简单且统一的操作来融合有价值的信息
- 文本引入了自监督训练方法来训练特征流生成器,使得具有特征预测能力的FFNet可以减少不同延迟的带来的融合错误。
- 本文在
DAIR-V2X
数据集上对FFNet进行了验证,证明了其高的检测精度和较低的传输成本。
三、相关研究
1. 以自车为中心的3D目标检测
3D目标检测是以自车为中心的自动驾驶的基本任务。自车为中心的3D目标检测基于传感器的类别可以分为3类:基于相机的方法,基于激光雷达的方法和基于多传感器融合的方法。
- 基于相机的方法:例如FCOS3D直接从一张图像来检测3D边界框;或BEVFormer和 M 2 B E V M^2BEV M2BEV将3D图像投影到BEV视图,来实现多相机联合的3D目标检测。
- 基于激光雷达的方法:例如VoxelNet, SECOND, 和PointPillars将激光雷达点云分成体素(voxels)或圆柱(pillars),并从中提取特征
- 基于多传感器融合的方法:同时利用相机和点云数据,采用基于点云的融合、基于相机的融合或基于公共空间的融合三类,来进行多传感器融合
与上述的方法不同,本文提出的方法以点云作为输入,利用路侧和车辆传感器的数据来克服单车视角的目标检测。
2. 车路协同3D目标检测
利用道路基础设施的信息进行目标检测,得到了工业界和学术界的广泛关注。作者总结了一些不同视角的方法:
- 车车视角:关注于车车协同的的算法用V2VNet,DiscoNet,StarNet和SyncNet,常用的数据集包括V2X-Sim、OPV2V、V2V4Real
- 路侧视角:Rope3D和BEVHeight、A9=Dataset
- 车路协同:V2X-Seq
现在的方法通过传输特征图或查询(queries)来实现协同检测,没有考虑时间同步的影响。在本文中,作者提出的基于流的融合框架来解决时间同步的问题,并且用简单统一的方法来降低传输损失。本研究和SyncNet有本质的区别(SyncNet通过传输共同特征并融合每一帧特征来消除时延)
3. 特征流
流是一个来源于数学的概念,表示着点随时间变化的运动。这已经被成功地运用到很多计算机视觉任务中,例如:光流、场景流和视频识别。作为一个从光流中拓展的概念,特征流描述了特征图随时间的变化,被广泛用于不同的视频理解任务。朱等人1提出了一种以流为引导的特征融合来提升视频检测准确率。本文中,作者引入特征流来进行特征预测,从而克服车路协同目标检测的时间同步问题。
四、FFNet网络架构
1. 车路协同3D目标检测任务定义
问题定义: 车路协同目标检测是通过利用路侧和车辆传感器数据在有限制的无线通信环境下定位和识别周围目标。本文以点云输入作为目标,车路协同的输入包括以下两个部分:
- 通过自车传感器在时间 t v t_{v} tv时捕捉到的点云 P v ( t v ) P_{v}(t_{v}) Pv(tv),相对位姿为 M v ( t v ) M_{v}(t_{v}) Mv(tv), P v ( ⋅ ) P_{v}\left( \cdot \right) Pv(⋅)表示自车激光雷达的捕捉函数。
- 通过路侧基础设施传感器在时间 t i t_{i} ti时刻捕捉的点云 P i ( t i ) P_{i}(t_{i}) Pi(ti),相对位姿为 M i ( t i ) M_{i}(t_{i}) Mi(ti), P i ( ⋅ ) P_{i}\left( \cdot \right) Pi(⋅)表示路侧激光雷达的捕捉函数。路侧传感器捕捉到的历史帧也可以用来做协同检测。
⭐由于从路侧到车端的长距离传输需要大量的传输时间,因此时间 t i t_{i} ti是要早于时间 t v t_{v} tv的。
⭐此外,因为路侧设备的传输数据可以被不同的自动驾驶车路接收,所以延误 ( t v − t i ) (t_{v}-t_{i}) (tv−ti)是不确定的。
Challenges: 相较于单车自动驾驶,车路协同最大的挑战便是时间同步和传输成本。
Evaluation Metrics:
⚡平均精度的均值(mean Average Precision, mAP): 通过计算每个类别的平均精度(AP),然后对所有类别的AP取平均值
⚡平均比特(Average Byte, AB): 这个概念是作者自己在他的另一篇论文中定义的(DAIR-V2X),表示每次传输的数据量大小。
2. 特征流网络
特征流网络主要包括三个模块:
1️⃣特征流生成(路侧传感器);
2️⃣特征流的压缩、传输和解压(路侧);
3️⃣将特征流与车辆特征融合,得到检测结果;
2.1 特征流生成
⭐ 作者将特征流作为一个预测函数,来描述路侧传感器获得的特征随时间的改变。具体来说,作者采用了当前的点云帧 P i ( t i ) Pi(t_{i}) Pi(ti)和路侧特征提取器 F i ( ⋅ ) F_{i}(\cdot) Fi(⋅),来表征未来时刻t的特征流:
F i ( t ) = F i ( P i ( t i ) ) , t ≥ t i F_{i}(t)=F_{i}(P_{i}(t_{i})),\ \ \ \ \ \ \ \ t\ge t_{i} Fi(t)=Fi(Pi(ti)), t≥ti
与之前传输前一帧特征 F i ( P i ( t i ) ) F_{i}(P_{i}(t_{i})) Fi(Pi(ti))的方法相比,特征流可以直接预测车辆传感器数据在 t v t_{v} tv时刻的对齐特征。(⚡所以采用 F i ( t ) F_{i}(t) Fi(t),这里的 t t t可以是车辆数据的时间 t v t_{v} tv)
❓ 公式中那里到底是 t i t_{i} ti还是 t t t啊?
为了将特征流应用到传输和协同检测中,两个问题需要被解决:
1️⃣ 表达和传输随时间变化的连续特征流;
2️⃣ 使特征流具有预测能力;
考虑到 t v → t i t_{v}\to t_{i} tv→ti的时间间隔特别短,所以作者采用最简单的一阶导数来表征连续特征流随时间的变化,如下式:
F i ~ ( t i + Δ t ) ≈ F i ( P i ( t i ) ) + Δ t ∗ F i ′ ~ ( t i ) \tilde{F_{i}}(t_i+\Delta t) \approx F_{i}(P_{i}(t_{i})) + \Delta t * \tilde{F'_{i}}(t_{i}) Fi~(ti+Δt)≈Fi(Pi(ti))+Δt∗Fi′~(ti)
其中, F i ′ ~ ( t i ) \tilde{F'_{i}}(t_{i}) Fi′~(ti)表示特征流的一阶导数, Δ t \Delta t Δt表示未来的短时间。因此,我们仅需要获得特征 F i ( P i ( t i ) ) F_{i}(P_{i}(t_{i})) Fi(Pi(ti))和特征流的一阶导数 F i ′ ~ ( t i ) \tilde{F'_{i}}(t_{i}) Fi′~(ti)就可以估计特征流 F i ( t ) F_{i}(t) Fi(t)。当一个自动驾驶汽车接收到了 F i ( P i ( t i ) ) F_{i}(P_{i}(t_{i})) Fi(Pi(ti))和 F i ′ ~ ( t i ) \tilde{F'_{i}}(t_{i}) Fi′~(ti)在不确定的延误之后,本文能用最小的计算量来生成对齐车辆传感器数据的基础设施特征(因为它仅需要线性计算)。为了能使特征流具备预测能力,本文从基础设施历史帧 I i ( t i − N + 1 ) , … , I i ( t i − 1 ) , I i ( t i ) I_{i}(t_{i}-N+1), \dots,I_{i}(t_{i}-1),I_{i}(t_{i}) Ii(ti−N+1),…,Ii(ti−1),Ii(ti),用网络提取特征流 F i ′ ~ ( t i ) \tilde{F'_{i}}(t_{i}) Fi′~(ti)的一阶导数。在本篇文章中, N N N为2,即表示两个连续的基础设施帧 P i ( t i − 1 ) P_{i}(t_{i}-1) Pi(ti−1)和 P i ( t i ) P_{i}(t_{i}) Pi(ti)
❓ 这么设置下来,与BEVFormer中的有何区别?
特别地,我们首先用Pillar Feature Net将两个连续的点云转换为BEV视图的两个伪图像(pseudo-images),每一帧的尺寸为[384, 288, 288] 。然后,我们拼接两个BEV伪图像为尺寸[768, 288, 288],将拼接后的伪图像输入到一个13层的主干网络和一个3层特征金字塔网络(FPN)中,像SECOND一样,生成估计的一阶导数 F i ′ ~ ( t i ) \tilde{F'_{i}}(t_{i}) Fi′~(ti),其尺寸为[364, 288, 288]。(作者在附录中写了每一个网络的具体尺寸)
2.2 压缩、传输与解压缩
压缩:为了减少冗余信息,减少传输成本,作者采用了两个压缩器(compressors)来压缩特征 F i ( P i ( t i ) ) F_{i}(P_{i}(t_{i})) Fi(Pi(ti))和导数 F i ′ ~ ( t i ) \tilde{F'_{i}}(t_{i}) Fi′~(ti),在每个压缩器中利用三个Conv-Bn-ReLu
块将特征尺寸从[384, 288, 288]压缩到[12, 36, 36]。本文在广播(broadcast)压缩特征流来使其与路侧的时间戳和标定文件相关联。同时,作者还采用注意力蒙版(attention mask)和量化技术(quantization techniques)进行进一步压缩,使特征关注感兴趣的区域。
解压缩:在接收到车辆发送的特征流后,车辆端采用两个解压器,每个解压器采用三个Deconv-Bn-ReLU
块组成,将压缩的特征和一阶导变为原始尺寸[384, 288, 288]
2.3 车辆传感器数据与基础设施特征流融合
作者用特征流来预测基础设施在特征 t v t_{v} tv的特征,以对齐车辆的特征,如下:
F ~ i ( t v ) ≈ F i ( P i ( t i ) ) + ( t v − t i ) ∗ F i ′ ~ ( t i ) \tilde{F}_{i}(t_{v}) \approx F_{i}(P_{i}(t_{i}))+(t_{v}-t_{i})*\tilde{F'_{i}}(t_{i}) F~i(tv)≈Fi(Pi(ti))+(tv−ti)∗Fi′~(ti)
F i ~ ( t v ) \tilde{F_{i}}(t_{v}) Fi~(tv)表示特征流预测的路侧传感器在 t v t_{v} tv时刻的特征,这种线性的方法有效地补偿了不确定延迟,且仅需要很小的计算。随后,预测的路侧传感器在 t v t_{v} tv时刻的特征利用对应的标定文件,转换到车辆坐标系。既然得到了路侧传感器和车载传感器在 t v t_{v} tv时刻的BEV特征图,且他们都在车辆坐标系下,那么就可以将他们的特征进行融合。(如下图所示)在车辆兴趣区域外的特征都从车辆基础设施特征中删除,空的位置用0来填充。将车辆和路侧的设施进行拼接,并用Conv-Bn-Relu
块来融合拼接后的特征。
最后,将融合特征输入到3D检测头中,生成更加准确的位置和识别结果。
3. 特征流网络训练流程
FFNet的训练流程包括两个阶段:
1️⃣ 用端到端的方式训练基础的融合框架(不考虑延迟):这一阶段的目标是使FFNet融合基础设施特征和车辆特征来增强检测性能。具体来说,作者利用从车端和路侧获得的协同数据和标注数据来训练FFNet。
2️⃣ 用自监督训练来训练特征流生成器:通过基础设施序列帧的时间关联,来利用自监督学习来训练特征生成器。这个想法是通过邻近的基础设施帧来构造真值,且不需要额外的手动标注。具体而言,作者生成了训练特征对 D = { d t i , k = ( P i ( t i − 1 ) , P i ( i ) , P i ( t i + k ) ) } D=\{d_{t_{i},k}=(P_{i}(t_{i}-1),P_{i}(i),P_{i}(t_{i}+k))\} D={dti,k=(Pi(ti−1),Pi(i),Pi(ti+k))},其中, P i ( t i − 1 ) P_{i}(t_{i}-1) Pi(ti−1) 和 P i ( i ) P_{i}(i) Pi(i)是两个连续的基础设施点云帧, P i ( t i + k ) ) P_{i}(t_{i}+k)) Pi(ti+k))是 P i ( t i ) P_{i}(t_{i}) Pi(ti)的第 ( k + 1 ) (k+1) (k+1)帧
并且,作者构建了一个损失函数来优化特征生成器,该损失函数的目标是 t i + k t_{i}+k ti+k时刻预测的特征流尽可能地接近 t i + k t_i+k ti+k时刻的特征(作者是通过余弦相似性实现的)。
五、实验部分
1. 实验设置
数据集:作者使用了公开的真实世界DAIR-V2X数据集,该数据集包含100多个场景,以及在28个具有挑战性的交通路口从基础设施和车辆传感器(摄像头和激光雷达)采集的18000个数据对。该数据集包含9311对具有车路协同视角的协同3D标注数据,其中每个物体都被标注了相应的类别(轿车、公交车、卡车或厢式货车)。数据集按5 : 2 : 3的比例划分为训练集、验证集和测试集,所有模型均在验证集上进行评估。此外,原始传感器数据仅对测试集开放。
实施细节:作者使用MMDetection3D作为代码库,在DAIR-V2X训练集上对特征融合基础模型进行了40个epoch的训练,学习率为0.001,权重衰减为0.01。为了构建用于训练特征流生成器的D,我们从训练部分中选取每一对数据,并在范围内随机设置k值。关于k和D的更多信息可在3.3节中找到。FFNet的预训练使用已训练好的特征融合基础模型。我们在 D u D_{u} Du上对特征流生成器进行了10个epoch的训练,学习率为0.001,权重衰减为0.01。所有训练和评估均在NVIDIA GeForce RTX 3090 GPU上进行。检测性能使用KITTI评估检测指标进行衡量,分别包括鸟瞰图(BEV)平均精度均值(mAP)以及交并比(IoU)为0.5和0.7时的3D mAP。对于位于矩形区域[0, -39.12, 100, 39.12]内的物体,仅考虑汽车类别。附录中提供了关于FFNet和融合方法的更多实现细节。
2. 实验比较
作者将FFNet与四类融合方法进行了比较:非融合方法(例如,PointPillars[17]和AutoAlignV2[4])、早期融合、晚期融合、中期融合(例如,DiscoNet[20])以及V2VNet[19]。
3. 消融实验
对比了有无特征流的特征预测的效果,发现在有延迟的情况下,特征流模块的预测效果较为明显。
六、总结
总结: 本文介绍了FFNet,这是一种创新的用于车路协同3D(VIC3D)目标检测的中级协同框架。FFNet通过利用压缩的特征流进行协同检测,有效地解决了与时间异步和传输成本相关的挑战。通过在DAIR-V2X数据集上进行的大量实验,FFNet展现出相较于现有最先进方法更优越的性能。此外,FFNet可以扩展到各种模态,包括图像和多模态数据,使其成为一种通用的解决方案。而且,FFNet在多车协同感知领域具有很大的潜力,并通过利用额外的帧来增强特征预测能力。所提出的FFNet框架结合了特征预测和自监督学习,为VIC3D目标检测提供了一条很有前景的途径,并且在未来解决各种协同感知任务方面具有潜力。 |
今天给大家带来的分享就到这里,欢迎大家交流讨论!补充一点:该文中的FFNet,在作者2025年发表在AAAI的另一篇文章(见该博客)中,也是用了该思想来进行时序融合。
Xizhou Zhu, Yujie Wang, Jifeng Dai, Lu Yuan, and Yichen Wei. Flow-guided feature aggregation for video
object detection ↩︎
相关文章:
文献总结:NIPS2023——车路协同自动驾驶感知中的时间对齐(FFNet)
FFNet 一、文献基本信息二、背景介绍三、相关研究1. 以自车为中心的3D目标检测2. 车路协同3D目标检测3. 特征流 四、FFNet网络架构1. 车路协同3D目标检测任务定义2. 特征流网络2.1 特征流生成2.2 压缩、传输与解压缩2.3 车辆传感器数据与基础设施特征流融合 3. 特征流网络训练流…...
(二十六)Java观察者模式在Android开发中的应用详解
Java观察者模式在Android开发中的应用 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,使得多个观察者对象可以同时监听一个主题对象。当主题对象的状态发生变化时,所有注册的观察者…...
goland做验证码识别时报“undefined: gosseract.NewClient”
gosseract 应该有 和 c 相关的配置库因此需要安装 cgo 并且启用 CGO_ENABLED 在cmd下面输入这个 go env -w CGO_ENABLED1 接着输入 go env 验证是否设置成功 解决了这个问题后 “undefined: gosseract.NewClient” 又出现了 # runtime/cgo …...
ceph weight 和 reweight 的区别
ceph osd df ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS0 nvme 6.98630 0.95508 7.0 TiB 5.0 TiB 4.9 TiB 13 GiB 33 GiB 2.0 TiB 71.10 0.96 83 up1 nvme 6.98630...
# 使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类
使用 PyTorch 构建并训练一个简单的 CNN 模型进行图像分类 在深度学习领域,卷积神经网络(CNN)是处理图像分类任务的强大工具。本文将通过一个简单的示例,展示如何使用 PyTorch 构建、训练和测试一个 CNN 模型,用于对食…...
Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战
知识点1【TFTP的概述】 学习通信的基本:通信协议(具体发送上面样的报文)、通信流程(按照什么步骤发送) 1、TFTP的概述 tftp:简单文件传输协议,**基于UDP,**不进行用户有效性验证 …...
汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作
故障现象 一辆2019款大众途观L车,搭载DKV发动机和0DE双离合变速器,累计行驶里程约为8万km。车主进厂反映,鼓风机偶尔不工作。 故障诊断 接车后试车,鼓风机各挡位均工作正常。用故障检测仪检测,空调控制单元&#x…...
编程常见错误归类
上一篇讲了调试,今天通过一个举例回忆一下上一篇内容吧! 1. 回顾:调试举例 在VS2022、X86、Debug的环境下,编译器不做任何优化的话,下⾯代码执⾏的结果是啥? #include <stdio.h> int main() {int …...
Python 3.13 support for PyTorch
Python 3.13 support for PyTorch Python 3.13 support for PyTorch 去官网可以查到具体信息:https://pytorch.org/get-started/locally/ 然后选择自己的CUDA版本,下面会显示下载网站,比如我选择12.4,则会出现:pip3 …...
中国联通:《DeepSeek洞察与大模型应用:人工智能技术发展与应用实践》(可下载)
近年来,人工智能(AI)技术迅猛发展,尤其是大模型技术的崛起,正在深刻改变各行各业的运营模式和创新路径。作为中国通信行业的领军企业之一,中国联通积极拥抱AI技术变革,结合自身在通信网络、大数…...
k8s 调整Node节点 Max_Pods
默认情况下,Kubernetes集群中一个Node最多能起110个Pod。 这是基于性能和资源管理的考虑,以确保Kubernetes集群的稳定性和可靠性。 查看kht125节点上支持的最大pod数量: kubectl describe node kht125 | grep -i “Capacity|Allocatable” -A 6 调整…...
VR拍摄要点与技巧有哪些?有哪些最佳实践?
VR拍摄要点与技巧:最佳实践 VR技术通过模拟环境,使用户能够沉浸在一个完全由计算机生成的虚拟世界中,进行互动体验。在VR拍摄领域,我们主要利用这一技术来创建360度全景视频或图片,让观众能够全方位、无死角地感受拍摄…...
使用 Docker 安装 Elastic Stack 并重置本地密码
Elastic Stack(也被称为 ELK Stack)是一个非常强大的工具套件,用于实时搜索、分析和可视化大量数据。Elastic Stack 包括 Elasticsearch、Logstash、Kibana 等组件。本文将展示如何使用 Docker 安装 Elasticsearch 并重置本地用户密码。 ###…...
安卓手机万能遥控器APP推荐
软件介绍 安卓手机也能当“家电总控台”?这款小米旗下的万能遥控器APP,直接把遥控器做成“傻瓜式操作”——不用配对,不连蓝牙,点开就能操控电视、空调、机顶盒,甚至其他品牌的电器!雷总这波操作直接封神&…...
PLOS ONE:VR 游戏扫描揭示了 ADHD 儿童独特的大脑活动
在孩子的成长过程中,总有那么一些“与众不同”的孩子。他们似乎总是坐不住,课堂上小动作不断,注意力难以集中,作业总是拖拖拉拉……这些行为常常被家长和老师简单地归结为“淘气”“不听话”。然而,他们可能并不只是“…...
Linux 系统编程 day4 进程管道
进程间通信(IPC) Linux环境下,进程地址空间相互独立,任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能互相访问,要交换数据必须通过内核,在内核中开辟一块缓冲区…...
基于DeepSeek的考研暑假日志分析
注:我去年考研时写了日志,大致记录了我每天的主要活动。由于过于琐碎,一直没有翻看。突发奇想,现在利用deepseek总结其中规律。 从你的日志中可以总结出以下规律和活动兴衰起落: 一、学习活动规律与演变 …...
Python 写生成 应用商店(2025版) 网页 方便收集应用 ,局域网使用
工具【1】:nginx 配置 nginx.conf 文件 server { listen 8080; server_name example.com; location / { root E:/BIT_Soft_2025; index index.html index.htm; } # 定义错误页面 error_page 404 /4…...
LLaMA Factory多模态微调实践:微调Qwen2-VL构建文旅大模型
LLaMA Factory 是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过 Web UI 界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架之一,GitHub 星标超过 4.7 万。本教程将基于通义千问团队开源的…...
Ubuntu20.04 部署llama-factory问题集
llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。_llamafactory 部署-CSDN博客 1.跟着教程 llama-factory下载不下来 来,试着换源,多试几次,就可以成功了。。。 2.跟着教程,发现无法…...
鸿蒙语言基础
准备工作 去鸿蒙官网下载开发环境 点击右侧预浏览,刷新和插销按钮,插销表示热更新,常用按钮。 基础语法 string number boolean const常量 数组 let s : string "1111"; console.log("string", s);let n : number …...
每天一道C语言精选编程题之字符串拷贝
题目描述 写⼀个函数my_strcpy,实现拷⻉字符串的功能,假设给定⼀个字符数组a,再给定⼀个字符数组b,将字符串a中的内容拷⻉到字符串b中,拷⻉内容包含字符串末尾的 \0 字符。 解法思路 使⽤ while 循环通过指针的⽅式逐…...
C#中扩展方法和钩子机制使用
1.扩展方法: 扩展方法允许向现有类型 “添加” 方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像实例方法一样进行调用。 使用场景: 1.当无法修改某个类的源代码&#…...
基于CNN与VGG16的图像识别快速实现指南
基于CNN与VGG16的图像识别快速实现指南 以下是从零实现代码到原理剖析的完整流程,包含TensorFlow/Keras框架的代码示例与关键优化技巧,满足快速实验需求。 一、核心原理对比 特性CNN(基础模型)VGG16结构深度5-10层(如…...
中间件--ClickHouse-9--MPP架构(分布式计算架构)
1、MPP 架构基础概念 MPP(Massively Parallel Processing 大规模并行处理) 是一种分布式计算架构,专门设计用来高效处理大规模数据集。在这种架构下*,数据库被分割成多个部分,每个部分可以在不同的服务器节点上并行处理*。这意味着ÿ…...
如何在PDF.js中改造viewer.html以实现PDF的动态加载
在PDF.js中改造viewer.html实现PDF动态加载,需结合参数传递、文件流处理及跨域配置等技术。以下是综合多个技术方案的核心实现步骤: 一、基础参数传递法 1. URL参数动态加载 通过修改viewer.html的URL参数传递PDF路径,适用于静态文…...
Android——动画
帧动画 帧动画就是很多张图片,一帧一帧的播放,形成的一个动画效果。 frame.xml <?xml version"1.0" encoding"utf-8"?> <animation-list xmlns:android"http://schemas.android.com/apk/res/android">&l…...
基于linux 设置无线网卡Monitor模式 sniffer抓包
硬件 TP-WN722N 开源无线网卡 网卡设置成抓包模式,条件是什么? 硬件条件 网卡芯片支持监听模式,外置天线或高增益天线可提升抓包效果驱动与软件条件:正确的驱动程序系统与权限条件 Linux:原生支持(Kali …...
Ubuntu18.04安装Qt5.12
本文介绍了在Ubuntu18.04环境下安装QT QT5.12相关安装包下载地址 https://download.qt.io/archive/qt/5.12/ Linux系统下Qt的离线安装包以.run结尾 (sudo apt-get install open-vm-tools open-vm-tools-desktop解决无法paste的问题) 安装 1.cd命令 终端进入对应的文件夹下面 2.…...
克服储能领域的数据处理瓶颈及AI拓展
对于储能研究人员来说,日常工作中经常围绕着一项核心但有时令人沮丧的任务:处理实验数据。从电池循环仪的嗡嗡声到包含电压和电流读数的大量电子表格,研究人员的大量时间都花在了提取有意义的见解上。长期以来,该领域一直受到对专…...
PDF.js 生态中如何处理“添加注释\添加批注”以及 annotations.contents 属性
我们来详细解释一下在 PDF.js 生态中如何处理“添加注释”以及 annotations.contents 属性。 核心要点:PDF.js 本身主要是阅读器,不是编辑器 首先,最重要的一点是:PDF.js 的核心库 (pdfjs-dist) 主要设计用于解析和渲染…...
L38.【LeetCode题解】四数之和(双指针思想) 从汇编角度分析报错原因
目录 1.题目 2.分析 去重的代码 错误代码 3.完整代码 提交结果 1.题目 四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元…...
【第48节】探究汇编使用特性:从基础到混合编程
目录 引言 一、调用约定的奥秘 1.1 . C调用约定(_cdecl) 1.2 stdcall调用约定(_stdcall) 1.3 fastcall快速调用约定(_fastcall) 1.4 thiscall调用约定(C类成员函数) 二、X64汇…...
【jenkins】首次配置jenkins
第一步,输入管理员密码 cat /var/jenkins_home/secrets/initialAdminPassword第二步,点击安装推荐的插件 第三步,创建管理员用户 第四步,返回实例 第五步, 升级jenkins 第六步, 修复提示 第七步,…...
Python 项目文档编写全攻略:从入门到自动化维护
引言 在软件开发领域,完善的文档可提升 40% 的团队协作效率(来源:IEEE 2022 年开发者调查报告 ^^1^^)。本文将深入探讨 Python 项目文档的最佳实践,涵盖文档生成工具、注释规范、自动化维护等关键环节。 一、Python 文…...
基于 React 和 CodeMirror 实现自定义占位符编辑器
npm git 在前端开发中,我们经常需要实现各种复杂的编辑器功能,比如代码编辑器、富文本编辑器等。本文将介绍如何基于 React 和 CodeMirror 实现一个带有自定义占位符功能的编辑器,这种编辑器在模板系统、表单设计器等场景中非常有用。 一…...
GitHub Copilot在产品/安全团队中的应用实践:处理Markdown、自动化报告与电子表格、使用CLI命令等
本文来源github.com,由GitHub中国授权合作伙伴-创实信息翻译整理。 在当今的快节奏时代,技术和非技术团队之间的协作至关重要,事实证明,GitHub Copilot等工具已成为不可或缺的助手。这些由AI驱动的工具已不只是开发者的“秘密武器…...
嵌入式系统中Flash操作全面解析与最佳实践
嵌入式系统中Flash操作全面解析与最佳实践 一、Flash存储器基础与分类 Flash存储器是嵌入式系统中最重要的非易失性存储介质,根据内部架构和工作原理主要分为两大类: 1.1 NOR Flash与NAND Flash对比 特性NOR FlashNAND Flash架构随机存取架构串行存取…...
tomcat 的安装与启动
文章目录 tomcat 服务器安装启动本地Tomcat服务器 tomcat 服务器安装 https://tomcat.apache.org/下载 Tomcat 10.0.X 启动本地Tomcat服务器 进入 Tomcat 的 bin...
Flash存储器(二):SPI NAND Flash与SPI NOR Flash
目录 一.存储架构 二.接口与封装 三.特性对比 四.典型应用场景 4.1 SPI NOR Flash 4.2 SPI NAND Flash 五.技术演进与市场趋势 六.选择建议 6.1 选择SPI NOR的场景 6.2 选择SPI NAND的场景 SPI NAND Flash和SPI NOR Flash是嵌入式设备中常用的存储器。下面通过全面对…...
第 7 期:DDPM 采样提速方案:从 DDPM 到 DDIM
本期关键词:采样加速、DDIM 推导、可控性提升、伪逆过程、代码实战 前情回顾:DDPM 的采样瓶颈 在前几期中,我们构建了一个完整的 DDPM 生成流程。但是你可能已经发现: 生成一张图像太慢了!!! 原因是: DDPM 要在 T 个时间步中一步步地去噪,从 x_T → x_0。而通常 T 至…...
axios 模拟实现
axios 模拟实现 包含[发送请求,拦截器,取消请求] 第一步 , axios模拟发送请求 //使用 xhr 发送请求function xhr_adpter(config){return new Promise(function handle(resolve,reject){let xhr new XMLHttpRequest();xhr.open(config.method, config.url,true);xhr.onreadys…...
架构师面试(三十一):IM 消息收发逻辑
问题 今天聊一下 IM 系统最核心的业务逻辑。 在上一篇短文《架构师面试(三十):IM 分层架构》中详细分析过,IM 水平分层架构包括:【入口网关层】、【业务逻辑层】、【路由层】和【数据访问层】;除此之外&a…...
hadoop三大组件的结构及各自的作用
1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系统,用于存储和管理海量数据。它具有高容错性、高吞吐量和可扩展性,能够在多个节点上存储和管理大规模数据 1.2架构:采用主从架构,由一个 NameNode 和多个 DataNode 组成。NameNode…...
GEE学习笔记 29:基于GEE的多源Landsat合成与植被指数时序提取
基于GEE的多源Landsat合成与植被指数时序提取 🌿 1.写在前面 | 基于GEE的Landsat多尺度植被指数提取脚本📌 2.常用植被指数计算公式2.1. 🌿 NDVI(归一化植被指数)Normalized Difference Vegetation Index2.2. 🌱 EVI(增强型植被指数)Enhanced Vegetation Index2.3.…...
负载均衡的策略
目的:将请求均衡分发到后台的服务器 算法: 随机算法:随机数获取服务器加权随机算法:根据权重,增加某些服务器(性能比较好等)选择的随机比例轮询算法:轮流分发给服务器加权轮询算法…...
AWS Elastic Beanstalk的部署Python Flask后端服务(Hello,World)
问题 最近需要使用AWS Elastic Beanstalk来部署Python的Flask后端web接口。这里先做一个最简单的Flask Hello,World接口服务程序。 Flask工程与代码 创建本地虚拟环境 conda create -n flask python3.13 # 激活 conda activate flaskapp.py from flask import …...
Hadoop的三大结构及各自的作用?
1.HDFS 作用: 存储海量数据,支持高容错(数据自动备份)和高吞吐量(适合大文件读写)。 采用主从架构: NameNode:管理文件系统的元数据(如文件目录结构)。 Dat…...
在Ubuntu系统中安装和升级RabbitVCS
在Ubuntu系统中安装和升级RabbitVCS 目前在ubuntu中使用svn的GUI工具,已经安装了。想升级一下。 当前遇到的问题是,我想用它看看我当前的代码对应的版本号,然后再决定是否update。但是,好像我看不出来。根本不如在windows使用To…...
深入理解红黑树:原理、实现与应用
深入理解红黑树:原理、实现与应用 引言 红黑树(Red-Black Tree)是计算机科学中一种重要的自平衡二叉查找树。它通过简单的规则和高效的调整策略,保证了插入、删除、查找等操作的时间复杂度均为 O(log n)。红黑树广泛应用于实际开…...