首页 > 其他分享 >目标跟踪专栏(一)基本任务、常用方法

目标跟踪专栏(一)基本任务、常用方法

时间:2023-03-13 18:12:00浏览次数:46  
标签:常用 卷积 算法 目标 神经网络 专栏 跟踪 图像

前言 视觉目标跟踪是计算机领域的一个重要问题。尽管近年来受到了广泛研究,目标跟踪问题由于本身的高难度、高质量数据的稀少,研究热度比目标检测、语义分割等基本视觉任务略低一些。深度学习的发展和计算机算力的增强带来了视觉算法性能的突飞猛进,而目标跟踪领域中基于深度神经网络的方法只在近几年才初见端倪,可谓大有可为。
因此,本在前期介绍目标跟踪的基本任务以及常用方法,再从单目标跟踪和多目标跟踪角度出发,介绍其基本内容以及常用数据集,结合领域经典论文让大家能对目标跟踪有个系统的认识,如果你对视觉目标追踪有所兴趣或者是这一领域的入门新手,本专栏将帮助你对视觉目标追踪问题和经典方法有一个初步的了解。如果你是已经有了一定相关知识储备的研究者,也欢迎探讨、指教。

欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。

CV各大方向专栏与各个部署框架最全教程整理

本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习,文末可领取限时优惠券。

本专栏将介绍一下内容: 1. 目标跟踪的基本任务和常用方法 2. 单目标跟踪和多目标跟踪的基本概念与常用数据集 3. 单目标跟踪经典论文解读 4. 多目标跟踪经典论文解读 5. 目标跟踪未来展望 6. 总结梳理

(一)基本概述

目标跟踪是计算机视觉领域研究的一个热点问题,其利用视频或图像序列的上下文信息,对目标的外观和运动信息进行建模,从而对目标运动状态进行预测并标定目标的位置。目标跟踪算法从构建模型的角度可以分为生成式(generative)模型和判别式(discrimination)模型两类;从跟踪目标数量可分为单目标跟踪(SOT)和多目标跟踪(MOT)。目标跟踪融合了图像处理、机器学习、最优化等多个领域的理论和算法,是完成更高层级的图像理解(如目标行为识别)任务的前提和基础。

(二)基本任务

目标跟踪的基本任务是在一段视频序列中给定目标的初始位置,在后续每一帧中对目标进行持续的跟踪定位,在此过程中不会提供关于目标的颜色、形状、大小等先验条件,即跟踪算法只有通过在第一帧中对目标进行学习才能进行跟踪。一般来说,跟踪过程中的技术难点主要包括以下几个方面:

  1. 遮挡与消失:遮挡(Occlusion)是目标跟踪中最常见的挑战因素之一,遮挡又分为部分遮挡(Partial Occlusion)和完全遮挡(Full Occlusion)。解决部分遮挡通常有两种思路:(1)利用检测机制判断目标是否被遮挡,从而决定是否更新模板,保证模板对遮挡的鲁棒性。(2)把目标分成多个块,利用没有被遮挡的块进行有效的跟踪。对于目标被完全遮挡的情况,当前也并没有有效的方法能够完全解决。
  2. 形态变化:形变(Deformation)也是目标跟踪中的一大难题,目标表观的不断变化,通常导致跟踪发生漂移(Drift)。解决漂移问题常用的方法是更新目标的表观模型,使其适应表观的变化,那么模型更新方法则成为了关键。什么时候更新,更新的频率多大是模型更新需要关注的问题。
  3. 尺度变化:尺度变换(Scale Variation)是目标在运动过程中的由远及近或由近及远而产生的尺度大小变化的现象。预测目标框的大小也是目标跟踪中的一项挑战,如何又快又准确的预测出目标的尺度变化系数直接影响了跟踪的准确率。通常的做法有:在运动模型产生候选样本的时候,生成大量尺度大小不一的候选框,或是在多个不同尺度目标上进行目标跟踪,产生多个预测结果,选择其中最优的作为最后的预测目标。
  4. 复杂背景:背景杂斑(Background Clutter)指得是要跟踪的目标周围有非常相似的目标对跟踪造成了干扰。解决这类问题常用的手段是利用目标的运动信息,预测运动的大致轨迹,防止跟踪器跟踪到相似的其他目标上,或是利用目标周围的大量样本框对分类器进行更新训练,提高分类器对背景与目标的辨别能力。
  5. 准确性与实时性

