HM过程

HM-16.0的解码过程:将编码后的*.bin文件解码 文章描写了HM16.0将HEVC格式的码流(*.bin)文件解码的过程 阅读详情

HM的代码流程

转自http://blog.youkuaiyun.com/hq2902108007/article/details/8965090

1. 环境配置

这个文档描述的版本是HM6.0

运行的方法如下可参考之前的文章:

2. 编码端主函数的调用

主函数中会调用create函数,但是这里面是空函数,所以不做任何操作

encode是非常重要的函数,负责了实际的编码工作,在里面调用m_cTEncTop的encode

函数对每个GOP进行编码,并对每个GOP调用compressGOP。GOP的概念在HEVC中规定的并没有H.264/AVC那么严格,在H.264/AVC中,GOP是以I slice开始,而HEVC中并没有这样的规定,相当于弱化了HEVC中GOP的概念。

3. GOP划分为Slice

GOP进而会划分为slice,有raster顺序的划分和tile的划分方式,对每个slice会调用

compressSlice来的对其选出最优的参数。然后调用encodeSlice来对其进行实际的熵编码工作。

Slice:Slice是一帧中按光栅扫描顺序排列的CTU序列。一帧可以由多个Slice组成。每个Slice可以独立解码,因为Slice内像素的预测不能跨越Slice的边界。每个Slice可以按照编码类型的不同分为I/P/B Slice。该结构的主要目的是实现在传输中遭遇数据丢失后的重新同步。每个Slice可携带的最大比特数通常受限,因此根据视频场景的运动程度,Slice所包含的的CTU数量可能有很大不同。

Dependent Slice:其编码或解码的熵编码CABAC上下文状态是以上一个Slice为基础,因此,它不能完成数据丢失后的重新同步。该技术可以理解为对原先NALU数据的进一步拆分,可以适合更加灵活的打包方式。

Tile:是帧内可以进行解码的矩形区域,包含多个按矩形排列的CTU(数目不要求一定相同),定义这一结构的初衷是增强编解码的并行处理性能,同一个slice内的多个tiles可以共享相同的头信息,一个tile也可以包含多个slice,不管是slice包含tile,还是tile包含slice都必须是整数包含的关系。

4. Slice的划分(Slice到LCU)

到Slice层面后,会划分等大的LCU,对每个CU进行compress和encode的工作,调用的函数分别为compressCU和encodeCU。而在CompressSlice和EncoderSlice中都会调用encodeCU,是为了保证后续计算码率的准确性,重点在于保证了cabac的状态是准确的。下面将介绍compressCU和encodeCU,由于RDO的时候会编码CU的信息,所以着重介绍compressCU

5. compressCU

把一个slice内部的图像划分为K个LCU,同时这K个LCU是以raster的顺序来进行扫描的。LCU的尺寸默认为64x64,可以通过配置文件中的MaxCUWidth,MaxCUHeight来进行设置。而每个LCU会调用如下的compressCU函数去决定编码的参数。 而LCU是采用四叉树的表示结构,每个LCU会被递归的划分为4个子CU,并根据RD代价来确定是否进行划分,而每个LCU相当于树的第1层,所以他会调用xCompressCU。且在xCompressCU中会对每个子CU递归的调用xCompressCU,如下图所示,当然子CU的尺寸是当前CU的四分之一。

然而在每次xCompressCU时,会对当前CU进行intra模式的测试,如果是B或Pslice,还对其进行merge和inter模式的测试。下面分别介绍intra,inter和merge相关的代码

5.1 帧内

intra的调用流程如下:

estIntraPredQT主要做模式选择的工作,负责选出对于当前PU的最优模式,如DC,或方向性,或planar。estIntraPredChromaQT做了类似的工作,不过是针对于色度。xRecurIntraCodingQT和xRecurIntraChromaCodingQT函数是依据给定的候选模式进行PU的分割,进而依据TU进行重建estIntraPredQT。

5.1.1 estIntraPredQT

在这里面首先对N个候选模式进行粗粒度筛选

