由于最近在看YOLOv3算法,感觉老是不清楚bounding box和anchor box的概念,看完吴恩达的视频后准备写一篇博客记下笔记。em...所以也会用吴恩达视频中的例子来讲。

     在视频中,有一张图片,假设要检测的目标类别有3类,行人、轿车、摩托车。我们将图片划分为3*3的网格(grid cells),并且设置有两个anchor boxes(即,图中那两个紫色边框)。这样每次检测一个grid cell,就会输出一个向量y = [Pc, bx, by, bh, bw, c1, c2, c3, Pc, bx, by, bh, bw, c1, c2, c2]。对这个y可以这么看,由于anchor box有两个,所以y中元素数量是2 * 8。其中前一部分的(Pc,bx,by,bh,bw,c1,c2,c3),Pc表示anchor box1是否在grid cell中检测到目标(若无,则Pc=0,后面的就不用填了),(bx,by,bh,bw)则是目标的bounding box的位置参数,(c1,c2,c3)是目标是哪类。

    注1:bounding box是怎么来的呢?其实是在检测每个grid cell时,若检测到目标,则会将其标出来(图中的红色框)。这就是bounding box。

    注2:设置多个anchor boxes干嘛呢? 是这样的,当有目标时,还要计算bounding box分别与各个anchor boxes的IOU(交并比函数),并选择IOU最大的那个anchor box。这样的话,bounding box的位置参数就保存在那个anchor box对应的(Pc,bx,by,bh,bw,c1,c2,c3)中啦。

 

    最后,由于grid cells是3*3的,所以最后输出的Y的shape为(3, 3, 2, 8),这些数字的意义对应为(numbers of grid cells, numbers of grid cells, numbers of anchor boxes, numbers of classes + 5)。

 


 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