(三)常用方法

传统方法

传统的目标跟踪算法是目标跟踪领域出现最早的算法,虽然在如今看来,这些算法存在一定局限性,但我们不能忽视它们为目标跟踪领域蓬勃发展奠定的基础。其中的经典算法包括光流法、卡尔曼滤波、粒子滤波、均值漂移等。

光流法

光流(optical flow)的概念于1950年由Gibson首先提出,是目标、场景或摄像机在连续两帧图像间运动时造成的目标的运动。是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。其计算方法可以分为三类:

  1. 基于区域或者基于特征的匹配方法
  2. 基于频域的方法
  3. 基于梯度的方法

简单来说,光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场(运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上的投影)。

光流法的前提假设:

  1. 相邻帧之间的亮度恒定
  2. 相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”
  3. 保持空间一致性;即,同一子图像的像素点具有相同的运动

光流法用于目标跟踪的原理:

  1. 对一个连续的视频帧序列进行处理
  2. 针对每一个视频序列,利用一定的目标检测方法,检测可能出现的前景目标
  3. 如果某一帧出现了前景目标,找到其具有代表性的关键特征点(可以随机产生,也可以利用角点来做特征点)
  4. 对之后的任意两个相邻视频帧而言,寻找上一帧中出现的关键特征点在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置坐标
  5. 如此迭代进行,便可实现目标的跟踪。

卡尔曼滤波

卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,卡尔曼滤波器到底是干嘛的?我们来看下wiki上的解释:卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标及速度。例如,对于雷达来说,人们感兴趣的是其能够跟踪目标。但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。

粒子滤波

粒子滤波(PF:Particle Filter)是以贝叶斯推理和重要性采样为基本框架。贝叶斯推理就是类似于卡尔曼滤波的过程。而卡尔曼滤波是线性高斯模型,对于非线性非高斯模型,就采用蒙特卡洛方法(Monte Carlo method,即以某时间出现的频率来指代该事件的概率)。(粒子滤波从一定程度上,属于卡尔曼滤波的拓展)

重要性采样就是根据对粒子的信任程度添加不同的权重,对于信任度高的粒子,添加大一点的权重,否则就添加小一点的权重,根据权重的分布形式,可以得到与目标的相似程度。

粒子滤波的思想基于蒙特卡洛思想,利用粒子集来表示概率,可以用在任何形式的状态空间模型上 。1998年,Andrew 和 Michael 成功将粒子滤波应用在目标跟踪领域。在初始化阶段提取目标特征,在搜索阶段按均匀分布或高斯分布的方式在整个图像搜索区域内进行粒子采样,然后分别计算采样粒子与目标的相似度,相似度最高的位置即为预测的目标位置。后续帧的搜索会依据前一帧中预测的目标位置做重要性重采样。传统的粒子滤波跟踪算法仅采用图像的颜色直方图对图像建模,计算量会随着粒子数量的增加而增加,并且当目标颜色与背景相似时,往往会跟踪失败。

具体过程:

粒子滤波的核心思想就是基于奖励惩罚机制(强化学习)的优化。首先,根据状态转移方程,对于每个粒子的位置进行更新。但这个更新只是基于航迹推算(dead reckon)得到的,我们要融合绝对定位与相对定位,绝对定位的信息并没有融合进去。根据状态转移方程得到的新状态到底行不行?能有多大的概率?这还取决于绝对定位的结果也就是输出方程。

把状态转移方程得到的结果代入输出方程,得到一个输出,这个输出是估计值,而根据绝对定位的观测,这个值对应的观测值也是可以测量得到的,现在这两个值之间有个差额,很明显,这个差额越小,刚才的到的状态越可信,这个差额越大,状态越不可信。