代价函数为,从M个模式选出N个最可能的候选模式。所涉及的函数:

l predIntraLumaAng: 算出当前PU的预测值

l calcHAD: 计算SATD代价

l xModeBitsIntra: 计算当前模式所耗费的比特数目

l xUpdateCandList: 更新模式的代价,保持前N个模式的代价最小

在选出N个模式后,这N个模式会进入xRecurIntraCodingQT函数从而进行TU的分割

5.1.2 xRecurIntraCodingQT

为了加速RQT过程,这个函数会被调用两次:

第一次的调用不进行PU分割为TU的过程,PU直接转换为TU,只为算出N个模式的RD代价,从而选出一个最优的,在这个最优的模式被选出后,会第二次调用这个函数,再对这个最优的模式进行PU的分割。区分第一次和第二次调用的变量是bCheckFirst。这个过程所涉及的函数有:

l xIntraCodingLumaBlk: 进行对当前TU进行求残差,对残差变换,量化,反量化,反变换,重建当前TU等一系列编码工作,并求得失真

l xGetIntraBitsQT: 求出当前模式的所有信息进行熵编码会产生的比特数

l calcRdCos:根据xIntraCodingLumaBlk得到的失真和xGetIntraBitsQT产生的比特数目进行RD代价的计算,从而比较各模式的优劣

l xSetIntraResultQT:保存最优模式的数据

5.1.3 estIntraPredChromaQT

estIntraPredChromaQT会决定当前PU采用哪个色度模型对色度分量进行编码,其中涉及的函数如下:

l getAllowedChromaDir:获得可用的色度

l xRecurIntraChromaCodingQT:进行当前PU的色度分量的一系列编码工作,并求得失真

l xGetIntraBitsQT:进行当前PU的色度分量的熵编码工作,并得到产生的比特数

l calcRdCost:根据失真和码率进行率失真代价的计算

l xSetIntraResultChromaQT:保存当前色度最优模式的信息

5.1.4 xRecurIntraChromaCodingQT

这个函数是求PU的色度分量的残差,首先会对PU进行分割,分割的层数与亮度完全一致。涉及的函数如下:

l xIntraCodingChromaBlk:对当前TU进行色度信息的编码工作,如求残差,变换,量化,反量化,反变换,重建等一系列工作

5.2 帧间

帧间按默认的配置文件设置有两种:inter模式和merge模式

5.2.1 inter模式和merge模式的流程

主要调用流程:

Inter流程

Merge流程

流程中涉及的函数:

l predInterSearch进行的是ME和MC的过程,当然会测试各种情况

l Motioncompensation进行的是MC的工作,由于merge模式没有ME的过程,是将已有的MV信息直接代替当前PU的MV,所以直接进行MC

l encodeResAndCalcRdInterCU是对得到预测值后求出的残差进行TU的划分及RD代价的计算

5.2.2 encodeResAndCalcRdInterCU

涉及的主要函数:

l encodeSkipFlag:编码SKIP模式的flag

l encodeMergeIndex:编码选用哪套运动参数的索引

xEstimateResidualQT:在非SKIP模式的时候要进行RQT的决定,即PU分割为什么样的TU在这个函数里面确定

l xAddSymbolBitsInter:计算当前CU的信息在进行熵编码时所产生的比特数

l xSetResidualQTData:保存当前CU的最优的残差信息

6. 一些其他常用的函数说明:

6.1 预测

6.1.1 帧内

l initPattern:判断周围块的存在性

l initAdiPattern:获取周围像素的值当做生成预测值的像素,并开辟出一片缓存 区存储经过多种滤波类型的预测值

l getPredictorPtr:根据不同模式选择经过不同类型滤波的预测集

l predIntraLumaAng: 对亮度信号进行预测,里面会调用xPredIntraPlanar,xPredIntraAng以及xDCPredFiltering

l predIntraChromaAng: 对色度信号进行预测,里面会调用xPredIntraPlanar和xPredIntraAng

l xPredIntraPlanar: planar模式的预测

