流程:数据先经过preprocess_true_boxes()函数处理,然后做一些处理输入到模型,损失函数是yolo_loss(), 网络最后一个卷积层的输出作为函数yolo_head()的输入,然后再使用函数yolo_eval()得到结果
1. preprocess_true_boxes(true_boxes, input_shape, anchors, num_classes), 这个函数得到detectors_mask(最佳预测的anchor boxes, 每一个true boxes 都对应一个anchor boxes)
参数:
true_boxes: 实际框的位置和类别,维度为boxes_num×5, boxes_num表示一张图片中有几个实际框,第二个维度[x1,y1,x2,y2,class],这里的class还是绝对数字值,比如person:0, dog:1, horse:2
input_shape: 网络的输入的图片的尺寸,一般选择为[416,416]
anchors: 通过generate_anchors.py,利用k-means聚类,统计出这个数据集中的大部分目标的宽高,也就是说我现在的训练数据集合中,大部分的检测目标的宽和高,我这里主要看的tiny_yolo, 统计出的anchors类似于下面这样的6个元素的list, 每个元素中的两个数值代表box的宽,高.anchors=[an0,an1,an2,an3,an4,an5]=[[ 81. 112.] , [114. 158.], [146. 202.], [187. 259.], [255. 349.], [486. 670.]]
问题:这里是一张图片中目标的实际尺寸,原始图片的尺寸各异,这里统计的是绝对宽高,是不是不太好?而后面对gt_box来匹配最佳anchor时,gt_box的尺寸已经调整进了416*416中的相对尺寸,再与上面的anchor来计算iou是不是不好?是不是也应该把上面的anchor的宽高也reisze到416的尺寸上,再计算iou比较好?
num_classes: 目标的类别数,根据自己的训练目标而定,比如要检测人+车,那么num_classes=2
备注:有些网络是目标类别数=实际类别数+1,把背景也算作一类,比如mobilenetv1系列等,yolo这里有个置信值,置信值其实就是反映了背景。
返回值:
y_true:维度[[batch_size, 13,13,3,5+num_classes],[batch_size, 26,26,3,5+num_classes]]
对每种尺度的特征图,比如[13,13],网络会预测3个box,每个box具有5+num_classes个预测值(x,y,w,h, p,num_classes),:即[box, score,class ],也即y_true的每个子元素的维度为N×N×[3∗(4 + 1 + num_classes)]
x,y:box的中心坐标
w,h:box的宽,高
p:每一个格子包含物体的置信度confidence score
C:格子中是某一个物体的概率probability;
具体过程:
为了方便分析本次选取了4张图片及其标注信息,模拟一个batchsize的数据,并假设图片已经resize到了input_shape=416*416(当然可以是其他尺寸),代码对输入图片尺寸不做固定. 假设并假设需要检测3类物体(人0,车1,狗2)数据具体信息如下:
------------------------------------------------------------------------------------------------------------------------------------
1.jpg 263,211,324,339,1 165,264,253,372,0 241,194,295,299,2 #3个目标
2.jpg 141,50,400,330,1 #一个检测目标
3.jpg 69,172,270,330,2 150,141,229,284,0 285,201,327,331,1 #3个检测目标
4.jpg 92,72,305,400,1 #1个检测目标-----------------------------------------------------------------------------------------------------------------------------------
step1: 构造标注数据true_boxes.维度为[batch_size,4,5]
true_boxes=[[[1.jpg信息]],
[[2.jpg信息]],
[[3.jpg信息]],
[[4.jpg信息]]]
=[[ [ 263,211,324,339,1],[ 165,264,253,372,0 ],[241,194,295,299,2</