0、在windows下有两种仿真方式,第1种是在VS2015或更高版本下进行,第2种是在海思开发的Ruyistudio进行仿真。
1、在VS2015或更高版本下进行仿真:
参考:https://blog.csdn.net/avideointerfaces/article/details/90182987
工程名为simulator_sample_vc14.sln,找不到的话用everything.exe搜索,双击用VS2017打开。
前两个是功能性仿真,后两个是指令性仿真。在功能性或指令性仿真内部又分为使用opencv库和不使用opencv库两种类型。它们的最终结果应该是一致的,但功能性验证显然速度要快很多(我仿真起来真没看出多大的区别)。四个程序直接就能够运行成功,运行结果如下,第一个是功能性仿真的输出,第二个是指令性仿真的输出:
如果你想要迁移到自己的模型和数据的话,则需要修改里面的参数:
(1)更改得分阈值
(2)更改类别阈值等,如果你使用的是608大小的图,还需要修改416->608, 13->19, 26->38, 52->76
(3)如果使用608大小的图,还需要修改anchor,下图是416对应的anchor,608的anchor网上一大堆可以找找
(4)换成自己的wk模型
(5)换成自己的图片
注意这里图片是bbb...ggg...rrr...排列格式的,需要自己去生成,生成代码见为:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
#include <fstream>
#include <cstdio>
using namespace std;
using namespace cv;
int main()
{
int W = 416, H = 416, C = 3;
string inPath = R"(D:\soft\Hi3559A\HiSVP_PC_V1.1.2.0\software\data\detection\images\ref_yolov3\staff.jpg)";
Mat pic = imread(inPath);
resize(pic, pic, Size(416, 416));
int64 t1 = getTickCount();
int step = pic.step;
string outPath = R"(D:\soft\Hi3559A\HiSVP_PC_V1.1.2.0\software\sample_simulator\GetBGR\staff.bgr)";
remove(outPath.c_str());
ofstream outfile(outPath, std::ios::out | std::ios::binary | ios::app);
for (int k = 0; k < C; k++) {
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
outfile.write((char*)&pic.data[i*step + j * C + k], sizeof(uchar));
}
}
}
int64 t2 = getTickCount();
cout << "cost: " << (t2 - t1) * 1000 / getTickFrequency() << "ms" << endl;
outfile.close();
return 0;
}
最后再贴一下我运行自己数据的结果:
画出来:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
using namespace cv;
int main() {
//string path = R"(D:\soft\Hi3559A\HiSVP_PC_V1.1.2.0\software\data\detection\images\test\dog_bike_car.jpg)";
string path = R"(D:\soft\Hi3559A\HiSVP_PC_V1.1.2.0\software\data\detection\images\ref_yolov3\staff.jpg)";
Mat bgr = imread(path);
Mat a416;
resize(bgr, a416, Size(416, 416));
//rectangle(a416, Point(64.87,166.71), Point(174.98 , 383.54), Scalar(0, 0, 255), 2);
//rectangle(a416, Point(60.40, 92.48), Point(311.95, 311.59), Scalar(0, 0, 255), 2);
//rectangle(a416, Point(255.03, 59.72), Point(376.12, 121.87), Scalar(0, 0, 255), 2);
rectangle(a416, Point(220, 178), Point(253, 249), Scalar(0, 0, 255), 2);
rectangle(a416, Point(160, 178), Point(188, 235), Scalar(0, 0, 255), 2);
imshow("a416", a416);
waitKey(0);
return 0;
}
或者如果你使用了使用opencv库的仿真,则直接在.\sample_simulator\sample_func_vc14\result_SVP_SAMPLE_YOLO_V3下就生成了图片和结果的txt文件。
2、在Ruyistudio下进行仿真:
还没有进行过。。。