mask rcnn算法分析_YOLO系列目标检测算法讲解之:YOLO v1

我会持续分享一些编程和机器学习相关的心得或理解,感兴趣的可以关注下^-^!!!


趣闻

震惊:YOLO之父宣布退出CV界:出于道德考虑,不希望算法用于军事和隐私

f3aa5804d018f11c723135327c3e4745.png

这意味着,经过多个版本的迭代,越来越好的yolo将不会迎来根正苗红的新版本Yolo v4了,这确实是令人遗憾的事情,不过,对于YOLO之父给出的理由:“不希望算法用于军事和隐私”,却能看的出,YOLO之父是一个有责任心、有担当、胸怀天下的大人物。这种人已经不多见了,很多企业、个人经常为了利益而不顾道德底线,所以,真心给YOLO之父点个赞。

d4bbab101346b2ae39229a580ff2b579.png

不过,有人认为,技术人不应该因为技术负面的影响而放弃技术,而更应该努力引导技术发挥积极的价值。同时,也有声音认为,如果事情一开始就是错的,那么怎么引导也没有用,所以,你怎么看呢

什么是YOLO

这里的YOLO不是设么直播软件,也不是“you only live once”,而是"you only look once",也就是你只看一次,哈哈。

25e4c1e2629052889bd2ab31391af343.png

图1

YOLO最权威的资料当然来自作者论文以及作者写的介绍博客了,大家可以访问他的个人网站:https://pjreddie.com/darknet/yolo/。作者的个人网站我浏览下来,有几个比较有价值的信息,大家可以关注下:

  1. publications栏目下有作者发布的一些文章可供下载,其中就包含了yolo v1/v2/v3。
  2. darknet栏目下有很多作者实现的酷酷的项目,其中包括yolo。此外,还有一片推荐gpu的文章,如果你正在考虑购买gpu来做深度学习,也很值得借鉴。

从直观来看,这就是YOLO:

e154f73341f2600037304f55eb3d409f.png

图2

其实就是目标检测了。只不过之所以称为yolo,是因为它的实现方法是一种端到端的目标检测算法,也就是输入图片,经过一个神经网络,输出目标的位置及其类别。具体原理,还得从yolo v1说来。

YOLO v1

YOLO v1将目标检测的多个任务统一在一个单一的神经网络。也就是或YOLO能从整个图像预测每个目标边界框,同时也能预测边界框包含图像的类别。这意味着YOLO会对整个图像和图像中的所有对象进行全局性的分析。

