开始
设计一个神经元网络,它有(x, y, t)三个输入,有(R, G, B)三个输出,中间有许多隐藏层。x和y是视频的横纵坐标,t是帧数。输入(x, y, t),输出一个像素,即(R, G, B)。
2K视频为2048×1080分辨率,2小时的视频大约3.0GB。取其1%作为神经元网络的预期压缩率,即30MB。
以前的博客中有8比特神经元网络的设想,那么,30MB的神经元网络,有3000万个参数。
运算量估计
设视频每秒24帧,运行一次神经元网络需要与参数个数相同的运算量,即3000万。
2048×1080×24×3000万=1.6Pflops
现有的个人电脑不支持这么大的运算能力,也许这是属于未来的技术吧?
上述运算量是播放时的,下面估算训练时的。
神经元网络中参数个数n=3000万
训练样本的个数m=2048×1080×24×7200=3822亿
训练几轮呢?p=100
总的运算量=pmn2=34398亿亿亿次
以最先进的百亿亿次超算,需要1091年!
处理小视频
这也太长了,不如先对小视频进行压缩。设视频为100×100像素,24帧/秒,15秒。设它有一万分之一的压缩率,则n=1080。它的训练量是多少呢?
p=100,m=100×100×24×15=360万,n=1080
训练运算量=420万亿次
播放运算量=100×100×24×1080=260Mflops
这还在可以接受的范围内。
结论
建立一个神经元网络,它有(x, y, t)输入,(R, G, B)输出。对一个100×100像素,每秒24帧,15秒的小视频进行压缩。播放时,依次输入(x, y, t=1),得到1帧图像,改变t,得到连续的视频。
对200×200像素的视频,训练运算量为6次方,即64倍;播放运算量为4次方,即16倍;同时,训练运算量是时间的2次方;播放运算量是时间的1次方。