把这个差额指标作为评估函数(像GA,pso等优化算法里的evaluation function),来修正各个状态的估计概率。简单地说就是,一开始在整个地图上均匀分配一大波粒子(当然有改进的预处理算法,可以事先往正确点靠,减少计算量),每个粒子都可以算出一个估计值,然后再得到一个实际的观测值,将与观测值相差较小的粒子留下来。(具体留多少个粒子需要根据你系统模型,现在也有自适应的算法,可以自己改变留下来的粒子数目),这样每个粒子都有一个和观测值的差值,然后再进行下一次同样方法的更新(这个过程叫做重采样),最后我们就会留下可信度非常高的粒子。这一般就是最后的正确值。

均值漂移(mean-shift)

Mean shift算法是Fukunaga于1975年提出的,其基本思想是利用概率密度的梯度爬升来寻找局部最优。到1995年,YizongCheng针对离x越近的采样点对x周围的统计特性越有效,定义了一族核函数,并根据所有样本点的重要性不同,设定了一个权重系数,扩大了Mean Shift的使用范围。

meanshift算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可能要移动这个窗口到点集密度最大的区域当中。如下图:

 

最开始的窗口是蓝色圆环的区域,命名为C1。蓝色圆环的圆心用一个蓝色的矩形标注,命名为C1_o。而窗口中所有点的点集构成的质心在蓝色圆形点C1_r处,显然圆环的形心和质心并不重合。所以,移动蓝色的窗口,使得形心与之前得到的质心重合。在新移动后的圆环的区域当中再次寻找圆环当中所包围点集的质心,然后再次移动,通常情况下,形心和质心是不重合的。不断执行上面的移动过程,直到形心和质心大致重合结束。这样,最后圆形的窗口会落到像素分布最大的地方,也就是图中的绿色圈,命名为C2。

meanshift算法除了应用在视频追踪当中,在聚类,平滑等等各种涉及到数据以及非监督学习的场合当中均有重要应用,是一个应用广泛的算法。图像是一个矩阵信息,如何在一个视频当中使用meanshift算法来追踪一个运动的物体呢? 大致流程如下:

  1. 首先在图像上选定一个目标区域
  2. 计算选定区域的直方图分布,一般是HSV色彩空间的直方图
  3. 对下一帧图像b同样计算直方图分布
  4. 计算图像b当中与选定区域直方图分布最为相似的区域,使用meanshift算法将选定区域沿着最为相似的部分进行移动,直到找到最相似的区域,便完成了在图像b中的目标追踪
  5. 重复3到4的过程,就完成整个视频目标追踪

通常情况下我们使用直方图反向投影得到的图像和第一帧目标对象的起始位置,当目标对象的移动会反映到直方图反向投影图中,meanshift 算法就把我们的窗口移动到反向投影图像中灰度密度最大的区域了。

直方图反向投影的流程是:

假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:

  1. 从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像
  2. 生成临时图像的直方图
  3. 用临时图像的直方图和模板图像的直方图对比,对比结果记为c
  4. 直方图对比结果c,就是结果图像(0,0)处的像素值
  5. 切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像
  6. 重复1~5步直到输入图像的右下角,就形成了直方图的反向投影

Mean shift视频追踪实现

在OpenCV中实现Mean shift的API是:cv.meanShift(probImage, window, criteria)

参数:probImage::ROI区域,即目标的直方图的反向投影window:初始搜索窗口,就是定义ROI的rectcriteria: 确定窗口搜索停止的准则,主要有迭代次数达到设置的最大值,窗口中心的漂移值大于某个设定的限值等。实现Mean shift的主要流程是:

  1. 读取视频文件:cv.videoCapture()
  2. 感兴趣区域设置:获取第一帧图像,并设置目标区域,即感兴趣区域
  3. 计算直方图:计算感兴趣区域的HSV直方图,并进行归一化
  4. 目标追踪:设置窗口搜索停止条件,直方图反向投影,进行目标追踪,并在目标位置绘制矩形框。

由于均值漂移计算速度快,且对目标形变和遮挡有一定鲁棒性,均值漂移算法受到广泛重视。但提取的颜色直方图特征对目标的描述能力有限,缺乏空间信息,故均值漂移算法仅能在目标与背景能够在颜色上区分开时使用,有较大局限性。

基于相关滤波的目标跟踪方法

