YOLO系列 顺便写点inception的东西 感觉不错

过两天打算讲YOLO系列,现在这里挖个坑,关于这方面的详解其实网上挺多的,主要应该是看别人的博客吧,看完再回去看论文

YOLO v1:

什么都不说,先上网络结构


不得不吐槽这图有一半被挡住了但是是原论文就这样了,还是觉得Joseph太随意了

这个结构与rcnn系列的结构最大的不同就是end-to-end,而rcnn需要一个selective search,就算到了faster网络也是rpn和fast两个网络结合的,另外,YOLO将物体检测作为一个回归问题,一次forward得到物体的位置和其所属类别及相应的置信概率,rcnn系列两部分求解:物体类别(分类问题),物体位置的bounding box(回归问题)


看看网络都有什么值得注意的:

借鉴了GoogLeNet网络inception的一部分,使用了1x1卷积,减少了参数和特征图的数量,但是因为最后用了全连接,使得网络不能输入任意维度的图片。

另外还有一个fast的版本,只用了9个卷积层和2个全连接层,速度翻倍但是检测效果下降。

接下来讲最后预测部分的全连接层


输入图像分割成SxS个格子,物体中心的格子负责该物体的检测,即回归出B个(类别和boundingbox),类别有C类(如VOC有20类)boundingbox有5个值,相对偏移坐标x,y和长宽h,w最后还有confidence置信度。x,y根据与当前格子中心的相对位置进行偏移,h,w根据与全图的比例被缩放到[0,1],confidence算的是P(object) * IOU,P根据有无物体取0或1

因此网络的输出维度是 S*S*(B*5 + C)


每个格子能够出B个boundingbox,但是最后只保留置信度最大的那个,而格子数量有限,所以小物体或者是多个物体挤在一起这些情况不能搞定。

看Loss function


CoordError是预测结果和gt的均方,λ的出现时因为坐标和长宽对网络影响不同,长宽那里开了根号是因为不然框的大小对产生的loss有很大的影响,这不应该是这样的,所以开根号减小了误差,然而其实效果并不好,而且这样小物体的检测框产生的误差太小,于是做不好小物体检测

IOUError是对每个格子预测的confidence的loss,而加入权值是因为在不包含物体的格子里,confidence为0居多,而这样的格子又大于有包含物体的格子,因此对网络的影响会比有物体的格子大

ClassError是分类误差,全使用均方来计算因为这样容易优化

YOLO的训练是先把网络去掉尾巴在ImageNet上用224*224训练出一个分类网络,然后在VOC上加上最后的全连接,并且调整参数使得输入448*448的图像,这应该是当时算图像精度高的了

然后是他的结果


效果比不上rcnn系列但是他快啊,像起飞了

Error分析来看,背景的误检率低了不少,是因为网络感受的是整张图,而rcnn系列只能看到region proposal的东西,太局限了

缺点就是YOLO对于位置的检测效果偏差,而且召回率底,想想每个格子最多检测出一个物体,那还不是漏掉一大堆。


因此,为了改进他,作者又提出了YOLO v2和顺带的YOLO9000:

YOLO v2就是一些trick的大集合,把主流的各大结构都借来用了(除了OHEM),上个图感受下


BN。。。就不讲了,什么?大清亡了?

High Resolution Classifier

就是把网络在ImageNet预训练和正式训练的输入维度都提高了,改到448*448

Fully Convolutional

终于进入全卷积的时代了,推翻全连接层,网络能接受各种尺寸(??尺度)的输入了

New Network

换了一个网络,叫暗网的(darknet)


VGG16模型设计理念相似,主要采用3*3卷积,采用2*2的maxpooling层之后,特征图维度降低2倍,而同时将特征图的channles增加两倍,另外也用了1x1的卷积减少计算量,最后比VGG少了一大截的计算量(懒得算)

pass-through

一个很异于常人的Fine-Grain方法,在YOLOv3改邪归正掉了,具体做法是在最后一次maxpooling之后,把上一层的特征图水平垂直隔行采样,变成4个新的特征图concate在当前层,形象点就是横切竖切:


Multi-Scale Training

也是个小trick来的,训练时,每10个batches就随机从{320;352;::;608}中选择一个尺寸。这样能适应更多尺度的输入

接下来是重头戏

Anchor Boxes

听名字都知道是从Faster-RCNN借鉴来的

首先用了416*416的网络输入(416是个好东西),最后特征图那里得到的是13*13,奇数方便有一个中心格子来预测,每个格子提出9个proposal一共就有13 * 13 * 9 = 1521个boxes,而之前版本只有7*7*2 = 98个,因此能找到更多的object了,召回率也上升了,然而准确率又稍有下降,没关系

Dimension Clusters

Faster-rcnn的anchor是预先设定的,这里用K-means把数据集的boundingbox做了统计,最后取了前五个作为anchor


这样做了之后,五个框的效果比肩Faster的9框


Direct location prediction

另一个问题是模型在训练的时候不稳定,尤其是在训练刚开始的时候,作者认为是在预测位置的时候出现的,回顾下YOLO对位置的预测


中心坐标加上偏移量,偏移量的参数w,在模型开始时期不稳定,可能造成偏移量很大,检测到别的object上面去了

于是做出以下改动



Loss函数

没有在论文里看到任何关于Loss函数的介绍,有代码可能可以参考一下,不写了没时间了

结果反正也是很好的


YOLO9000不写了没时间了

然后是YOLOv3,文章写得很欢,但是仔细看下来没有很多惊艳的方法,倒是显得中规中矩,然而人家结果好啊

先看网络,还是darknet


这次学着跟别人一样加深网络,有53层所以叫Darknet-53,然后由于觉得上一代的小尺度物体的检测还是没做好,于是认认真真地加上了常见的取多层特征,倒数三层出来的特征图,各做一次卷积然后去predict,每个格predict三个框,三层就是9个


另外在boundingbox的loss设计上增加了点小改动,如果一个boundingbox与gt重合度很大而且比同个格子内的其他boundingbox都要好的话,confidence直接设为1,这是使网络更倾向于效果好的boundingbox,而当某个boundingbox的confidence在某个阈值(0.5)之下时,该box被忽略,也不产生任何loss

还有softmax也被改成了independent logistic classifier ,虽然对这个了解不多,论文里也没多说理由,只是说没必要用到softmax,可能是为了做多标签分类,而loss函数也换成了二值交叉熵,没记错的话这个好像是sigmod专用的

然后结果,他借了别人的图以示嘲讽


用时完爆,好到爆表,真的爆表了

现在的表现是对小物体更加鲁棒了,然而反而reveal了网络对中型大型物体的效果差点了 有待改进

所以说YOLO v3只是个tech report嘛




inception也发展了好几个系列了,放一起写好了

https://blog.csdn.net/qq_14845119/article/details/73648100

https://blog.csdn.net/yuanchheneducn/article/details/53045551

还没写完,之后再贴上reference网址好了

reference:

https://zhuanlan.zhihu.com/p/25236464

https://blog.csdn.net/jesse_mx/article/details/53925356

https://blog.csdn.net/l7H9JA4/article/details/79955903

https://zhuanlan.zhihu.com/p/35074244

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值