Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读

news2025/2/5 10:35:34

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读

  • Abstract
  • Introduction
  • Related Work
  • Method
  • Experiments
  • Conclusions
  • 阅读总结

论文标题:Appearance-Motion Memory Consistency Network for Video Anomaly Detection

文章信息:
在这里插入图片描述
发表于:AAAI 2021(CCF A会议)

原文链接:https://ojs.aaai.org/index.php/AAAI/article/view/16177/15984

源代码:https://github.com/NjuHaoZhang/AMMCNet_AAAI2021

Abstract

监控视频中的异常事件检测是一项重要但具有挑战性的任务,已经提出了许多方法来解决这个问题。以前的方法要么只考虑外观信息,要么直接整合外观和运动信息的结果,而不明确地考虑它们的内生一致性语义。受人类从多模态信号中识别异常帧的规则的启发,我们提出了一种外观-运动-记忆一致性网络(AMMC-Net)。我们的方法首先充分利用外观和运动信号的先验知识,明确地捕捉它们在高级特征空间中的对应关系。然后,它将多视图特征相结合,以获得规则事件的更本质、更稳健的特征表示,这可以显著增加异常事件和规则事件之间的差距。在异常检测阶段,我们进一步在潜在空间中引入提交误差和像素空间中的预测误差,以提高检测精度。在各种标准数据集上的可靠实验结果验证了我们方法的有效性。

Introduction

视频异常检测(VAD)是监控视频中的一项关键任务。它已经研究了很多年,但由于收集异常数据的困难和挑战,仍未解决(Kiran、Thomas和Parakkal,2018)。与常规事件相比,异常发生的频率较低,而且异常类型多样,甚至是无限的。因此,收集平衡的正常和异常数据并使用传统的监督二进制分类方法来解决这个问题似乎是不可行的。考虑到视频监控中的常规事件非常丰富,一个普遍的场景(Luo,Liu,and Gao 2017a;Kiran,Thomas,and Parakkal 2018;Liu等人2018;Ionescu等人2019)只是提供的正常数据。
在这种设置下,对规则事件的外观和运动信息进行建模是第一原则。除了独立地表示这两种类型的数据外,对它们之间的对应关系进行建模也是至关重要的。
自然界中存在的一致性定律是一个重要概念,在计算机视觉中得到了广泛应用(Wang,Jabri,and Efros 2019)。与上述使用时间对应关系的工作不同,本文提出的VAD中的一致性明确考虑了对规则事件中的外观和运动信号之间的对应关系进行建模。例如,在超市购物中心的环境中,经常发生的事件是人们向前推购物车或与购物车呆在一起。一些异常可以分别通过外观(火灾爆发)或动作(人们相互打斗)来检测。相反,一些异常需要通过考虑外观和运动之间的相关性来检测。例如,当人们站着不动,购物车在人类无法控制的情况下向前移动时,就会发生异常情况。单从外观上看,人和购物车都是规则的物体,任何不寻常的外观都会发生变化。仅从运动来看,人们站着不动和购物车向前移动都是正常情况。如果不考虑外观和运动之间的相关性,异常检测器可能不可避免地会在这些异常上失败。只有对外观(人、购物车)和运动(人向前推购物车)之间的一致性进行建模,我们才能检测到这些异常,并使异常检测器更加稳健。
然而,先前的方法忽略了VAD中外观和运动之间的一致相关性,包括重建(Hasan等人,2016)、预测(Liu等人,2018)和运动融合(Xu等人,2017;Yan等人,2018;Vu等人,2019)。前两种方法忽略了运动信息,后一种方法在测试阶段直接结合了两种模态的信息。在训练阶段,它没有在同一空间对这两种类型的信息进行联合建模,也没有捕捉到这两种模式的一致性。

为了明确地对外观和运动信息之间的一致性进行建模,我们提出了一种用于视频异常检测的外观-运动-记忆一致性框架。

