写给学习H.264(运动估计)的朋友们——流川(注:节选)

来源:互联网 发布:游族网络林奇2017 编辑:程序博客网 时间:2024/05/17 02:17
       正在我非常迷茫的时候,一个关键性的人物给了我很大的帮助,他就是我所请教的那个导师的一个学生,经我一个师弟介绍我们认识了。认识他真是件很愉快的事情,第一天晚上就和他讨论了很多问题,更可贵的是他把jm10.1版本的代码怎么来调试,怎么来配置参数给我讲解明白了。这可帮大忙了,不但我基本知道了运动估计算法理论怎么来看,而且还和代码对应了起来,此后的一段时间内,我和他经常讨论,进步是神速的。我首先研究的算法是最经典的非对称十字型多层次六边形各点运动估计搜索算法(简称为UMHexagons)。这个算法是由清华大学几个牛人提出的,已经被H.264标准正式采纳。首先研究这个算法是因为JM代码中有这个算法的标准实现。这个算法看理论不怎么难,但是用算法真实的实现起来感觉还是有点难,代码量不小,而且很多参数的意义根本搞不明白。我就盯这代码的理论描述和代码的语言具体实现死抠,通过调试打印看参数值来推测他们所代表的意思,终于有了一点的收获。因为这个算法是整合了以前好几个简单的算法,要想把这个算法研究透彻,必须去深入地研究以前的小算法,结合在群的共享中下载的代码<各种运动估计算法代码>学习,其中包括全搜索算法(FS)、三步搜索算法(TSS)、梯度下降搜索算法(BBGDS)、四步法(FSS)、菱形搜索算法(DS)、六边形搜索(HEXBS)、Mvfast、Pmvfast、search_ARPS、search_ARPS3、search_CDHS等。只有把这些算法仔细的搞清楚了,才能在这些算法的基础上有所创新和突破,通过设置JM10.1 配置encoder_baseline.cfg中的参数UseFME的值来决定选用那种算法。
(1)当UseFME = 0时表示不用快速搜索算法,而是用最原始的全搜索(FS)算法。提供这个算法的主要目的是为了方便大家做研究用,可以将自己优化的快速搜索算法的图象质量和全搜索算法的图象质量进行比较,从而知道自己优化后的算法对图象质量大小的影响;
(2)当UseFME = 1时表示用UMHexagonS搜索算法。这个算法的代码写得很规范,也是我们做运动估计应该重点研究的算法,因为这个算法是在前人研究的基础上进行了深度的整合,把六边形搜索、菱形搜索算法都揉和了进来,同加加入了很多实验经验终止条件,大大提高了搜索的效率而且保持了图象质量, 把这个算法的来龙去脉搞清楚非常有助于我们后面的研究;
(3)当UseFME = 2时表示用Simplified UMHexagonS算法。这个算法是对UMHexagonS算法的一个简化,大致研究下就可以了;

(4)当UMHexagonS = 3时表示用EPZS搜索算法。EPZS(Enhanced Predictive Zonal Search)是一种预测搜索算法,该算法选择更多的预测矢量和多模式搜索路径,企图从几个非常可能的矢量中预测最佳运动矢量。EPZS是一个比较新的搜索算法,建议现在做运动估计的同学可以好好对这个算法研究下,研究下这个算法能写篇高质量的论文出来没有问题。

JM代码:建议搞运动估计这部分的同学,下面几个文件你是一定要看,而且要看明白,因为运动估计代码都要涉及这几个文件:mv_search.h, mv_search.c, fast_me.h, fast_me.h, epzs.h, epzs.c, mode_decision.h, mode_decision.c。

对你最有帮助的文献就是查找一些近一两年发表的这个方面的高质量文章,笔者建议你去IEEE下载,有不少好文章,不建议你看中文的,中文的比如你下的优秀硕士论文,可以作为你将来写论文时候的参考,看下大致的格式,章节安排什么的,千万别去看那上面的算法,很多都没有太大的价值。在IEEE上下二十篇左右的文章就够了,那么怎么利用这些文章来帮助你完成你的算法实现呢?笔者建议你仔细阅读这些文章,这些文章一般分为两大类:一类是原创的,一类是在本文前面介绍的经典算法基础上做的优化,前者一般是作者提出了一个全新的算法,给出了整个算法的流程和测试结果,和其他现有算法的比较,这种原创性的一般比较难。后者就比较简单点了,因为你已经掌握了我所说的把理论转化为代码的方法和能力,那么现在读起文章来就比较简单了,一篇一篇地研究,最好把你认为容易实现的先在代码中跑起来。笔者发现下载到的文章基本都能在JM代码中跑起来,这样你把你下载的文章研究一遍大约需要一个半月的时间,在这个过程中你的收获会非常大的。等你把这些研究完了,你的论文也基本就做出来了,为什么这么说呢?因为在这个过程中,你对前面经典的算法都理解了,而且你又在看这个领域国际上最新的研究成果,那么你会结合你所研究过的所有的东西整合出来一个算法或者对前面的算法做一个更好的优化,这样任何一种方法都可以作为你的论文了。或者你也可以写篇文章来发表一下,能走到这一步就恭喜你,你的论文做出来了,可以让你的导师去看,基本可以顺利通过答辩了,笔者回顾了以下自己写作论文过程:
    2008-04-06 调研论文到底做什么,最后定位到了视频编解码方面,补充了一些基础知识。
    2008-06-07 通过对整个编码流程的了解,选择了最容易突破和出成果的运动估计部分作为研究的切入点。
    2008-07-09 完成了对以前经典算法的研究和对当前这个领域所发表的最新论文的学习,把握了当前的研究进展,完成了算法的优化工作。
    2008-09-15 在导师的鼓励下把自己的研究成果写成了文章,投递到了<电子学报>,前几天得到了被录用的消息。
    2008-09-30 完成了硕士毕业论文书写,这个过程其实就纯属整理了,不需要什么思考,按学校要求的格式来弄就行了。

在这个过程中有两个关键的概念:一个是空间预测,一个是时间预测,也就是中值矢量和时间矢量如何获取,他们两个之间的关系,需要朋友们不但从理论上理解他们而且在代码中要灵活应用。

0 0
原创粉丝点击