模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC

news2024/11/19 22:46:27

文章目录

  • 预测框的预测指标——IoU(交并比)
  • 分类预测指标
    • 混淆矩阵(Confusion Matrix,TP、FP、FN、TN)
    • Precision(精度)
    • Recall(召回率)
    • P-R曲线
    • F1-score
    • TPR、TNR、FPR、FNR
    • ROC曲线下面积(AUC-ROC)
      • TPR(真实阳性率)/召回率/敏感度
      • Specificity
      • FPR
    • 如何推测模型的表现?
    • ROC (Receiver Operating Characteristic) Curve
      • 敏感性和特异性之间的权衡
    • ROC Curve
    • AUC(Area Under the Curve曲线下面积)
  • 有了预测框的预测指标与分类预测的指标,接下来将二者结合即为评价目标检测模型的指标。
    • AP(average precision 平均精度)
      • 方法 1 — 用矩形近似 PR 曲线
      • 方法 2——插值和 11 点平均值
    • mAP(mean of Average Precision)
    • mAP@0.5
    • mAP@[0.5:0.95]

YOLO是最先进的目标检测模型之一。目标检测问题相比分类问题要更加复杂,因为目标检测不仅要把类别预测正确,还要预测出这个类别具体在哪个位置。

我将目标识别的评估指标总结为两部分,一部分为预测框的预测指标,另一部分为分类预测指标

预测框的预测指标——IoU(交并比)

IoU 代表 Intersection over Union,IoU 量化了两个边界框(真实值和预测值)的接近程度。该值介于 0 和 1 之间。如果两个边界框完全重叠,则预测完美,因此 IoU 为 1。另一方面,如果两个边界框不重叠,则 IoU 为 0。IoU 是通过计算两个边界框的交集面积与并集面积之比来计算的,它显示两个边界框彼此重叠的程度。公式如下所示

在这里插入图片描述

Bounding box(边界框)是目标检测(Object Detection)中用来框定图像中目标区域的一种矩形框。它定义了一个矩形区域,该区域包含了图像中的一个或多个目标。

预测框的准确率用IoU来反映。交并比是目标检测问题中的一项重要指标,它在训练阶段反映的是标注框与预测框的重合程度,用于衡量预测框的正确程度。

在我们的示例中,我们将使用 IoU = 50% 作为接受标准。如果 IoU 大于或等于 50%,则我们说位置预测是好的。如果 IoU 小于 50%,则预测与真实边界框相差太远。

如上图所示,IoU指的就是两框的重叠部分的面积,与两框总共部分的面积之比。IoU又称交并比,从字面意思也可以理解,IoU就是两框交集与并集之比。IoU越接近于0,两框重叠越少;IoU越接近于1,两框的重叠程度越高,当IoU等于1时,两框完全重叠。

IoU要搭配IoU阈值一起使用。

IoU阈值一般被定为0.5,当两框的IoU大于阈值时,则判断预测框预测正确。IoU阈值可以修改,IoU阈值越高,则判断预测框预测正确的条件越严格。

分类预测指标

混淆矩阵(Confusion Matrix,TP、FP、FN、TN)

如果预测边界框和真实边界框的类标签相同,并且它们之间的 IoU 大于阈值,则认为预测正确。

  • True Positive(TP): Values that are actually positive and predicted positive.模型预测边界框存在于某个位置(阳性),并且是正确的(真)
  • False Positive(FP): Values that are actually negative but predicted to positive.模型预测某个特定位置存在边界框(阳性),但预测错误(假)
  • False Negative(FN): Values that are actually positive but predicted to negative.模型预测某个位置的边界框(阴性),并且它是错误的(假),即在该位置存在一个阳性边界框。
  • True Negative (TN): Values that are actually negative and predicted to negative.模型预测某个位置的边界框(阴性),并且预测结果正确(真)。这对应于背景,即没有边界框的区域,不用于计算最终指标。

技巧:两个字母,第一个字母表示结果是否预测正确,第二个字母表示预测

在这里插入图片描述

在这里插入图片描述

