超分辨率重建
juebai123
这个作者很懒,什么都没留下…
展开
-
Winograd卷积应用(NEON 和 SSE 对应指令)
用矩阵乘法(im2col+sgemm)的方式卷积,虽然速度很算可以,但非常费内存,不能应用大一点的图片。看了一些博客说到Winograd卷积,比上面的速度更快,用到内存更小,也来试试。下载FeatherCNN地址:http://github.com/tencent/FeatherCNN然后,把一些NEON指令改为SSE指令就可以运行了。这里是一部分对应项://#inclu...原创 2020-01-04 08:59:23 · 794 阅读 · 0 评论 -
C++ 实现 超分 SFTGAN
SFTGAN(通过语义分割先验恢复图像中的真实纹理的超分辨率),大意是有些场合效果可能更好。(https://github.com/xinntao/SFTGAN)生成部分分两块:1。8种类语义分割2 。超分部分主函数:void SFTGAN(char * savefilename, SFTGAN模型 & sr){ int wid=bmp.wi...翻译 2019-12-16 17:15:18 · 655 阅读 · 0 评论 -
C++实现 多维转换(torch.Transpose、permute){Meta-SR}
这里要实现 Meta-SR 中的元放大部分中的多维操作,比如:torch.cat,torch.arange,torch.matmul,torch.Transpose,Tensor.view,Tensor.permute 等。matmul 是多维矩阵乘法,和二维乘法差不多,只不过是多乘几次。permute比较复杂,可以转化为多个二维交换 Transpose。其它的哪些就比较简单了。定义多...原创 2019-11-14 20:19:10 · 3185 阅读 · 1 评论 -
C++ 实现 超分 Meta-SR
Meta-SR(任意放大倍数的超分辨率),大概意思是 :可以是非整数倍的,并且只要一个模型(就可以实现2,3,4 倍及它们之中间倍数,比如,2.3, 3.5 倍等)在《Meta-SR--master》中提供了 一个训练好的模型 (百度盘),这里用C++实现下(便于没有安装Pytorch的电脑运行)。分成 特征学习、元放大 两块。先定义数据池,把训练模型数据载入:str...翻译 2019-11-13 09:41:48 · 758 阅读 · 0 评论 -
32位C++改编 对抗(SRGAN)之生成(generator)超分辨重建 ---(二)图像组合放大和后处理
先上图(输入图):SRGAN-tensorflow-master生成的图(目标图):从上一篇中最后说过,从后向前调试,把tf 的中间层数据输入到某一层,再和目标图比较,相同则通过,否则继续找原因这个输入图暂时只是提供图像尺寸用后处理:def deprocess(image): with tf.name_scope("deprocess"): #...翻译 2018-11-17 10:05:16 · 440 阅读 · 0 评论 -
32位C++改编 对抗(SRGAN)之生成(generator)超分辨重建 ---(三)图像归一化(BatchNorm)和前处理
归一化:/*y=(x-均值)/sqrt(方差+微小值)+位移 */void tf_BatchNorm(卷积层 * out,float * mean,float * var,float * beta) //这里 gamma=1{ float * s=out->data; float p; int wh=out->width*out->height; float...翻译 2018-11-19 20:53:43 · 542 阅读 · 2 评论 -
从 DBPN(Pytorch) 导出中间层图像数据到文本文件
为了比对,还需要导出各个中间层数据。这个和《从 SRGAN(TensorFlow) 导出中间层图像数据到文本文件》一文差不多,当然 TensorFlow 的流程是很难理解的,灵活性很差,要导出也不容易,Pytorch就没有这个缺点了。定义保存函数: def _save_mat(name, tensor_x): # 保存多通道图像数据到txt文件 ...翻译 2019-02-25 11:05:49 · 555 阅读 · 2 评论 -
C++实现超分辨率重建 DBPN (一) 训练参数池
前面准备工作已经做得差不多了,现在开始。先从简单的开始,选 DBPN 2倍开始,至于4,8 倍 以及 DBPNLL 的2, 4,8 倍以后再说。先看图:按图定义:struct DBPN模型{ //初始特征提取(输入屋) ConvBlock feat0; ConvBlock feat1; //上下采样块 UpBlock up1; DownBlock down1;...翻译 2019-02-25 15:51:09 · 582 阅读 · 0 评论 -
C++实现超分辨率重建 EDSR
WDSR是NTIRE2018(图像恢复和增强新趋势)的现实赛道(有噪声图片)第一名,双三次上是第七名。本来也想测试下效果,但模型在drive.google.com上下不了(PyTorch,以及keras),下了一个Tensorflow的pb模型,用Tensorflow或者OpenCV都没有打开。先试试 EDSR 吧,这个是是NTIRE2017的第一名(哪个赛道?)。先导出x4倍模型 e...翻译 2019-04-03 20:55:21 · 1323 阅读 · 9 评论 -
C++实现超分辨率重建 DBPN (二) 主流程
流程图:主函数就按上图走:void DBPN(char * savefilename,DBPN模型 & sr){// int wid=jpg.getwidth(); int hei=jpg.getheight(); int wh=wid*hei; int scale_factor = 2; //kernel = 6 i...翻译 2019-02-26 10:43:33 · 406 阅读 · 0 评论 -
32位C++改编 对抗(SRGAN)之生成(generator)超分辨重建 ---(一)内存数据
前面准备工作已做得差不多了,现在开始原始框图: 实现框图:上图中的双三次放大是没有的,图像就不重发了(或者等有空再重发吧)。定义基本单位:struct 基本单位//残差块半层数据 { 层数据 *卷积层; bool 有无BatchNorm_beta; int 归一化长度; //gamma 缩放 为固定值 1.0 float * BatchNo...翻译 2018-11-15 09:40:41 · 562 阅读 · 4 评论 -
32位C++改编 对抗(SRGAN)之生成(generator)超分辨重建 ---(四)对大图的支持
实际上,前面已经全部完成了,由于4倍图非常费内存,对于象我这样的只有2G内存的笔记本只能运行很小的图,特别是最后图像放大部分。所以这里分成两种方法处理:1。图像分成4块分别处理,然后合并 //把jpg分成4份分别重建 再合并 IMAGE pDstImg=jpg; char name1[]="_1"; char name2[]="_2"; char name3[]="_3";...翻译 2018-11-20 22:21:03 · 392 阅读 · 0 评论 -
从 SRGAN(TensorFlow) 导出中间层图像数据到文本文件
为了便于比对定位每一层的不同,需要从 TensorFlow 导出中间层图像数据到文本文件,再载入我们的某一层输入,来看看输出有什么不同?在《经验干货:使用tf.py_func函数增加Tensorflow程序的灵活性》一文中介绍了py_func函数,所以我们在前面的基础上,也来个py_func函数。保存数据函数:def _save_mat(name, tensor_x): # 保存多通...翻译 2018-11-14 16:44:43 · 845 阅读 · 2 评论 -
用 tensorboard 显示 生成网络(generator)中间层图像
为了对比,还需要一个能显示 tensorflow 中间层图像的方法搜索了一下,有几种方法,先按《TensorFlow人工智能引擎入门教程之四 TensorBoard面板可视化管理》来试试要运行该文,先运行前一篇《TensorFlow人工智能引擎入门教程之三 实现一个自创的CNN卷积神经网络》先下载数据集https://raw.githubusercontent.com/petar/Go...翻译 2018-11-12 18:08:33 · 1604 阅读 · 1 评论 -
32位C++改编 对抗(SRGAN)之生成(generator)超分辨重建 ---(二)主函数
先展示主函数,和前面的那些程序有不同之地方到后面的文章中再说明:void SRResNet(int up_scale){ generator_tf模型 sr; // 加载 CNN 模型参数 loadModel(&sr); int wid=jpg.getwidth(); int hei=jpg.getheight(); cout<<"输入图像宽度:"<...翻译 2018-11-15 18:42:00 · 369 阅读 · 3 评论 -
从 SRGAN(TensorFlow) 导出生成网络(generator)训练参数数据
按《tensorflow2caffe(2) : 如何在tensorflow中取出模型参数》一文的代码原理:把下面的代码放到 main.py 的 generator 部分: #------------------------------------------------------------- # 这里应该是global_variables,如果train...翻译 2018-11-04 17:23:24 · 1479 阅读 · 0 评论 -
安装TensorFlow 并运行 SRGAN
前面的改编失败的一个主要原因是没有一个可以运行的 SRGAN 来对比。看到一个文章《用SRGAN提升图片清晰度(TensorFlow)》中其中 有一个训练好的模型然后按《Win10下安装与配置CPU运行的TensorFlow》安装Anaconda3(内含python3.5.2环境)安装TensorFlow:pip install tensorflowpip自动选了一个 1...翻译 2018-10-31 23:07:16 · 1838 阅读 · 2 评论 -
对抗生成网络SRResNet 改编失败和原因分析
从《从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程》一文中的 10. SRGAN(SRResNet) 一节的链接的 github(caffe) 下载了两个模型(生成网络)SRResNet-MSE_74s_sb_iter_180000.caffemodelSRResNet-MSE_74s_sb_iter_285000.caffemodel按前面的方法导出为txt方式,...翻译 2018-10-26 09:39:41 · 2041 阅读 · 0 评论 -
从 DBPN(Pytorch) 导出模型训练参数
在超分辨重建《DBPN-Pytorch-master》包中有已经训练好的模型,这个DBPN好象是“2018超分辨率 8 倍的冠军”。所以风格迁移就先放一放,把这个DBPN超分辨用C++实行一下。先安装好 Pytorch运行 python eval.py 或者 eval_gan.py,就可以用该超分辨了。输入图eval_gan.py 4倍 运行时间: 348.8485 秒(CP...翻译 2019-02-21 11:58:41 · 1741 阅读 · 3 评论 -
C++实现超分辨率重建 ESRGAN (一) 数据池
本来还想实现下 AdaIN 风格转换中的`-preserveColor`选项(保留内容图像的颜色)但是一看 coral 函数太复杂,吓倒我了,以后再说吧。看到《ESRGAN-master》有两个测试模型下载:"RRDB_ESRGAN_x4.pth","RRDB_PSNR_x4.pth",试试这个吧。ESRGAN(增强型SRGAN)(增强型超分辨率生成对抗网络)在[PIRM2018-SR...翻译 2019-03-19 18:51:43 · 1228 阅读 · 1 评论 -
从超分辨 FALSR ( tensorflow ) 导出pb模型参数
FALSR (快速、准确和轻量级超分辨率)在《FALSR-master》中有三个模型:FALSR-A.pb、FALSR-B.pb、FALSR-C.pb。我们也来测试下:还是用《tf_estimator_barebone-master》的datast.div2k 来运行模型。可以载入,但不能前推,我的 tensorflow 1.0 不能运行 1.8中的一些特性。好吧。先 prin...翻译 2019-05-07 23:15:25 · 1087 阅读 · 0 评论 -
C++实现超分辨率重建 SRFeat
有个博文介绍了这个 SRFeat ,并且《SRFeat-master》中有模型: SRFeat_full.npz 。这里也用C++来实现下。模型流程图:定义批正则层和残差块:struct tf_BatchNorm层数据{ int 数据长度; float * 偏移;//beta float * 权重;//gamma float * 均值;//moving_mean...翻译 2019-05-20 10:27:02 · 1179 阅读 · 1 评论 -
C++实现超分辨 FALSR(2)之深度卷积
FALSR中除了用到4分组卷积外,也有2分组卷积,这个只要把前面的 4 换成 2 就可以了。这里说一说“深度卷积“,就是说每个深度通道只用一个卷积核。比如:96通道特征图 应用 3x3核 输出 96通道图普通卷积层 需要 96X96 个核深度卷积层 只要 96 个核实现:void 深度卷积(卷积层 & si,卷积层 & di,层数据 * 层...翻译 2019-05-09 10:58:45 · 454 阅读 · 0 评论 -
C++实现超分辨 MSRN
MSRN (由多尺度残差网络实现的图像超分辨率)在《MSRN-PyTorch-master》中有模型。现在,我们用C++实现其中的4倍模型 MSRN_x4.pt。流程图:多尺度残差块:换一种思路清晰一点的画法:定义多尺度残差块数据池:struct 多尺度残差块{ 层数据 * conv_3_1 ;// 64-->64 3x3 //r...翻译 2019-05-01 08:58:40 · 1053 阅读 · 0 评论 -
C++实现超分辨 FALSR
前面已经准备好网络参数数据,这里正式开始。这里只针对 FALSR-C.pb 模型,流程图:定 义4残差块:struct 残差块{ //残差块--------------------------------> //3x3 层数据 * cell2_bx_0;//48->96 层数据 * cell2_bx_d;//96->96 深度卷积 层数据 * cell2...翻译 2019-05-08 23:27:32 · 597 阅读 · 4 评论 -
C++实现超分辨率 RCAN
RCAN(由很深的通道注意力的残差网络实现的图像超分辨率)在RCAN-master 中有模型(百度网盘),现在我们来实现其中的4倍模型 :RCAN_BIX4.pt由 Pytorch 中导出后有156M大。流程图:定义数据池:1。残差缩放块struct 残差缩放块 //自适应调整残差(训练得缩放比){ 层数据 * conv1;//64-->64 块尾层 ...翻译 2019-04-24 19:16:22 · 1361 阅读 · 0 评论 -
C++实现超分辨 WDSR
WDSR (有更宽的特征的EDSR)终于用 tf.save_model.loader.load 打开了wdsr 的 saved_model.pb 模型。再导出模型参数数据,有 23M,还是比较小的。再到《tf_estimator_barebone-master》找出流程,这时才发现 里面是有一个演示程序可以打开pb 模型。然后,在下面的显示内容中找到图节点名称。g = tf....翻译 2019-04-29 09:31:35 · 948 阅读 · 0 评论 -
C++实现超分辨率 IDN (2)(4分组卷积)
这里实现《IDN-tensorflow-master》中的IDN,一些不同之处见上章。先说明一下,由于IDN中要用到'组卷积',vl_nnconv在用到这里时会出错,所以前面矩阵乘法中要修改一下: filters_getHeight= filters_getWidth= filters_biases->核宽; //filters_getSize=filters_bi...翻译 2019-04-19 19:21:07 · 767 阅读 · 4 评论 -
C++实现超分辨率 RDN--密集残差块总成
现在来实现<密集残差块总成> 这个函数:对照下图灰框部分void 密集残差块总成(RDN模型 & sr,卷积层 & s_di)//从s_di 传入并返回{ int wid=s_di.width; int hei=s_di.height; int wh= wid*hei; int whd=wh*s_di.depth; //连接池 卷积...翻译 2019-04-22 20:28:28 · 809 阅读 · 0 评论 -
用超分辨程序去模糊
超分辨按实现方式分两类:1。双三次放大 + 网络 = 大图2。 小图 + 网络 = 大图对中间部分 “网络” 来说:第1种 学习到了:怎样把 模糊图变成清晰图。SRCNN VDSR DRCN DRRN 是这类。第2种 学习到了:怎样把 小图变成大图 。FSRCNN ESPCN LapSRN EDSR IDN DBPN 等几乎都是。只有...原创 2019-04-26 07:46:33 · 1349 阅读 · 4 评论 -
C++实现超分辨率 RDN
RDN(由残差密集网络实现的图像超分辨率)在《RDN-TensorFlow-master》有一个3倍模型(也只有这一个了):rdn_5_3_64_x3这里用C++实现这个的3倍重建:流程图:密集残差块:这个残差块结构内部和前面的ESRGAN(前面的文章)中的密集残差块是一样的,只是外部有点不同。定义密集残差块:struct 密集残差块 // 4个卷积层...翻译 2019-04-21 19:04:30 · 943 阅读 · 4 评论 -
C++实现超分辨率 IDN
IDN (由信息蒸馏网络实现的快速准确的超分辨率)在《IDN-Caffe-master》和《IDN-tensorflow-master》都有训练好的模型。里面的一张和其它几个运行时间和效果比较图表:效果比MemNet,DRRN好一点,差不多在同一个数量级,但速度很快。这里用C++实现其中的4倍重建:流程图:信息蒸馏块:上面的4组是说核数量只有通道数的4分之1...翻译 2019-04-16 20:54:19 · 1345 阅读 · 7 评论 -
C++实现超分辨率重建 ESRGAN (二) 主流程
在ESRGAN函数内完成主流程:void ESRGAN(char * savefilename,ESRGAN模型 & sr){// int wid=jpg.getwidth(); int hei=jpg.getheight(); int wh=wid*hei; 卷积层 rgb(wid,hei,3);//即rgb通道 rgb.data=new float[...翻译 2019-03-20 19:15:43 · 882 阅读 · 2 评论 -
纯C++超分辨率重建DRRN --改编--(四)使用libjpeg加载图像和矩阵乘法并行化(多线程)
由于DRRN运行太慢,用OpenMP加速最简单易行,只要加一句 #pragma omp parallel for 就可以了但是vs2008提示缺少一个链接Lib ,而mingw32 可以运行该句,所以改成mingw32来编译easyX则改成libjpeg来加载jpg图。按照《截图并使用libjpeg库压缩BMP为JPG与将JPG转换为BMP》一文中的方法修改一下来使用用bmp_da...翻译 2018-10-21 15:02:40 · 517 阅读 · 7 评论 -
纯C++超分辨率重建DRRN --改编--(二)归一化(BatchNorm) 和 缩放和平移(Scale)
DRRN和前面相比增加了1。归一化(BatchNorm)其中 均值(u) 和方差(std)需要除以一个约等于1000的比例因子,std 还要开平方 该部分已经放到载入模型中去了:// 输入归一化 x_norm = (x-u)/std, 其中u和std是个累计计算的均值和方差。// 其中 u,std需要除以一个约等于1000的比例因子,std 还要开平方 已经放到载入模型部分去了/...翻译 2018-10-17 18:16:55 · 698 阅读 · 0 评论 -
在matlab7.0中运行DRCN 超分辨率重建
由于下载的代码用了类包装器 dagnn ,这个是针对matlab7的后续版本的,已经没法使用,只能按照它的意思重新写了。先外框架:% DRCN 超分辨率重建clc;clear all;name='6a.jpg';SF = 2; % 测试比例因子。 可以是2,3或4run('snu_matconvnet/matlab/vl_setupnn.m');addpat...翻译 2018-07-13 10:14:05 · 3117 阅读 · 22 评论 -
单通道单核 --多通道多核--矩阵乘法
前文说过,要找一个放大卷积,而 LapSRN 是通过 matconvnet 的中的一个转置矩阵乘法来实现的,所以我们先来实现矩阵乘法。卷积 :是通过 核区对应项相乘,再求和矩阵乘法:是通过 行列对应项相乘,再求和由于SRCNN简单一点,先用Matlab来测试1。先来看原卷积实现(外框架在《超分辨率重建SRCNN--Matlab 7.0中运行》一文中):fun...翻译 2018-07-18 23:08:32 · 1201 阅读 · 9 评论 -
用“ 快速卷积”来加速‘卷积’
在《【算法+图像处理】2D卷积与快速卷积算法C语言实现》一本找来一个//2D快速卷积算法的实现 快速卷积算法需要核2D核h能够拆分成一个行向量和一个列向量的乘积的形式。//实际实现也就是将2D卷积,拆分成两次1D卷积的形式。设和的大小为n*n,这样可以将算法复杂度从n*n降低为2n。 bool convolve2DFast(float* in, float* out, int dat...翻译 2018-07-08 18:13:35 · 3342 阅读 · 2 评论 -
纯C++超分辨率重建VDSR --改编
又找到一个caffe-vdsr-master,其中Test部分是用matconvnet来运行的,鼓捣一下也可以在Matlab 7.0+vc6.0中运行所以,这一篇用 C++ 翻译 VDSRVDSR 流程:可以说:和 SRCNN 差不多,除了卷积核全部是 3x3 头尾一模一样,中间18层代替 SRCNN 的第二层,残差网络也只是 网络结束后 加上双三次图。哪就开始吧:先定义一个网络数据池:struc...翻译 2018-06-17 22:58:08 · 1003 阅读 · 12 评论 -
超分辨率重建SRCNN--Matlab 7.0中运行
终于找到一个可以在自己电脑中运行的超分辨率重建程序了,Matlab 7.0真的是太老了(实际上是自己的笔记本太老了,哈哈)demo_SR.m% =========================================================================% 超分辨率卷积神经网络(SRCNN)的测试码%% 参考文献% Chao Dong, C...翻译 2018-06-01 08:37:30 · 12351 阅读 · 66 评论