除了保存mAP值以外,为了可视化这五个指标,您需要保存以下数据:
注意:这五个指标更关注特定情况下模型的性能,而不是平均性能
PR曲线:保存每个阈值下的精确率和召回率,以便于绘制PR曲线。
TopN-precision:保存每个k值下的TopN精度,以便于绘制TopN-precision曲线。
NDCG:保存每个查询的NDCG@1000值,以便于计算平均NDCG和绘制NDCG曲线。
P@H:保存每个查询的P@H≤≤2值,以便于计算平均P@H和绘制P@H曲线。
Precision curves within Hamming Radius 2:保存每个查询的P@H≤≤2值和对应的Hamming半径,以便于绘制P@H≤≤2曲线。
有关mAP值和loss值为什么会不同
- mAP聚焦于最重要解决的问题,大于一定的阈值才能算是正确匹配,更多考量了匹配程度而非数值距离,有时候少量的loss增加是可以提升mAP的。
- loss函数考虑的更多是模拟拟合训练的程度,越小表示更加契合训练数据
mAP更能代表模型的性能(比起损失函数的值)
损失函数主要考量的是一个样本之间的数值误差,但对最终任务是否达标不一定敏感。
mAP值直接考量的是预测结果和真实值之间的匹配程度,更能反应模型的性能。
损失函数偏重于模型对训练数据的拟合,而mAP值考虑了泛化性能,更多关注测试集结果。
在任务中,我们关注的往往是mAP这样直接关联任务的性能指标,而不是损失函数这种间接指标。
对于目标检测、语义分割等很多任务,mAP系列指标已成为事实上的标准衡量模型性能的指标。
总的来说:
损失函数主要关注如何拟合训练数据
mAP值主要关注预测和真实值的匹配度
损失函数是一个间接的性能指标
mAP值则更直接地反应模型的最终性能
这也就解释了为什么在实际任务中,我们更在意mAP值这类直接指标,而不是单纯的损失函数数值。
如果模型的损失逐渐下降但mAP值却没有明显改善,往往就是一个警告,表明模型存在问题需要解决。
loss和mAP的权衡
损失函数为多少为合适的,我在损失函数为13.6的时候得到了mAP值为0.84
这个损失函数和mAP值都处于可以接受的范围内。很正常模型在不同的数据集上,效果会有差异。同一模型在不同数据集上的损失和mAP值存在差异也很正常。通常来说:较低的loss表明模型拟合效果好,但不一定能确保较高的mAP。mAP值更直接反应模型在真实任务上的性能。
不同数据集的分布、标签质量等因素会导致loss和mAP存在差异。
具体来说:
loss 在10左右虽然相对较高,但并不意味着模型效果不好。
0.84的mAP值表明模型已经具备很好的目标检测能力。
综上,考虑您的情况:
loss = 13.6 在可控范围内
mAP = 0.84 已经很高,模型效果已经很不错
在实际应用中,我们更在乎模型在具体任务上的性能,而非loss的数值。
只要mAP达到需求,loss的数值并非首要关注点。
有时降低loss在不影响mAP的前提下也是可以的,但提高loss随之提高mAP也是可接受的。
过长的哈希码
,在哈希码长度为128的情况下,模型存在一定程度的过拟合还比较正常。
原因有几个:
128bit 的哈希码有非常大的表示空间,模型容易泄漏训练数据信息。
当哈希码很长时,出现约有相同哈希码的训练样本的概率比较小。
对于相同数量的数据,更长的哈希码需要学习更多的参数,模型难度更高。
长哈希码需要更复杂的模型来学习,更易过拟合。
因此在哈希码长度为128bit时,模型存在一点点过拟合是可接受的。
长哈希码虽然可以获得更高的利用信息率,但也带来更高的模型复杂度。
两个平衡点需要考虑:
通过增加正则项、Dropout等方式,合理控制模型复杂度来降低过拟合。
尽量提高mAP值弥补长哈希码带来的信息损失。
只要mAP已经很高,且通过合理手段降低过拟合,这种情况是可以接受的。
您提及的情况符合这些特点,所以是比较正常的。