摘要:
深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功。本人在多年之前也曾接触过神经网络。本系列文章主要记录自己对深度神经网络的一些学习心得。第一篇,从最经典的BP网络开始。我不打算详细描述神经网络的生物学运行机理,因为网络上有太多的教程可以参考。这里,主要描述其数学上的计算过程,并且采用的符号可能与其它参考书上的符号有很大差异。特别是,斯坦福官方网站上对深度网络中所引用的符号有太多的小标,上标,给初学者带来不便。一. 网络结构经典的BP网络,其具体结构如下: 请特别注意上面这个图的一些符号说明如下:二. 学习算法 1. 信号的前向传递过程 请特别注意上述公式中的下... 阅读全文
摘要:
SSE2与SSE1使用相同寄存器,指令描述约定:MM指64位MMX寄存器XMM指128XMM寄存器m32 指32位内存变量m128指128位内存变量本小结主要描述双精度浮点运算指令1. 数据搬移指令 movapdXMM,XMM/m128 movapdXMM/m128,XMM 把源存储器内容值送入目的寄存器,当有m128时,内存变量地址必须16字节对齐. movupdXMM,XMM/m128 movupdXMM/m128,XMM 把源存储器内容值送入目的寄存器,内存变量地址不必对齐16字节. 两条指令同SSE1的浮点搬移指令movaps 和 movups 指... 阅读全文
摘要:
1. 技术背景 HDR图像处理的技术本质上是对阴影,高光的细节增强。即图像太暗或者太亮的部分,其细节丢失的比较明显,HDR图像处理就是对暗部和高亮部分的细节进行恢复的过程。 HDR的处理思路是这样的。首先,用户至少拍摄3张不同曝光量下的照片。分别对应低曝光,正常曝光和高曝光量。对于低曝光拍摄的图片,场景中比较亮的部分细节会比较突出,而其他部分则细节丢失比较严重。而对于高曝光量,则场景中较暗的部分被凸显出来,而其它部分曝光过度造成细节丢失。正常曝光水平则是丢失暗部细节和高亮的部分。 值得一提的是HDR相机拍出来的图片,其每一个像素的分量并不是8位的,而是大于8位的。然而大多数显示... 阅读全文
摘要:
假设信号的采样频率是Fs,信号的频率是F,采样点数为N,则与傅里叶变换相关概念几个计算公式如下:1.频率计算公式 2.振幅计算公式 Magnitude 3.相位计算公式Pan 示例:假设有如下两个交流信号,以512的采样率对信号进行采样,采样点数也为512点。信号1: 2V的直流分量,幅度为5V,频率为100hz,相位为30度。信号2:幅度为3V,频率为200hz,相位为-60度。用数学表达式来描述如下: ... 阅读全文
摘要:
这部分主要是引入第三方库,还有就去去除无关的测试代码。7. 引入第三方库 必须引入的第三方库为zdll.lib,这个库在网上可以下载到,如若不加入这个库,很多的函数将链接不到。还有在avcodec文件夹下面以lib打头的文件都是为引入第三方库而进行的接口封装,以适应ffmpeg去调用的相关代码。最重要的例如libx264,libmp3lame.lib libfdk_aac等。我的x264采用我自己用vs2008编译的版本,其它的库也基本上采用vs的版本。暂时不想加入的库,例如libspeex等可以把这些代码移出。8. 去除冗余和暂时不相关的代码。 之前我们把所有的c文件都添加进来,其实有些.. 阅读全文
摘要:
5. 排除编译错误。 这部分主要是修改C99的语法,常见的不兼容语法如下:5.1 例如在文件av_codec_4xm.c最后的结构体初始化代码如下:AVCodec ff_fourxm_decoder = { .name = "4xm", .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_4XM, .priv_data_size = sizeof(FourXContext), .init = decode_init, .close ... 阅读全文
摘要:
前面我们已经把文件重命名了,准备好了代码之后就是把代码添加到vs2008开发环境中来。3. 创建工程添加文件。 创建新的空的控制台工程,把所有的文件都添加进来。有几个文件夹下面的文件不用添加,主要有compat,libavdevice,tools。要注意的是子目录x86下面的c文件也需要添加进来。 上图之中test文件夹里面有些文件是自己添加的,它们是config.h, ffmpeg_init_av_pix_fmt_descriptor.c,g_var_func_init.c 添加完文件之后,不要编译,因为编译会占用较长时间,而且会有成千上万的错误。4. 完善config.h文件 ... 阅读全文
摘要:
做音视频编解码的人都知道ffmpeg。然而,要想在windows上调试ffmpeg却不是一件容易的事情。之前也曾经把x264的代码移植到vs2008上面,具体可以参见我前面的文章。最近终于把ffmpeg的最新代码完全移植到vs2008环境中来。在移植过程中深深的感觉到codec的多样性,我虽然在codec领域工作了很多年,但是ffmpeg里面大多数codec甚至连名字都没有见过。下面把移植过程中需要注意的问题描述一下。首先,必须要有坚强的毅力和决心。ffmpeg代码量超级大,其总共有3千多个文件,将近100w行代码。移植ffmpeg是一项体力很繁重的活,所以,如果你决定要做,就不要中途放弃。其 阅读全文
摘要:
经过我长达半年时间的预研与优化,我的美白磨皮算法基本上可以拿来商用了。测试图片的效果表明,我的美白磨皮的算法已经超过ios上各类图像特效软件的处理结果。先来看我用openCv做的demo:算法有4个可调的参数,用以控制细节,由于可调的参数太多,导致openCv的主窗口没法显示全部的图像。可以来看一下处理之前后的对比图像:处理之前:美白磨皮之后:再来看另外一张人脸的效果:算法处理之前:美白磨皮算法之后: 阅读全文
摘要:
MMX指令有8个64位寄存器(MM0~MM7),不过可惜都是借的FPU的, FPU原来有8个80位寄存器(st(0)~st(7)),现在用在了MMX上,所以用之后要加上一条EMMS指令,用以复位.MMX寄存器有64位,可以同时进行8对字节或4对字或2对双字同时相同操作,还可以进行饱和运算,不会溢出,当然也可以进行普通运算.特别要注意的一点是:在x86上,一个字,WORD的长度是16位,而在ARM上,一个WORD的长度是32位。描述约定: MM表示64位MMX寄存器. r32表示32位通用寄存器或esi,edi m32表示32位内存变量 m64表示64位内存变量 m128表示128位内存变量 i 阅读全文