获得更精确的边界框——YOLO algorithm
如果输入是一个100*100的图像,在图像上放一个网格(演示时使用3*3的网格,实际应用中使用更细致的网格)
算法思路:使用图像分类和定位算法,将算法应用到网格中。
具体用法:定义训练标签,对于9个格子中的每一个指定一个标签y,y是0706笔记中提到的8维向量Y=[pcbxbybhbwc1c2c3]Y=\left[\begin{array}{l} p_{c} \\ b_{x} \\ b_{y} \\ b_{h} \\ b_{w} \\ c_{1} \\ c_{2} \\ c_{3} \end{array}\right],pc指是否有目标,bx,by,bh,bw指目标的位置,c1,c2,c3指目标的类别。将图片分为9个网格后,那么每个网格都有这么一个向量。

对于一个图片有两个对象的情况。YOLO算法是:取两个对象的中点然后将这个对象分配给包含对象中点的格子。用向量表示格子:左边的车就归属到(0,1)中,右边的车在(2,1)在设置标签中,除了上面两个格子中标签pc=1,其余格子中pc=0.其余格子Y=[0xxxxxxx]Y=\left[\begin{array}{l} 0 \\ x \\ x\\ x \\ x\\ x \\ x \\ x \end{array}\right]x表示不在意。(0,1)和(2,1)的格子中Y=[1bxbybhbw010]Y=\left[\begin{array}{l} 1 \\ b_{x} \\ b_{y} \\ b_{h} \\ b_{w} \\ 0 \\ 1 \\ 0 \end{array}\right]
YOLO吴恩达(0709)
所以目标输出是3*3*8

如果现在要训练一个输入为100*100*3的神经网络,通过一个普通的卷积网络,最后得到一个3*3*8的输出。所以训练集就是有一个输入x,3*3*8的目标标签y,当使用反向传播训练神经网络时,将任意输入x映射到这类输出向量y。
算法的优点:神经网络可以输出精确的边界框,所以在测试时,只需要输入图像x,然后跑正向传播,直到可以都得到输出y。在y中就可以知道9个网格中哪个格子有目标以及目标的具体位置,当网格足够细致的情况下,不会出现一个网格中包含多个目标的情况,此时算法是有效的。把对象分配到一个格子的过程是,观察对象的中点,然后把这个对象分配到其中点所在的格子,即使对象在多个格子中,也只会被分配到其中一个格子中。
在边框的定义中,以目标所在的格子为标准,左上角为(0,0),右下角为(1,1)。bx,by,bw,bh则在其中进行定义,它们的单位是相对格子尺度的比例。**bx,by要求在0到1之间。但是bw,bh是可以大于1的。**对于参数还有其他更好的定义在研究论文中。

注意:首先,这个算法和图像分类和定位算法很像,可以显式输出边界框坐标,所以可以让神经网络输出边界框,有任意的宽高比,并且可以输出更精确的坐标,不会受到滑动窗法分类器的步长大小限制。其次,这是卷积实现,使用一个卷积网络,共享计算步骤,直接得到所需的所有结果。运行速度非常快,可以达到实时识别

相关文章:

  • 2021-04-07
  • 2021-07-20
  • 2021-06-16
  • 2022-01-03
  • 2021-04-19
  • 2021-04-23
  • 2021-06-12
  • 2021-11-02
猜你喜欢
  • 2021-08-11
  • 2021-10-18
  • 2021-09-28
  • 2021-08-31
  • 2021-08-11
  • 2022-02-14
  • 2021-09-05
相关资源
相似解决方案