前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

YOLO

作者头像
小飞侠xp
发布2018-10-10 10:54:30
1.3K0
发布2018-10-10 10:54:30
举报
YOLO输出

假设我要训练一个 CNN 来识别三种类别:人、猫、狗。因此输出向量Y将只有三个元素C1、C2、C3,每个元素都是一个类别得分。如果有更多类别,这个向量将边长。对于上图,我们希望训练CNN识别图像中的人,并用一个边界框定位人。为此,向输出向量中添加边界框参数-x、y、w、h用于确定边界框的大小。x、y确定边框中心坐标;w、h确定边界框的宽和高。

滑动窗口

因为对象可以在给定图像的任何位置,你可以通过在整个图像上滑动一个小窗口,并检查创建的每个窗口中是否有对象 确保检测到所有这些对象。 滑动窗口:

  1. 选择窗口大小:希望窗口足够小 能够捕获图像中的任何小对象
  2. 然后将窗口放在图像的开始位置,并将窗口中的区域馈送到训练的 CNN 中
  3. 对于每个区域 这个 CNN 都会输出一个预测,即这个输出向量 y。pc 是介于 0 和 1 之间的概率,表示窗口中是否有对象。如果没有检测到对象,就不需要继续尝试分类该图像区域。

在此示例中 我们发现第一个窗口区域,不包含我们要查找的任何类别。此时 CNN 将输出一个 pc 等于 0 的向量。 滑动窗口方法效果不错,但是非常消耗计算资源。因为我们需要用不同大小的窗口扫描整个图像,并且需要将每个窗口馈送到 CNN 中。

eg.假设图片为16163

1.选择一个10*10像素的窗口:

如果使用2像素的步幅,则需要16个窗口才能覆盖整个图像:

在最初的Sliding Windows方法中,这16个窗口中的每一个都必须通过CNN单独传递。我们假设CNN具有以下架构:

CNN将10 x 10 x 3图像作为输入,然后它应用5,7 x 7 x 3过滤器。然后使用2 x 2 最大池化,然后是128 个2 x 2 x 5卷积核,然后是具有128个1 x 1 x 128卷积核。最后它具有8个1 x 1 x 128卷积核,代表softmax输出。 将上述CNN的输入从10 x 10 x 3改为16 x 16 x 3

可以看到,这个CNN架构与前面所示相同。如果第一个窗口通过CNN,可以看到结果是最后一个图层左上角。类似地,第二个窗口通过CNN,会在最后一层看到相应的结果:

同样,如果我们通过这个CNN跟随对应于第三个窗口的图像部分,我们会在最后一层看到相应的结果,如下图所示:

实际上,如果我们通过CNN跟踪所有的窗口,会看到所有16个窗口都包含在这个CNN的最后一层。因此,通过CNN单独传递16个窗口与通过CNN传递整个图像完全相同。

这种技术使整个过程更加高效。然而,这种技术有一个缺点:边界框的位置不会非常准确。原因是给定大小的窗口和步幅不可能完美地匹配图像中的对象。

为了提高边界框的准确性,YOLO使用网格而不是滑动窗口,并且使用交并比和非极大值抑制(Intersection Over Union and Non-Maximal Suppression) 上述技术的组合是YOLO算法运行良好的部分原因.

使用网格
IOU
NMS
Anchor Boxes
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • YOLO输出
  • 滑动窗口
  • eg.假设图片为16163
  • 使用网格
  • IOU
  • NMS
  • Anchor Boxes
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档