本次笔记要整理记录的是基于Cityscapes数据集训练而成的图像分割模型model-best.net
,该模型能够对行人、汽车、红绿灯、马路、地形、天空等等二十种类别进行分类,可用于城市景观分割。
下面通过代码整理如何在OpenCV中利用dnn模块对该模型进行加载调用,并实现城市景观分割。
首先加载模型,并且设置计算后台和目标设备
string model_path = "D:\\opencv_c++\\opencv_tutorial\\data\\models\\enet\\model-best.net";
Net net = readNetFromTorch(model_path);
net.setPreferableBackend(DNN_BACKEND_OPENCV);
net.setPreferableTarget(DNN_TARGET_CPU);
然后加载测试图像,将测试图像转换成blob后传入网络的输入层,并进行前向传播。这里输出前向传播结果矩阵的四个维度数。
Mat test_image = imread("D:\\opencv_c++\\opencv_tutorial\\data\\images\\cityscapes_test.jpg");
imshow("test_image", test_image);
Mat inputBlob = blobFromImage(test_image, 0.00392, Size(1024, 512), Scalar(0, 0, 0), true, false);
net.setInput(inputBlob);
Mat prob = net.forward();
cout << prob.size[0] << endl; //输入图像数目
cout << prob.size[1] << endl