目标检测算法

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu

YOLO5 目标检测 gpu_目标检测_02

交并比 IoU

YOLO5 目标检测 gpu_卷积网络_03


这个阈值你也可以设定为0.6,这样精确度就会更高。

IoU(Interaction of Union)衡量了两个边框重叠的相对大小。

非最大抑制

YOLO5 目标检测 gpu_目标检测_04


YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_05


非最大抑制算法就会去掉和当前概率最大的框的其他IoU值很高的矩形。

YOLO5 目标检测 gpu_卷积网络_06

当尝试同时检测3个对象,比如行人,汽车,摩托,那么输出向量就会有3个额外的分量(c1,c2,c3)。正确的做法是要独立进行三次非最大抑制,分别对每个输出类别都做一次。

anchor boxes

(可以进一步改善算法效果)

如果想让一个格子检测出多个对象,就可以使用anchor box。

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_07

YOLO5 目标检测 gpu_卷积网络_08


算法处理不好以下情况:

1.如果出现你有2个anchor box,但是再同一个格子中有3个对象中心点。

2.两个对象中心店都分配在同一个格子,且他们的anchor box形状也一样。

如何指定anchor box形状?

一般手工指定5~10个anchor box形状,以尽可能多的覆盖到不同形状,这要求你要合理考虑所有对象的形状。


更好的做法(自动选择形状):k-means算法,将两类对象的形状聚类,用它来选择一组最具代表性的anchor box,来代表你试图检测的十几个对象类别。

YOLO算法

YOLO5 目标检测 gpu_条件概率_09


实际中可能划分成YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_10的网格,同时设定更多(n个)anchor box,那么输出就会是YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_11

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_12


YOLO5 目标检测 gpu_目标检测_13

YOLOv1

YOLO5 目标检测 gpu_条件概率_14


YOLOv1的缺点是定位不准,因为它是整个图片normalize到0~1之间之后,去看整张图找物体的。

YOLOv2

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_15


YOLO5 目标检测 gpu_卷积网络_16 可能会比较容易发散,为避免train到爆炸,把 YOLO5 目标检测 gpu_条件概率_17 改成 YOLO5 目标检测 gpu_条件概率_18YOLO5 目标检测 gpu_目标检测_19,这样走向像有一个盖。

YOLO5 目标检测 gpu_条件概率_20

YOLO5 目标检测 gpu_卷积网络_21


还有一个优点是,可以处理不同尺度的图像,通过放大能够更容易检测小物体。

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_22


YOLOv2中一个anchorbox会带一个条件概率(之前YLOLv1是合并共享条件概率的),如果当一只猫和狗距离很近,YOLOv1的处理方式中一个框框的猫,一个框框的狗,但框出来的猫和狗的概率很可能是相当的,这样就很难把离得很近的东西框出来。内容互斥

YOLO5 目标检测 gpu_卷积网络_23


YOLO5 目标检测 gpu_卷积网络_24

YOLOv3

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_25

候选区域 region proposal:R-CNN

使用训练过的分类器时会针对每个滑动窗跑检测算法,导致在不可能有目标物体的区域仍然跑算法,这是没有意义的。而R-CNN(带区域的卷积网络)会选出一些区域,在这些区域运行卷积网络分类器是有意义的。

选出候选区域的方法是:运行图像分割算法(a segmentation algorithm)

YOLO5 目标检测 gpu_YOLO5 目标检测 gpu_26


在这些色块上分别运行分类器,这样可以有效减少需要处理的位置,可以减少卷积网络分类器的运行时间。R-CNN的缺点在于速度慢

YOLO5 目标检测 gpu_目标检测_27