1) :我们首先学习常规事件中的外观和运动信号的先验信息,并将其存储在两个名为AppMemPool和MotMemPool的内存池中。由于像素空间中有许多与异常检测无关的背景像素,并且原始特征包含样本中存在的特定信息,因此我们选择在特征空间中对这两个特征的先验信息进行建模。考虑到单个存储单元的表示能力不足,我们建议使用多个存储单元来表示查询向量的原型特征。
2) :然后,我们通过学习从AppMemPool引导的特征到MotMemPool指导的特征的两个映射函数,反之亦然,对外观和运动之间的一致相关性进行建模,称为外观-运动特征传递网络(AMFT)。
3) :由于记忆项只包含来自训练数据的先验信息,并且每个输入的唯一信息可能会丢失,为了通过记忆先验来补偿丢失的信息,我们最终集成了来自编码器的初始特征,即记忆模块生成的原型特征,以及来自AMFT的变换后的特征,以形成规则事件的鲁棒性和表达性特征。
4) :在测试阶段,我们结合原始特征和记忆项之间的外观/运动预测误差和提交误差(Den Oord,Vinyals,and Kavukcuoglu 2017)来计算异常分数,并确定帧是否异常。

Related Work

最近,已经提出了大量的方法来解决视频异常事件检测。在(Hasan等人2016;Sabokrou、Fathy和Hoseini 2016)中,基于在常规事件上训练的模型不能重建他们没有看到的异常事件的假设,提出了基于重建的模型。Conv AE(Hasan等人,2016)使用深度自动编码器从训练视频集中重建帧的输入序列。Conv3D AE(Sabokrou、Fathy和Hoseini 2016)使用3D卷积神经网络对视频片段的外观和运动信息进行编码。使用去卷积神经网络来重构输入视频剪辑。提出了一系列基于预测的模型(Luo,Liu,and Gao 2017a;Shi等人2015;赵等人2017)来缓解重建模型中的同一性映射。这些方法将视频帧视为时间模式或时间序列,目标是学习一个生成模型,该模型可以使用过去的帧来预测未来的结构。在(Luo,Liu,and Gao 2017a;Shi等人2015)中,输入视频的卷积表示被输入到卷积LSTM。。然后,去卷积层将所学习的特征的输出重建为原始分辨率。(赵等人2017)提出了一种时空自动编码器(STAE),该编码器利用深度神经网络通过执行三维卷积从空间和时间维度提取特征,重建当前片段并生成未来帧。此外,还提出了一些基于双流网络的模型(Xu et al.2017;Yan et al.2018)来解决异常检测问题。这些方法最初用于动作识别(Simonyan和Zisserman 2014),因为它允许分别对外观和运动信息进行显式建模。在另一项工作中(Vu等人,2019),Hung提出了一种使用强度和运动数据的多级表示来编码规则帧的框架。该检测器可以通过在低级数据之外的高级表示中发现异常对象并结合这些检测结果,以高精度和低错误检测来定位异常区域。更多作品可以在(Kiran,Thomas,and Parakkal 2018)中找到。

与我们的工作最相关的方法是以下三篇论文(Gong等人,2019;Nguyen和Meunier 2019;Xu等人2017)。在(Gong et al.2019)中,提出了一种称为MemAE的内存增强自动编码器,以提高网络的性能。给定一个输入,MemAE首先从编码器获得编码,然后将其用作查询,以检索最相关的内存项进行重建。它试图利用自动编码器架构来重建外观。在(Nguyen和Meunier 2019)中,提出了一种rgb到光流翻译网络,以利用外观与其运动之间的对应关系。它使用U-Net结构来预测给定输入RGB帧的相应运动。(Xu et al.2017)提出了一种将传统的早期融合和后期融合策略相结合的双融合框架。它首先使用堆叠的去噪自动编码器来分别学习外观和运动特征以及联合表示(早期融合)。然后,多个一类SVM模型基于所学习的特征来预测每个输入的异常分数。最后,它使用后期融合策略来组合计算的分数并检测异常事件。与上述方法相比,我们提出的模型可以明确地强制两种模式在训练阶段在共享空间中表示它们的特征,从而有助于异常检测

Method

在这里插入图片描述

如图1所示,我们提出的AMMC-Net可以分为三个部分:编码器、解码器和外观运动记忆增强特征转移模块(AMMT)。我们首先将图像片段及其光流片段输入到编码器中,以获得外观和运动的初始特征表示。然后,我们将初始特征图输入到内存模块(AppMemPool和MotMemPool)中,以提取这两种模式的原型项目。接下来,我们使用两个神经网络在两个输入原型特征之间传递信息,以获得两个一致的特征。之后,我们在初始特征、记忆引导的原型特征和一致特征之间进行特征融合。最后,将融合的特征输入解码器,以预测未来的外观(图像)和运动(光流),如算法1所示。
在这里插入图片描述

