YOLO是一个端到端的目标检测算法,不须要预先提取region proposal(RCNN目标检测系列),经过一个网络就能够输出:类别,置信度,坐标位置,检测速度很快,不过,定位精度相对低些,特别是密集型小目标。算法
YOLO将图像resize到448x448做为输入,输出7x7x30,即:将图片划分为7x7,每一个单元格独立检测。这里须要注意,不是那种滑动窗口将每一个单元格都输入到网络中进行预测,这里的划分只是物体中心点位置的划分之用(划分越多越准确),物体的中心落在哪一个单元格,就由那个单元格负责预测。说完7x7咱们再说下另外一个维度30,30=(2*5=20),其中“2:每一个单元格预测数量(box数量)”,“5:(x,y,w,h,score)”,“20:模型能够预测20个种类”。后端
模型首先会将ImageNet做为训练集预训练模型,最终达到88%精度,而后使用迁移学习将预训练的模型应用到当前标注的训练集进行训练。模型输出5维信息(x,y,w,h,score),使用Leaky Relu做为激活函数,全链接层后添加Dropout层防止过拟合。在获得输出值以后,咱们须要计算每一个box与ground true的Iou值,而后经过非极大值抑制筛选box。网络
损失函数包含三部分分别是:坐标损失,置信度损失(7x7x2),类别损失(7x7x20)。
坐标损失:函数
咱们使用SSE损失函数(就是MSE损失函数的累加版本),如图所示咱们在“w,h”中加了根号,加根号的缘由是,“w,h”的损失在大框和小框之间“权重”应该不一样。由于,对应图像中较大的物体而言,box有些偏移通常并不会影响预测结果。可是对应小物体而言,一样的偏移可能会脱离预测目标。
置信度损失:学习
如图所示,损失函数分为两部分:有物体,没有物体,其中没有物体损失部分还增长了权重系数。添加权重系数的缘由是,对于一幅图像,通常而言大部份内容是不包含待检测物体的,这样会致使没有物体的计算部分贡献会大于有物体的计算部分,这会致使网络倾向于预测单元格不含有物体。所以,咱们要减小没有物体计算部分的贡献权重,好比取值为:0.5。
类别损失:spa
当有物体的中心点落在单元格中,此单元格就负责预测该物体。.net
YOLO-v3结构图以来自木盏,表示感谢,也欢迎关注他的博客。对象
DBL:指Darknetconv2d_BN_Leaky。
resn:指:n表明数字,有res1,res2, … ,res8等等,表示这个res_block里含有多少个res_unit,使用残差结构可让网络更深。
concat:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。拼接的操做和残差层add的操做是不同的,拼接会扩充张量的维度,而add只是直接相加不会致使张量维度的改变。blog
后端网络使用darknet-53:图片
咱们发现,在YOLO-v3网络中没有池化层和全链接层,那么张量尺寸的变化是经过改变卷积核步长来实现。同YOLO-v2同样,输出尺寸为输入尺寸的1/32,即:通常要求输入图像尺寸是32的倍数。
类别预测由softmax改成logistic(使用sigmoid):用于处理预测物体之间存在包含关系问题,解决多标签对象支持。好比woman和person,softmax输出:person,logistic输出二者。
使用多尺度特征预测物体:
上图是YOLO-v3在COCO数据集上使用聚类获得的9种先验框,一个表明宽度一个表明高度。在不一样的感觉野中使用不一样的先验框。若是先验框不是最佳的,即便超过预设定的阈值,也不会进行预测。logistic回归用来从9个先验框中找到最佳的那个。
YOLO好很差,咱们就以一张图做为总结吧:
祝你们2018年圣诞节快乐!