我在学习这块知识的时候,一直有一个疑问。在多分类的任务中,如何界定某个类别是正例或负例?后来才理解,这里的正例和负例其实只是针对某一类别而言的。例如,coco数据集有80个类别,针对person类而言,person类别就是正例,其他79个类别就是负例;针对car类而言,car类别就是正例,其他79个类别就是负例。

Precision(精度)

在这里插入图片描述

从上图可以看出,分类器预测的非常准确。当它说这是一只猫(狗)时,80% 的时间是正确的。但是,如果图像中有一只猫(狗),分类器只能在 40%(80%)的时间内检测到它。因此,该模型很难记住猫。

准确率衡量的是模型所有正向预测中,真阳性预测所占的比例。计算方法是将真阳性的数量除以真阳性和假阳性的总和。

在这里插入图片描述

准确率 = 真实阳性/(真实阳性+假阳性)

例如,考虑一个垃圾邮件检测系统,其中模型将电子邮件归类为垃圾邮件。如果电子邮件确实是垃圾邮件,则将其视为真阳性。但是,如果电子邮件不是垃圾邮件,但被模型归类为垃圾邮件,则将其视为假阳性。在这种情况下,模型的精度将是:

准确率 = 真实阳性/(真实阳性+假阳性)

分析式子可知,Precision关心的是预测的正例,以及真实的正例和负例。当Precision越大时,FP越小,此时将其他类别预测为本类别的个数也就越少,可以理解为预测出的正例纯度越高。Precision越高,误检越少。

Precision 衡量的是模型预测为正类的样本中有多少实际是正类,强调的是预测结果的准确性。

Recall(召回率)

召回率,也称为敏感度,衡量的是数据集中所有实际阳性样本中真正阳性预测的比例。它的计算方法是将真正阳性的数量除以真正阳性和假阴性的总和。

在这里插入图片描述

在这里插入图片描述

根据定义,Recall的分母时TP与FN之和,TP是预测为正例,真实值也为正例的个数;FN是预测为负例,实际是正例的个数。

分析式子可知,Recall关心的是预测的正例和负例,以及真实的正例。当Recall越大时,FN越小,此时将正例预测为负例的个数越少,可以理解为把全部的正例挑出来的越多。Recall越高,漏检越少。

Recall 衡量的是模型识别出所有正类样本的能力,强调的是识别正类的全面性。如果你不希望漏掉正类样本,Recall 很重要。

假设你正在开发一个疾病筛查的模型:

Precision 关注的是被检测为阳性的人中,实际上有多少是得了病的,减少误诊。
Recall 关注的是所有得了病的人中,有多少被模型正确诊断出来,减少漏诊。

P-R曲线

理想情况下,我们希望准确率和召回率都很高,即检测到的任何东西都是正确的,并且模型可以检测到某个类别的所有出现。准确率和召回率的值取决于模型检测到了多少个真阳性。分配边界框 TP、FP 和 FN 取决于以下两个因素

  • 预测标签与真实标签的比较
  • 两个框之间的 IoU

对于多类分类问题,模型输出边界框属于某个类的条件概率。某个类的概率越大,边界框包含该类的可能性就越大。概率分布以及用户定义的阈值(介于 0 到 1 之间)用于对边界框进行分类。

这个概率置信度阈值越小,模型检测的次数就越多,错过真实标签的几率就越低,因此召回率就越高(通常如此,但并非总是如此)。另一方面,置信度阈值越高,模型对其预测的结果就越有信心,因此准确率就越高(通常如此,但并非总是如此)。我们希望准确率和召回率都尽可能高,因此,根据置信度阈值的值,在准确率和召回率之间存在权衡。

精确度-召回率曲线绘制了不同置信度阈值的精确度与召回率的值。

在这里插入图片描述

不同颜色的线代表不同类别的PR曲线,蓝色的粗线条表示所有类别平均的PR曲线

通过精确度-召回率曲线,我们可以直观地看到哪个置信度阈值最适合我们(对于我们给定的应用程序)。下面是 PR 曲线的一个过于简化的示例

