MXNet在目标检测提供了许多API供用户调用,灵活使用这些函数能大大降低编程难度,其中跟锚框有关的三个函数MultiBoxDetection、MultiBoxPrior、MultiBoxTarget
,我也探索了一段时间,下面总结一下这三个函数的用法吧,也方便自己查阅
该函数是用来在一张给定的特征图中,对于给定的大小比例和宽高比例,生成不同锚框,函数原型为mxnet.ndarray.contrib.MultiBoxPrior(data=None, sizes=_Null, ratios=_Null, clip=_Null, steps=_Null, offsets=_Null, out=None, name=None, **kwargs)
下面总结一下一些常用参数的作用。
参数 | 作用说明 |
---|---|
data | 输入的特征图,一般形状为(批量大小,通道数、宽、高) |
sizes | 要生成的锚框的大小比例列表,比如 sizes=[0.2,0.5,0.75] |
ratios | 要生成的锚框的宽高比例列表,比如 ratios=[0.5,1,2] |
clip | boolean 类型变量,设置是否要剪切超出边界的锚框,默认为0 |
输出:生成的锚框,形状为 (1,锚框总数,4) ,其中最后一维为生成的锚框的四个坐标,均除以了宽和高进行了归一化,锚框总数 = 宽*高*每个像素锚框个数,各个批量之间共享这些锚框。
该函数是用来对生成锚框进行标记,函数原型为MultiBoxTarget(anchor=None, label=None, cls_pred=None, overlap_threshold=_Null, ignore_label=_Null, negative_mining_ratio=_Null, negative_mining_thresh=_Null, minimum_negative_samples=_Null, variances=_Null, out=None, name=None, **kwargs)
下面总结一下一些常用参数的作用。
参数 | 作用说明 |
---|---|
anchor | 输入的锚框,一般是通过MultiBoxPrior生成,形状为(1,锚框总数,4) |
label | 训练集的真实标签,一般形状为(批量大小,每张图片最多的真实锚框数,5),第二维中,如果给定图片没有这么多锚框,将会用-1填充空白,最后一维中的元素为 类别标签+四个坐标值(归一化) |
cls_pred | 对于第一个输入参数,即输入的锚框,预测的类别分数,形状一般为(批量大小,预测的总类别数+1,锚框总数),这个输入的作用是为了负采样(negative_mining),如果不设置负采样,那么这个输入并不影响输出 |
negative_mining_ratio | 设置负采样的比例大小 |
negative_mining_thresh | 设置负采样的阈值 |
minimum_negative_samples | 最少的负采样样本 |
其中输出为一个列表,有三个元素,分别为bbox_offset、bbox_mask、cls_labels,注意以上三个输出均为二维矩阵
输出 | 说明 |
---|---|
bbox_offset | 每个锚框的标注偏移量,形状为(批量大小,锚框总数*4) |
bbox_mask | 每个锚框的掩码,这些掩码一一对应上面的偏移量,由于我们不关心背景的偏移量,所以负类锚框坐标对应的掩码均为0,正类锚框坐标对应的掩码均为1,形状为(批量大小,锚框总数*4) |
cls_labels | 每个锚框的标注类别,其中0表示为背景,当设置了负采样后,标签为-1表示负采样中被丢弃,计算损失函数时应丢弃该样本,输出形状为 (批量大小,锚框总数) |
该函数是用来对预测完毕的锚框进行例如加上偏移量,非极大值抑制等处理,函数原型为MultiBoxDetection(cls_prob=None, loc_pred=None, anchor=None, clip=_Null, threshold=_Null, background_id=_Null, nms_threshold=_Null, force_suppress=_Null, variances=_Null, nms_topk=_Null, out=None, name=None, **kwargs)
下面总结一下一些常用参数的作用。
参数 | 说明 |
---|---|
cls_prob | 预测的各个锚框的概率,一般要经过 s o f t m a x softmax softmax运算,形状为(批量大小,预测总类别数+1,锚框总数) |
loc_pred | 预测的各个锚框的偏移量,一般形状为 (批量大小,锚框总数*4) |
anchor | 生成的默认锚框,一般形状为(1,锚框总数,4) |
clip | 是否要剪切超出边界的锚框,默认为1 |
threshold | 正类预测的阈值,当对某一个锚框预测的类别置信度大于设置的阈值时,会被当做正类锚框处理,否则视为负类 |
background_id | 背景的类别id,默认为0 |
nms_threshold | 非极大值抑制的阈值 |
输出为经过处理之后的锚框,形状为(批量大小,锚框总数,6)其中最后一维组成为,类别标签+置信度+边界框四个坐标(归一化处理),其中类别标签为-1表示为背景或者在NMS中被移除