- CSPNet
- SPPNet
- 网络进行前向传播,每一层输出的结果都保存在
layer.output
属性中 - 遍历所有
yolo
层,获取符合条件的box。
具体做法为:依次遍历每个cell、每个cell上的设置的每个anchor,保留confidence>thresh
的box,其余过滤掉。对于保留下来的box,将每个类别的prob进行如下更新操作:prob = prob*confidence > thresh ? prob*confidence : 0
- 对过滤后的box进行
nms
操作,nms逐类别进行,具体流程如下:- 逐类别遍历
- 对当前类别按所有box的类别置信度从大到小排序
- 选出置信度最高的box
- 将剩余box与选出的box逐一进行IoU计算,若IoU>nms_thresh,则过滤掉。过滤方法为将box当前类别的prob置为0
- 最终检测结果输出
- 依次遍历每个box
- 依次遍历box的每个类别,若类别的prob大于0,则输出这个box
- 一个box可能被输出多次,因为多个类别的prob有可能都满足条件
- backbone: CSPNet的设计思想 + Residual block,v4-tiny中对[route]层进行了增强,对特征图进行分组输出
- spp: yolov4中包含3个检测分支,spp模块输出的特征图分别融入了这3个分支
- PAN: yolov4中包含两个top-down分支、两个bottom-up分支
- 位于
parser.c
->save_weights_upto()