我正在将yolo v3模型与keras一起使用,并且该网络使我成为具有以下形状的输出容器:
[(1, 13, 13, 255), (1, 26, 26, 255), (1, 52, 52, 255)]
所以我找到了这个link
然后,我了解了3个容器中的每个容器的值255,也了解了3个容器,因为存在3种不同的图像缩放比例来创建边界框。
但是我不明白为什么在输出向量中第一个缩放比例有13 * 13个列表,然后第二个却有26 * 26个列表,最后一个有52 * 52。
我无法找到一些很好的解释,所以我不能使用此网络。 如果有人知道我可以在哪里找到有关输出尺寸的信息,那将非常有用。
编辑
是因为如果我将图像按13个部分切成13个部分,考虑到每个部分都是对象的中心,我只能检测13 * 13个对象?
答案 0 :(得分:1)
YOLOv3具有3个输出层。此输出层以3个不同的比例预测盒子坐标。 YOLOv3还以将图像划分为单元格的方式进行操作。根据您看哪个输出层,单元数是不同的。
因此输出数量正确,有3个列表(由于三个输出层)。您必须考虑YOLOv3是完全卷积的,这意味着输出层是宽x高x滤镜。查看第一个形状(1、13、13、255)。您了解255代表边界框的坐标,类和置信度,1代表批处理大小。您现在无法理解输出是conv2d的,所以有问题的部分为13 x13。13x 13意味着您的输入图像将被划分为网格,并且将为网格的每个单元格预测边界框坐标,类概率等。第二层进行操作在不同的比例下,您的图像将被划分为26 x 26的网格,第三个图像会将您的图像划分为52 x 52的网格,并且该网格上的每个单元格都将被预测为边界框坐标。
为什么有用?从实际的角度来看,想象一下有多少只小鸽子聚集在某个地方。当您只有一个13 x 13输出层时,所有这些鸽子都可以出现在一个网格中,因此您不会一一检测到它们。但是,如果将图像划分为52 x 52的网格,则单元格会变小,并且检测到所有单元格的可能性更高。检测小物件是YOLOv2的投诉,所以这是响应。
从更多的机器学习角度来看。这是所谓的要素金字塔的实现。这个概念被Retina网络架构所推广。
您可以处理输入图像,进行卷积,最大池合并等操作,直到将某个点用作输出层的输入(在YOLOv3情况下为13 x 13)。比起用作13 x 13层输入并与相应大小的特征图串联的高级特征图(此特征图将取自网络的早期部分)而言。因此,现在您将使用作为输入的输出层升级要素,这些要素沿网络一直进行了预处理,而要素是先前计算的。这样可以提高准确性。对于YOLOv3,您再一次将这个升级的功能与以前的功能串联在一起,将它们升级,连接并用作第三输出层的输入。