首页 > 解决方案 > OpenCV Android 的 DNN 输入大小是否存在隐含限制?

问题描述

我训练了一个没有指定输入大小的 Caffe 模型。然后我使用 OpenCV 在 Android 上运行它。代码如下所示。

private void runEntireImageTest(Mat inY) {
    float scaleFactor = 1.0f / 255.0f;
    Scalar mean = new Scalar(0);
    Mat resized = new Mat();

    // (550, 441) runs OK. (smaller sized runs also fine)
    // (551, 441), (550, 442) crash.
    // (441, 550) crashes

    Imgproc.resize(inY, resized, new Size(550, 441));
    Mat segBlob = Dnn.blobFromImage(resized, scaleFactor, resized.size(), mean, false, false);
    mNet.setInput(segBlob);

    // if input size is above some value, crash will happen here
    Mat lastLayer = mNet.forward();
    Mat outY = lastLayer.reshape(1, 1);
}

正如评论中所写,输入大小似乎存在一些内在隐含的限制。(550, 441)运行正常,但(551, 441)会导致SIGSEGV

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x6d494bd744 in tid 19693 (myappname), pid 19661 (myappname)

我认为这不是内存问题,因为(550, 441)运行良好但(441, 550)会崩溃。这个问题的原因是什么?

标签: androidopencvcaffeforward

解决方案


推荐阅读