yolov3是yolo系列的最新的一篇,也是正宗yolo最后的一篇,因为该作者Joseph Redmon决定不再研究cv相关的东西,愿意是他的研究已经被用到了军事和隐私相关的东西上,这触碰了他的道德观念。他的观念惊到我了,外国很多国家都有着很坚实的信仰,这事儿放在ZG,很难会有人因为这个原因放弃自己的研究,而且已经算是在自己领域的定点,这不是某个人的问题,而是整个大时代背景的问题。
正所谓 ,“天下熙熙皆为利来,天下攘攘皆为利往”。不用说别人,我已经丢失自己的初心,一年级的时候学习知识是为了充实自己,赚钱只是这个过程带来的附属品,而现在,努力找个好工作放在第一位,多赚钱驱动着我去学习,看似结果差不多,其实性质已经变了。当代社会,成年人很难去按着自己的本心活着。
圆规正转:
yolov3论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf
tensorflow源码地址:https://github.com/YunYang1994/tensorflow-yolov3
其实在我看来,yolo系列只有两个,yolov1和yolov3,yolov1是这一系列的开山之作,yolov3是一个提升,至于yolov2只是一个中间产品,想法和做法并不是很成熟。
论文
1.性能
作者说320x320的图片精度和SSD差不多,但是速度是SSD的三倍,这一结果是激动人心的,毕竟速度是非常重要。精度是比yolov2要高了,但是与此同时速度相对变慢了,那我们可以大致得出一个猜想,yolov3的网络结构改了,计算量要比yolov2大,事实证明确实是这样。
2. 改进1:网络结构
做的非常好的一幅图片(盗用别人的),先看网络的基本模块
- DBL,conv+bn+Leaky relu,自从bn被提出后,基本都是这个结构
- **res unit:**残差的基本结构,可以有效的解决网络太深,梯度消失问题,同样是自从提出后,基本所有网络都要用,而res unit是DBL+DBL+残差
- resn:,是有res unit组成的resnet block,n代表这个block中有几个res unit
看一下darknet-53的网络结构
3. 改进2:默认框的生成
在yolov2中就借鉴ssd,将不同尺度的特征图进行融合,丰富特征图的语义信息,yolov2中是将26x26的特征图变成13x13和13x13的进行融合,非常简陋,而yolov3进行了改进,效果很好,y1,y2,y3分别对应13x13,26x26,52x52大小的特征图。yolov2中,利用聚类算法,来 产生默认boxes,yolov3同样这样,不过改进了很多,yolov3聚类9种不同尺寸的默认boxes,按大小分为三组,分别对应y1,y2,y3,特征图分辨率高的说明对小物体更加敏感,而分辨率低的对大物体敏感,于是,这样在y1,y2,y3上的每个grid分别产生不同尺寸的3个默认boxes,那么一共会有(52×52+26×26+13×13)×3=10647,这数量对小物体普通的小物体也都会被找出来
注意,下面的默认框尺寸是mscoco的聚类结果
看一下默认框的效果图
3. 改进3:损失函数的改变
yolov3的另一个改变就是在分类结果上的改变,之前的yolo在分类的时候都是用softmax找出最可能的一个类别,也就说,每个box只能属于一个类别,这里不再这样,改用logistic regression逻辑回归对每个类别进行二分类,分类结果,是or不是这个类,也就是说有可能有个物体有两个物体标签,这其实可以理解,举个例子假设有标签[“狮子”,“狗"],这时候来了一张狮子狗的图片,分类结果可能是这样[1,1],也就是说,既是狮子,也是狗。
总结
总结一下yolov3的改变
- 网络改变了,由darknet-19变成darknet53,更加复杂,导致结果会变好,速度相对慢一点
- 特征图语义信息丰富,融合了不同特征图,后面基本所有的论文都会这么操作
- 针对不同特征图聚类不同尺寸的默认boxes
- 损失函数由原来的softmax变成logistic regresion,每个box可以属于多个类别