目标检测模型评估:AP50与APr指标详解与实战选择指南

📅 2026/8/6 1:02:30
目标检测模型评估:AP50与APr指标详解与实战选择指南
1. 项目概述从一次模型选型的困惑说起最近在复现一个经典的目标检测项目时我被一个看似简单的问题卡住了团队里两个实习生分别用YOLOv5和Faster R-CNN训练了模型在测试集上一个模型的AP50高达0.85另一个的APr平均召回率是0.78。老板问哪个模型更好用于实际部署该选哪个我一时语塞因为这两个指标根本不在一个评价维度上。这个经历让我意识到很多刚入行CV计算机视觉的朋友甚至一些有经验的工程师对AP50和APr这两个目标检测领域最核心的评价指标可能都存在理解上的模糊或混淆。它们名字相似都带着“AP”Average Precision平均精度的影子但背后的计算逻辑、关注重点和应用场景却截然不同。用错了评价标准就像用尺子去称重量不仅会误导模型选型更可能让整个项目方向跑偏。今天我就结合自己踩过的坑和项目中的实际案例把AP50和APr掰开揉碎了讲清楚让你下次看到评估报告时能一眼看穿模型真正的“实力”所在。简单来说AP50是一个在固定、宽松的判定标准下衡量模型“找得准不准”的指标它更关注模型在理想匹配条件下的精度表现而APr则是一个动态、严格的指标它衡量的是模型“找得全不全”的能力尤其关注模型在不同召回率要求下的稳健性。理解它们的区别是进行有效的模型对比、调优和最终业务落地的第一步。无论你是正在学习目标检测的学生还是面临模型部署的工程师理清这两个指标都能让你在技术讨论和决策中更有底气。2. 核心概念基石交并比、精确率与召回率在深入AP50和APr之前我们必须先夯实三个最基础的概念交并比、精确率和召回率。它们是所有目标检测评价指标的“原子”理解不透彻后续的一切比较都是空中楼阁。2.1 交并比判断“是否找到”的黄金标准交并比简称IoU是衡量预测框与真实标注框重叠程度的指标。计算公式非常简单IoU 交集面积 / 并集面积。它的值在0到1之间IoU为1表示完全重合为0表示没有重叠。在目标检测中我们首先要用IoU来判定一个预测框是否“正确”地找到了一个真实目标。这里就引入了第一个关键参数——IoU阈值。通常我们会设定一个阈值比如0.5。如果一个预测框与某个真实框的IoU大于等于0.5我们就认为这个预测是“正确”的称之为True Positive反之如果IoU小于0.5或者它匹配到的真实框已经被其他更高置信度的预测框占用了那这个预测就是“错误”的属于False Positive。注意IoU阈值的选择不是绝对的它直接定义了“什么叫作检测正确”。0.5是一个在PASCAL VOC数据集上沿用已久的经验值被认为是一个比较宽松的标准。在一些对定位精度要求极高的场景如自动驾驶中的车辆检测可能会使用0.7甚至0.9作为阈值。2.2 精确率与召回率精度与覆盖率的永恒博弈在通过IoU筛选出TP和FP之后我们就能计算精确率和召回率了。这是机器学习中一对经典的、相互制衡的指标。精确率在所有被模型认为是“目标”的预测中到底有多少是真正的目标。公式为P TP / (TP FP)。它衡量的是模型的“准头”。精确率低意味着模型有很多误报把背景或无关物体当成了目标。召回率在所有真实存在的目标中模型成功找出了多少。公式为R TP / (TP FN)。它衡量的是模型的“查全率”。召回率低意味着模型漏检了很多本该被找到的目标。这两者通常此消彼长。提高置信度阈值模型只输出最肯定的预测误报FP减少精确率会上升但同时一些不确定的正样本会被过滤掉导致漏检FN增加召回率下降。反之降低阈值模型变得“激进”能找出更多目标召回率上升但也会混入更多错误预测精确率下降。2.3 置信度阈值与排序绘制PR曲线的关键模型在推理时不仅会输出预测框的位置还会为每个框附上一个置信度分数表示模型对这个框包含目标且类别正确的确信程度。当我们对测试集所有图片的预测结果进行统计时会得到成千上万个预测框每个框都有其置信度。评估的第一步就是按照置信度从高到低对所有预测框进行排序。然后我们动态地调整一个“置信度阈值”从最高的置信度开始逐步降低这个阈值。每设定一个新的阈值高于此阈值的预测框才会被计入当前的TP和FP从而计算出一对当前的精确率和召回率。当阈值降到最低时所有预测都被纳入此时召回率最高通常为1如果模型对每个真实目标至少有一个预测的话但精确率往往很低。将这个过程所有阈值下的点连接起来就得到了精确率-召回率曲线。这条曲线下的面积直观地反映了模型在不同召回率水平上保持高精确度的能力。而这个面积就是平均精度最原始的雏形。3. AP50详解固定门槛下的精度考核现在让我们聚焦到AP50。这里的“50”指的就是IoU阈值为0.5。AP50的计算可以理解为在严格固定IoU0.5这个匹配标准下计算得到的平均精度值。3.1 AP50的计算步骤拆解按类别计算目标检测通常是多类别的。AP50首先需要针对每一个独立的类别进行计算。比如在COCO数据集的80个类别中你需要分别计算“人”、“车”、“狗”等每一个类别的AP50。收集预测与真值对于当前类别收集测试集上所有针对该类别的预测框带有置信度和所有该类别的真实标注框。匹配与判定将预测框按置信度降序排列。依次处理每个预测框为其寻找IoU0.5且未被匹配过的真实框。找到则记为TP否则记为FP。同时每个真实框只能被匹配一次这确保了计算的公平性。计算PR序列随着处理预测框的增多我们可以动态计算当前的累积TP和FP从而得到一列随着召回率增加而变化的精确率值。这是一个离散的数据序列。绘制PR曲线与插值直接连接这些离散点得到的PR曲线是锯齿状的。为了得到更平滑、更能反映模型性能的指标PASCAL VOC 2007之后的标准采用了插值法。对于每一个召回率水平r我们取所有召回率r的点中精确率的最大值。公式化表达为P_interp(r) max_{rr} P(r)。这相当于把曲线“抹平”了保证了曲线是单调递减的。计算面积计算这条插值后的PR曲线下的面积这个面积值就是该类别的AP50。均值处理对于多类别数据集通常报告所有类别AP50的均值即mAP50作为模型整体性能的一个概括。3.2 AP50的核心特点与适用场景AP50最大的特点是标准统一且相对宽松。因为IoU阈值固定为0.5它只要求预测框和真实框有超过一半的重叠就算正确。这带来了以下特点侧重分类能力AP50对边界框的定位精度要求不高更侧重于评估模型“有没有把物体找出来并分对类别”。一个预测框只要大致罩住了目标即使歪斜一些也可能被算作正确。对“拥挤”场景不敏感在目标密集、互相遮挡的场景下只要预测框和某个真实框的IoU能过0.5就算成功。它不严格区分预测框是否精准地框住了某个特定实例。历史沿袭与通用对比由于PASCAL VOC竞赛的深远影响0.5的IoU阈值成为了一个广泛接受的基准。这使得AP50成为了不同模型、不同论文之间进行“苹果对苹果”对比的通用货币。当你看到某篇论文说模型在COCO上达到50%的mAP时如果没有特别说明通常指的就是mAP50。适用场景模型初筛与快速对比当你需要快速从多个模型中选出一个表现较好的或者阅读论文想了解SOTA模型的基线性能时看AP50是最直接的方式。对定位精度要求不高的应用例如某些内容审核场景只需要知道图片里是否有违规物体如武器大致位置即可不需要像素级精准定位。学术研究基准作为领域内公认的基准指标用于衡量模型核心检测能力的进步。实操心得在内部模型测试报告中我通常会同时给出AP50和更严格的AP如AP75值。如果两个模型AP50接近但一个的AP75显著更高说明后者的定位精度更好在需要精细框的场景下潜力更大。不要只看AP50一个数。4. APr详解面向召回率的稳健性评估APr即Average Precision at Recall中文常译为“在特定召回率下的平均精度”或者更常见的是指代平均召回率。但这里需要仔细辨析因为“APr”这个缩写有时会造成歧义。在更严谨的语境下尤其是在COCO评估体系中我们通常不直接说“APr”而是讨论AP[R]或AP-R这类指标其核心思想是衡量当召回率达到某一水平r时模型的平均精度表现。然而另一种广泛流传且非常实用的理解是将“APr”视为以召回率为横坐标的另一种平均精度计算视角它尤其关注模型在低召回率区域的性能。为了彻底讲清楚我们分两种主流理解方式来剖析。4.1 理解一固定召回率阈值下的AP这是最直接的理解。例如APR0.5表示计算当召回率被固定为0.5时模型所能达到的精确率。注意这里不是计算曲线下面积而是取曲线上一个特定的点。计算方法同样先得到某个类别的PR曲线。在这条曲线上找到召回率等于0.5或最接近0.5的点。读取该点对应的精确率值这个值就是APR0.5。这种指标的意义在于它考核的是模型在达成特定覆盖率召回率时的精度保障。例如在安防监控中我们可能要求系统至少检测出90%的异常事件高召回率然后在此基础上看它的误报率精度是多少。APR0.9就能衡量这一点。4.2 理解二关注低召回率区域的综合性能常见对比语境当人们将AP50与APr并列对比时这里的“APr”往往指的是一种侧重于模型在“高置信度预测”下表现的评价方法。它源于这样一个观察在PR曲线上置信度最高的那些预测点位于曲线左侧低召回率区域。一个稳健的模型其高置信度预测应该是非常可靠的即低召回率时精确率应该非常高PR曲线应该从接近11的点开始。在这种情况下APr可以理解为对PR曲线左端低召回率部分性能的一种强调或重新加权。一种具体的实现方式是计算平均召回率但更常见的做法是观察AP在不同IoU阈值下的表现因为更严格的IoU阈值如0.75会天然地过滤掉定位不准的预测使得模型必须依靠更高精度的预测才能被记为TP这变相考核了高置信度区域的性能。COCO数据集的标准评估指标完美地体现了这种思想。COCO主要报告以下几种APAP在IoU阈值从0.50到0.95步长0.05的区间上即0.50 0.55 ..., 0.95计算得到的平均精度的平均值。这相当于综合考核了从宽松到极端严格共10个不同定位精度要求下的模型性能。AP50就是IoU阈值为0.5时的AP。AP75IoU阈值为0.75时的AP。APs, APm, APl针对小、中、大不同尺度目标的AP。在这里AP有时被不太严谨地泛指为APr的对比对象因为平均了多个高IoU阈值所以它对模型在定位精度上的要求极高。一个模型如果AP值高说明它不仅能把物体找出来还能把框标得非常准。而AP50只反映了宽松标准下的性能。4.3 APr或严格AP的核心特点与适用场景无论采用上述哪种理解APr或严格AP的核心特点都是标准动态或严格更关注模型的稳健性与定位精度。强调高置信度预测的质量它要求模型“说有把握的说有把握的必须对”。这对于减少误报、提升系统可信度至关重要。对定位误差零容忍在高IoU阈值下框的轻微偏移就会导致TP变FP因此它直接鞭策模型优化回归头的精度。综合性能的试金石像COCO的AP指标能全面反映模型在不同难度任务上的表现避免模型通过“投机取巧”例如只擅长检测大目标或只满足于粗略定位来获得高分数。适用场景高精度定位需求自动驾驶车辆、行人检测、工业质检缺陷定位、医疗影像病灶分割前的检测等框的准确性直接影响后续决策。误报成本极高的场景例如在自动驾驶中一个误报的“行人”可能导致紧急刹车带来危险。这就需要模型在非常有把握时才报警即要求低召回率高置信度阈值下仍有高精度。模型能力深度评估在学术研究或高端产品研发中APIoU[.5:.95]是比AP50更具说服力的“硬核”指标它代表了模型更全面的技术水平。踩坑记录我们曾有一个项目模型在AP50上超越了竞品但在实际部署到生产线进行精密零件瑕疵检测时效果却不如对方。后来复盘发现竞品模型的AP75远高于我们。AP50的“宽松”掩盖了我们模型边界框回归不精确的问题而实际场景需要极高的定位精度来引导机械臂操作AP75才是更相关的指标。5. AP50与APr的直观对比与模型选择指南理解了各自的计算和内涵我们可以从多个维度对它们进行直接对比这能帮助我们在不同场景下做出正确的选择。对比维度AP50APr / 严格AP (如AP75或COCO AP)核心关注点“找没找到”“找得准不准”IoU阈值固定为0.5宽松固定为高值如0.75或一组值如0.5:0.95的平均严格对定位误差的敏感性低。允许框有较大偏移。高。框必须非常精确。对分类置信度的敏感性高。因为匹配标准宽松排序主要依赖分类分数。相对较低。在高IoU要求下定位精度成为主要瓶颈。PR曲线的考察区域整个曲线但受低IoU影响曲线整体位置可能较高。更侧重于曲线的左端高精度区域或严格标准下的整体曲线。主要应用场景模型快速对比、学术基准、对框位置要求不高的识别任务。高精度检测、实际部署评估、综合性能考核。典型代表PASCAL VOC mAP COCO AP50COCO AP (即AP[.5:.95]) COCO AP75如何根据对比结果选择模型假设你有模型A和模型B情况一A的AP50 B的AP50 但A的AP75 B的AP75。解读模型A更擅长“发现”目标但在“精确定位”上不如模型B。选型建议如果业务是图像内容分析、物体计数、存在性判断如监控中是否有人选A。如果业务是自动驾驶、机器人抓取、像素级分析的前序步骤选B。情况二A的AP50与B相当但A的AP (COCO标准) 显著高于B。解读在宽松标准下两者打成平手但在综合的、更严格的评估下模型A更强大、更稳健。选型建议无脑选A。更高的综合AP通常意味着更好的特征提取和回归能力泛化性能往往也更优。情况三A的AP50远高于B但AP75也略高于B。解读模型A全面领先。但需要结合推理速度、模型大小、功耗等其他工程指标进行最终权衡。6. 实战如何计算并可视化AP50与APr理论说得再多不如动手算一遍。这里我以一个小型示例演示如何用Python从零开始计算AP50并解读COCO评估工具给出的AP系列指标。6.1 手动计算AP50示例假设我们有一个类别“猫”在测试集上有5个真实框GT。模型预测了6个框我们已按置信度排序预测框置信度匹配的GT IoU是否TP (IoU0.5)D10.95GT1 (IoU0.88)是D20.90GT2 (IoU0.71)是D30.85无 (最大IoU0.3)否(FP)D40.80GT3 (IoU0.65)是D50.75GT4 (IoU0.90)是D60.70GT2 (IoU0.60)否(GT2已被D2匹配)我们按顺序处理并累积计算TP和FP处理D1TP1 FP0。 Precision1/11.0 Recall1/50.2。处理D2TP2 FP0。 Precision2/21.0 Recall2/50.4。处理D3TP2 FP1。 Precision2/3≈0.667 Recall2/50.4。处理D4TP3 FP1。 Precision3/40.75 Recall3/50.6。处理D5TP4 FP1。 Precision4/50.8 Recall4/50.8。处理D6TP4 FP2。 Precision4/6≈0.667 Recall4/50.8。我们得到一组Recall Precision点(0.2 1.0) (0.4 1.0) (0.4 0.667) (0.6 0.75) (0.8 0.8) (0.8 0.667)。接下来进行插值。我们取一系列召回率点例如从0.0到1.0步长0.1。对于每个点r取所有召回率r的点中精确率的最大值。r0.0: max(1.0 1.0 0.667 0.75 0.8 0.667) 1.0r0.1: max(1.0 1.0 0.667 0.75 0.8 0.667) 1.0r0.2: max(1.0 1.0 0.667 0.75 0.8 0.667) 1.0r0.3: max(1.0 0.667 0.75 0.8 0.667) 1.0r0.4: max(1.0 0.667 0.75 0.8 0.667) 1.0r0.5: max(0.667 0.75 0.8 0.667) 0.8r0.6: max(0.75 0.8 0.667) 0.8r0.7: max(0.8 0.667) 0.8r0.8: max(0.8 0.667) 0.8r0.9: 无点召回率0.9 精确率视为0。r1.0: 同上为0。最后计算插值后PR曲线下的面积近似为矩形面积求和AP50 (0.1*1.0 0.1*1.0 0.1*1.0 0.1*1.0 0.1*1.0 0.1*0.8 0.1*0.8 0.1*0.8 0.1*0.8 0.1*0) 0.8这个简单的例子展示了AP50的计算全流程。在实际中我们会使用成熟的库如pycocotools来处理大量数据。6.2 使用COCO API评估并理解输出对于实际项目强烈推荐使用官方的COCO评估工具。安装后你可以这样使用from pycocotools.coco import COCO from pycocotools.cocoeval import COCOeval # 加载标注和结果 cocoGt COCO(annotation_file) # 标注文件路径 cocoDt cocoGt.loadRes(result_file) # 模型预测结果文件路径 # 创建评估对象 cocoEval COCOeval(cocoGt, cocoDt, bbox) # 执行评估 cocoEval.evaluate() cocoEval.accumulate() cocoEval.summarize()运行summarize()后你会看到类似下面的输出Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.382 Average Precision (AP) [ IoU0.50 | area all | maxDets100 ] 0.580 Average Precision (AP) [ IoU0.75 | area all | maxDets100 ] 0.419 ...第一行AP [ IoU0.50:0.95 ]这就是常说的COCO AP也是我们理解的“严格AP”或广义上可与AP50对比的“APr”综合体现。它计算了IoU从0.5到0.95步长0.05共10个阈值下AP的平均值是核心指标。第二行AP [ IoU0.50 ]这就是AP50。第三行AP [ IoU0.75 ]这就是AP75可以看作是“APr”思想下一种具体的、更严格的指标。通过对比这三行你就能清晰地看出模型在宽松、严格以及综合标准下的性能差异。7. 调优策略针对不同指标的优化侧重点了解了指标差异我们就可以有的放矢地优化模型。提升AP50和提升严格APAPr的策略有共通之处但侧重点不同。7.1 提升AP50的核心策略AP50对定位精度容忍度高因此优化重点在于提升分类的准确性和召回率确保模型能不遗漏目标并且正确分类。数据层面加强数据增强特别是针对目标尺度和外观变化的增强如Mosaic、MixUp、随机缩放、色彩抖动等。这能极大地提升模型对不同形态目标的“发现”能力。处理类别不平衡如果某些类别样本极少模型很难学会检测它们会直接拉低该类的AP50。可采用过采样、类别权重损失如Focal Loss来缓解。模型层面优化分类头确保分类网络有足够的容量和判别能力。可以尝试更复杂的分类网络结构或调整分类损失函数的参数。调整先验框针对你的数据集目标大小重新聚类生成合适的Anchor尺寸让模型在初始阶段就更容易匹配到目标从而提高召回率。降低置信度阈值在推理或NMS阶段适当降低置信度阈值可以让更多预测框进入评估可能提升召回率从而影响AP50但需平衡精度。7.2 提升严格APAPr的核心策略严格AP要求极高的定位精度因此优化重点必须转向让边界框回归得更准。数据层面标注质量是生命线模糊、不精确的标注是提升AP75的最大障碍。在关键项目上投入资源进行标注质检和修正回报率极高。增强定位相关的数据增强如小范围的随机平移、缩放模拟目标位置的微小变化让模型对位置扰动更鲁棒。模型层面优化回归头这是重中之重。可以尝试使用更光滑的回归损失函数如Smooth L1 Loss、CIoU Loss、DIoU Loss等。这些损失函数能更好地处理框的几何关系尤其是IoU Loss系列直接优化IoU本身对提升高IoU指标有奇效。增加回归头的深度或宽度给予其更强的拟合能力。改进特征对齐使用如Deformable Convolution可变形卷积来让特征提取更好地适应目标形状有助于生成更精确的候选框。后处理优化调整NMS参数传统的NMS可能会抑制掉一些定位准确但置信度稍低的框。可以尝试Soft-NMS或DIoU-NMS它们对框的抑制更柔和能保留更多定位准确的预测。框精炼添加一个额外的框精炼网络对初步预测的框进行微调。训练技巧多尺度训练让模型在不同输入尺度下训练能提升其对尺度变化的适应性有助于精准定位不同大小的目标。更长的训练周期边界框回归通常需要比分类更长的训练时间来收敛到精细的位置。7.3 平衡AP50与严格AP的联合优化在实际项目中我们往往需要兼顾两者。分阶段训练前期可以侧重提升AP50确保模型具备了强大的目标发现能力。在后期固定主干网络专注于微调回归头和相关参数以提升定位精度。损失函数加权调整分类损失和回归损失在总损失中的权重。适当增加回归损失的权重可以引导模型更关注定位精度。集成不同模型在模型层面可以训练两个侧重不同的模型一个召回率高一个定位精度高然后通过加权框融合等方式进行集成往往能取得综合性能的提升。8. 常见问题与排查技巧实录在实际工作中围绕AP50和APr会产生很多具体问题。这里我记录了几个最典型的案例和排查思路。问题1模型训练时Loss下降得很好但验证集的AP50和APr都很低怎么办这是典型的过拟合或训练-验证数据分布不一致。排查步骤检查数据泄露确保训练集和验证集没有重叠的图像或高度相似的图像。可视化验证集预测直接看模型在验证集图片上的预测结果。是根本检测不到目标召回低还是框乱飞精度低如果是前者可能是训练数据不够多样模型泛化差如果是后者可能是回归头训练不稳定。对比训练集和验证集的标注分布查看两个集合中目标尺度的分布、类别分布是否差异巨大。差异大则需要重新划分数据集或进行数据重采样。简化模型如果模型参数量巨大而数据量有限尝试减小模型规模或增加Dropout、权重衰减等正则化手段。使用更激进的数据增强在训练集上使用更强力的数据增强模拟更多样的场景提升泛化能力。问题2AP50很高但AP75极低甚至为0。这说明什么这说明你的模型是一个“分类巨人定位矮子”。它很擅长判断有没有物体以及是什么物体但完全学不会精确地框出物体位置。根本原因回归头训练失败或能力不足。解决方案检查回归目标确认你的代码中回归目标通常是基于Anchor的偏移量计算是否正确。一个常见的错误是偏移量计算公式有误导致回归头在学习一个无意义的映射。调整回归损失尝试换用IoU系列损失如GIoU、DIoU它们直接优化框的重叠面积对回归更友好。降低回归损失的学习率有时分类损失收敛过快压制了回归损失的学习。可以为回归头设置更大的学习率或使用分层的学习率策略。审视Anchor设计如果Anchor的尺寸和形状与你的目标差异极大回归头需要学习一个非常复杂的变换可能导致学习困难。重新聚类生成适合你数据集的Anchor。问题3使用COCO评估工具时AP值正常但AP50和AP75都为0可能是什么原因这是一个典型的结果文件格式错误或评估参数设置错误。排查步骤检查预测结果JSON格式确保你的结果文件是严格的COCO结果格式。每个预测字典必须包含image_idcategory_idbbox格式为[x y width height]score。bbox的坐标必须是绝对像素值且x y是框左上角的坐标。检查category_id确保预测结果中的category_id与标注文件中的category_id完全对应。COCO的id是从1开始的如果你错误地用了0会导致类别不匹配评估结果为0。检查评估初始化在创建COCOeval对象时第三个参数是iouType对于目标检测必须是‘bbox’。如果你错误地传入了‘segm’实例分割也会得到全0的结果。打印中间结果在调用evaluate()之前可以检查一下cocoEval.params.imgIds和cocoEval.params.catIds看是否成功加载了需要评估的图像和类别。问题4在业务中我应该更看重AP50还是AP75这完全取决于你的业务需求。选择AP50的场景你的业务逻辑是“发现即胜利”。例如监控场景统计人流量只要框到人即可大小位置不敏感内容过滤中识别违规物品只要识别出物品存在即可触发审核。选择AP75的场景你的业务逻辑对位置敏感。例如自动驾驶中车辆框的精度直接影响距离估计和路径规划工业质检中缺陷框的精度决定维修或切割的路径图像裁剪或美化中需要精准框出人脸或主体。最稳妥的做法同时关注AP50和AP75或COCO AP。AP50告诉你模型的“基础检测能力”AP75告诉你模型的“精细程度”。两者差距大说明模型有明显的短板。一个优秀的、可部署的模型通常两者都应该在一个可接受的范围内。你可以为你的业务设定一个最低可接受的AP50保证召回和一个最低可接受的AP75保证精度只有同时达标的模型才进入下一轮筛选。理解AP50和APr的差异绝非纸上谈兵。它直接关系到你如何评估模型、如何定位问题、以及最终如何选择一个真正符合业务需求的模型。下次当你看到评估报告时不妨多花一分钟看看AP50和AP75这两个数字背后的故事它们会告诉你这个模型真正的性格与能力所在。