tianyili2017 / HEVC-Complexity-Reduction

Source programs to test the deep-learning-based complexity reduction approach for HEVC, at both intra- and inter-modes.
124 stars 80 forks source link

请教:关于建立数据库。 #7

Open modeganqingdishashou opened 5 years ago

modeganqingdishashou commented 5 years ago

您好,我看了关于构建数据库的那部分,但是没有明白是如何构建的。因为我需要用于屏幕内容视频编码的培训,验证和测试数据,所以想请教您是如何将编码后CU的深度和CU亮度像素值信息提取出来,以构建数据库的呢? 希望您能回答,十分感谢!

tianyili2017 commented 5 years ago

您好。提取CU分割信息,最核心部分在 HM-16.5_Extract_Data/source/Lib/TLibEncoder/TEncSlice.cpp,第880~888行:

static Int xIn16, yIn16;
for (int x = 0; x<4; x++)
    for (int y = 0; y<4; y++)
    {
        xIn16 = 4 * (iAddr % iWidthInCTU) + x;
        yIn16 = 4 * (iAddr / iWidthInCTU) + y;
        if (xIn16 * 16 + 16 <= iWidth && yIn16 * 16 + 16 <= iHeight)
            piCUDepthList[yIn16*(iWidth / 16) + xIn16] = pCtu->getDepth(g_auiRasterToZscan[y * 64 + x * 4]);
    }

这段程序是在标准HM编码器的一个循环体中新增的,每编码完一个CTU,就执行一次。当一个CTU编码完成后,可以通过 pCtu->getDepth()函数,获得每个4×4像素块的CU深度。CTU尺寸为64×64,所以这个函数总共可以访问(64/4)×(64/4)=256个位置。但因为每个16×16像素块中,CU深度都相同,提取信息时只需访问 pCtu->getDepth() 的一部分位置,就可以推测出整个CTU所有位置的CU深度。其中,y和x代表每个16×16像素块在此CTU中的行、列序号,yIn16和xIn16代表每个16×16像素块在整个帧中的行、列序号。最终,所有16×16像素块的CU深度,都存储在新增的数组 piCUDepthList[]中,以便之后的程序将其保存成文件。

Liam-zzZ commented 5 years ago

问一个小问题:可以用什么工具打开提取的数据集呢? 想看看有没有错误

qin-liming commented 3 years ago

请问一下从小样本换成全部样本训练时,需要注意input_data.py和train_CNN_CTU64.py中哪里的修改,训练报错在images=data [:, 0:4096].astype(np.float32),MemoryError: Unabale to allocate 1.22Gib for an array with shape (80000,4096)and data type float32

tianyili2017 commented 3 years ago

images=data [:, 0:4096].astype(np.float32),MemoryError: Unabale to allocate 1.22Gib for an array with shape (80000,4096)and data type float32

您好,看问题描述应该是内存不足,可以再确认下报错之前内存是否接近全满。 如果是这样,可以在input_data.py里修改: TRAINSET_READSIZE = 80000 VALIDSET_READSIZE = 60000 TESTSET_READSIZE = 60000 这三行代表每次往内存里读入训练集、验证集和测试集的多少个样本,作为缓存。适当改小这三个变量,可以减小内存占用。 作为补偿,可以适当减小 train_CNN_CTU64.py 里的 ITER_TIMES_PER_CHANGE_TRAINSET = 2000,比如改为1000或者500,即增加训练集数据轮换的频率,防止总用同一批数据训练、多样性不足的倾向。

另外,也可以修改train_CNN_CTU64.py: BATCH_SIZE = 64 适当减小也可以降低内存占用。 但内存够用的前提下,batch size最好不要太小,以免影响训练的稳定性。

qin-liming commented 3 years ago

好的,了解了,谢谢谢谢!真的非常感谢!有问题再向您请教

------------------ 原始邮件 ------------------ 发件人: "tianyili2017/HEVC-Complexity-Reduction" <notifications@github.com>; 发送时间: 2021年1月4日(星期一) 下午2:56 收件人: "tianyili2017/HEVC-Complexity-Reduction"<HEVC-Complexity-Reduction@noreply.github.com>; 抄送: ""<1004318975@qq.com>;"Comment"<comment@noreply.github.com>; 主题: Re: [tianyili2017/HEVC-Complexity-Reduction] 请教:关于建立数据库。 (#7)

images=data [:, 0:4096].astype(np.float32),MemoryError: Unabale to allocate 1.22Gib for an array with shape (80000,4096)and data type float32

您好,看问题描述应该是内存不足,可以再确认下报错之前内存是否接近全满。 如果是这样,可以在input_data.py里修改: TRAINSET_READSIZE = 80000 VALIDSET_READSIZE = 60000 TESTSET_READSIZE = 60000 这三行代表每次往内存里读入训练集、验证集和测试集的多少个样本,作为缓存。适当改小这三个变量,可以减小内存占用。 作为补偿,可以适当减小 train_CNN_CTU64.py 里的 ITER_TIMES_PER_CHANGE_TRAINSET = 2000,比如改为1000或者500,即增加训练集数据轮换的频率,防止总用同一批数据训练、多样性不足的倾向。

另外,也可以修改train_CNN_CTU64.py: BATCH_SIZE = 64 适当减小也可以降低内存占用。 但内存够用的前提下,batch size最好不要太小,以免影响训练的稳定性。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

tianyili2017 commented 3 years ago

好的,不客气!谢谢您关注哈。

2021-01-04 15:05:56qin-liming notifications@github.comwrote:

好的,了解了,谢谢谢谢!真的非常感谢!有问题再向您请教

------------------ 原始邮件 ------------------ 发件人: "tianyili2017/HEVC-Complexity-Reduction" <notifications@github.com>; 发送时间: 2021年1月4日(星期一) 下午2:56 收件人: "tianyili2017/HEVC-Complexity-Reduction"<HEVC-Complexity-Reduction@noreply.github.com>; 抄送: ""<1004318975@qq.com>;"Comment"<comment@noreply.github.com>; 主题: Re: [tianyili2017/HEVC-Complexity-Reduction] 请教:关于建立数据库。 (#7)

images=data [:, 0:4096].astype(np.float32),MemoryError: Unabale to allocate 1.22Gib for an array with shape (80000,4096)and data type float32

您好,看问题描述应该是内存不足,可以再确认下报错之前内存是否接近全满。 如果是这样,可以在input_data.py里修改: TRAINSET_READSIZE = 80000 VALIDSET_READSIZE = 60000 TESTSET_READSIZE = 60000 这三行代表每次往内存里读入训练集、验证集和测试集的多少个样本,作为缓存。适当改小这三个变量,可以减小内存占用。 作为补偿,可以适当减小 train_CNN_CTU64.py 里的 ITER_TIMES_PER_CHANGE_TRAINSET = 2000,比如改为1000或者500,即增加训练集数据轮换的频率,防止总用同一批数据训练、多样性不足的倾向。

另外,也可以修改train_CNN_CTU64.py: BATCH_SIZE = 64 适当减小也可以降低内存占用。 但内存够用的前提下,batch size最好不要太小,以免影响训练的稳定性。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

tianyili2017 commented 3 years ago

问一个小问题:可以用什么工具打开提取的数据集呢? 想看看有没有错误

您好, 这里的数据集是纯二进制文件,由input_data.py里的二进制读取方法打开的。还没有专门写过一个工具来提取数据集,如果需要调试,可以用matplotlib或者类似的画图库,可视化地显示出每个样本的图像矩阵和CU深度标签。