Encoder and Decoder
编码器用于从输入视频帧中提取特征表示。解码器被训练为通过获取从先前步骤获得的聚合特征来重构样本。我们采用编码器中使用的res块和类似UNet的跳跃连接结构(Ronneberger、Fischer和Brox 2015)作为骨干网络来构建整个模块。首先,为了增强网络输出的范围和提高表示能力,本文将原来的ReLU修改为Tanh。其次,将原始体系结构的4尺度缩减为3尺度,以控制模型的复杂性,减少参数数量和训练时间。
AMMT
它由三个组件组成,即内存池、特征传输模块和特征聚合模块。存储器池首先提取外观和运动特征的原型模式。然后,我们将这些特征图输入到特征转移模块(AMFT)中,以学习转移的特征。最后,我们聚合编码器特征、记忆先验和传输特征。

  • Memory Pool.
    与异常事件类型的多样性和无界性相比,可用于训练的常规事件可以是详尽无遗的。因此,从理论上总结规则模式的先验信息是可行的。然而,原始特征包含正常事件的先验信息及其特定信息。只有先验信息在两种模式之间具有很强的相关性。因此,我们引入了一种具有离散潜在空间的内存模块,并将其与传统的重构模型相结合,以提取原型特征并将其存储在内存池中。具体来说,我们为外观和运动信息设计了单独的内存模块,称为AppMemPool和MotMemPool。我们的记忆模块定义了一个潜在嵌入空间 M ∈ R D × N M∈R^{D×N} MRD×N,包含N个维度为D的记忆项。我们将外观和运动记忆池分别表示为 M a M^a Ma M o M^o Mo。内存池接收来自编码器的功能, z e a z^a_e zea z e o z^o_e zeo作为输入。然后,它计算从编码器到每个存储器项的每个空间特征,并选取K个最接近的项作为存储器先验特征 z m a z^a_m zma z m o z^o_m zmo。我们展示了算法1第3行到第6行的整个过程。
    在这里插入图片描述

  • Appearance-Motion Feature Transfer Module.
    我们在记忆先验空间中对外观和运动相关性进行建模。具体地,在接收到存储器先验特征 z m a z^a_m zma z m o z^o_m zmo之后,我们首先使用1x1卷积层对先验特征进行特征约简。然后我们应用两个映射函数 Φ a → o Φ_{a→o} Φao Φ o → a Φ_{o→a} Φoa,以学习外观和运动先验之间的一致相关性,并获得转移的特征 z ^ m o \widehat{z}^o_m z mo z ^ m a \widehat{z}^a_m z ma。整个过程如算法1中从第7行到第10行所示。与之前在特征空间中执行从外观到运动的方法(Vu等人,2019)相比,我们了解到在先验空间中外观和运动之间的一致相关性。因为在记忆空间中,它可以避免复杂背景的副作用,并且直接学习从运动(光流)到外观(图像)的转换是一个病态的问题,因此使用先验信息将使问题更加可行。
    在这里插入图片描述

  • Feature Aggregation
    由于内存项只包含先前的信息,它们将丢失每个输入的唯一信息。为了使特征更具代表性,我们聚合来自编码器的原始特征 z e a z^a_e zea z e o z^o_e zeo)、记忆先验 z m a z^a_m zma z m o z^o_m zmo)和转移的特征 z ^ m o \widehat{z}^o_m z mo z ^ m a \widehat{z}^a_m z ma)。最后,我们将融合的特征输入到解码器中,以预测未来的帧 F ^ t \widehat{F}^t F t和光流 O ^ t − 1 \widehat{O}^{t−1} O t1。我们在算法1中从第11行到第14行对这些进行了说明。
    在这里插入图片描述

