yolov3数据预处理--preprocess_true_boxes()

本文详细介绍了YOLOv3中预处理真实框函数preprocess_true_boxes()的工作原理,包括参数解析、处理过程及返回值结构。通过实例分析了如何将真实框转换为模型所需的格式,以及对目标尺寸和anchor匹配的理解。
摘要由CSDN通过智能技术生成

流程:数据先经过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</

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值