2019-周报1

本周对视频编解码的几种框架进行了比较,给出了初步的方案设计,人脸识别方面,查阅了相关论文,对二十世纪七十年代至今的各种人脸识别算法做了总结,具体情况如下。

1 视频编解码方案设计

​ 视频编解码部分,现已确定编码使用hevc-nvenc编码器,解码使用hevc-cuvid解码器,拼接使用CUDA编程在GPU内实现。关键在于使用哪个框架使得编程实现最方便,以下是几种编解码方案的介绍及对比情况。

1.1 Video Codec SDK

Video Codec SDK 是NVIDIA官方推出的开发工具包,使用该工具包可以直接调用NVIDIA支持的编解码器,目前最新版本是8.2.

图1.NVIDIA CODEC

其它所有支持NVIDIA硬编码的框架都是在这基础上进行的二次开发,如ffmpeg。直接使用该开发包进行编解码效率最高,但是参数众多,学习成本高。

1.2 使用opencv编解码

​ opencv编程简单,有类似matlab一般便利的函数接口使用起来非常方便,且内置视频编解码模块cudacodec。

图2.OpenCV CUDA accelerated

但是进一步调查发现opencv对视频编解码的支持比较老旧,模块中包含的视频编解码器十分有限且不具备hevc-nvenc与hevc-cuvid,具体包含的编解器如下图。

图3.OpenCV CODEC

若要使其支持,需要自己手动添加ffmpeg最新库使其支持,既麻烦也没有必要,所以编解码放弃使用opencv实现。

1.3 FFmpeg / libav

ffmpeg/libav库为NVIDIA官方推荐的视频编解码框架,支持所有NVIDIA最新的编解码器。在安装NVIDIA最新的视频编解码开发包Video Codec SDK 8.2之后便可以使用ffmpeg/libav调用NVIDIA的编码器/解码器。

1.4 总结

​ 从上面的介绍可以看出,以上三个框架从底层到高层的顺序为:Video Codec SDK–>FFmpeg / libav–>OpenCV。其中OpenCV的封装最高级,使用起来最为方便,但是其最新版本不支持英伟达的HEVC编解码器,FFmpeg很好地支持英伟达最新编解码器,其使用起来相比Video Codec SDK方便,所以目前确定开放方案如下

  • 编解码框架:ffmpeg
  • 拼接:CUDA
  • 开发环境:VisualStudio2015

疑问: ffmpeg在windows上使用MinGW编译器编译,CUDA程序使用NVCC编译器编译,目前还不清楚将FFmpeg与CUDA结合使用的具体方法???

1.5 参考资料

NVIDIA VIDEO CODEC SDK

NVIDIA-FFmpeg/libav

OpenCV 4.0 docs

OpenCV Video Encoding/Decoding

FFmpeg/libav


2 人脸识别算法调研

​ 最早的关于人脸识别的研究出现在20世纪50年代的心理学领域[Bruner and Tagiuri 1954],到20世纪60年代才逐渐有了一些工程上的文献出现[Bledsoe 1964]. 但真正关于机器自动识别的研究开始于20世纪70年代[Kelly 1970] ,Kanade [1973]。20世纪50年代以来,心理学家和神经科学家的研究对此领域影响重大,并出现了一系列重要的成果与算法。

2.1 人脸识别的主要步骤与影响因素

​ 相比与指纹识别,虹膜,视网膜识别之类的技术。人脸识别不需要被识别者的主动配合,因此具有很大的商业价值,所以一直受到学者的重视。在这个领域中很难说哪一种算法比另一种更好,这取决于应用场景,背景简单或复杂,图像识别或者是视频识别,图像质量的好坏,数据集的多少都对算法有着很大地影响。通常来说,一个人脸识别系统包括人脸检测,特征提取,人脸识别/匹配三个部分,如下图所示。

图4.face recognition steps

影响人脸识别算法性能的问题有很多,其中最重要的两个问题为:

  1. 光照问题
  2. 姿势问题

2.2 人脸识别主要算法介绍

​ 下面主要介绍近四十年来人脸识别领域的各种经典算法,关于人脸识别算法的分类方法很多,下面按照年代顺序介绍最为主要的一些算法

2.2.1 基于几何特征的人脸识别算法

​ 作为最早的人脸识别方法,人们最先想到的便是对人脸的几何特征进行提取识别,使用眼睛、鼻子、嘴巴、下巴等重要特征的几何关系来描述人脸的轮廓。但实际效果并不乐观,识别能力与速度以及算法的鲁棒性都不够高,通常需要与其它方法结合使用。

2.2.2 主成分分析法(Principle-component-analysis,PCA)

​ 主成分分析法是应用极为广泛的经典传统算法,包括Eigenface,fisherface,LBP(Local Binary Patterns)等经典方法。

2.2.2.1 EigenFace

​ EigenFace又称特征脸或者本征脸方法,是90年代初期由Turk和Pentland提出的目前最流行的算法之一,具有简单有效的特。

​ 特征子脸技术的基本思想是:从统计的观点,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量称为特征脸(Eigenface)。

图5.EigenFace

2.2.2.2 FisherFace

​ FisherFace是另一种特征子空间的构建方法,和EigenFace的思想一致,在PCA的基础上加入了LDA(Linear Discriminant Analysis)构建的子空间

2.2.3 神经网络

​ 在神经网络方法之前,都是采取人工提取特征+分类器分类的方式。如上面提到的EigenFace,FisherFace,LBP等特征提取,除此之外还HOG,SIFT,Gabor等特征提取方法。而神经网络不需要认为提取特征,通过在大量数据中模型自动学习特征,也是目前人脸识别中正确率最高的方法,但缺点是所需数据量大,在缺少数据的场合通常使用人工提取特征的方法。

2.2.4 其它算法

图6.categories

2.3 参考资料

  1. Zhao, Wenyi, et al. “Face recognition: A literature survey.” ACM computing surveys (CSUR) 35.4 (2003): 399-458.
  2. Pandya, Jigar M., Devang Rathod, and Jigna J. Jadav. “A survey of face recognition approach.” International Journal of Engineering Research and Applications (IJERA) 3.1 (2013): 632-635.
  3. Vijayakumari, V. “Face recognition techniques: A survey.” World journal of computer application and technology 1.2 (2013): 41-50.
Share Comments