在这里插入图片描述

P-R曲线与坐标轴围成的面积,可作为衡量一个模型预测结果的参考。若一个模型的P-R曲线完全将另一模型的P-R曲线包裹,那么这个模型预测结果一定优于另一模型。

在 PR 曲线中,y 轴表示精确度,x 轴表示召回率。曲线上的每个点代表不同的阈值。随着阈值的变化,精确度和召回率之间的平衡也会发生变化:

  • 高精度和低召回率:这表明该模型在正面预测方面非常准确,但未能捕捉到大量实际正面案例。
  • 低准确率和高召回率:这表明该模型捕获了大多数阳性情况,但是却以更多的假阳性错误为代价。

理想的情况是曲线尽可能接近右上角,同时表示高精度和高召回率。

在这里插入图片描述

精确度-召回率曲线适用于不平衡的数据集。精确度和召回率都集中在正类(少数类)上,与真负类(多数类)无关。当数据集中每个类中的观察值不平衡时,PR 曲线是确定我们模型性能的良好指标。

精确度 x 召回率曲线是评估物体检测器性能的好方法,因为置信度会通过为每个物体类别绘制曲线来改变。如果某个特定类别的物体检测器的精确度在召回率增加时保持较高水平,则该检测器被认为是好的,这意味着如果您改变置信度阈值,精确度和召回率仍然会很高。识别良好物体检测器的另一种方法是寻找一个只能识别相关物体(0 误报 = 高精度)的检测器,找到所有地面真实物体(0 误报 = 高召回率)。

较差的物体检测器需要增加检测到的物体数量(增加误报 = 降低精度)才能检索所有地面真实物体(高召回率)。这就是为什么精度 x 召回率曲线通常以高精度值开始,随着召回率的增加而降低。您可以在下一个主题(平均精度)中看到精度 x 召回率曲线的示例。这种曲线由 PASCAL VOC 2012 挑战赛使用,并且在我们的实现中可用。这就是为什么准确率 x 召回率曲线通常从高精度值开始,并随着召回率的增加而降低。

F1-score

F-1 分数是准确率和召回率的加权平均值,其中权重相等。它用于平衡准确率和召回率之间的权衡。

如果有不同的几个模型,他们有着不同的Precision与Recall,那么我们应该如何挑最优的模型?

最直接的办法就是取Precision与Recall的平均值,但取平均值并不可取。因为有时二者有一个极高,一个极低时,这样平均值是高的,但实际的效果并不会好。这时就要用F1-score来权衡Precision与Recall的平均值。

在这里插入图片描述

根据F1-score的定义式可知,F1-score也是取平均值,只不过强调的是二者之间的较小值。通过F1-score的方式来权衡Precision与Recall,可以有效的避免短板效应,这在数学上被称为调和平均数。

F 1   score = 1 1 2 ( 1 Precision + 1 Recall ) F_{1 \, \text{score}} = \frac{1}{\frac{1}{2} \left( \frac{1}{\text{Precision}} + \frac{1}{\text{Recall}} \right)} F1score=21(Precision1+Recall1)1

例如,如果一个模型的准确率高但召回率低,这意味着它产生的假阳性较少,但会漏掉很多真阳性。相反,一个具有高召回率但准确率低的模型会产生更多的假阳性,但会捕获更多的真阳性。在这种情况下,F-1 分数可以帮助我们确定哪个模型更好。

高 Precision,低 Recall:当模型的 Precision 很高但 Recall 很低时,意味着它很少产生误报(假阳性少),但是它的识别范围有限,漏掉了很多正样本(假阴性多)。这种情况在一些要求极高的准确性的场景中可能适用,比如在疾病诊断中不希望轻易误诊健康人,但也有可能导致漏诊。

高 Recall,低 Precision:当模型的 Recall 很高但 Precision 很低时,意味着它识别了大部分正样本(假阴性少),但是产生了很多误报(假阳性多)。这种情况适用于需要全面覆盖正样本的场景,比如安全监控中宁可多误报,也不希望漏掉潜在的威胁。

