FALSR中除了用到4分组卷积外,也有2分组卷积,这个只要把前面的 4 换成 2 就可以了。
这里说一说“深度卷积“,就是说每个深度通道只用一个卷积核。
比如:
96通道特征图 应用 3x3核 输出 96通道图
普通卷积层 需要 96X96 个核
深度卷积层 只要 96 个核
实现:
void 深度卷积(卷积层 & si,卷积层 & di,层数据 * 层)//DepthwiseConv2dNative
{
int wid=si.width;
int hei=si.height;
int wh=wid*hei;
int d=si.depth;
if(层->输入维度 !=si.depth || 层->输出维度 !=1)
cout<<"出错了,深度卷积!!!\n";
if(层->输出维度 *层->输入维度 != di.depth || di.width != wid || di.height != hei)
Resize卷积层(di,wid,hei,层->输出维度 *层->输入维度);
//*
层数据 t1;
t1.权重长度=层->权重长度/d;
t1.权重_数据=层->权重_数据;
t1.偏移长度=1;
t1.偏移_数据=层->偏移_数据;
t1.核宽=层->核宽;
t1.输入维度=层->输入维度/d;
t1.输出维度=1;
int w2=t1.核宽*t1.核宽;
卷积层 st(wid,hei);
st.data=si.data;
卷积层 dt(wid,hei);
dt.data=di.data;
for(int i=0;i<d;i++)
{
vl_nnconv(&st,&dt,&t1 ,1,1,1,1,1,1);
st.data+=wh;
dt.data+=wh;
t1.权重_数据+=w2;
}
//*/
vl_nnrelu(&di);
}
一句话,就是 一个通道用一个核。
深度卷积:96个通道 需要 96 次 矩阵乘法(小矩阵)。
普通卷积:96个通道 只需 1 次 矩阵乘法(大矩阵)。
谁速度更快?
这里和前面的WDSRx2比一比效果和速度:
小图
FALSR
WDSR
看上去WDSR 更光顺一点,FALSR稍粗糙点。
速度 WDSR 16.1 秒 ,FALSR 9.6 秒,差不多快一倍。
当然,这个是基础模型,还有参数更多,效果更好的,速度也应该慢点吧。
下载:
快速超分辨率重建 FALSR(2倍)win程序
快速超分辨率重建 FALSR(2倍)win程序 ,由《FALSR-master》中的 FALSR-C.pb 模型改编而来
https://download.csdn.net/download/juebai123/11171422