当我阅读YOLO的论文时,它说它用K-means制作锚盒。然而,当我看到实现这一点的代码时,它似乎修复了锚点大小,如下所示。我希望你描述一下它的确切含义,或者指出我对此的误解。
谢谢,并问候
[yolo]
mask = 6,7,8
***anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326***
锚点就像一个单元格的默认边界框。它由每个锚的宽度和高度组成。
anchors = anchor1_width, anchor1_height, anchor2_width, anchor2_height, ..., anchorN_width, anchorN_height
如果您正在训练yolov3,则可以使用此代码生成自己的锚点https://github.com/pjreddie/darknet/issues/597#issuecomment-377370922
对于yolov2https://github.com/AlexeyAB/darknet/blob/master/scripts/gen_anchors.py
生成自己的锚点后,用.cfg文件中的默认锚点替换
如其他答案所述,cfg文件中的锚框值只是初始值,稍后它将被调整为最接近的预测对象。您可以使用其他答案中所述的K-means生成自己的锚框。
重要的是,初始值将被调整大小。请参阅AlexeyAB的解释。https://github.com/pjreddie/darknet/issues/568
锚是初始尺寸(宽度、高度(,其中一些(最接近到对象大小(将被调整到对象大小-使用神经网络的输出(最终特征图(:
darknet/src/yolo_layer.c Lines 88 to 89 in 6f6e475 b.w = exp(x[index + 2*stride]) * biases[2*n] / w; b.h = exp(x[index + 3*stride]) * biases[2*n+1] / h;
x[...]
-神经网络的输出
biases[...]
-锚b.w和b.h结果将显示的有界框的宽度和高度在结果图像上
因此,网络不应该预测对象的最终大小,但是应仅将最近锚的大小调整为对象
在Yolo v3中,锚点(宽度、高度(是图像上对象的大小其大小调整为网络大小(cfg文件中的width=和height=(。
在Yolo v2中,锚(宽度、高度(-是相对于最终的功能图(默认情况下比Yolo v3小32倍cfg文件(。