TPR、TNR、FPR、FNR

在这里插入图片描述

=> TPR(真阳性率)或召回率是真阳性与真阳性和假阴性之和的比率。它衡量模型正确识别的实际阳性病例的比例。高 TPR 意味着该模型擅长识别阳性病例。
T P R = T P ( T P + F N ) TPR = \frac{TP}{(TP + FN)} TPR=(TP+FN)TP

=> TNR(真阴性率)或特异性是真阴性与真阴性和假阳性之和的比率。它衡量模型正确识别的实际阴性病例的比例。高 TNR 意味着该模型擅长识别阴性病例。

=> FPR(假阳性率)是假阳性与假阳性和真阴性之和的比率。它衡量模型错误地将实际阴性情况归类为阳性的比例。高 FPR 意味着该模型犯了很多假阳性错误。
F P R = F P ( F P + T N ) FPR = \frac{FP}{(FP + TN)} FPR=(FP+TN)FP

=> FNR(假阴性率)是假阴性与假阴性和真阳性之和的比率。它衡量模型错误地将实际阳性病例归类为阴性的比例。高 FNR 意味着该模型犯了很多假阴性错误。

ROC曲线下面积(AUC-ROC)

ROC 曲线建立在从混淆矩阵得出的两个指标之上:真实阳性率 ( TPR ) 和假阳性率 ( FPR )。TPR与召回率相同。它是正确预测的正样本除以数据集中所有实际可用的正样本的比率。 TPR 关注实际的正类

反过来,FPR 是假阳性预测与实际阴性样本总数的比率

AUC - ROC 曲线是针对不同阈值设置下的分类问题的性能测量。ROC 是概率曲线,AUC 表示可分离性的程度或度量。它表示模型区分类别的能力。AUC 越高,模型将 0 类预测为 0 和将 1 类预测为 1 的能力就越强。类似地,AUC 越高,模型区分患病患者和无患病患者的能力就越强。

ROC 曲线以 TPR 与 FPR 的关系绘制,其中 TPR 在 y 轴上,FPR 在 x 轴上。

在这里插入图片描述

TPR(真实阳性率)/召回率/敏感度

TPR / Recall / Sensitivity = TP TP + FN \text{TPR / Recall / Sensitivity} = \frac{\text{TP}}{\text{TP} + \text{FN}} TPR / Recall / Sensitivity=TP+FNTP

Specificity

Specificity = TN TN + FP \text{Specificity} = \frac{\text{TN}}{\text{TN} + \text{FP}} Specificity=TN+FPTN

在这里插入图片描述

FPR

FPR = 1 − Specificity = FP TN + FP \text{FPR} = 1 - \text{Specificity} \\ = \frac{\text{FP}}{\text{TN} + \text{FP}} FPR=1Specificity=TN+FPFP

如何推测模型的表现?

优秀模型的 AUC 接近 1,这意味着它具有良好的可分离性度量。较差模型的 AUC 接近 0,这意味着它具有最差的可分离性度量。事实上,这意味着它正在倒推结果。它将 0 预测为 1,将 1 预测为 0。当 AUC 为 0.5 时,这意味着该模型根本没有类别分离能力。

让我们来解读一下上述说法。

我们知道,ROC 是一条概率曲线。因此,让我们绘制这些概率的分布:

注:红色分布曲线为阳性类(有病患者),绿色分布曲线为阴性类(无病患者)。

在这里插入图片描述

这是理想情况。当两条曲线完全不重叠时,意味着模型具有理想的可分离性度量。它能够完美区分正类和负类。

在这里插入图片描述

当两个分布重叠时,我们会引入 1 类和 2 类错误。根据阈值,我们可以最小化或最大化它们。当 AUC 为 0.7 时,意味着模型有 70% 的机会能够区分正类和负类。

在这里插入图片描述

在这里插入图片描述

这是最糟糕的情况,当AUC约为0.5时,模型已经没有区分正类和负类的判别能力。

在这里插入图片描述

