Skip to content

Latest commit

 

History

History
34 lines (26 loc) · 1.25 KB

中间层输出.md

File metadata and controls

34 lines (26 loc) · 1.25 KB

##中间层输出思路

  1. 将训练得到的网络参数进行保存
  2. 重新搭建网络结构,将中间层作为输出层,并加载训练好的网络参数
  3. 输入样本进行计算,将输出结果(Ndarray类型)转化为Mat类型

##中间层输出问题总结

  1. 将float类型批量存入Mat时,需要在mat.ptr(0)中加入<float>如下所示

    float* ptr_mat = out_mat.ptr<float>(0); 在用imwrite之前需要执行 cv::normalize(mat, mat, 0, 255, CV_MINMAX);

  2. 如果算法改变后并没有明显变化,可以尝试清理解决方案

  3. vector<Mat>的使用 需要注意,vector<Mat>使用push_back时push进去的是Mat的地址,而不是值,如果需要push值进去,则需要如下方法

vector<cv::Mat> inter_lay(out_shape[1]);
			for (int i = 0; i < out_shape[1]; i++)
			{
			cv::Mat out_mat = cv::Mat::zeros(out_shape[2], out_shape[3], CV_32FC1);
			float* ptr_mat = out_mat.ptr<float>(0);
			for (size_t j = 0; j < out_shape[2] * out_shape[3]; j++)
			{
				ptr_mat[j] = dptr_out[j + i* out_shape[2] * out_shape[3]];
			}
			cv::normalize(out_mat, out_mat, 0, 255, CV_MINMAX);
			out_mat.copyTo(inter_lay[i]);
           //outshape[1]表示vector大小,outshape[2]和3分别表示Mat的长宽像素值