Loss Function
设F表示rgb图像序列, F ^ \widehat{F} F 表示F的预测,O表示F的相应光流剪辑, O ^ \widehat{O} O 表示O的预测。当给定 F 1 … t − 1 F_{1…t−1} F1t1 O 1 … t − 2 O_{1…t−2} O1t2时,模型输出 F ^ t \widehat{F}_t F t O ^ t − 1 \widehat{O}_{t-1} O t1。为了生成更真实的帧,我们在模型中利用了GAN变体(最小二乘GAN(Mao et al.2017))。我们遵循(Mao et al.2017)的原始训练程序进行minmax game。具体来说,我们交替训练生成器和鉴别器。生成器试图产生一个看起来现实的结果,并愚弄鉴别器。鉴别器试图对哪个图像是真实的还是伪造的(生成的)进行分类。

  • 训练生成器.
    为了训练AMMC-Net的生成器,我们分别从外观和运动信号的像素空间和特征空间构造以下损失函数。
    在这里插入图片描述
    对于外观,我们采用强度、梯度、流量和对抗性损失(分别为 L i n t L_{int} Lint L g d l L_{gdl} Lgdl L o p L_{op} Lop L a d v G L^G_{adv} LadvG)。
    在这里插入图片描述
    其中超参数 λ i n t λ_{int} λint λ g d l λ_{gdl} λgdl λ o p λ_{op} λop λ a d v λ_{adv} λadv用于调整每个部分的重要性。
    我们采用 l 2 l_2 l2的距离,以最小化强度空间中预测帧 F ^ \widehat{F} F 与真实值 F F F之间的损失:
    在这里插入图片描述
    为了锐化图像预测,随后(Mathieu,Couprie,and Lecun 2016),在我们的损失函数中采用了梯度损失。它直接惩罚预测与其基本事实之间的图像梯度的差异:
    在这里插入图片描述
    其中i,j表示视频帧的空间索引,α可以调整预测图像的清晰度。
    为了保持运动的一致性,这对VAD至关重要,我们采用了运动约束损失(Liu et al.2018)来强制预测帧之间的光流接近真实帧:
    在这里插入图片描述
    对于运动,我们应用平滑的 l 2 l_2 l2损失,如方程(7)所示,因为它更适合于光流的高稀疏性(Girshick 2015):
    在这里插入图片描述
    为了优化内存模块(AppMemPool和MotMemPool),我们将外观 z e a z^a_e zea和运动 z e o z^o_e zeo的查询特性推至接近所选内存项 e a e_a ea e o e_o eo的查询特性,如下所示:
    在这里插入图片描述
    由于在我们的内存网络中存在不可微分的argmax操作,我们遵循停止梯度技巧sg(Bengio,Leonard,and Courville 2013;Den Oord,Vinyals,and Kavukcuoglu 2017)来处理损失反向传播。这里,β表示两种损失项目的重量。
  • 训练判别器
    为了迫使生成器学习正态分布,鉴别器试图将基本事实帧分类为真帧,将预测帧分类为假帧。在这里,我们遵循LSGAN(Mao et al.2017),如下所示:
    在这里插入图片描述
    Anomaly Detection in Testing Data
  • Memory Commit Error
    由于我们已经了解了内存中常规事件的先验知识,异常可能从查询特征 z e a z^a_e zea到内存原型 z m a z^a_m zma有很大的距离,而正常模式会导致较小的距离。我们使用内存提交错误来测量距离,如下所示:
    在这里插入图片描述
    第th帧的低错误表示它更有可能是正常的。
  • Image Prediction Error
    大量相关工作(Liu et al.2018)表明,与相同情况下的MSE相比,PSNR可以增加正常和异常事件之间的差距。因此,我们在我们的方法中采用了PSNR。
    在这里插入图片描述
  • Anomaly Score
    许多以前的方法(Nguyen和Meunier 2019)只将像素空间中的误差视为异常指标,忽略了特征空间中的错误对异常检测的影响。我们的AMMC网络弥补了这一缺陷。在测试阶段,结合潜在空间中的内存提交误差和像素空间中的图像预测误差,我们可以确定一个案例是否是异常。最终的正常分数可以推导如下:
    在这里插入图片描述
    其中 λ c λ_c λc表示两种类型误差之间的权重。H表示基于最小-最大的归一化操作,我们将整个测试视频中所有帧的两种类型的误差归一化到范围[0,1]。
    在这里插入图片描述
    因此,最终的 S ( t ) S(t) S(t)表示特定帧的法线程度。越大越正常,越小越异常,我们可以通过选择阈值来确定特定帧是正常还是异常。

Experiments

在这里插入图片描述

Conclusions

