我试图使用来自object_detect_api的更快的rcnn模型从大图像(~ 2040,1536像素)中检测到一些非常小的物体(~25x25像素)。
我对以下配置参数感到非常困惑(我已经阅读了proto文件并尝试修改它们并进行测试):
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
}
}
我对这个领域很陌生,如果有人能向我解释一下这些参数,我会非常感激的。
我的问题是,应该如何调整上述(或其他)参数,以适应这样一个事实,即我在大图像中有非常小的固定大小的对象要检测。
谢谢
发布于 2019-02-09 04:30:10
我不知道实际答案,但我怀疑RCNN在Tensorflow对象检测中的工作速度是这样的:
这的文章说:“锚在速度更快的role中起着重要的作用。锚是一个盒子。在速度更快的role的默认配置中,在图像的一个位置有9
锚。下图显示了图像的(320, 320)
位置上的9个锚,大小为(600, 800)
。”
并给出了基于"RCNN“模型的"CNN”部分所包含对象的框重叠图像,其次是"RCNN“模型的"R”部分,即区域提案。为了做到这一点,还有另外一个神经网络和CNN一起训练,以找出最适合的盒子。有很多“建议”,其中一个对象可以基于所有的框,但我们仍然不知道它在哪里。
这个“区域建议”神经网络的工作是找到正确的区域,它是根据你提供的标签和图像中每个物体的坐标来训练的。
在查看这文件时,我注意到:
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
的默认方框之前,应该缩放它的大小,而长宽比是将原始方框更改为更接近预期对象(缩放)形状的矩形的东西。
这意味着,要优化配置比例和高宽比,您应该在图像中找到对象的“典型”大小--不管它是ex(20
by 30
,5
by 10
,等等),并计算出256
by 256
平方框的默认大小应该在多大程度上适合这一点,然后找到对象的“典型”纵横比(根据google的一种长宽比是:图像或屏幕的宽度与高度的比率)。并将这些设置为您的高宽比参数。
注意:似乎配置文件中的缩放元素和aspect_ratios列表的数量应该是相同的,但我不确定。
另外,我也不知道如何找到最优的步幅,但是如果您的对象比16
小( 16
像素),那么通过设置缩放和纵横比来创建的滑动窗口可能会完全跳过对象。
发布于 2018-09-19 14:23:58
正如我所相信的那样,建议锚只为速度更快的RCNN模型类型生成。在这个文件中,您已经指定了在您从配置中提到的行中为锚生成设置哪些参数。
我尝试设置base_anchor_size,但是失败了。尽管这个FasterRCNNTutorial教程提到:
..。您还需要配置.config文件中的锚点大小和高宽比。基础锚大小为255 255。 锚比将乘以x维并除以y维数,因此,如果长径比为0.5,则255x255锚将变为128x510。应用列表中的每个纵横比,然后将结果乘以比例。因此,第一步是将图像调整到培训/测试的大小,然后手动检查您期望的最小和最大的对象是什么,以及最极端的纵横比是什么。设置配置文件的值,这将涵盖这些情况时,基本锚大小是调整的纵横比,并乘以规模。
我觉得很简单。我还用了这个“解决办法”。
https://stackoverflow.com/questions/52047638
复制相似问题