目标检测之项目总结

标签: 无 分类: 机器学习 创建时间:2024-10-09 08:48:48 更新时间:2025-04-14 11:36:55

1.前言

经过多篇文章的梳理,基本上对一个目标检测的项目有了基本的了解,从数据收集、数据处理、数据标注、模型训练、模型预测都基本上有一个思路了,最后一步其实应该是模型应用,这部分我还是有些云里雾里的,就是如何把训练好的模型,应用在系统中。因为大部分的项目可能都是用 java 编写的,如何在已有项目中进行集成,又是一个问题,是使用 api 接口的形式,还是使用其他的项目形式,这个还真是一个点。

2.Java集成

参考文章:
【1】.Anan/yolo-onnx-java
【2】.关于Java通过socket调用python图像识别算法使用总结 由于java无法直接调用python编写的接口,因此可以通过socket实现java客户端与python服务端间的通信
【3】.SpringBoot实现图片识别文字的四种方式
【4】.Java程序员学深度学习 DJL上手2 Springboot集成

3.切片推理

有些大图片,可以采用切片推理的方式,将大图片改成一个个小的图片,然后进行预测后,再重新合并,这就有点类似于对遥感影像进行推理的方案了。

参考文章:
【1】.Ultralytics 文档:使用YOLO11 和 SAHI 进行切片推理 这是官方提供的说明。

4.结果分析

  • 交并比(IoU)
    IoU 是一种量化预测边界框与地面实况边界框之间重叠程度的指标。它在评估物体定位的准确性方面发挥着重要作用。

  • 平均精度 (AP)
    AP 计算精度-召回曲线下的面积,提供一个包含模型精度和召回性能的单一值。

  • 平均精度(mAP)
    mAP 通过计算多个对象类别的平均精度值,扩展了 AP 的概念。这在多类物体检测场景中非常有用,可以全面评估模型的性能。

(1)mAP@0.5
即将IoU设为0.5时,计算每一类的所有图片的AP,然后所有类别求平均,即mAP。

(2)mAP@.5:.95
表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。

  • 精确度和召回率
    精度量化了所有阳性预测中的真阳性比例,评估模型避免假阳性的能力。另一方面,召回率计算的是真阳性预测在所有实际阳性预测中所占的比例,衡量的是模型检测出某类所有实例的能力。

  • F1 分数
    F1 分数是精确度和召回率的调和平均值,在考虑假阳性和假阴性的同时对模型的性能进行均衡评估。

  • F1 分数曲线 (F1_curve.png)
    该曲线表示 F1 分数 在不同的阈值之间。通过解读这条曲线,可以深入了解模型在不同阈值下假阳性和假阴性之间的平衡。

  • 精度-召回曲线 (PR_curve.png)
    对于任何分类问题来说,这条曲线都是不可或缺的可视化图表,它展示了精确度与分类问题之间的权衡。 召回 在不同的阈值下。在处理不平衡类时,这一点变得尤为重要。

  • 精度曲线 (P_curve.png)
    不同阈值下精度值的图形表示。该曲线有助于了解精度如何随着阈值的变化而变化。

  • 召回曲线 (R_curve.png)
    相应地,该图说明了召回值在不同阈值下的变化情况。

  • 混淆矩阵 (confusion_matrix.png)
    混淆矩阵提供了结果的详细视图,展示了每个类别的真阳性、真阴性、假阳性和假阴性的计数。

  • 归一化混淆矩阵 (confusion_matrix_normalized.png)
    这种可视化是混淆矩阵的规范化版本。它以比例而非原始计数来表示数据。这种格式更便于比较不同类别的性能。

  • 验证批次标签 (val_batchX_labels.jpg)
    这些图像描述了验证数据集中不同批次的基本真实标签。根据数据集,这些图像可以清楚地显示对象及其各自的位置。

  • 验证批预测 (val_batchX_pred.jpg)
    与标签图像对比,这些视觉效果显示了YOLO11 模型对相应批次的预测结果。通过将这些图像与标签图像进行对比,您可以轻松评估模型对物体的检测和分类效果。

参考文章:
【1】.性能指标深度挖掘 这是官方的翻译,但是也还是可以的,有说明,有建议。
【2】.YOLO 模型的评估指标——IOU、Precision、Recall、F1-score、mAP IOU(交并比)、混淆矩阵、Precision(精度)、Recall(召回率)、P-R曲线、F1-score、AP、mAP、mAP@0.5(一般来说,mAP@0.5即为评价YOLO模型的指标之一)、mAP@[0.5:0.95]
【3】.yolo系列目标检测模型训练结果分析 这里有术语表格对应,1.confusion_matrix_normalized.png和confusion_matrix.png;2.F1_curve.png;3.P_curve.png(单一类准确率);4.R_curve.png(单一类召回率);5.PR_curve.png(精确率和召回率的关系图);6.results.png;7.train_batchx;8.val_batch0_labels 和 val_batch0_pred;9.labels.jpg(标签);10.labels_correlogram.jpg(体现中心点横纵坐标以及框的高宽间的关系)
【4】.YOLO 详解:从 v1 到 v11 这里介绍了 Yolo 第一个版本到第11个版本的各个改进点。
【5】.mAP@0.5与mAP@0.5:0.95的含义,YOLO 如图所示,AP50,AP60,AP70……等等指的是取detector的IoU阈值大于0.5,大于0.6,大于0.7……等等。数值越高,即阈值越大,精度越低。
【6】.目标检测01:常用评价指标(AP、AP50、AP@50:5:95、mAP)
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。