目标检测算法YOLO3论文解读
大家好,又见面了,我是你们的朋友全栈君。
论文题目:YOLOv3: An Incremental Improvement
论文地址:https://arxiv.org/abs/1804.02767
代码地址:https://github.com/aloyschen/tensorflow-yolo3
一、论文解读
1、bounding box prediction(边界框预测)
YOLO2预测bounding boxes是使用anchor boxes,这个网络为每个bounding box预测了4个坐标:tx、ty、tw、th,用(cx,cy)表示当前网格左上角坐标偏移图像左上角坐标的距离,用pw,ph表示先验框(piror)的宽和高,可以得到下面式子:
在训练期间,使用平方和误差(sum of squared error loss)。真值用
表示,梯度就是真值减去预测值:
。
YOLO3用logistic regression为每个bounding box预测一个分数。算法只为每个真值匹配一个最优的先验框。
2、多标签预测
每个bounding box可能含有多类物体,也就是多标签预测。所以用logistic(sigmoid)代替softmax,因为softmax表示每个框只有一类对象,而sigmoid可以预测多标签分类。那么如何用sigmoid来做多标签分类呢?其实就是针对logits中每个分类计算的结果分别作用一个sigmoid分类器,分别判定样本是否属于某个类别。在训练期间,使用二元交叉熵损失函数进行类别预测。
sigmoid多标签预测参考博客:https://blog.csdn.net/qq_32172681/article/details/97936956。
3、结合不同卷积层的特征,提取更细粒度的信息,做多尺度预测
YOLO3用3个不同的尺度预测boxes,网络采用类似特征金字塔的概念,从不同的尺度提取特征。在原先的基本特征提取器上新增了几个卷积层,最后用一个3维的张量表示bounding box、objectness和class predictions。在COCO中,在每个尺度上预测3个boxes,因此张量为N*N*[3*(4+1+80)],分别对应4个bounding boxes、1个objectness prediction和80个class predictions。接下来,从前面的两个图层中提取特征图,并将其向上采样2倍。从早期的网络中获取一个特征图,并使用串联将其与上采样特征合并。这种方法允许我们从上采样的特性中获得更有意义的语义信息,并从早期的特性图中获得更细粒度的信息。然后再添加一些卷积层来处理这个组合的特征图,并最终预测一个类似的张量,尽管现在的大小是原来的两倍。再次执行相同的设计,以预测最终框的尺寸。在过去,YOLO难以预测小的物体,现在通过多尺度预测,明显改善。
4、网络结构(DarkNet53 = Darknet19 + ResNet)
- 结合残差思想,提取更深层次的语义信息。
- 仍然使用连续的3×3和1×1的卷积层。
- 通过上采样对三个不同尺度做预测。如将8*8的特征图上采样和16*16的特征图相加再次计算,这样可以预测出更小的物体。
- 采用了步长为2的卷积层代替pooling层,因为池化层会丢失信息。
如图所示:
5、预测更多目标
YOLO3仍然使用k-均值聚类来确定模板框,为每个网格预测9个bounding boxes(YOLO2只有5个、YOLO1只有2个),这样可以提高recall。
6、损失函数
在训练期间,使用二元交叉熵损失函数进行类别预测。YOLO v2损失函数的后三项是平方误差,而YOLO v3则更改为交叉熵误差项,也就是说YOLO v3的物品置信度和分离预测使用的是逻辑回归算法。
二、代码理解
1、构造残差块
2、darknet53网络结构,用于提取特征(使用了残差块)
3、yolo块(图中Convs)
yolo3在Darknet53提取的特征层基础上,又加了针对3种不同比例的feature map的block,这样来提高对小物体的检测率
4、构造yolo3模型结构,输出三种尺度的卷积层(conv2d_59, conv2d_67, conv2d_75)
5、目标检测模块,输出预测结果x,y,w,h,confidence,class_prob
根据不同大小的feature map做多尺度的检测(三种feature map大小分别为13x13x255, 26x26x255, 52x52x255)
6、之前输入图像时,按照长宽比缩放,对图像进行了填充,此处对box的坐标进行修正
7、损失函数(共4部分:框位置xy,wh,置信度confidence,类别class)
8、k-mean聚类算法(用于生成模版框)
9、对三个不同尺度的输出做非极大值抑制,得到最后物体检测框和预测类别
10、计算mAP,评价模型
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/150540.html原文链接:https://javaforall.cn
相关文章
- [算法系列之十二]字符串匹配之蛮力匹配
- nginx负载均衡原理简介_负载均衡算法有哪些
- OHEM算法论文理解
- php 递归算法
- 【算法】[困难]-直方图的水量-动态规划
- 「CSP-J/S2022模拟赛7.12 D」来 / YbtOJ 「分块算法」历史序列
- http前缀树路由算法和Go源码分析
- 快速幂算法详解
- 声源定位方法_声源定位算法
- 【JavaScript——牛客网算法No.HJ2】计算一个字符串中含有某个字符的个数[通俗易懂]
- 惊雷算法3.0升级上线,持续打击刷点击作弊行为
- 这个算法太牛啦!可用于视频编辑和AR!代码即将开源!NeuralMarker!论文速递2022.9.29!
- FactorMatte:最新视频抠图算法,更适合于视频合成任务!论文/代码速递2022.11.9!
- [nature communications | 论文简读] scGCN:单细胞组学中知识转移的图卷积网络算法
- [scientific reports | 论文简读] scCAN:使用自动编码器和网络融合的单细胞聚类算法
- JavaScript专项算法题(4):异步
- 20分钟,AI写出的论文轻松得A!学校检测算法也拿它没辙,学生:GPT-4啥时候出?
- 问题 1505: [蓝桥杯][算法提高VIP]单词个数统计
- 医疗图像方向硕士,焦虑发论文毕业,咨询好的CV算法方向,与同门如何合作?
- 终于,SM2 国密算法被 Linux 内核社区接受了!
- 半监督组稀疏表示:模型、算法与应用(ECAI 2016论文精选)| AI科技评论
- 论文精选 | 流感也能预测——升级版状态滤波算法
- 为2亿人维权 央视主播海霞:别把劳动者困于系统绑于算法
- python实现排序算法
- PHP大转盘中奖概率算法实例
- PHP实现克鲁斯卡尔算法实例解析
- C++实现N个骰子的点数算法