我试图使用来自https://github.com/tensorflow/models/tree/master/research/object_detection的object_detect_api的更快的rcnn模型,从大图像(〜2040,1536像素)中检测一些非常小的物体(〜25x25像素)
我对以下配置参数感到非常困惑(我已经阅读了原始文件,并尝试对其进行修改和测试):
first_stage_anchor_generator {
grid_anchor_generator {
scales: [0.25, 0.5, 1.0, 2.0]
aspect_ratios: [0.5, 1.0, 2.0]
height_stride: 16
width_stride: 16
}
}
对于这个领域我还是很陌生的,如果有人可以向我解释一下这些参数,那将非常感激。
我的问题是我应该如何调整以上(或其他)参数,以适应我有小固定大小物体要在大图像中检测到的事实。
谢谢
答案 0 :(得分:2)
我不知道实际的答案,但我怀疑Faster RCNN在Tensorflow对象检测中的工作方式如下:
this文章说:
“锚点在Faster R-CNN中起着重要作用。锚点是一个方框。在Faster R-CNN的默认配置中,图像位置上有9
锚点。下图显示了9个锚点:尺寸为(320, 320)
的图像的位置(600, 800)
。”
作者给出了一个显示框重叠的图像,这些框是根据“ RCNN”模型的“ CNN”部分提出的包含对象的区域,其次是“ RCNN”的“ R”部分区域提案的模型。为此,在CNN旁边训练了另一个神经网络,以找出最合适的盒子。在很多“建议”中,对象可能基于所有框,但是我们仍然不知道它在哪里。
此“区域建议”神经网络的工作是找到正确的区域,并根据您提供的带有图像中每个对象坐标的标签进行训练。
在查看this文件时,我注意到:
line 174: heights = scales / ratio_sqrts * base_anchor_size[0]
line 175: widths = scales * ratio_sqrts * base_anchor_size[[1]]
这似乎是在配置文件中找到配置的最终目标(生成具有已知宽度和高度的滑动窗口列表)。而base_anchor_size被创建为默认[256, 256]
。在注释的代码作者中写道:
”例如,设置scales=[.1, .2, .2]
和aspect ratios = [2,2,1/2]
意味着我们创建了三个框:一个带有比例
.1
,长宽比2
,一个比例为.2
,一个比例为2
和一个比例为.2
和宽高比1/2
。每个框之前都乘以“ base_anchor_size
”
将其放在各自的中心上方。”
可以深入了解如何创建这些框,该代码似乎基于scales =[stuff]
和aspect_ratios = [stuff]
参数创建了一个框列表,这些参数将用于在图像上滑动。比例非常简单,是256
中256
乘以20
的默认方形框应使用的比例,并且长宽比是将原始方形框更改为更接近您希望遇到的对象的(缩放)形状。
意味着,要最佳地配置比例和纵横比,您应该在图像中找到对象的“典型”尺寸,无论它是ex(30
5
,10
256
等),然后找出应该缩放256
和16
方格的默认值以使其最佳匹配,然后找到对象的“典型”长宽比(根据google的宽高比是:图像或屏幕的宽度与高度的比例。)并将其设置为您的宽高比参数。
注意:似乎比例文件中的元素数量和配置文件中的Aspect_ratios列表中的元素数量应该相同,但我不确定。
我也不知道如何找到最佳步幅,但是如果您的对象比16
小public String[] testArray = new String[5]; // array of size 5 in memory
像素,则可以通过将比例尺和纵横比设置为所创建的滑动窗口可能只是完全跳过您的对象。
答案 1 :(得分:1)
我认为提案锚仅针对Faster RCNN的模型类型生成。在此file中,您指定了可以为您在config中提到的行中的锚生成设置哪些参数。
我尝试设置 base_anchor_size ,但是失败了。尽管此FasterRCNNTutorial tutorial提到:
[...]您还需要在.config文件中配置锚点大小和纵横比。基本锚大小为255,255。
锚定比率将x尺寸乘以y尺寸,因此,如果纵横比为0.5,则255x255锚定将变为128x510。应用列表中的每个纵横比,然后将结果乘以比例。因此,第一步是将图像调整为训练/测试尺寸,然后手动检查您期望的最小和最大对象,以及最大的长宽比。设置配置文件的值将在基本锚点大小通过宽高比调整并乘以比例时覆盖这些情况。
我认为这很简单。我也使用了这种“解决方法”。