在本文中,我们对外观和运动之间的一致性进行建模,以解决视频异常检测问题。我们首先优化外观和运动预测网络来构建两个内存池。然后,我们使用外观-运动特征转移(AMFT)网络来实现外观和运动模式之间的通信和融合操作。在测试阶段,给定由图像及其光流组成的输入序列,使用AMFT从AppMemPool和MotMemPool中提取外观运动特征。最后,我们将像素空间中的预测误差与特征空间中的提交误差相结合,计算测试帧的得分。与现有技术相比,许多实验证明了我们的方法的有效性。固体消融研究证明了我们提出的AMMCNet在捕捉视频异常检测的外观和运动之间的一致性方面的有效性。

阅读总结

1:运动外观一致
2:Memory模块

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

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

相关文章

[笔记]ByteBuffer垃圾回收

参考&#xff1a;https://blog.csdn.net/lom9357bye/article/details/133702169 public static void main(String[] args) throws Throwable {List<Object> list new ArrayList<>();Thread thread new Thread(() -> {ByteBuffer byteBuffer ByteBuffer.alloc…

两种经典的现货白银假突破类型

假突破是现货白银市场中一种具有反大众性的市场行为。它通常和一种强势的市场行为突破联系在一起&#xff0c;但是它的方向是和突破完全相反的&#xff0c;识别假突破的类型&#xff0c;有助于降低我们亏损的风险&#xff0c;那如何识别呢&#xff1f;下面我们来介绍两种假突破…

rubymine 如何使用rubymine更新linux的ruby代码

第1步&#xff1a;配置SSH File | Settings | Tools | SSH Configurations 第2步&#xff1a;配置SFTP File | Settings | Build, Execution, Deployment | Deployment 第3步&#xff1a;使用 参考 rubymine remote远程linux同步代码 rubymine remote远程linux 并同步代码…

系列十四(面试)、谈谈你对StackOverflowError的理解?

一、StackOverflowError 1.1、概述 StackOverflowError是栈内存溢出的意思。栈中主要存储的是8种基本数据类型 引用类型 实例方法&#xff0c;栈的空间也是有限的&#xff0c;当存储进栈中的容量大于栈的最大容量时&#xff0c;就会报StackOverflowError的错误。 1.2、案例 …

一个网卡能设置(绑定)两个或多个IP

昨天领导问我&#xff0c;一个网卡设置两个IP。我就有点发愣&#xff1a;一个网卡能设置两个IP吗&#xff1f;我倒是见过一个机器插两个网卡&#xff0c;同时支持内网和外网。一个网卡设置两个IP&#xff0c;以谁为准&#xff1f; 上网搜索了一下&#xff0c;还真可以&#xff…

influxdb-cluster集群部署

一.下载安装包 略 二.集群文件配置修改 ip地址服务名称192.168.110.110influxdb,meta192.168.110.111influxdb,meta192.168.110.118meta 1.influxdb-meta.conf配置文件修改 meta至少三个节点修改配置比较简单 hostname "192.168.110.110" dir "/data/…

【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]

阅读导航 引言一、Mutex的简介二、Mutex的种类1. std::mutex &#xff08;基本互斥锁&#xff09;2. std::recursive_mutex &#xff08;递归互斥锁&#xff09;3. std::timed_mutex &#xff08;限时等待互斥锁&#xff09;4. std::recursive_timed_mutex &#xff08;限时等待…

残差网络学习

参考B站同济子豪兄的Resnet讲解 网络退化&#xff0c;不是梯度消失&#xff08;根本没有开始学习&#xff09;&#xff0c;梯度爆炸&#xff0c;过拟合。 不需要再拟合复杂底层的那个映射了&#xff0c;原来输入的基础上你需要进行哪些偏移哪些修改 残差预测值和真实值的偏差 一…

全光谱全天候耐久性性能测试氙灯老化箱太阳光模拟器

氙灯老化箱应用领域 添加剂 & 着色剂胶粘剂 & 密封剂建材汽车食品& 饮料平面艺术 包装材料油漆& 涂料光伏塑料纺织品风能 & 太阳能消费类电子产品 氙灯老化箱描述 氙灯老化箱是一种用于模拟阳光、雨水和温度循环的老化测试设备。它使用氙灯作为光源&am…

Docker概述及介绍