基于相关滤波(Correlation Filter )的目标跟踪算法是目标跟踪领域的一大研究热点,为目标跟踪领域带来重大变革。相关滤波源于信号处理领域,相关表示两信号相似性的高低,两信号越接近,相关响应越高。相关滤波跟踪算法就是通过建立一个相关滤波器,来寻找响应值最高的目标位置。2010 年,Bolme等人率先将相关滤波与目标跟踪相结合,提出了MOSSE跟踪算法,以其高速的跟踪速度和良好的跟踪性能,极大的促进了目标跟踪领域的发展,下面简要介绍目标跟踪领域发展过程中具有代表性的几种跟踪算法。

误差最小平方和滤波器

将信号处理领域的相关操作引入到目标跟踪领域,即可将跟踪问题描述为寻找视频序列中与初始目标最相似的区域,即计算滤波器h与输入图像f的相关性,得到响应图g。计算过程如下图所示:

为了减少计算量,加快运算速度,引入傅里叶变换,在一张图像上训练得到的滤波器可以精准拟合该图像,但在跟踪时,目标外观会由于快速运动、尺度变化、遮挡等因素发生改变,之前训练得到的滤波器应用于新图像时,往往不能适应目标的变化,导致跟踪失败。因此,滤波器需要能够随着视频序列的进行而自适应的更新。

核相关滤波跟踪算法

2014年,Henriques等人提出核相关滤波跟踪算法(Kernelized CorrelationFilters,KCF),对基于灰度特征的CSK算法做出改进,引入核函数、循环矩阵、HOG特征,进一步提高了算法的跟踪性能。下面将对KCF跟踪算法的重要环节加以介绍。

  1. 构建训练样本集

跟踪算法的一大难点在于样本数量过少,传统跟踪算法通常在目标位置周围随机采样获得样本,或者通过对目标做旋转、缩放获得样本。然而这两种方式获得的样本数量十分有限并且冗余度高,无法充分学习到目标信息,会导致跟踪器在后续跟踪时出现较大偏差,影响跟踪性能。

KCF 跟踪算法创造性的引入循环矩阵,一方面通过目标样本的循环移位操作获得大量训练样本,另一方面,将目标特征的频域空间与岭回归相结合,实现目标特征的快速学习与检测。

  1. 训练分类器

KCF 框架中训练目标分类器实际上是一个岭回归问题 ,也叫正则化最小二乘问题。目标是通过训练样本集找到最优分类函数,使得样本的预测值与样本真实值之间的平方误差最小,得到的损失目标函数,通过最小二乘法可以获得使上式损失函数最小的最优解。

对于线性回归问题,可以通过上述步骤计算得到,大大提高计算速度。但在大多数情况下,需要解决的是非线性问题,由此 KCF 算法引入核函数的思想,将训练样本映射到高维空间,使其转化为线性可分问题,那么在高维空间内可以使用岭回归来寻找一个分类器。

  1. 目标快速检测

在检测阶段,通常会逐个计算候选区域的响应值,选择其中响应值最高的样本作为目标。在 KCF 框架中,预测区域及其循环移位构成了候选样本集,由此可以得到候选样本集的响应值。

响应值最大说明当前候选样本最接近训练样本,其对应位置即预测的目标位置。此外可以通过离散傅里叶变换对角化,提高计算效率.

  1. 模型更新

为了使分类器对目标保持较高的辨别力,以应对跟踪过程中出现的各种干扰情况,需要及时更新算法模型,KCF框架沿用了MOSSE的更新策略,在每一帧中更新外观模型与分类器参数,以提高算法的鲁棒性。

基于深度学习的目标跟踪方法

深度学习作为近年来的热门技术手段,在众多领域都能看到它的身影。深度学习凭借优异的特征建模能力在目标跟踪领域也取得了广泛应用。基于深度学习的目标跟踪大致可分为两类,一类是采用卷积神经网络提取目标特征,然后与其他跟踪方式进行融合来实现目标跟踪。另一类是训练出端到端的神经网络模型,目标跟踪的所有步骤均由神经网络来实现。下面将简要介绍神经网络的基本结构,典型的卷积神经网络模型,孪生神经网络工作原理,以及几种代表性的深度学习跟踪算法。

神经网络

