未定义函数或变量 'nms_mex'。 出错 nms (line 43) pick = nms_mex(double(boxes), double(overlap));

通过阅读Finding Tiny Faces文章,实际上自己都没懂。。。。
当自己运行那个例子的时候,也就是tiny_face_detector.m的时候,出现了如下错误:

未定义函数或变量 'nms_mex'。

出错 nms (line 43)
    pick = nms_mex(double(boxes), double(overlap));

出错 tiny_face_detector (line 172)
ridx = nms(bboxes(:,[1:4 end]), nms_thresh);

当时我找到那个错误的位置,就在nms.m文件下面的第42行到45行,如下:

if size(boxes, 1) < 1000000
    pick = nms_mex(double(boxes), double(overlap));
    return;
end

当时觉得,自己反正也不懂,直接注释掉了。。。然后可以运行成功的,好像对结果没什么影响。虽然自己不理解,但是总觉得随便注释语句,这方法有点歧途,然后就查了查关于这个的错误。解决方法如下:
在window中,需要把toolbox/nms文件下添加到路径,在nms文件夹下面找到nms_mex.cpp这个文件,然后在matlab中运行:

>> cd toolbox
>> cd nms
>> mex nms_mex.cpp
使用 'Microsoft Visual C++ 2015' 编译。
MEX 已成功完成。

出现上面的就表示成功了。然后再运行tiny_face_detector.m,就可以出现人脸检测带有框框的图啦。
这个就是那个结果,默认的好像是cpu运行的。
之后我又试了试GPU运行,代码别人给出来的:bboxes = tiny_face_detector('data/demo/selfie.jpg', './selfie.png', 0.5, 0.1, 1),最后那一个数字,用1代表gpu运行,0代表cpu运行。然后结果如下:

这个是gpu运行的
cpu大概需要48.7秒,gpu需要3.2秒,可以看出gpu还是比较快的。

猜你喜欢

转载自blog.csdn.net/qq_36693723/article/details/103285107