YOLO的设计实现了端到端的训练和实时的检测速度,同时保持高平均精度。YOLO将输入图像分割成S×S网格。如果对象的中心落在网格单元中,则该网格单元负责预测那个物体。每个网格单元预测B个矩形框和置信度,置信度反映了确信模型中包含一个对象同时,矩形框的预测有多准确。在形式上,将置信度定义为Pr(Object)*IOUtruth。如果没有对象存在于该单元格中,置信度得分应为零。否则我们希望置信度等于预测框之间的交集与并集之比(IOU。每个边界框由5个预测组成:x、y、w、h,置信度。(x,y)坐标表示中心相对于网格单元左上角的点。w和h表示图像的宽和高。

每个网格单元还预测C条类别概率Pr(Classi|Object),这些概率取决于包含对象的网格单元。对于一个网格单元,只预测一次类别概率。

Pr(Classi | Object)∗Pr(Object)∗IOU=Pr(分类)*iIOU

f6305bccfcbc754c5cea6823227f2f09.png

图4

由于YOLO假设最后一层全连接层可以看成S*S(图中为7)个方格。然后每个方格预测B个矩形框、一个自信度、还有这个矩形框所在图像的类别。也就是说,全连接层总共有这么多个输出:S*S(B*5+C)。

参数汇总说明:

  1. S:是输出map可以看成S*S个方格,图中为7,这个很好理解把。
  2. B:是每个cell可以预测B个矩形框。不是简单的之预测一个哦,那么预测这么多用哪个矩形框呢?那么confidence的就起作用了,我们可以选择置信度高的呀。
  3. 5:为什么是5,因为5包括(x,y,w,h,confidence),置信度=Pr(Object)*IOU
  4. C:是类别,如果有10中类别,C就是10。

需要补充的是:计算矩形框的误差要用到IOU,也就是两个矩形框的交、并集之比:

453287ab0d1cc78a7189978e674fe8b0.png

接下来看yolo的网络模型:

88e0868adf75ffc41c355079740ec2f8.png

图3

YOLO检测网络有24个卷积层和2个完全连接层。交替1×1卷积层减少了前几层的特征空间。

从模型来看,网络基本由卷积、全连接构成(当然还有池化)。全连接有两个,最后一个会回归出图片上目标的位置,同时输出该位置上目标的类别。可见YOLO v1的基本组成单元是非常常见的基础组件,关键是最后一层格式的设计以及训练的思路。

损失函数:

6b3a400299bebe24bd63c7d011c06f12.png

YOLO使用平方和误差,原因是作者说它更容易优化。但是简答的平方误差也有一些问题。

  1. 其实大多数网格单元都是没有物体存在的,如果不做处理,会使得置信度confidence经常为0。因为存在物体,置信度期望接近1,不存在期望为0,但大多数都不存在的话,不断减小confidence的值,却很少增大confience的值,因此confidence很容易为0的,那么解决办法就是给存在对象的confidence计算误差时×5,不存在时×0.5,那么这种情况就会缓解很多。这也是设置λcoord=5和λnoobj=0.5的原因。
  2. w和h计算误差使用了平方根来计算误差,并没有使用原始值直接计算,这是为什么呢?这是因为,作者期望,计算大的矩形框的误差的时候,计算出的梯度应该大一点,计算晓得矩形框的误差的时候,得到的梯度应该小一点,所以选择了sqrt函数,哎,它正好满足这样的属性。也正是这个原因,到了v2的时候,引入自然指数函数的原因,自然指数函数也符合这个需求。
  3. 为什么每个网格要预测多个矩形框?其实,一个就够了对吧,多了处理复杂,还要选来选去的。我的理解,训练多个可以降低偶然出错的风险。如果只训练一个,错了就错了,训练多个的话,通过执行度的方法,能够降低出错的概率。

YOLO和其他实时目标检测算法的对比

其他目标检测算法主要介绍两种:

  • DPM:DPM是通过滑动窗口来扫描图片,每到一处,就对该区域的图片进行分类。
  • R-CNN及其变体:R-CNN及其变体放弃了滑窗的方式,取而代之的是生成建议的边界框。然后使用卷积cnn来提取特征。svm会为这些边界框打分,然后有个线性模型精细的调整这些边界框,之后再使用nms(非极大值抑制)来消除重复的边界框。这么多复杂的步骤,每一个都是花很多时间做精确的调整。因此,R-CNN及其变体准确率很好,但是非常慢,检测一张图片短则几秒,长则几十秒不等。
33906a07466887201d14214aa5057c06.png

可见,YOLO VGG16版本是准确率最好的yolo版本,但是FPS只有21。YOLO版本能达到45FPS,同时mAP只下降了3个点。FAST YOLO能达到惊人的155FPS,是速度最好的实时监测模型了,而且mAP也相当客观。

从作者的论文来看,yolo确实在速度方面非常有优势,同时准确率保持很高的竞争性,这使得YOLO在工业界的应用价值非常高。

由于FAST R-CNN比YOLO在准确率方面好不少,作者也没有放弃研究二者的差异:

作者分析了背景错误和定位错误的差异:

7bd1af20ddf5741c12f33e588b87d28c.png

发现,YOLO有更小的背景错误,而FAST-RCNN有更小的定位错误。因此,作者很聪明的把二者结合起来,强强联合,只会更强:

a449e1be6d94f83146974880bb603101.png

最好的Fast-RCNN在voc 2007上的准确率是71.8,其他版本和最好版本组合,性能的提升不太大,但是当YOLO和Fast-RCNN的最好版本组合后,mAP达到了惊人的75。这个比YOLO单独的63.4的mAP有了一个巨大的提升。比最好的Fast-RCNN的mAP也提升了3.2点。

YOLO V1的限制

  1. 每个cell预测出一种类别,这意味着对与较小的、很靠近的物体,比如鸟群,几乎无能为力。
  2. YOLO 在边界框的回归上依然有很大的误差(相比Fast-RCNN)。

我不知道我是否真的说清楚了,我希望能通过我的引导,让你理解yolo的工作原理,还有很多细节,为什么不认真拜读下论文或者源码呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值