使用trainFastRCNNObjectDetector出错

4次浏览(最近30天)
azarm
azarm 2017年8月28日
评论道: 安南2020年11月4日
嗨,大家好,我尝试使用trainFastRCNNObjectDetector函数与自定义区域建议。——>从1064张训练图像中提取区域建议…完成但我有以下错误:
使用vision.internal.cn.fastrcn.regionreader时出现错误(第146行),无法找到任何区域建议用作正训练样本或负训练样本。
在vision.internal.cnn.fastrcnn.TrainingRegionDispatcher(第63行)中出现错误。有什么建议如何避免这种情况吗?谢谢你!

接受的答案

Birju帕特尔
Birju帕特尔 2017年8月28日
很可能您的自定义区域提议方法产生的roi太小而无法处理。我们目前可以处理的最小大小受限于网络在最后一个最大池化层之前进行的下采样量。(请注意,我们将在未来的版本中删除这个限制)。
默认情况下,alexnet的最小大小是105x105。了解您正在使用哪个网络进行训练将有助于确定这是否是错误的原因。
如果您发现这是原因,那么您可以扩展区域建议方法返回的小roi,使它们高于最小值。或者,你也可以调整你的训练图像的大小,使你的对象更大。但是必须注意不要让图像太大,因为这会增加处理数据所需的GPU内存。如果发生这种情况,您可以尝试调整图像的大小,然后裁剪周围的对象。
或者你可以通过减少最终最大池化层的输出大小来改变网络本身。例如,使用alexnet,你可以将最后一个最大池化层的池大小改为5,这样输出的特征映射就会更小。这将把最小大小更改为88 * 88:
Net = alexnet;
layers = net.Layers;
减小最终最大池化层的输出大小,将池大小增加到5。
将最小大小更改为88 * 88。
layers(16) = maxPooling2dLayer(5,“步”2);
%重置全连接层,因为大小改变。
注意:这可能不是理想的图层集,可能需要一些实验
%来计算出最大池化后的最佳层数
%层。
layers(17) = fullyConnectedLayer(4096);
layers(20) = fullyConnectedLayer(4096);
layers(23) = fullyConnectedLayer(2)
layers(end) = classificationLayer()
要找出使用哪种方法,可能需要对最终的最大池化层之后的层进行一些实验。
导致此错误的另一个原因可能是PositiveOverlapRange和NegativeOverlapRange被设置为更难找到与自定义区域建议重叠的训练样本的值。例如,较大的正重叠值可能使您的任何区域建议都不可能与地面真相重叠。
3评论
安南
安南 2020年11月4日
@Birju帕特尔
“如果你发现这是原因,那么你可以扩展你的区域建议方法返回的小roi,使它们高于最小值。”
我们该怎么做呢?
我已经在训练表中尝试了更大的roi,将我的数据采样到一半,结果一无所获……错误仍然存在。

登录评论。

更多答案(2)

(音译)
(音译) 2018年12月22日
我按照你提供的方法修改了alexnet网络。快速RCNN训练的前三步还可以,第四步出现错误。
使用vision.internal.cn.fastrcn.regionreader时出现错误(第146行),无法找到任何区域建议用作正训练样本或负训练样本。
Net = alexnet;
layers = net.Layers;
减小最终最大池化层的输出大小,将池大小增加到5。
将最小大小更改为88 * 88。
layers(16) = maxPooling2dLayer(7,“步”2);
layers(17) = fullyConnectedLayer(4096);
layers(20) = fullyConnectedLayer(4096);
layers(23) = fullyConnectedLayer(2)
layers(end) = classificationLayer()
PositiveOverlapRange和NegativeOverlapRange是默认值

安南
安南 2020年11月4日
你好!
你想办法解决这个问题了吗?我也面临着同样的问题……
谢谢! !

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!