yolov8后处理——DFL卷积如何卷

        以 512*288 输入为例,网络输出大小 1*64*3024,其中 1 为 batch size,64为超参数reg_max=16 和 bbox 个数 4 的乘积,3024=16*9+32*18+64*36(其中512/32=16,288/32=9)

        首先 DFL 卷积是和 0-15 卷积,下面为我的中间打印结果,其中 weight 是 0-15,共 16 个数。网络输出 x 经过一系列变换 view2 变成了 1*16*4*3024,接下来 softmax 是对第一维的 16 个数进行 softmax,也就是每 a*16*b*c 的16个数进行 softmax,结果维数不变。接下来就是卷积了,还是这 16 个数和 weight(0-15)卷积,变1个值了,所以变成了 1*1*4*3024,把第一维去掉,就是1*4*3024 了,4 就是 bbox 的四个值(相对值,后面会处理)。

yolov8后处理——DFL卷积如何卷_第1张图片

 yolov8后处理——DFL卷积如何卷_第2张图片

       

        看一下这四个值是怎么转换到真实坐标的,因为是 anchor-free 的,所以用的是 grid 中心点。 anchors 在后面 dist2bbox 用到了,用来加减上面卷积后的值,计算最终结果,所以我打印了 anchors 看。果真,这 3024 个值是三个输出的由大到小排列,以 anchor3 为例,输出 16*9,x、y是 0.5-8.5 和 0.5-15.5 的组合。其它处理就和yolov5一样(除了没有obj,不需要和类别相乘之外)了,nms。

 yolov8后处理——DFL卷积如何卷_第3张图片

 yolov8后处理——DFL卷积如何卷_第4张图片

yolov8后处理——DFL卷积如何卷_第5张图片

 yolov8后处理——DFL卷积如何卷_第6张图片 

你可能感兴趣的:(深度学习)