Howard 教授在 2018 年高级课程(第 2 部分)中展示了 SSD Single Shot Object Detection 的示例。这是一个非常有趣但很复杂的笔记本;不幸的是,它是用 Fastai V0.7 编写的。我已将 SSD 笔记本移植到 Fastai V1 中,效果非常好。您可以在我的 GitHub 中找到它,网址为 https://colab.research.google.com/github/jav0927/course-v3/blob/master/SSD_Object_Detection.ipynb 212这是课程中最具挑战性的模型,也是一个很好的学习工具。我希望它对社区有价值。在开发模型时,我受到了 Henin 之前工作的启发。1. 调试记录
为了方便作比较,先写metric函数,计算目标检测中的mAP指标。
【YOLO学习】召回率(Recall),精确率(Precision),平均正确率(Average_precision(AP) ),交除并(Intersection-over-Union(IoU))_Joe_quan-DevPress官方社区
precision和recall,调整阈值 Precision-recall 曲线如果你想评估一个分类器的性能,一个比较好的方法就是:观察当阈值变化时,Precision与Recall值的变化情况。如果一个分类器的性能比较好,那么它应该有如下的表现:被识别出的图片中飞机所占的比重比较大,并且在识别出大雁之前,尽可能多地正确识别出飞机,也就是让Recall值增长的同时保持Precision的值在一个很高的水平。而性能比较差的分类器可能会损失很多Precision值才能换来Recall值的提高。通常情况下,文章中都会使用Precision-recall曲线,来显示出分类器在Precision与Recall之间的权衡。
① 不同的排序,precision就不一样。②
1.1 mAP metric实现
参考资料:https://fastai1.fast.ai/metrics.html 在fastai1中自定义metric的实现方法
mAP fastai 实现 GitHub - rbrtwlz/fastai_object_detection: Extension of the fastai library to include object detection.GitHub - bes-dev/mean_average_precision: Mean Average Precision for Object Detectionmean_average_precision 代码阅读:目标检测mAP
http://www.kaotop.com/file/tupian/20220919/5af8d43fa7204ab09fe4b02ca683ef7a.png
https://www.jianshu.com/p/82be426f776e?u_atoken=92f1a4ac-1f38-424e-bd5d-e13ae75eca06&u_asession=01MvY9RNeNKwQlYnMD9Hc_K3eX6exil6XSk_X4_wWZz0_LZRfZ9R9ZQmxJo6YLqJquX0KNBwm7Lovlpxjd_P_q4JsKWYrT3W_NKPr8w6oU7K9ftvHNHiPBVlg33AaBaFhpCvvWHyhA8I9G3hxoTho1LGBkFo3NEHBv0PZUm6pbxQU&u_asig=05tZzfVi1GOV4qK6fh5h9Gg0CQEsM4j3i7J0ECfvAn5RiOj8400gbKYtvl3pud9waa9YpWWkFQdASvdk_UXLWFrUQjJwawMWwm9WEnGPOyqUD9R9a-imlIWQHmOnXxzB815E-9WTWOdh6FHU9YrpOzF7rpdbkP2u41mr2nrhHbssr9JS7q8ZD7Xtz2Ly-b0kmuyAKRFSVJkkdwVUnyHAIJzfoNu94mvcy7Lbsw_tvtWXTp3s9_xExIa5wcJrmlNdnsChTz2MQxpCmDDGYlh3aZze3h9VXwMyh6PgyDIVSG1W_1F70odfP7dqZSPD-SupvBMcP86Dpk-9o5WW2hT6bxqnLVjL3gJGcIUWUdcOMi4KpUXppGBbE7EV6HNvNEWtsNmWspDxyAEEo4kbsryBKb9Q&u_aref=fVQ8LZgBzeAw4fqILwiJYD%2BtNLo%3D
目标检测中的mAP是什么含义? - 知乎
import numpy as np
from mean_average_precision import MetricBuilder
# [xmin, ymin, xmax, ymax, class_id, difficult, crowd]
gt = np.array([
[439, 157, 556, 241, 0, 0, 0],
[437, 246, 518, 351, 0, 0, 0],
[515, 306, 595, 375, 0, 0, 0],
[407, 386, 531, 476, 0, 0, 0],
[544, 419, 621, 476, 0, 0, 0],
[609, 297, 636, 392, 0, 0, 0]
])
# [xmin, ymin, xmax, ymax, class_id, confidence]
preds = np.array([
[429, 219, 528, 247, 0, 0.460851],
[433, 260, 506, 336, 0, 0.269833],
[518, 314, 603, 369, 0, 0.462608],
[592, 310, 634, 388, 0, 0.298196],
[403, 384, 517, 461, 0, 0.382881],
[405, 429, 519, 470, 0, 0.369369],
[433, 272, 499, 341, 0, 0.272826],
[413, 390, 515, 459, 0, 0.619459]
])
# print list of available metrics
print(MetricBuilder.get_metrics_list())
# create metric_fn
metric_fn = MetricBuilder.build_evaluation_metric("map_2d", async_mode=True, num_classes=1)
# add some samples to evaluation
for i in range(10):
metric_fn.add(preds, gt)
# compute PASCAL VOC metric
print(f"VOC PASCAL mAP: {metric_fn.value(iou_thresholds=0.5, recall_thresholds=np.arange(0., 1.1, 0.1))['mAP']}")
# compute PASCAL VOC metric at the all points
print(f"VOC PASCAL mAP in all points: {metric_fn.value(iou_thresholds=0.5)['mAP']}")
# compute metric COCO metric
print(f"COCO mAP: {metric_fn.value(iou_thresholds=np.arange(0.5, 1.0, 0.05), recall_thresholds=np.arange(0., 1.01, 0.01), mpolicy='soft')['mAP']}")
1.2 fastai 2018 lesson9 SSD
mAP在fastai 2.x版本中如何运行的?如何实现网络到nms,到最后的检测框这一步的?
fit_one_cycle->learn.fit->
callback主要有两个:TrainEvalCallback和Recorder
TrainEvalCallback一般没有太多工作,就是记录epoch的个数,当前的训练进度,到了第几个epoch的第几个batch之类的。进度控制等。fit的逻辑:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)