神经网络是受生物神经系统启发而产生的一种数学模型,作为人工智能的底层模型,神经网络有着许多复杂应用。一个基础的神经网络如下图所示:

神经网络由输入层、隐藏层、输出层三部分组成,相邻层之间相互连接。其中,输入层负责数据输入,输出层负责数据输出,隐藏层负责一系列的数学运算,目的是为了更好地线性划分不同类型的数据,隐藏层的层数决定了神经网络的深度。

神经网络中一个非常重要的概念是激活函数,它决定了某个神经元是否被激活,这个神经元接受到的信息是否有用。没有激活函数的神经网络就是一个线性回归模型,无论网络包含多少层,它的输出都是输入的线性组合。而激活函数引入了非线性变换,使得神经网络可以应用到非线性模型中,能够处理更复杂的任务。常用的激活函数有 sigmoid 函数、tanh 函数、ReLU 函数。

卷积神经网络

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,最早由 LeCun 提出并应用于手写字体识别上。由于 CNN 不需要预先处理图像,可以直接将原始图像输入到网络中,操作更简洁,因而得到广泛应用,经典的网络结构层出不穷。卷积神经网络包含卷积层、池化层、全连接层以及输出层。一个典型的卷积神经网络结构如下图所示:

其中,卷积层是CNN中最核心的部分,主要功能是特征提取,底层网络能够提取如边缘、轮廓等低级特征,深层网络能够从低级特征中提取更复杂的特征。对二维图像做卷积操作,类似于滑动窗口对图像滤波,因此也把卷积核称为滤波器(filter)。卷积核的选择决定了特征图的质量,图像经由不同的卷积核处理能够得到不同的特征图。卷积核的数量越多,提取到的特征图也越多,但相应的计算复杂度增加,若卷积核的数量太少,则无法提取出输入图像的有效特征。使用卷积核提取图像特征的过程如下图所示:

池化层,也称降采样层,由卷积层得到的特征图通常维度过高,因此在卷积层后连接一个池化层,用于降低特征维度。池化层的操作方式与卷积层基本相同,常用的池化方式有最大池化和平均池化,如下图所示。最大池化即取滑动窗口所对应区域的最大值作为池化输出,平均池化即取滑动窗口所对应区域的平均值作为池化输出。池化操作不仅可以降低特征维度,减少计算量,而且具备特征不变性,能够保留原始图像中最重要的特征。

全连接层通常位于卷积神经网络的尾部,与传统的神经网络连接方式一致,主要负责将所有局部特征连接成全局特征,并将输出值传送给分类器。全连接层连接所有特征的方式是将卷积输出的二维特征图转化成一维向量,然后再乘一个权重,权重矩阵是固定的,且应与由特征图生成的一维向量大小一致,这就要求网络输入层图像必须固定尺寸,才能保证传送到全连接层的特征图的大小与全连接层的权重矩阵相匹配。最后将得到的图像特征通过 sigmoid 函数或其他类型的函数映射到输出层,完成分类任务。

孪生神经网络

孪生神经网络是一种包含两个或多个相同子结构的神经网络架构,各子网络共享权重。孪生神经网络的目标是通过多层卷积获取特征图后,比较两个对象的相似程度,在人脸认证、手写字体识别等任务中常被使用。其网络结构如下图所示,两个输入分别进入两个神经网络,将输入映射到新的空间,形成输入在新空间中的表示,通过损失的计算,评价两个输入的相似度。

此外,该网络的特点是可以充分利用有限的数据进行训练,这一点对目标跟踪来说至关重要,因为在跟踪时能够提供的训练数据与目标检测相比较少。

若子网络之间不共享权重,则称为伪孪生神经网络。对于伪孪生神经网络,其子网络的结构可以相同,也可不同。与孪生神经网络不同,伪孪生神经网络适用于处理两个输入有一定差别的情况,如验证标题与正文内容是否一致、文字描述与图片内容是否相符等。要根据具体应用进行网络结构的选择。

 

本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习,文末可领取限时优惠券。

欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。

计算机视觉入门1v3辅导班

【技术文档】《从零搭建pytorch模型教程》122页PDF下载

QQ交流群:444129970。群内有大佬负责解答大家的日常学习、科研、代码问题。

 

