5月2日
ncnn是腾讯开源的移动端跨平台神经网络推理框架。这两年不断加入对vulkan等的支持,略显复杂,用QT编译器来相对简单。
相比于github上的原始源码,修改了一些头文件错误。Ncnn在QT中使用(windows)要注意其中的platform.h中mutex引用的头文件不对,这点需要修改。此外,有一部分.in文件必须cmake之后生成.h文件才有效,需要注意把生成的.h文件也加入到QT源文件中,在windows的操作流程。
先测试一下QT编译ncnn是否成功,用官方最简单的squeezenet例子来试一试:
ncnn::Net squeezenet;
std::vector<float> cls_scores;
squeezenet.load_param("C:/Users/Klein/OneDrive/QT/MTCNN/android/assets/squeezenet_v1.1.param");
squeezenet.load_model("C:/Users/Klein/OneDrive/QT/MTCNN/android/assets/squeezenet_v1.1.bin");
QImage image = QImage("C:/Users/Klein/Pictures/timg2.jpg");
ncnn::Mat in = ncnn::Mat::from_pixels_resize(image.bits(), ncnn::Mat::PIXEL_RGBA2RGB, image.width(), image.height(), 227, 227);
const float mean_vals[3] = {104.f, 117.f, 123.f};
in.substract_mean_normalize(mean_vals, 0);
ncnn::Extractor ex = squeezenet.create_extractor();
ex.input("data", in);
ncnn::Mat out;
ex.extract("prob", out);
ncnn处理完成,我们现在要进行人脸识别和关键点检测。
人脸相关的模型,我们需要按照pytorch->onnx->ncnn的方式得到最终的目标模型。