当 AUC 接近 0 时,模型实际上正在对类别进行交换。这意味着模型将负类预测为正类,反之亦然。

ROC (Receiver Operating Characteristic) Curve

ROC(接收者操作特性)曲线告诉我们模型区分两件事的能力有多好(例如 ,患者是否有疾病)。更好的模型可以准确地区分两者。而较差的模型将很难区分两者。

假设我们有一个模型可以预测患者是否患有某种疾病。该模型预测每个患者的概率(在 Python 中我们使用“ predict_proba ”函数)。使用这些概率,我们绘制分布,如下所示:

在这里插入图片描述

这里,红色分布代表所有没有患病的患者,绿色分布代表所有患有该疾病的患者。

现在我们要选择一个值,我们需要设置截止值,即阈值,高于该值我们将预测每个人都为阳性(他们患有疾病),低于该值我们将预测为阴性(他们没有疾病)。我们将阈值设置为“ 0.5 ”,如下所示:

在这里插入图片描述

所有高于阈值的正值都将是“真阳性”,而高于阈值的负值将成为“假阳性”,因为它们被错误地预测为阳性。

所有低于阈值的负值都将是“真负值”,而低于阈值的正值将是“假负值”,因为它们被错误地预测为负值。

在这里插入图片描述

敏感性和特异性之间的权衡

当我们降低阈值时,我们会得到更多的正值,从而增加敏感度。同时,这会降低特异性。

同样,当我们增加阈值时,我们会得到更多的负值,从而增加特异性并降低敏感性。

敏感性⬇️特异性⬆️​

特异性⬇️敏感性⬆️

在这里插入图片描述

但是,这不是我们绘制 ROC 曲线的方式。要绘制 ROC 曲线,我们使用 (1 - 特异性) 而不是特异性,图形将如下所示:

在这里插入图片描述

ROC Curve

因此,现在,当敏感度增加时,(1 - 特异性)也会增加。这条曲线称为 ROC 曲线。

在这里插入图片描述

AUC(Area Under the Curve曲线下面积)

AUC 是 ROC 曲线下的面积。这个分数可以让我们很好地了解模型的表现。

在这里插入图片描述

在这里插入图片描述

如我们所见,第一个模型在区分正值和负值方面做得相当好。因此,由于 ROC 曲线下的面积很大,AUC 分数为 0.9。

然而,如果我们看到最后一个模型,预测完全重叠,我们得到的 AUC 分数为 0.5。这意味着该模型表现不佳,其预测几乎是随机的。

有了预测框的预测指标与分类预测的指标,接下来将二者结合即为评价目标检测模型的指标。

AP(average precision 平均精度)

对象检测和定位算法的性能通过称为平均精度(AP)的指标来评估。

为您的应用程序选择置信度值可能很困难且主观。平均精度是一个关键性能指标,它试图消除选择一个置信度阈值的依赖性,其定义为

平均精度是 PR 曲线下的面积。

AP 将 PR 曲线总结为一个标量值。在一系列置信度阈值范围内,当准确率和召回率都较高时,平均精度较高;当准确率和召回率其中之一较低时,平均精度较低。AP 的范围在 0 到 1 之间。

在这里插入图片描述

方法 1 — 用矩形近似 PR 曲线

  • 对于每个精确度-召回率对 (j=0, …, n-1), 可以通过使用矩形近似曲线来找到 PR 曲线下的面积。
  • 此类矩形的宽度可以通过取两个连续召回率值 (r(k), r(k-1)) 的差值来找到,高度可以通过取所选召回率值的精度的最大值来找到,即 w = r(k)-r(k-1) ,max(p(k), p(k-1))
  • AP 可以通过这些矩形面积的总和来计算,如下所示

在这里插入图片描述

方法 2——插值和 11 点平均值

  • 计算从 0.0 到 1.0 的 11 个召回率值的精度值,增量为 0.1
  • 这 11 个点可以在右图中看作橙色样本
  • 可以通过取这 11 个精度值的平均值来计算 AP,如下所示

在这里插入图片描述

