风格转换
juebai123
这个作者很懒,什么都没留下…
展开
-
32位C++改编 风格转移(style)之应用(生成) ---(二)主函数
主要处理部分:void style(char * savefilename,Transformation_tf模型 & sr){//载入模型已经放到main中去了 int wid=jpg.getwidth(); int hei=jpg.getheight(); cout<<"输入图像宽度:"<<wid<<endl; cout&l...翻译 2018-12-04 18:43:28 · 176 阅读 · 0 评论 -
C++实现Vgg19分类器(一)准备数据
前面二个风格迁移的程序,虽然速度够快,但只能实现作者训练好的风格,要换成自己的风格图就无能为力了。看了一些博文,觉得《AdaIN-style》这个不错,能够实现任意风格转移,而且称实时。在https://github.com/xunhuang1995/AdaIN-style 提供了训练好的模块模型: https://s3.amazonaws.com/xunhuang-public/...翻译 2019-02-07 12:45:06 · 702 阅读 · 0 评论 -
C++实现Vgg19分类器(二)数据池
现在正式开始,准备数据存放池,先看图:按该图定义:struct Vgg19模型{ //组 层数据 * Conv1;//2 层数据 * Conv2;//2 层数据 * Conv3;//4 层数据 * Conv4;//4 层数据 * Conv5;//4 层数据 * fc6;//1 层数据 * fc7;//1 层数据 * fc8;//1 (共19层) //...翻译 2019-02-08 10:12:36 · 635 阅读 · 8 评论 -
C++实现Vgg19分类器(三)以二进制方式载入数据
下面以二进制方式载入模型参数。先把前面载入的数据以二进制保存:void fwrite_c(FILE *fp,int &len, float * data);void saveModel2进制(Vgg19模型 *sr){ char name[]= "VGG_ILSVRC_19_layers.caffemodel.dat";// cout<<"正在保存‘Vg...翻译 2019-02-09 08:52:53 · 403 阅读 · 0 评论 -
C++实现Vgg19分类器(四)主函数
开始分类流程:1。输入图像预处理(和训练环境匹配): 。将RGB转换成BGR 。将图片大小缩放成:224x224 (全连接层的参数是固定大小的) 。图片中每一个点减去时训练的平均值2。VGG19 前传 --> 1000个分类概率3。在分类标签中查最大概率的前5名。4。输出类型名主函数:void VGG19(char * savefilena...翻译 2019-02-09 11:12:44 · 728 阅读 · 0 评论 -
AdaIN-风格转换之生成流程
现在可以开始 ”AdaIN 风格转变“了。先把三个模型用Opencv转换成文本格式,decoder.t7 和 decoder-content-similar.t7 成功了.而 vgg_normalised.t7 转化不了,哪个 vgg_normalised.caffemodel 又下不下。模型下载地址:https://s3.amazonaws.com/xunhuang-publi...翻译 2019-02-11 12:58:27 · 8866 阅读 · 2 评论 -
从T7模型中取训练参数
上一章中,我们已经取出层名,层名和层名之间,是存放参数的空间,这样相当于已经给模型分了层。我们只要在层间搜索参数就可以了。第2步:搜索参数以卷积层为例:if(startsWith(TorchClassName,"nn.SpatialConvolution")){ const char *findstr[] = { "name", //名称 "dW", "dH", ...翻译 2019-02-13 12:28:07 · 4490 阅读 · 2 评论 -
C++运行快速风格转换(10个)模型
前面我们已经能从Torch中直接读出网络训练好的参数,这里就用《fast-neural-style-master》的它的十个模型来做一个实用程序吧。模型分两种:instance_norm http://cs.stanford.edu/people/jcjohns/fast-neural-style/models//instance_norm/candy.t7 http://cs...翻译 2019-02-20 08:04:05 · 912 阅读 · 0 评论 -
C++实现自适应风格迁移(adaptive-style-transfer-master)
由于 "DBPNLL" 和 "DBPN" 并没有多大区别,只有中间部分多加了3层,以及前后加了正则化和去正则化,实现也是差不多,就不多写了。这里只提供一个下载(效果可见后面的一些文章中):超分辩重建 D-DBPN(4倍)的win32程序https://download.csdn.net/download/juebai123/11247759-----------------------...翻译 2019-03-04 18:42:41 · 893 阅读 · 0 评论 -
C++ 实现美颜(脸部上妆)(BeautyGAN)
在《一键上妆的BeautyGAN》一文中介绍了,BeautyGAN 的实现功能:输入两张人脸图片,一张无妆,一张有妆,模型输出换妆之后的结果,即一张上妆图和一张卸妆图。并在《https://github.com/Honlan/BeautyGAN》中有训练好的模型下载。这里也来试试。python 复现结果:输入图:结果图:我们只关注生成器部分:这个生成...翻译 2019-09-17 18:36:04 · 2470 阅读 · 1 评论 -
C++实现AdaIN 风格转换(二)实例归一化特征转移(AdaIN 函数) 和风格控制
特征转移的核心 是 AdaINAdaIN 函数(实例归一化特征转移)://自适应实例正则化 内容 和 风格 深度(维度)必须相同,宽,高可以不同void AdaIN(卷积层 & 内容,卷积层 & 风格){ if(内容.depth != 风格.depth) cout<<"出错了!内容和风格的维度必须相同!"<<endl; vl_No...翻译 2019-02-15 16:12:01 · 1514 阅读 · 5 评论 -
C++实现AdaIN 风格转换(一)编码、解码器 和 主流程
前面,材料已经准备得差不多了,现在可以开始。首先是编码器,就是一个'预处理卷积'+VGG19的开头到relu4-1 层。'预处理卷积' 等同'@./helpers/preprocess.lua',这个文件 <fast-neural-style-master>中有:M.vgg = {}local vgg_mean = {103.939, 116.779, 123....翻译 2019-02-15 09:28:21 · 963 阅读 · 0 评论 -
从 风格转移(style)(TensorFlow)中 导出中间层图像数据到文本文件
超分辨率先放一放。从 https://github.com/hzy46/fast-neural-style-tensorflow下了一个《fast-neural-style-tensorflow-master》,来试试这个风格转移。该文提供了7个训练好的风格模型。按前面一样导出模型数据。 还要导出各中间层图像数据用于比对。前面的方法是依附在tf.summary上...翻译 2018-11-30 19:52:05 · 682 阅读 · 0 评论 -
32位C++改编 风格转移(style)之应用(生成) ---(五)邻近插值放大+卷积(vs)反向卷积
哪个上采样层实际上并不是用反卷积来实现的,从超分辨重建部分知道,反卷积相当于插零值+卷积。这里用邻近插值4倍放大+步长为2的卷积(2倍缩小) 代替 2倍放大的反向卷积 : 4-2=2邻近插值放大 从博文《最近邻内插值与双线性插值》拿来修改一下在这里使用://最近邻插值void NearestInsert(const float *OriImage_c, int OriWidth, ...翻译 2018-12-07 19:57:19 · 318 阅读 · 0 评论 -
32位C++改编 风格转移(style)之应用(生成) ---(三)图像加边(扩展)和减边(剪裁)
由于风格转换在图像边缘处效果会差一点,所以先在四周加上10个像数的边,完成后再去掉。并且,图像在后面有两次缩小2倍的操作,顺便使宽,高成为4的倍数,也到后面还原伸缩边函数://x0, y0 为补齐4的倍数的零头void 伸缩边(卷积层 & di,int & x0,int & y0,bool 伸缩=true) //扩展到(0,1)间{ int w边=10;...翻译 2018-12-05 19:07:59 · 206 阅读 · 2 评论 -
32位C++改编 风格转移(style)之应用(生成) ---(一)内存数据
还是和前面一样,我们只关注模型训练好后的应用,即生成网络先看图:它由1个输入卷积和2个下采样层(步长为2的卷积)和ReLU非线性,5个残差块,2个上采样层(步长为1/2的卷积,就是哪个反向卷积(转置))最后是一个产生输出图像的非线性tanh层组成。 残差块图:残差块由2个卷积和一个ReLU组成网络内部效果图:定义数据池:struct Trans...翻译 2018-12-03 21:25:21 · 215 阅读 · 0 评论 -
32位C++改编 风格转移(style)之应用(生成) ---(四)实时归一化(Norm)
在前面的“超分辨重建”部分有个批归一化(BatchNorm),和这个差不多,那个是训练时计算的,我们只是拿来用,这里是实时计算。y=(x-均值)/sqrt(方差+微小值)对每个通道分别处理:void vl_Norm(卷积层 * out){ float epsilon = 10E-9 ;//10E-4 ; float u, std;// 均值 方差 float * s=ou...翻译 2018-12-06 18:45:42 · 261 阅读 · 0 评论 -
OpenCV4.0 运行快速风格迁移(Torch)
从《Python 图像风格迁移(模仿名画)》一文中看到 OpenCV 可以运行Torch 模型。也来试试,先用vs2008编译一个cv3.3,再下一个"fast-neural-style-master"包,按包中地址下载几个模型,下面是其中一个:"http://cs.stanford.edu/people/jcjohns/fast-neural-style/models/instanc...翻译 2019-01-18 22:11:50 · 4368 阅读 · 5 评论 -
OpenCV4.0 摄像头风格迁移
再按照 https://github.com/opencv/opencv/blob/3.4.0/samples/dnn/fast_neural_style.py 改为 C++ 版的摄像头风格迁移//摄像头或视频风格转换//按空格存一图//OpenCV:使用VideoCapture类进行视频读取和显示#include <opencv2\opencv.hpp>#includ...翻译 2019-01-20 16:48:15 · 1081 阅读 · 3 评论 -
从 OpenCV dnn 导出模型训练参数(按caffe格式)
先从Torch、tensorflow 等导入模型: String t7model="mosaic.t7";//Torch // 加载模型 dnn::Net net = cv::dnn::readNetFromTorch(t7model.c_str());然后读出各层名称: std::vector<String> lname=net.getLayerNames...翻译 2019-02-01 11:11:33 · 1051 阅读 · 0 评论 -
Torch 和 OpenCV4.0 在风格转换中对应层(风格迁移)
上一章中已经从 OpenCV4.0 中导出风格迁移各层名称,这里来和 Torch 比一比:Torch 层 OpenCV4.0 层nn.Sequentialnn.SpatialReflectionPadding l1_Padding 加对边 (四周各加20个像素宽的边)nn.SpatialConvolution l2_Convolution 卷积 3-->16扩维nn.I...翻译 2019-02-03 08:56:13 · 370 阅读 · 0 评论 -
步长为2的卷积 VS 步长为1的卷积 + 间隔删除(美颜BeautyGAN)
用以前的代码并不能实现 python、Tensorflow 同样的效果。MatConvNet 和 Tensorflow 中的卷积,在步长为2时,并且图像长宽是偶数时,并不完全相同比如步长为1的一个卷积结果是这样的:[[ 2. 0. 2. 4.] [ 1. 4. 4. 3.] [ 4. 3. 5. 9.] [ 3. 4. 6. 2.]]步长为2的一个...原创 2019-09-18 10:14:52 · 6256 阅读 · 2 评论