其它文章

高效轻量级语义分割综述

超快语义分割 | PP-LiteSeg集速度快、精度高、易部署等优点于一身,必会模型!!!

数据集+插件,一把子解决遮挡下目标检测难题

AAAI | Panini-Net | 基于GAN先验的退化感知特征插值人脸修

一文带你掌握轻量化模型设计原则和训练技巧!

图像增强新思路:DeepLPF

LCCL网络:相互指导博弈来提升目标检测精度(附源代码)

与SENet互补提升,华为诺亚提出自注意力新机制:Weight Excitation

最新FPN | CFPNet即插即用,助力检测涨点,YOLOX/YOLOv5均有效

DeepLSD:基于深度图像梯度的线段检测和细化

CVPR 2023 | 基础模型推动语义分割的弱增量学习

消费级显卡的春天,GTX 3090 YOLOv5s单卡完整训练COCO数据集缩短11.35个小时

BOE告诉你:一层卷积可以做超分!

卫星图像公开数据集资源汇总

DiffusionDet:用于对象检测的扩散模型

CV小知识讨论与分析(7) 寻找论文创新点的新方式

CV小知识分析与讨论(6)论文创新的一点误区

一文看尽深度学习中的各种注意力机制

MMYOLO 想你所想:训练过程可视化

顶刊TPAMI 2023!Food2K:大规模食品图像识别

用于精确目标检测的多网格冗余边界框标注

2023最新半监督语义分割综述 | 技术总结与展望!

原来Transformer就是一种图神经网络,这个概念你清楚吗?

快速实现知识蒸馏算法,使用 MMRazor 就够啦!

知识蒸馏的迁移学习应用

TensorFlow 真的要被 PyTorch 比下去了吗?

深入分析MobileAI图像超分最佳方案:ABPN

3D目标检测中点云的稀疏性问题及解决方案

计算机视觉入门1v3辅导班

计算机视觉交流群

聊聊计算机视觉入门

 

标签:常用,卷积,算法,目标,神经网络,专栏,跟踪,图像
From: https://www.cnblogs.com/wxkang/p/17212390.html

相关文章

  • 常用的Markdown语法
    对我的学习生涯来说笔记相当重要,个人学习的习惯就是先进行一遍学习过程中记好笔记,再根据笔记回顾,这样可以做到系统且完备的学习与回忆。此博客的意义也在于此,大学时图方便......
  • 16.MySQL数据库之mysql-5.7 show engine innodb status 详解,常用的地方一、死锁分析 
     一、show engine innodb status 简介:show engine innodb status 是mysql提供的一个用于查看innodb引擎时间信息的工具,就目前来说有两处比较常用的地......
  • mac中PyCharm常用快捷键
    1、Edit编辑操作快捷键双击shift:全局搜索command+F:当前文件内进行查找command+r:当前文件内替换command+shift+r:全局替换option+command+L:格式化一行代......
  • Itext实现导出PDF常用方法说明
    实现1.设置响应格式response.setContentType("application/pdf");response.setHeader("Expires","0");response.setHeader("Cache-Control","must-revalidate,post-che......
  • 常用类
    常用类1.字符串相关的类1.String类的概述importorg.junit.Test;/***String的使用*/publicclassStringTest{/***String:字符串,使用一对“”引......
  • Docker CLI docker buildx prune常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Doc......
  • 常用模块
    认识模块什么是模块?常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。但其实import加载的模块分为四个通用类别:1使用python......
  • Terraform常用命令
    资源管理常用命令terraformplanplan资源的预览主要用于以下场景:a.预览当前模板中定义的资源是否符合管理预期b.如果当前模板已经存在对应的state文件,那么plan命令将会展......
  • JSONUtil常用方法
    字符串JSON转集合(JSONUtil.toList())StringshopTypeJson=stringRedisTemplate.opsForValue().get(shopTypeKey);//shopTypeKey:缓存中的KEYList<ShopType>shopTypeLis......
  • Idea常用配置手册
    快捷键自定义快捷键保存所有文件SaveAll新增快捷键Alt+S保存代码即自动格式化辅助生成变量名IntroduceVariable新增快捷键Alt+A运行单元测试方法快捷......