AP(average precision 平均精度):虽然名为平均精度,但AP的计算方法并不是计算Precision的平均值,而是计算每个类别的PR曲线与坐标轴围成的面积,可以用积分的方法进行计算。如果一个模型的AP越大,也就是说PR曲线与坐标轴围成的面积越大,Precision与Recall在整体上也相对较高。

在这里插入图片描述

AP 是借助其他几个指标来计算的,例如 IoU、混淆矩阵(TP、FP、FN)、精度和召回率等,如下图所示

在这里插入图片描述

mAP(mean of Average Precision)

mAP(mean of Average Precision) : 对所有类别的AP值求平均值。AP可以反映每个类别预测的准确率,mAP就是对所有类的AP求平均值,用于反映整个模型的准确率。mAP越大,PR曲线与坐标轴围城的面积越大。平时我们说的,某一目标检测算法的准确率达到了多少,这个准确率就泛指mAP。

在这里插入图片描述

mAP@0.5

在YOLO模型中,你会见到mAP@0.5这样的表现形式,这种形式表示在IOU阈值为0.5的情况下,mAP的值为多少。当预测框与标注框的IOU大于0.5时,就认为这个对象预测正确,在这个前提下再去计算mAP。一般来说,mAP@0.5即为评价YOLO模型的指标之一。

mAP@[0.5:0.95]

YOLO模型中还存在mAP@[0.5:0.95]这样一种表现形式,这形式是多个IOU阈值下的mAP,会在区间[0.5,0.95]内,以0.05为步长,取10个IOU阈值,分别计算这10个IOU阈值下的mAP,再取平均值。mAP@[0.5:0.95]越大,表示预测框越精准,因为它去取到了更多IOU阈值大的情况。

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

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

相关文章

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题,用户打开夸克、抖音后,在界面上划动无响应,但是没有ANR。回到Launcher后再次打开夸克/抖音,发现App的界面发生了变化,但是仍然是划不动的。 2 log初分析 复现问题附近的log为: 用户…

datawhale 2411组队学习:模型压缩4 模型量化理论(数据类型、int8量化方法、PTQ和QWT)

文章目录 一、数据类型1.1 整型1.2 定点数1.3 浮点数1.3.1 正规浮点数(fp32)1.3.2 非正规浮点数(fp32)1.3.3 其它数据类型1.3.4 浮点数误差1.3.5 浮点数导致的模型训练问题 二、量化基本方法2.1 int8量化2.1.1 k-means 量化2.1.2 …

ssm139选课排课系统的设计与开发+vue(论文+源码)_kaic

摘 要 互联网的普及,改变了人们正常的生活学习及消费习惯,而且也大大的节省了人们的时间,由于各种管理系统都再不断的增加,更方便了用户,也改良了很多的用户习惯。对于选课排课系统查询方面缺乏系统的管理方式&#x…

Datawhale组队学习】模型减肥秘籍:模型压缩技术3——模型量化

