文章目录[隐藏]
相关内容:
YOLOv3论文翻译
从头实现YOLOv3:第1部分
从头实现YOLOv3:第2部分
从头实现YOLOv3:第3部分
从头实现YOLOv3:第4部分
从头实现YOLOv3:第5部分
核心思想
输入图像经过全卷积神经网络得到 3 种尺度(跨尺度预测)的输出特征图,在输出特征图上划分 cell
(单元格),对于 ground truth box
中心所在的 cell
,该 cell
就负责预测 ground truth box
框中的目标。该 cell
先计算事先指定的 3 种 anchor
与 ground truth box
的 IOU
,选出 IOU
最高的 anchor
,然后用选出的 anchor
生成我们需要的检测框,最后根据该检测框对不同类别的置信度,来检测类别。
代码中实际上把每个
anchor
生成的检测框都计算出来了,然后在所有检测框中进行挑选。
网络结构
yolo
使用全卷积神经网络,包括 convolutional
、shortcut
、route
、upsample
和 yolo
,没有用 polling
。
convolutional
stride
指定步长。
stride
为 1 的卷积层不改变输入特征图的大小。
stride
为 2 的卷积层进行下采样,将输入特征图缩小为 52 x 52
、26 x 26
和 13 x 13
,用于划分 cell
。
shortcut
from
指定之前的网络层编号。
将之前一层和 from
指定的网络层的特征图相加,然后输出。
route
layers
指定之前的网络层编号。
layers
只有一个值时,将 layers
指定的网络层的特征图输出。
layers
有两个值时,将指定的两个网络层的特征图沿深度连接,然后输出。
upsample
将 13 x 13
放大成 26 x 26
,26 x 26
放大成 52 x 52
。
yolo
有 3 个 yolo
,每个 yolo
对应于 3 种不同尺度的特征图——13 x 13
、26 x 26
和 52 x 52
。
每个 yolo
有 3 种 anchor
,通过 anchor
和输入特征图,计算出检测框,计算方式见下文。
检测框属性
以下公式描述了如何转换网络输出特征图以获得预测边界框。
bx、by、bw、bh是预测边界框的 x、y 中心坐标、宽度和高度。 tx, ty, tw, th 是网络输出的特征图中的特征。 cx 和 cy 是网格的左上角坐标。 pw 和 ph 是anchor
尺寸。
中心坐标
先用 sigmoid
归一化特征图输出的中心的坐标,再加上中心所在 cell
左上角的偏移坐标。
边界框尺寸
先用 exp
处理特征图输出的边界框的尺寸,然后乘以 yolo
中指定的 anchor
的尺寸。
Objectness Score
Objectness Score
表示目标在边界框内的概率。对于红色和相邻单元格,它应该接近 1,而对于角落的网格,它几乎是 0。
objectness score
也通过 sigmoid
传递,因为它被解释为概率(在 0 到 1 之间)。
class score
表示检测到的目标属于特定类别(狗、猫、香蕉、汽车等)的概率,用 sigmoid
处理 class score
。
检测框处理
利用类别置信度的阈值处理
根据边界框的 objectness score
过滤边界框,objectness score
低于阈值的边界框会被忽略。
NMS
避免多个边界框检测到同一个目标。
预测
输出的预测结果中,每张图像有 8 个属性,即该图像的索引、4 个角坐标、objectness score
、置信度最大的类和该类的索引。
图像索引对应哪张图像,4 个角坐标对应检测框位置,类别索引对应检测框在该图像中检测出的类别。
创新点和改进
one-stage
,同时进行边界框回归和目标分类,加快训练速度YOLO
将图像划分为S x S
网格,而不是用RPN
网络提取regional proposal
,加快了检测速度YOLO9000
引入anchor
,提高了检测的召回率YOLOv3
使用特征金字塔网络结构,实现多尺度检测,提升对不同大小图像的检测准确度- 因为一个框内的目标可能属于多个类别,分类预测不使用
softmax
,而是使用多个独立的logistic
分类器,损失函数采二元交叉熵损失 - 更好的基础分类网络(类
ResNet
)和分类器
版权声明:本文为CSDN博主「ManiacLook」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ManiacLook/article/details/121632505
暂无评论