l xPredIntraAng: 角度的方向性预测

l xDCPredFiltering: 对DC的预测值进行滤波

l getLumaRecPixels: 获取亮度的重建值,为进行LM模式的预测做准备

l predLMIntraChroma:对LM模式进行预测,即利用亮度的相关性,对色度进行预测

6.1.2 帧间

l getInterMergeCandidates: 获取merge的候选运动参数集

l motionCompensation:进行运动补偿

l xMotionEstimation:进行运动估计

l xEstimateMvPredAMVP:选出代价最小的MVP

l xCheckBestMVP:在知道MV的情况下比较各个MVP的优劣,并保存最优的

l xMergeEstimation:在inter模式时也可以使用merge模式的运动估计方法,这个函数用于计算这种情况时的代价

6.2 变换

l transformNxN:会调用xT和xQuant函数

l invtransformNxN:会调用xDeQuant和xIT函数

l xT: 对残差信号进行变换

l xQuant:对变换系数进行量化

l xDeQuant:反量化

l xIT:反变换

6.3 熵编码

在这节中主要介绍编码端为算RD代价而设计的熵编码函数,实际的熵编码函数在后面的章节中进行介绍

主要函数:

6.3.1 帧内熵编码

l xEncIntraHeader:编码intra的一些头部信息,主要包括:模式号,PU的分割类型,PCM标志,如果是B或P slice,还包括skip的标志位和编码模式的类型

l xEncSubdivCbfQT:会编码Cbf和TU分割的标志位

l xEncCoeffQT:编码每个TU的系数

l encodeCoeffNxN:调用codeCoeffNxN来编码每个TU的残差系数

l encodeTransformSubdivFlag:调用codeTransformSubdivFlag来编码TU分割的标志,是否继续分割

l encodeQtCbf:编码cbf标志位,检查是否有非零的系数

l encodePredMode:编码所采用的编码模式

l encodePartSize:编码PU的分割类型

l encodeIntraDirModeLuma:编码PU的亮度模式号,这里引入了3MPM的机制,具体可参考提案H0238

l encodeIntraDirModeChroma:编码PU的色度模式号

6.3.2 帧间熵编码

l encodePredMode:编码CU所采用的模式,主要决定是inter还是intra

l encodePredInfo:编码运动参数

(1) merge的标志位来区别是否采用merge模式,具体函数:encodeMergeFlag

然后分(2)和(3)两种情况。

(2) merge模式:只需传输运动候选集的索引,具体函数:encodeMergeIndex

(3) 正常的inter模式

A. encodeInterDirPU:编码帧间的预测方向,前向,后向,或多方向

B. encodeRefFrmIdxPU: 编码参考帧索引

C. encodeMvdPU:编码MV的残差MVD

D. encodeMVPIdxPU: 编码MVP的索引

7. EncoderCU

HEVC以LCU为基本单位,所以在进行熵编码时也是以LCU为单位进行的EncodeCU会调用从而对每个CU进行编码,如下图所示,在xEncodeCU中会调用如下几个函数:

encodeSkipFlag编码是否是skip模式

encodeMergeIndex如果是skip模式会编码选用哪套MVP的参数

encodePredMode编码CU的模式,是intra还是inter

encodePartSize编码CU中的PU的类型

encodeIPCMInfo 如果选用了PCM模式会编码PCM模式的信息

encodePredInfo编码预测的信息,如果是帧内,编码模式号,如果是帧间,则编码运动信息

encodeCoeff编码残差系数

encodeCoeff中会编码TU的分割标志位,cbf和残差系数的信息

而具体的信息可以参照3.3节

8. 一些主要变量和数据结构的说明:

8.1 TComDataCU:LCU及其子CU的数据结构,存储了一个LCU所有的相关信息,里面重要的数据结构包括:

l m_uiCUAddr:一个LCU在slice中的位置

l m_uiAbsIdxInLCU:当前CU在LCU中的位置,位置用Z扫描顺序

l m_puhWidth: CU的宽度

l m_puhHeight:CU的高度

