- 博客(173)
- 资源 (41)
- 收藏
- 关注
原创 密集球光照贴图生成
现在来生成球光照贴图。上一文的方法对于粗糙的物体是合适的,这个球上有镜面反射产生亮斑。所以、这里准备以贴图坐标所对应球上点和视点连线为入射光,生成密集的球光照贴图。
2025-03-23 08:10:06
379
原创 视点游动生成光照贴图
如果把入射光起点(视点)放在目标物体附近,然后移动光线,估计会形成一个密集的无黑洞的图像。上一文生成的光照贴图有两个缺点。其一稀疏点需要插值,插值后彩色不均。对比:左边是前面生成的,右边是这次生成的。球上要怎么处理,还没有想好,以后再写吧。其二物体遮挡有黑洞。
2025-03-21 18:59:07
260
原创 光线追踪之光照贴图尝试
下载了运行代码得到一个 图:常规opengl程序第一个图像能不能作为纹理贴到第二个动图上去,这好象叫’光照贴图’。现在尝试来一下。
2025-03-20 14:33:48
407
原创 CUDA并行、GLSL并行、CPU并行 相互转换
以《[CUDA实战] 第一个样例程序》来说明。 __global__ void add(int a, int b, int *c)//kernel函数,在gpu上运行。 { *c = a + b; } int main() { int c; int *dev_c; cudaMalloc((void**)&dev_c, sizeof(int));//分配gpu的内存,第一个参数指向新
2021-05-30 07:39:33
677
1
原创 GLSL层卷积(宽*高*输出通道数)(计算单位数)
增加计算单位数,可以加快计算速度。计算单位 从 iWidth * iHeight 增加到 iWidth * iHeight * outNum: mNumGroupsX = iWidth; int xSize = iHeight; mNumGroupsY = outNum; mNumGroupsZ = 1;//inNum; if (iHeight > 1024) printf("图片高度太大,不支持\n"); else textureParameters.shader_sou
2020-10-15 13:08:13
501
原创 GLSL层卷积(宽*高)(计算单位数)
这一步,用计算着色器来作层卷积接口于前面相同。这里将一个“缓存对象”来传送全部输入数据,卷积核,并回收卷积结果(前面部分结果,中间输入数据,后面部分卷积核)。用不到纹理,FBO(屏幕外帧缓冲区)。启用计算单位: mNumGroupsX = iWidth; mNumGroupsY = iHeight; mNumGroupsZ = 1;分配数据空间,并传送数据: //glGenBuffers(1, &buffOut);//在初始化中生成 glBindBuffer(
2020-10-12 10:47:16
716
原创 图像处理(使用计算着色器)
前面层卷积(使用片元着色器)还不够快,这里准备使用计算着色器。先实现一个小目标。使用计算着色器作图像处理。即一个卷积。以《GPGPU基础(五):使用compute shader进行通用计算及示例》为模板。有个疑问:该文为什么要计算2次,并使用了3个纹理呢?终于在《OpenGL编程指南(第八版)-中文扫描版》的第12.4.2章《计算着色器-示例-图像处理》找到答案:第一次对图像水平处理,第二次垂直处理。所以我们去掉哪个中间纹理,只要两个纹理(输入,输出),一次计算(卷积)就可以了。先载入
2020-10-04 19:47:22
1013
1
原创 GLSL层卷积(缓存对象)
下载了《OpenGL编程指南(第八版)-中文扫描版》以及《OpenGL编程指南 VS2015代码》。该例子工程包已经设置好了 freeglut,glew 等库,只要安装了vs2015,马上就可以用,非常方便。在第11课《11.2-01BufferObject》中讲了:着色器可以对“缓存对象”读写。我们的层卷积中,也用一个“缓存对象”传送卷积核,并回收卷积结果(前半部分结果,后半部分核)。//核数据,核宽,输入维度,输出维度,偏置数据,输入数据,输出数据,是否激活//核大小:kw * kw
2020-09-21 19:23:02
354
原创 GLSL层卷积(纹理数组)
在《OpenGL-纹理数组》一文中看到纹理数组只用一个纹理对象就可以加载多个通道数据。在《学一学, Texture Array纹理数组》一文可以下载一个程序包,可以看到纹理数组的运用细节。在层卷积中可以减少着色器运行次数。把输入的多通道数据载入一个纹理数组中:int LoadGLTextures_arrayG(float *pTexData,int num){ glGenTextures(1, &texture); //绑定纹理 glBindTexture(
2020-09-15 09:21:30
761
原创 GLSL层卷积(先清理)
测试了《GPU编程之GLSL(五)——二维离散卷积》一文的程序,发现先运行哪个“clean.frag”,程序总运行时间更短,就以该文为模板来运行层卷积。先把《glsl着色器实现多重纹理与帧缓冲对象(fbo)》一文的着色器出错提示部分复制过来(不然,将不能调试着色器)。接口和前面相同,为了区别加一个G:void conv_initG(int argc, char* argv[],int h,int w)//核数据,核宽,输入维度,输出维度,偏置数据,输入数据,输出数据,是否激活//核大小:
2020-09-14 09:51:16
196
原创 GLSL层卷积(中间结果回传)
在Pudn.com 复制了一个 ”helloGPGPU_GLSL.cpp“ ,在《GPU通用计算——从Hello GPGPU开始》一文中有中文注解。该程序中 使用了一个纹理,用来保存着色器中间数据并再传着色器。这里也用1个纹理来回传中间结果相加,其它7个纹理用于卷积。生成一个空数据纹理://加法纹理void initadd(){ float * TexData= new float[imgWidth * imgHeight]; memset(TexData, 0,img.
2020-09-12 19:24:41
312
原创 C++ 实现 实例分割(Mask_RCNN-81类)
在https://github.com/matterport/Mask_RCNN下载《Mask_RCNN-master》,并下载训练权重(mask_rcnn_coco.h5)。然后安装 Keras 2.0.8。pycocotools 就不用装了。由于我的TensorFlow 是1.0 <1.3,所以按提示修改一二处Keras 中的代码,就可以运行了。流程图:...
2020-04-20 14:48:05
1412
翻译 C++ 实现 语义分割(ade20-150类)
在http://sceneparsing.csail.mit.edu/model/pytorch中也有一些模型,下一个试试效果:ade20k-mobilenetv2dilated-c1_deepsup模型结构:SegmentationModule( (encoder): MobileNetV2Dilated( (features): Sequential( ...
2020-02-25 16:56:06
1460
3
原创 C++ 实现 语义分割 deeplab_v3
在https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md中有许多个模型。先下一个试试效果如何:http://download.tensorflow.org/models/deeplabv3_mnv2_dm05_pascal_trainaug_2018_10_01.tar.g...
2020-02-16 13:20:19
2511
1
翻译 C++ 实现 mobileNet分类器
在https://github.com/shicai/MobileNet-Caffe中有两个模型:1。mobilenet.caffemodel2。mobilenet_v2.caffemodel这里用C++实现下mobilenet 结构:
2020-02-12 10:10:44
1215
5
原创 Winograd卷积应用(NEON 和 SSE 对应指令)
用矩阵乘法(im2col+sgemm)的方式卷积,虽然速度很算可以,但非常费内存,不能应用大一点的图片。看了一些博客说到Winograd卷积,比上面的速度更快,用到内存更小,也来试试。下载FeatherCNN地址:http://github.com/tencent/FeatherCNN然后,把一些NEON指令改为SSE指令就可以运行了。这里是一部分对应项://#inclu...
2020-01-04 08:59:23
845
翻译 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
734
原创 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
3430
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
867
原创 步长为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
6393
2
翻译 C++ 实现美颜(脸部上妆)(BeautyGAN)
在《一键上妆的BeautyGAN》一文中介绍了,BeautyGAN 的实现功能:输入两张人脸图片,一张无妆,一张有妆,模型输出换妆之后的结果,即一张上妆图和一张卸妆图。并在《https://github.com/Honlan/BeautyGAN》中有训练好的模型下载。这里也来试试。python 复现结果:输入图:结果图:我们只关注生成器部分:这个生成...
2019-09-17 18:36:04
2620
1
原创 C++实现人机对战围棋(使用Leela Zero权重)-自动提子
前面的需要手动提子,非常不方便,这里再实现一个自动提子(判断死子并在棋盘中拿走)功能。在下围棋时,当一个棋子落到棋盘上,它会对周围对方棋子的死活产生影响,如果对方棋子没有气了(死了),必须从棋盘上拿掉(提子)。进一步分析的话,刚落下的棋子,只可能威胁到周围与其紧临的上下左右方向的四个对方棋子(也可能是三个或两个,如在边角的话), 而这四个方向上的对方棋子,可能是孤立的一个棋子,也可能是...
2019-08-07 19:29:39
3193
2
原创 C++实现人机对战围棋(使用Leela Zero权重)-策略
策略部分就是哪个下载的权重的网络,根据棋面黑白子状态,输出一些下子位置和(在该位的)胜率。网络输入:Leela Zero网络权重输入是:```1)在时间T = 0时行棋的一方2)在时间T = -1时行棋的一方(如果T = 0则为0)...8)在时间T = -7时行棋的一方(如果T <= 6则为0)9)时间T = 0时的另一方10)时间T = -1时的另一方(如果T ...
2019-08-06 17:20:48
2578
原创 C++实现人机对战围棋(使用Leela Zero权重)-界面
1。在《leela-zero-next》包中有一个从人类游戏训练的(较弱的)网络的权重文件(https://sjeng.org/zero/best_v1.txt.zip)(6残差块,128通道)2。并在《easyx吧》百度贴吧下了一个双人对战的五子棋+围棋的游戏(去掉其中的五子棋部分)。把这两个合成一个人机对战围棋。虽然leela-zero也是C++写的,但是我也看不懂,这里只使用...
2019-08-05 21:45:21
3318
翻译 C++运行三维人脸重建 VRN
流程:定义数据池:1。残差块struct 残差块 //标准残差块{ BN层数据 * bn0; 层数据 * conv1; BN层数据 * bn1; 层数据 * conv2; BN层数据 * bn2; 层数据 * conv3;};2。总模型 struct RVN模型{ //层数据 * conv0;//3->64 0 //BN层数据...
2019-07-04 19:55:03
783
原创 体素转换为点云(VRN)
前面我们输出的灰度图是没有鼻孔的(只能是上小下大),这里我们把它转换为点云。流程简图:由于保存192*192*200个点数据比较慢,我们从双线性插值前的48*48*200的数据导出,后面的到C++中处理。# coding=gbkfrom tensorflow.core.framework import graph_pb2from num_save_mat import K_s...
2019-06-11 21:18:02
5138
翻译 运行 三维人脸重建(VRN)
在《vrn-master》可以下载 vrn-unguided.t7 模型(没有安装 torch7,运行不了)。在《vrn-torch-to-keras-master》提供一个 Keras 模型下载地址: vrn-unguided-keras.h5 (drive.google)和一个 Tensorflow 的 pb 模型:vrn-tensorflow.pb (drive.google)。...
2019-06-09 20:30:33
2626
6
翻译 黑白图像自动上色(颜色迁移版)
在《一篇关于如何用深度学习完成自动上色(Automatic Image Colorization)的论文浅析》看到这个模型也可以作颜色风格迁移,这里也来试试,先换另一个模型:colornet_imagenet.t7。看图:这个模型和前面的哪个除了训练集不同外,着色输入层核大小已经换成了1x1了,总体来说基本相同。RGB 和 Lab 互换 按《opencv2,RGB转Lab色彩空间...
2019-05-21 10:41:58
3605
翻译 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
1254
1
翻译 黑白图像自动上色(Colorization)
在《siggraph2016_colorization-master》有两个可以给黑白图片自动上色的模型:colornet.t7 和 colornet_imagenet.t7。现来把这个 Torch7 代码翻译成 C++ 代码玩玩。colornet.t7流程图:图像中的上半部分就可以完成上色任务了,下半部分是为了加大适用范围加的(大数据训练的分类网络)。哪个共用权重被...
2019-05-15 19:31:31
10012
2
翻译 C++实现超分辨 FALSR(2)之深度卷积
FALSR中除了用到4分组卷积外,也有2分组卷积,这个只要把前面的 4 换成 2 就可以了。这里说一说“深度卷积“,就是说每个深度通道只用一个卷积核。比如:96通道特征图 应用 3x3核 输出 96通道图普通卷积层 需要 96X96 个核深度卷积层 只要 96 个核实现:void 深度卷积(卷积层 & si,卷积层 & di,层数据 * 层...
2019-05-09 10:58:45
491
翻译 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
665
4
翻译 从超分辨 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
1134
翻译 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
1137
翻译 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
1036
原创 用超分辨程序去模糊
超分辨按实现方式分两类:1。双三次放大 + 网络 = 大图2。 小图 + 网络 = 大图对中间部分 “网络” 来说:第1种 学习到了:怎样把 模糊图变成清晰图。SRCNN VDSR DRCN DRRN 是这类。第2种 学习到了:怎样把 小图变成大图 。FSRCNN ESPCN LapSRN EDSR IDN DBPN 等几乎都是。只有...
2019-04-26 07:46:33
1405
4
翻译 C++实现超分辨率 RCAN
RCAN(由很深的通道注意力的残差网络实现的图像超分辨率)在RCAN-master 中有模型(百度网盘),现在我们来实现其中的4倍模型 :RCAN_BIX4.pt由 Pytorch 中导出后有156M大。流程图:定义数据池:1。残差缩放块struct 残差缩放块 //自适应调整残差(训练得缩放比){ 层数据 * conv1;//64-->64 块尾层 ...
2019-04-24 19:16:22
1483
有150类的win图像语义分割程序2(更准确)
2020-03-16
有150类的win图像语义分割程序
2020-02-25
win图像语义分割deeplab-v3程序
2020-02-16
两个win32图像分类检测程序(mobilenet 和 mobilenet_v2)
2020-02-12
3D人脸重建win32程序
2019-07-05
给黑白图像自动上色并可以作颜色迁移的win程序
2019-05-22
给黑白图像自动上色的win程序(2)
2019-05-18
给黑白图像自动上色的win程序
2019-05-16
多尺度残差超分辨率重建 MSRN(4倍)win程序
2019-05-09
win32超分辩重建WDSR实用程序
2019-04-29
win32超分辩重建ESRGAN实用程序
2019-03-21
win32位编译的 mosaic图风格转换(style)
2018-12-07
win32位编译的 超分辨率重建(SRGAN_generator)
2018-11-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人