模型量化的目的是通过将浮点运算转换为定点运算,以减少模型大小、内存和存储需求,同时加快推理速度,降低计算功耗,使得模型在低算力设备上运行更加高效,特别适用于嵌入式设备或移动端场景。 不同数据类型(…

【MongoDB】MongoDB的集群,部署架构,OptLog,集群优化等详解

文章目录 一、引入复制集的原因二、复制集成员(一)基本成员(二)主节点(Primary)细化成员 三、复制集常见部署架构(一)基础三节点(二)跨数据中心 四、复制集保…

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言:大家好!今天我要教你们如何在树莓派5上安装Raspberry Pi OS,并配置SSH和VNC权限。通过这些步骤,你将能够在Windows电脑上使用VNC Viewer,结合Cpolar内网穿透工具,实现长期的公网远程访问管理本地树莓派…

力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归&#xff08;左中右&#xff09; class Solution {List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode root…

MySQL查询执行(七):临时表

临时表重名 思考&#xff1a;临时表和内存表的区别? 内存表&#xff0c; 指的是使用Memory引擎的表&#xff0c; 建表语法是create table …enginememory。 这种表的数据都保存在内存里&#xff0c; 系统重启的时候会被清空&#xff0c; 但是表结构还在。 除了这两个特性看上…

自己动手写Qt Creator插件

文章目录 前言一、环境准备1.先看自己的Qt Creator IDE的版本2.下载源码 二、使用步骤1.参考原本的插件2.编写自定义插件1.cmakelist增加一个模块2.同理&#xff0c;qbs文件也增加一个3.插件源码 三、效果总结 前言 就目前而言&#xff0c;Qt Creator这个IDE&#xff0c;插件比…

【星海随笔】ZooKeeper-Mesos

开源的由 Twitter 与 伯克利分校的 Mesos 项目组共同研发设计。 两极调度架构 支持高可用集群&#xff0c;通过ZooKeeper进行选举。 Mesos master 管理着所有的 Mesos slave 守护进程 每个slave运行具体的任务或者服务。 Franework 包括的调度器和执行机两部分 执行器运行在Me…

集群聊天服务器(12)nginx负载均衡器

目录 负载均衡器nginx负载均衡器优势 如何解决集群聊天服务器跨服务器通信问题&#xff1f;nginx的TCP负载均衡配置nginx配置 负载均衡器 目前最多只能支持2w台客户机进行同时聊天 所以要引入集群&#xff0c;多服务器。 但是客户连哪一台服务器呢&#xff1f;客户并不知道哪一…

集群聊天服务器(3)muduo网络库

目录 基于muduo的客户端服务器编程 muduo只能装在linux中&#xff0c;依赖boost库 客户端并不需要高并发 基于muduo的客户端服务器编程 支持epoll线程池&#xff0c;muduo封装了线程池 而且还有完善的日志系统 使用muduo库代码非常固定&#xff0c;基本就只有chatserver的类名…

深入内核讲明白Android Binder【一】

深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…

NIST 发布后量子密码学转型战略草案

美国国家标准与技术研究所 (NIST) 发布了其初步战略草案&#xff0c;即内部报告 (IR) 8547&#xff0c;标题为“向后量子密码标准过渡”。 该草案概述了 NIST 从当前易受量子计算攻击的加密算法迁移到抗量子替代算法的战略。该草案于 2024 年 11 月 12 日发布&#xff0c;开放…

探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力

概述 心理健康是公共卫生最重要的领域之一。根据美国国家精神卫生研究所&#xff08;NIMH&#xff09;的数据&#xff0c;到 2021 年&#xff0c;22.8% 的美国成年人将患上某种形式的精神疾病。在全球范围内&#xff0c;精神疾病占非致命性疾病负担的 30%&#xff0c;并被世界…

排序(C语言实现)

排序 文章目录 排序插入排序直接插入排序折半查找插入排序希尔排序 选择排序简单选择排序堆排序一、构建堆**堆有以下性质**&#xff1a;**堆的存储方式**&#xff1a;**设计堆**数据结构堆的维护堆的初始化创建堆插入一个元素删除一个元素返回有效元素的个数获得优先级最高的元…

i春秋-EXEC(命令执行、nc传输文件、带外通道传输数据)

练习平台地址 竞赛中心 题目描述 题目内容 小猫旁边有一个no sign F12检查页面 没有提示 检查源代码 发现使用了vim编辑器 进而联想到vim编辑器的临时交换文件.xxx.swp 访问.index.php.swp&#xff0c;成功下载文件 使用vim -r 查看文件内容 vim -r index.php.swp <?p…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.哈希(2)(模拟实现)

1.概念介绍 1.1开散列 开散列&#xff08;Open Hashing&#xff09;&#xff0c;也叫链地址法&#xff0c;是一种解决哈希冲突的方法。每个哈希表槽位保存一个链表&#xff0c;所有散列到同一位置的元素都存储在该链表中。当插入元素发生冲突时&#xff0c;将新元素添加到相应…

使用Web Speech API实现语音识别与合成技术

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Speech API实现语音识别与合成技术 使用Web Speech API实现语音识别与合成技术 使用Web Speech API实现语音识别与合成技…