l m_puhDepth: CU所处的深度

l m_pePartSize: PU的类型

l m_pePredMode:编码模式

l m_pcTrCoeffY,m_pcTrCoeffCb,m_pcTrCoeffCr:量化后的系数

l m_puhLumaIntraDir:亮度的模式信息

l m_puhChromaIntraDir:色度的模式信息

l m_puhInterDir:帧间的预测方向

l m_apiMVPIdx:MVP索引

l m_apiMVPNum:MVP的候选数

以上的数据结构都是以动态存储来分配空间,一般只有一维,这一维具体取值的含义就是CU里面的每个对应的4x4的小块的信息,而开辟的数目就是CU所包含的4x4的数目,而在实际编码时也是编码了这些信息。

需要着重说明2点

(1) m_uiCUAddr是一个LCU在slice中的位置,是raster的扫描顺序

(2) m_uiAbsIdxInLCU是表明CU在LCU中的位置,Z扫描顺序,最小单位为1,代表

其中的一个4x4子块,Z扫描顺序如下图所示

(3) Z扫描转换,如下图所示,展示了一个CU内部的Z扫描的顺序,在hevc中,Z扫描顺序是以4x4为基本单位的,一个具有默认尺寸的LCU,具有256个基本单元

8.2 RDO时所用到的主要临时变量

l m_ppcQTTempCoeffY,m_ppcQTTempCoeffCb,m_ppcQTTempCoeffCr:RQT时每层的量化系数,都保存在此,是为了确定最终分割后可以很容易的获取最优值

l m_pcQTTempCoeffY,m_pcQTTempCoeffCb,m_pcQTTempCoeffCr:CU层的量化系数暂存地,只有帧间编码时才会用到,是中间变量

l m_pcQTTempTComYuv: 重建视频的暂存缓冲区

l m_puhQTTempCbf: cbf的暂存

l m_puhQTTempTrIdx:变换层数的暂存

l m_ppcBestCU:存储每层最优(RD代价最小)的CU的信息

l m_ppcTempCU: 存储每层CU的信息的临时变量

l m_ppcPredYuvBest: 存储每层最优的预测值

l m_ppcResiYuvBest:存储每层最优的残差值

l m_ppcRecoYuvBest:存储每层最优的重建值

l m_ppcPredYuvTemp:存储每层预测值的临时变量

l m_ppcResiYuvTemp:存储每层残差值的临时变量

l m_ppcRecoYuvTemp:存储每层重建值的临时变量

l m_ppcOrigYuv::存储每层对应的原始值

8.3 yuv的存储的关系

8.3.1 TComYuv数据结构

由m_apiBufY,m_apiBufU以及m_apiBufV三个buffer组成,通用的yuv数据结构,存储是yuv的亮度和色度信息

8.3.2 TComPicYuv数据结构

图像层级的yuv数据结构,存储的是一帧的yuv信息,主要用于ALF和去方块滤波等处理的过程中

TComYuv的类型的变量存储的是RDO时的值,最优的信息要存在TComPicYuv中,便于输出和进行全局处理

9. 解码端的简单说明

9.1 xDecodeCU: 与xEncodeCU类似,进行LCU的读取码流并存至变量的工作,可以理解为与xEncodeCU的逆过程。涉及的函数如下:

l decodeSkipFlag:解码skip的flag,看是不是skip模式

l decodePredMode:解码编码模式

l decodePartSize: 解码PU分割的类型

l decodePredInfo:解码预测信息,帧内就是解码模式信息,帧间是解码运动信息

l decodeCoeff:解码量化系数

9.2 xDecompressCU: 具体的任务为重建这个LCU,涉及的函数如下:

9.2.1 xReconInter

负责inter部分的重建,主要函数如下:

l xDecodeInterTexture:分别对YUV分量调用invRecurTransformNxN

l invRecurTransformNxN:对特定分量进行TU的反量化和反变换

l addClip:得到残差后会加上预测值形成重建指

l copyPartToPartYuv:如果系数全是零,则直接将重构值赋值为预测值

