YOLO3改进有:
调整了网络结构 |
利用多尺度特征进行对象检测 |
对象分类用Logistic取代了softmax |
Yolo_v3网路就是使用了darknet-53的前面的52层,大量使用残差的跳层连接。
它借鉴了残差网络residual network的做法,在一些层之间设置了快捷链路。
在YOLO3更进一步采用了3个不同尺度的特征图来进行对象检测。
yolov3的特点同样:
yolov3同样采用了划分的方法来进行预测,总共使用了9个anchor box。 |
使用用"leaky ReLU"作为激活函数 |
使用一个loss function训练 |
YOLOV3的损失函数
xy_loss = object_mask * box_loss_scale * K.binary_crossentropy(raw_true_xy, raw_pred[...,0:2], from_logits=True)
wh_loss = object_mask * box_loss_scale * 0.5 * K.square(raw_true_wh-raw_pred[...,2:4])
confidence_loss = object_mask * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True)+ \
(1-object_mask) * K.binary_crossentropy(object_mask, raw_pred[...,4:5], from_logits=True) * ignore_mask
class_loss = object_mask * K.binary_crossentropy(true_class_probs, raw_pred[...,5:], from_logits=True)
xy_loss = K.sum(xy_loss) / mf
wh_loss = K.sum(wh_loss) / mf
confidence_loss = K.sum(confidence_loss) / mf
class_loss = K.sum(class_loss) / mf
loss += xy_loss + wh_loss + confidence_loss + class_loss
if print_loss:
loss = tf.Print(loss, [loss, xy_loss, wh_loss, confidence_loss, class_loss, K.sum(ignore_mask)], message='loss: ')
return loss
下面的看的简书的讲解:
对象分类softmax改成logistic
预测对象类别时不使用softmax,改成使用logistic的输出进行预测。这样能够支持多标签对象(比如一个人有Woman 和 Person两个标签)。
输入映射到输出