Docker是近年来新兴的虚拟化工具&#xff0c;它可以和虚拟机一样实现资源和系统环境的隔离。 库&#xff0c;然后再安装应用&#xff1b; Container(Docker容器)&#xff0c;在宿主机器、宿主机器操作系统上创建Docker引擎&#xff0c;在引擎的基础上再安装应用。 Docker三…

【第七在线】可持续时尚与商品计划:减少库存浪费的方法

随着可持续时尚的崭露头角&#xff0c;服装企业越来越重视减少库存浪费。库存浪费不仅对环境造成负面影响&#xff0c;还对企业的经济可持续性产生负面影响。本文将深入探讨可持续时尚与商品计划之间的关系&#xff0c;以及一些减少库存浪费的方法&#xff0c;有助于改进商品计…

Spring事务管理—讲解、案例、应用

简介&#xff1a;Spring事务管理和数据库的事务管理的功能作用上是一样的&#xff0c;在学习数据库时&#xff0c;为了数据完整性&#xff0c;采用了事务管理&#xff0c;即开启事务、提交事务和管理事务。在SpringBoot框架中添加一个注解 Transactional 就可以将当前方法、类和…

MySQL数据库-概括与常用图形管理工具

文章目录 一、SQL语言基础二、数据库系统三、MySQL数据库概括三、MySQL数据库常用图形管理工具 一、SQL语言基础 二、数据库系统 三、MySQL数据库概括 三、MySQL数据库常用图形管理工具 官网&#xff1a;https://www.navicat.com/en 官网&#xff1a;https://webyog.com/produ…

C++——C++11(2)

我在我的C异常博客中曾提到&#xff0c;对于异常的处理经常会导致内存泄漏问题&#xff0c; 一种解决方法是异常的重新抛出&#xff0c;还有一种就是RAII&#xff0c;那么RAII的思想体现 在C中就是智能指针&#xff0c;所以接下来我将简单的介绍&#xff0c;什么是RAII&#xf…

工具推荐:有哪些好用的SEO工具?

在现如今竞争激烈的互联网时代&#xff0c;网站优化是每个企业都需要关注的重要方面。为了提高网站在搜索引擎中的排名和曝光度&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;工具成为了必不可少的帮手。本文将为大家推荐3款好用的SEO工具&#xff0c;感兴趣就接着往下看…

c++ qt 模态框和阻拦器 优先级 问题 修复 已解决

在c项目中。有 加载动画 和 模态框提醒的功能, 导致发生一个问题&#xff0c;有提示框的时候&#xff0c;动画也停止&#xff0c;必须点击 按钮 所有代码才能有效。 解决办法 谨慎使用 deleteLater,因为和模态框拦截有冲突, 使用 隐藏 或者 删除指针。 deleteLater 使用逻辑是 …

docker数据卷数据卷容器

前言 今天调休在家&#xff0c;随便玩玩&#xff0c;简单做下学习记录 1. 数据卷特点 数据卷在容器启动时初始化&#xff0c;如果容器使用的镜像在挂载点包含了数据&#xff0c;这些数据会被拷贝到新初始化的数据卷中数据卷可以在容器之间共享和重用可以对数据卷里的内容直接…

二分查找法详解(6种变形)

前言 在之前的博客中&#xff0c;我给大家介绍了最基础的二分查找法&#xff08;没学的话点我点我&#xff01;&#xff09; 今天我将带大家学习二分法的六种变形如何使用&#xff0c;小伙伴们&#xff0c;快来开始今天的学习吧&#xff01; 文章目录 1&#xff0c;查找第一个…

【动画图解】一次理清九大排序算法!面试官问到再也不慌!

排序算法 交换排序 冒泡排序快速排序 插入排序 直接插入排序希尔排序 选择排序 简单选择排序堆排序 归并排序基数排序桶排序 一、冒泡排序 冒泡排序是一种简单的交换排序算法&#xff0c;以升序排序为例&#xff0c;其核心思想是&#xff1a; 从第一个元素开始&#xff0c…

基于ssm二手车交易平台的设计论文

摘 要 进入21世纪网络和计算机得到了飞速发展&#xff0c;并和生活进行了紧密的结合。目前&#xff0c;网络的运行速度以达到了千兆&#xff0c;覆盖范围更是深入到生活中的角角落落。这就促使二手交易网站的发展。二手交易网站可以实现远程购物&#xff0c;远程选择喜欢的商品…