9.2.2 xReconIntraQT

负责intra部分的重建

xIntraLumaRecQT:亮度信息的重建,会对每个TU调用xIntraRecLumaBlk

xIntraRecLumaBlk:TU的亮度信息反量化及重建工作

xIntraChromaRecQT:色度信息的重建,会对每个TU调用xIntraRecChromaBlk:TU的色度信息反量化及重建工作

HM调用函数的简要过程1 CompressGOP->CompressSlice->EncodeSlice Void TEncGOP::compressGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*&gt... 阅读详情

相关推荐

HM-16.0编码过程:将YUV文件编码成HEVC格式的码流

文章以akiyo_qcif.yuv为例,描述了HM-16.0的编码过程,将YUV文件编码成了HEVC格式的码流(*.bin)。

smilehehe110的博客 6246

HEVC:函数xEstimateInterResidualQT()注释

这个函数主要包括TU单元的变化量化,反变换反量化,熵编码其中transformNxN函数为变化量化主函数其中invtransformNxN函数为反变换反量化主函数/* ** 估计残差的编码代价 ** 主要是进行变换量化以及熵编码,然后选出最优的模式 */ Void TEncSearch::xEstimateInterResidualQT(TComYuv *pcResi, Dou...

Moomin的博客 1621

H.265/HEVC视频编码-HM16.9配置文件设置

H.265/HEVC视频编码学习,HM-16.9调试过程。

qq_42539958的博客 2282

HEVC函数入门(14)——建议先看:整个编码流程以及相关的函数

这篇文章本来要放在前面的,但是我看到的晚,然后发现很有用,就转载一下吧。 转自:http://blog.youkuaiyun.com/nb_vol_1/article/details/51144828该作者也是转载,但是没有找到原地址。在此表示对这篇文章作者的感谢。 整个流程可以从compressGOP函数开始着手: 1、compressGOP对一整个图像组(GOP)进行编码,主要是遍历GOP中每

不是他人太努力,只是自己努力不够罢了 3417

小熊派鸿蒙开发板环境搭建过程(HarmonyOS BearPi-HM Nano)

小熊派鸿蒙开发板环境搭建过程 实验环境: 小熊派开发板,基于Hi3861V100海思芯片 Win10系统 Oracle VM VirtualBox虚拟机 Ubuntu系统安装包 官方提供环境教程(基本按照这个步骤来走) 一、【BearPi-HM_Nano开发搭建环境】https://bbs.elecfans.com/jishu_2058316_1_1.html 二、【BearPi-HM_Nano源码获取】https://bbs.elecfans.com/jishu_2058318_1_1.h

赵小龙Corder 4042

HM调试成功————二

第一步:下载HM14.0,YUV播放器,官方测试序列。 第二部:在VS2013上调试HM14.0,并编码解码,再对比前后的视频效果。 第三步:在VS2013中打开文件 C:\Users\VIP\Desktop\HM14.0\HM-14.0\build\HM_vc10 第四步:将TAPPENCODER设置为启动项,将要测试的测试序列添加到C:\Users\VIP\Desktop\HM14.0\

yang-彧 2316

HEVC:与变换量化有关的变量(HM16.17)

主要集中在函数xEstimateInterResidualQT()和encodeResAndCalcRdInterCU()中函数xEstimateInterResidualQT()const UInt uiDepth = rTu.GetTransformDepthTotal();//CU深度+TU深度(相对于CU而言的深度) const UInt uiTrMode = rTu.GetTransfo...

Moomin的博客 1026

Excel药品说明书数据库:从零开始搭建医药数据查询系统(附完整模板)

本文详细介绍了如何从零开始搭建Excel药品说明书数据库,提供完整的医药数据查询系统模板。涵盖数据库架构设计、数据清洗标准化、智能查询系统搭建及维护优化,帮助医药从业者高效管理药品信息,提升查询速度和准确性。

weixin_28327051的博客 235

H.266/VVC代码学习1:帧内预测框架(20190528更新VTM5.0)

本人是西电研一的一名普通学生,现在在通院信科所多媒体通信实验室,主要研究方向是视频编码标准H.266/VVC。如很多刚上研同学一样,入学以来经历了迷茫、对科研方向无从下手等问题。两个月来,在理清视频编码结构后,终于渐渐理解并敢于修改VVC的代码。并准备在博客这个平台上记录自己的学习,希望可以与更优秀的人交流讨论。 第一次写微博,准备多说些。我是在2017年4月了解的视频编码,当时的计网老师也就是我...

时间有泪 9490

深度学习模型设计的方法和技巧

设计神经网络模型是一个迭代的过程,需要不断试验和调整各个组成部分,以达到最佳性能。同时,遵循良好的工程实践,如模块化设计、版本控制、文档记录等,也是成功的关键。

xw555666的博客 4027

ArcGIS中如何计算多个点到特定线的最短距离

现有一个点图层和一个面图层,怎么来计算这些点到这个面图层,两个面的公共边的最短直线距离呢? 1.首先得将两个图层都转为 投影坐标系 打开工具箱-数据管理工具-要素-面转线 ​ ​ 2.将面图层设为输入要素 注意要将“识别和存储面邻域信息”勾选 ​ 3.面转线成功后 打开线属性表,线图层拥有了 LEFT_FID和RIGHT_FID两个字段 ​ 4.按属性选择,表达式中输入 “LEFT_FID”<>-1 即可选出两个面的公共边 ​再将选...

GIS蒲公英的博客 6727

HEVC/H.265整个程序调用流程分析以及函数复杂度分析

HEVC整个程序调用流程: Encode -> compressGOP -> compressCU ->xCompressCU->copyFromPicYuv ->xCheckRDCostIntra-> initEstData ->xCheckRDCostInter ->xCheckRDCostMerge2Nx2N ->getNumberOfWrittenBits ->copyToPi

飞翔 视频直播系统 1万+

(详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估计要搞吐。然后就想能不能用python的爬虫来实现,虽然过程比较苦(后期改bug改的要吐了)。但是会后还是将需求实现了。这基本也算是入门了 urllib、requests、selenium这几个py...

man_tou_22 1万+

HM16.7学习过程中bug记录

HM16.7学习过程中bug记录CompressGop函数中显示Yuv CompressGop函数中显示Yuv //2019.11.18 在CompressGop函数中,Rec指针是指向重建帧y分量(储存成一个行向量)的第一个像素的指针 Mat rec(496, 352, CV_8UC1, Scalar(0)); const Pel* Rec = pcPic->getPicYuvRec()-...

m0_37833297的博客 386

TSP:车为什么能和云端交互?

TSP:车为什么能和云端交互?

天赐好车的博客 416

【模型】OpenClaw 接入阿里云永久免费模型方案

Qwen2.5-7B-Instruct 模型为例。

海兰 4475

小米手机(HM1SW)高通开发android程序全过程

小米手机(HM1SW)开发android程序全过程 修改历史:   2016年5月9日 -------- 整理文档     a.增加了手机基本信息.     b.增加360手机助手连接说明   2016年2月26日 ------ 初始化版本          1.手机具体配置:   红米1S高通版本 手机型号:http://item.jd.com/1121512...

weixin_30362801的博客 296

61、神经科学中的分岔与双分子反应研究

本文探讨了神经科学中的分岔现象与双分子反应建模。在神经元网络中,通过分析四细胞网络的呼吸节律振荡,揭示了分岔对振荡频率和占空比的影响,并区分了单神经元与网络层面的分岔特性。在神经群体模型中,系统参数变化引发的分岔可导致振荡、混沌等动态行为转变,文中详细介绍了局部分岔、全局分岔和高余维分岔的机制,并以Jansen-Rit模型为例展示了输入水平变化下的分岔过程。在分子层面,重点介绍了MWC模型在描述配体与多位点蛋白质结合中的应用,涵盖其构象状态、平衡常数及统计因子。研究表明,分岔理论和双分子反应建模为理解神经系

yog99的博客 80

hm 10.0的运行过程

第一次接触hevc,什么都不懂,看着HM的代码连怎么编译都不知道,在师兄的指导下,终于指导怎么运行程序了。 编码过程: 首先将要运行的TAppEncoder工程设置为启动项目,然后属性里修改命令参数:     命令参数 -c 加上你的cfg所在的地址目录,保存后编译运行。 关于cfg文件,将inputfile改为你所存放的.yuv视频所在目录(注:.yuv文件需要自己下载)

924

system.img解包打包工具

最近需要对system.img进行解包,修改系统属性和添加自己的APK,再打包烧录,整理俩个方法。 system.img解包打包工具方法一 1、把system.img转换成ext4格式 ./simg2img system.img system_ext4.img 2、挂载ext4到systemMount目录进行修改 sudo mount system_ext4.img systemMount/ -o loop 3、修改完成后 unmount 退出挂载使用如下命令

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 9707

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

HM学习(一):梳理帧内预测编码过程

HM学习(一):梳理帧内编码过程 在HEVC中,帧内预测的过程大致可以分为三步,首先是参考像素的填充,参考像素的平滑滤波,利用参考像素值求出预测块像素的预测值 将HM工程在VS中打开后可以看到9个主要的工程,此次主要梳理的使用TAppEncoder进行帧内预测的过程。 我们展开TAppEncoder,可以看到其中有一个encmain.cpp文件,这无疑就是工程运行的main文件,...

RJzz 2698

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HM NIS Edit制作python脚本Windows安装程序制作过程

若提示“Error in script’错误信息’”表示编译脚本失败,请检查以上步骤后重试;底部结果提示窗,若无“Error in script’错误信息’”表示编译脚本成功;注:图标、文件建议英文,否则无法生成安装程序,文件生成后可以重命名不影响使用。注:楼主安装只第一个文件时无法显示安装语言的选择导致无法进行下一步,安装“选择用户如何接受许可正协议,古典按钮、勾选框、圆形单选框,建议默认;安装程序语言吗,建议“SimpChinese”;授权文件,如果有建议英文名字;应用程序默认目录,建议默认;

m0_50182581的博客 2222

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HM2019在车身拉伸过程中保证车轮的形状不变

车身拉伸过程中保证车轮的形状不变操作详解

m0_68731112的博客 471

HEVC学习之HM初使用

HEVC编码之HM学习欢迎一起学习HM1.如何下载HM2.搭配HM的运行环境3.HM生成解决方案4.HM环境配置5.对YUV视频进行编码6.运行HM7.查看HM生成的bin文件第一次学习HM,希望大家可以一起学习,谢谢!!! 欢迎一起学习HM HM是HEVC的官方标准测试模型,想要对HEVC进行了解,需要对HM源码进行一定解读才能够更加深入。 1.如何下载HM (1)HM不能直接下载,因为它是采用...

满目星辰 6187

hm编码工具使用_HM安装和使用方法

此文为学习JVET参考了HM的安装方法,转载自岳麓吹雪大牛的博客,膜拜。早期的HM解决方案包含了7个工程:1. TAppCommon 2. TAppDecoder 3. TAppEncoder4. TLibCommon 5. TLibDecoder 6. TLibEncoder 7. TLibVideoIO后来又增加了2个工程:1.TAppDecoderAnalyser 2.TLibDecode...

weixin_29911569的博客 1398

hm编码工具使用_HM中字典编码分析

LZ77算法基本过程http://jpkc.zust.edu.cn/2007/dmt/course/MMT03_05_2.htm输入待字典编码的CU,CopyCuFromPicYuv444(pcPic,m_pCuBuf, cuIdx,bEncOrg);待编码的输入64*64,重排序后的YUV (*(m_matchFinderBase.stream)).datavoid CDictEncoder::...

weixin_42706667的博客 673
上一篇: VS2013全攻略
下一篇: HEVC/H.265 Bistream Analysis Tools
yang-彧
博客等级 码龄12年 105粉丝 53原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值