主要处理部分:
void style(char * savefilename,Transformation_tf模型 & sr)
{
//载入模型已经放到main中去了
int wid=jpg.getwidth();
int hei=jpg.getheight();
cout<<"输入图像宽度:"<<wid<<endl;
cout<<" 高度:"<<hei<<endl;
//
卷积层 rgb(wid,hei,3);//即rgb通道
rgb.data=new float[wid * hei *3];
//jpg转换为RGB卷积层
jpg2RGB(&jpg,&rgb);
RGB2BGR(rgb) ;
//load_mat2卷积层 ("image.txt",&rgb); //载入tf导出的数据
//伸缩零头:使宽,高保证为4的倍数而设,即 宽(高)除4的余数 + x0(y0) = 4
int x0=0, y0=0;
//加边(四边各加上10个像数宽的边)
伸缩边(rgb, x0, y0);
wid=rgb.width;
hei=rgb.height;
//输入层结果
卷积层 convfea1(wid,hei,32);
convfea1.data=new float[wid * hei * 32 ];
// 输入层
层数据 * 层=sr.输入层;
cout<<"生成32个特征图..."<<endl;
vl_nnconv(&rgb,&convfea1,层 ,1,1,4,4,4,4);
vl_Norm(&convfea1);
vl_nnrelu(&convfea1);//激励函数Prelu
//load_mat2卷积层 ("conv1.txt",&convfea1); //载入tf导出的数据
//save_卷积层2jpg(&convfea1,"con1");
// 下采样层1
wid=wid/2;hei=hei/2;
卷积层 convfea2(wid,hei,64);
convfea2.data=new float[wid * hei * 64 ];
层=sr.下采样层1;
cout<<"扩维成64个特征图..."<<endl;
vl_nnconv(&convfea1,&convfea2,层 ,2,2,1,1,1,1);
vl_Norm(&convfea2);
vl_nnrelu(&convfea2);//激励函数Prelu
//load_mat2卷积层 ("conv2.txt",&convfea2); //载入tf导出的数据
//save_卷积层2jpg(&convfea2,"con2");
// 下采样层2
wid=wid/2;hei=hei/2;
卷积层 convfea3(wid,hei,128);
convfea3.data=new float[wid * hei * 128 ];
层=sr.下采样层2;
cout<<"扩维成128个特征图..."<<endl;
vl_nnconv(&convfea2,&convfea3,层 ,2,2,1,1,1,1);
vl_Norm(&convfea3);
vl_nnrelu(&convfea3);//激励函数Prelu
//load_mat2卷积层 ("conv3.txt",&convfea3); //载入tf导出的数据
//save_卷积层2jpg(&convfea3,"con3");
// 5残差层
卷积层 convfea4(wid,hei,128);
convfea4.data=new float[wid * hei * 128 ];
卷积层 convfea5(wid,hei,128);
convfea5.data=new float[wid * hei * 128 ];
卷积层 *源,*目标,*源备份;
源=&convfea3;
目标=&convfea4;
源备份=&convfea5;
残差块 * 残差块0=sr.块;
cout<<"5个残差块... 包括 2 组卷积"<<endl;
for (int k = 0;k<sr.残差块数量;k++)
{
cout<<"\r"<<k;
//if(k==1)
// load_mat2卷积层 ("res1.txt",源);
// //load_mat2卷积层 ("res2.txt",源);
// //load_mat2卷积层 ("res3.txt",源);
// //load_mat2卷积层 ("res4.txt",源);
//if(k==2)
// save_卷积层2txt ("res2-me.txt",源); //保存
//
//备份
卷积层复制(源,源备份);
层=残差块0->卷积层;
vl_nnconv(源,目标,层 ,1,1,1,1,1,1);
vl_nnrelu(目标);
//save_卷积层2jpg(目标,"cc0");
//像素扩展(*目标);
层++;
vl_nnconv(目标,源,层 ,1,1,1,1,1,1);
//save_卷积层2jpg(目标,"cc2");
// //求和
卷积层相加(源备份,源);
//save_卷积层2jpg(源,"a0");
//save_卷积层2txt ("a0.txt",源); //保存
//save_卷积层2txt ("a1.txt",源备份); //保存
残差块0++;//到下残差块
}
cout<<endl;
del卷积层(*源备份);
del卷积层(*目标);
//load_mat2卷积层 ("res5.txt",源); //载入tf保存
//save_卷积层2jpg(源,"residual");
层=sr.上采样层1;
cout<<"减维成64个特征图..."<<endl;
resize_conv2d(*源,convfea2,层);
del卷积层(*源);
vl_Norm(&convfea2);
vl_nnrelu(&convfea2);//激励函数Prelu
//load_mat2卷积层 ("deconv1.txt",&convfea2); //载入tf保存
//save_卷积层2jpg(&convfea2,"cot1");
层=sr.上采样层2;
cout<<"减维成32个特征图..."<<endl;
resize_conv2d(convfea2,convfea1,层);
del卷积层(convfea2);
vl_Norm(&convfea1);
vl_nnrelu(&convfea1);//激励函数Prelu
//load_mat2卷积层 ("deconv2.txt",&convfea1); //载入tf保存
//save_卷积层2jpg(&convfea1,"cot2");
层=sr.输出层;
cout<<"减维成3个通道图..."<<endl;
vl_nnconv(&convfea1,&rgb,层 ,1,1,4,4,4,4);
del卷积层(convfea1);
vl_Norm(&rgb);
vl_tanh(&rgb);//激励函数Prelu
//load_mat2卷积层 ("deconv3.txt",&rgb); //保存
//save_卷积层2txt ("rgb.txt",&rgb) ;
save_卷积层2jpg(&rgb,"out");
cout<<"图像转换成jpg格式... "<<endl;
//减边(还原前面的加边)
伸缩边(rgb, x0, y0,false);
RGB2BGR(rgb) ;
RGB2jpg(&rgb,&jpg);
// 保存转换后的图像
savejpg(&jpg,savefilename);
}
其中一些新增的函数到后面详细说明
这里完成