WDSR是NTIRE2018(图像恢复和增强新趋势)的现实赛道(有噪声图片)第一名,双三次上是第七名。
本来也想测试下效果,但模型在drive.google.com上下不了(PyTorch,以及keras),下了一个Tensorflow的pb模型,用Tensorflow或者OpenCV都没有打开。
先试试 EDSR 吧,这个是是NTIRE2017的第一名(哪个赛道?)。
先导出x4倍模型 edsr_baseline_x4-6b446fab.pt(《EDSR-PyTorch-master》程序自动下载的)。
流程图:
模型定义:
struct EDSR模型
{
//头
层数据 * 输入层;
//主体
int 残差块数量;//16块
残差块 * 块;
层数据 * 残差输出层;
//放大层
层数据 * 放大1前层;
层数据 * 放大2前层;
//尾
层数据 * 输出层;
//构造函数
EDSR模型();
};
主函数:
void EDSR(char * savefilename,EDSR模型 & sr)
{
//
int wid=bmp.width;
int hei=bmp.height;
cout<<"输入图像宽度:"<
层数据 * 层;
//两个卷积层 交替前传(源,目标)
//用这个传回
卷积层 * di=(卷积层 *)malloc(sizeof(卷积层));
di->width=1;
di->height=1;
di->depth=1;
di->data=new float[1 ];
卷积层 *源,*目标;
源 = &rgb;
目标 = di;
int pad;
//定义一个宏
//用于各个层
#define 卷积前传(ConvX,步长)/* 上采样、下采样 */ \
\
层=sr.ConvX;/* Conv2 层 */ \
if(层->输出维度 != 目标->depth || 目标->width != wid || 目标->height != hei)\
Resize卷积层(*目标,wid,hei,层->输出维度);\
pad=层->核宽/2;\
vl_nnconv(源,目标,层 ,步长,步长,pad,pad,pad,pad);\
/*vl_Norm(目标);*/\
/*vl_nnrelu(目标);激励函数不用*/\
\
std::swap (源,目标);\
cout<<"输入层..."<depth);
备份.data=new float[wid * hei * 源->depth ];
//总备份
卷积层复制(源,&备份);
//第二部分 16残差层
卷积层 convfea5(wid,hei,源->depth);
convfea5.data=new float[wid * hei * 源->depth ];
卷积层 *源备份=&convfea5;
if(源->depth != 目标->depth || 目标->width != wid || 目标->height != hei)
Resize卷积层(*目标,wid,hei,源->depth);
残差块 * 残差块0=sr.块;
cout<卷积层;
vl_nnconv(源,目标,层 ,1,1,1,1,1,1);
vl_nnrelu(目标);
层++;
vl_nnconv(目标,源,层 ,1,1,1,1,1,1);
//输入加上残差
卷积层相加(源备份,源);
残差块0++;//到下残差块
}
cout<输出维度 != 目标->depth || 目标->width != wid || 目标->height != hei)
Resize卷积层(*目标,wid,hei,层->输出维度);
pad=层->核宽/2;
vl_nnconv(源,目标,层 ,1,1,pad,pad,pad,pad);
del卷积层(*源);
cout<<"图像转换成jpg格式... "<
效果:
DBPN 4倍(可到《C++实现自适应风格迁移(adaptive-style-transfer-master)》一文开头处下载)
EDSR 稍差一点,但速度快得太多了。
不知WDSR 效果咋样?
下载:
win32超分辩重建EDSR实用程序
超分辨率重建EDSR(4倍)的win32程序,使用edsr中的基础模型edsr_baseline_x4-6b446fab.pt
https://download.csdn.net/download/juebai123/11088815