使用Gluon,python减小更快的RCNN数组输出的大小

问题描述 投票:3回答:1

我正在使用更快的rcnn模型来运行一些对象检测。我使用的包装器是胶粘剂,代码如下:

net = model_zoo.get_model('faster_rcnn_resnet50_v1b_coco', pretrained=True)

im_fname = utils.download('https://github.com/dmlc/web-data/blob/master/' +
                      'gluoncv/detection/biking.jpg?raw=true',
                      path='biking.jpg')
x, orig_img = data.transforms.presets.rcnn.load_test(im_fname)

box_ids, scores, bboxes = net(x)

我的问题是,有可能减小net(x)返回的数组的大小,从而有效地加快计算速度吗?

问题在于,该模型将box_ids,scores和bboxes生成为具有80000个元素的数组-仅前10个有用,其余的得分为-1。稍后我尝试使用asnumpy()将这些数组转换为numpy数组,但是,mxnet使用异步引擎,并且该函数必须等待计算结束才能执行。 80000个元素的计算需要更长的时间(5秒以上),因此我试图减小数组大小(SSD模型输出大约6000个元素,并且速度更快)。

[如果您还有其他方法来使.asnumpy()更快,也欢迎使用这些方法-基本上,一次图像传递需要5秒钟,这似乎不合理,所以我正在寻找将其减少到〜0.2s(似乎更合适吧?)

谢谢!

python conv-neural-network mxnet gluon faster-rcnn
1个回答
0
投票

您可以通过更改非最大抑制参数来减少检测到的对象的最大数量。参见post_nms。当您减少此设置时,您将获得较少的对象填充(即-1s),但也可能会丢失具有大量对象的图像中的对象。

post_nms

我认为这不会增加整体吞吐量,因为绝大多数计算是在NMS之前执行的。如果需要低延迟和高吞吐量,我建议您考虑其他体系结构。就mAP而言,net.set_nms(nms_thresh=0.5, nms_topk=50) 与FasterRCNN相比还差得远,但吞吐量要好得多(〜10倍)。

© www.soinside.com 2019 - 2024. All rights reserved.