乐趣区

关于pytorch:超分算法在-WebRTC-高清视频传输弱网优化中的应用

随着 5G 的倒退利用,人们对音视频通信的品质要求在一直进步。习惯了高清视觉享受的用户,显然无奈承受退回“马赛克时代”。关注【融云寰球互联网通信云】理解更多

然而,在寰球互联网通信云服务中,面对网络和终端的丰盛多样和复杂多变,又不免遇到用户带宽有余的状况。应用技术手段来进步图像和视频分辨率,让用户在较低带宽的状况下仍然取得较高清晰度的图像和视频就十分重要了。

本文分享应用图像超分辨率技术在无限带宽下实现 WebRTC 高清视频传输的优化计划。

视频编码中影响视频清晰度的次要因素

实践上,对于同一种编码器而言,在分辨率不变的前提下,码率越大,视频品质越高。然而从视觉来看,在特定编码器和分辨率的状况下,码率存在一个最优值。

通常,视频通话 / 会议采纳的视频压缩计划为 H264 或者 VP8。在 H264 编码中,720P 和 1080P 的视频举荐码率为别离为 3500Kbps 和 8500Kbps。

在挪动设施中,H264 编码器举荐的码率如下表。

1280 x 720 1920 x 1080
极低码率 500 Kbps 1 Mbps
低码率 1 Mbps 2 Mbps
中等码率 2 Mbps 4 Mbps
高码率 4 Mbps 8 Mbps
极高码率 8 Mbps 16 Mbps

(挪动端不同分辨率的举荐码率)

由上表可知,在 WebRTC 技术计划框架下进行视频通话时,采纳 H264 编码器对 1080P 高清视频进行压缩,视频若设定为中等码率则须要 4Mbps。

对于带宽有余的局部终端用户,若依然播放 1080P 的视频会存在卡顿的状况。则能够在 WebRTC 的技术框架下,采纳联播(simulcast)或者 SVC 的形式,对不同的终端用户依据各自的特点传输不同分辨率或者不同帧率的码流。

简略来说,若用户的网络环境不适宜传输 1080P 的视频,则给用户发送 720P 的视频,所需码率为 1080P 的一半,能够最大限度保障无限带宽下的视频传输流畅性。

高清已成趋势,在不扭转编码器即 H264 或 VP8 的状况下,如何仍然在终端上取得高清视频成为学术界和产业界须要独特钻研和解决的课题。

图像超分辨率技术在 WebRTC 中的利用

图像超分辨率技术(Super Resolution,SR)是计算机视觉中进步图像和视频分辨率的重要技术,能够将一幅低分辨率图像重建出高分辨率图像。

艰深地说,就是当咱们放大一张尺寸较小的图像时,会呈现含糊的景象,超分辨率重建就是将原图中一个像素对应的内容在放大之后的图中用更多的像素来示意,让图像尽可能地清晰。

随着深度学习的倒退,目前图像超分辨率技术曾经从传统的计算机视觉分析方法全面转向基于 CNN 和 Transformer 的计划。

将图像超分辨率技术利用于 WebRTC 的通常实现形式为:发送低分辨率的视频,在每一个终端显示的时候,采纳超分辨率技术对图像进行放大。因为发送的视频为低分辨率的图像,能够在较低的传输视频数据量下取得较高的清晰度。

在 WebRTC 中,图像超分辨率算法须要同时满足实时超分和清晰成果的双重要求。通过对业界支流基于深度学习的超分算法进行宽泛调研和试验,咱们发现基于 ESPCN 进行优化能够满足要求。

ESPCN 由 2016 年发表在 CVPR 上的论文“Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network”提出,试验后果如图所示,达到了速度和精度的均衡。

篇幅所限,不在此开展介绍该模型的具体构造。

(各种算法的精度和速度比照)

ESPCN 模型试验

在此次试验中,咱们用 Pytorch 进行 ESPCN 模型的搭建、训练和推理。训练的数据个别能够采纳常见的图像数据库,比方 PASCAL VOC、COCO 等,当然也能够依据行业特点采集相应数据集,让模型推理更有针对性。

为了增大数据库,咱们在训练时会采纳一些数据库扩容操作,最无效的办法之一是图像随机裁剪。该办法不仅可能对数据库进行扩容,而且能够弱化数据噪声与晋升模型稳定性。

在 WebRTC 视频传输中,在编码端对图像进行 1/2 下采样。比方,传输 1080P 视频,在编码端视频的下采样为 960×540。

依据本文前述剖析及局部试验成果表明,传输 960×540 分辨率的视频相较传输 1080P 的视频,数据量能够缩小一半以上。

在理论利用中,当终端用户因为带宽限度无奈间接传输 1080P 的视频时,能够传输 960×540 的视频,再采纳 ESPCN 模型对 960×540 的视频进行超分重建取得原始 1920×1080 的视频,从而满足用户对高清视频的要求。

终端部署 ESPCN 模型优化

一般而言,深度学习模型训练实现后,须要模型对不同终端进行针对性地部署。

首先,咱们通过模型量化放大模型大小,缩小对终端存储的占用,晋升计算速度,减速深度学习推理的优化。

在这方面,Pytorch 框架提供了相应的接口,能够对模型进行各种量化,咱们采纳的是 int8 量化。

通过 int8 量化,模型中的局部数据从 float 变成 int 型,采纳 libtorch 集成到 WebRTC 中,训练好的模型会转换成 libtorch 能够读取的 pt 格局。

结果显示,未量化之前 ESPCN 模型大小为 95KB,量化之后为 27KB。

其次,针对不同型号手机的推理优化,从 256256 上采样到 512152,该模型在华为 P10 等中高端手机上能够达到 30ms 的推理速度,在 Asus Fonepad 8、Samsung Galaxy M31 等终端上目前实时体现尚不现实。咱们还将采纳剪枝和各种量化伎俩继续优化模型,满足各类手机的要求。

ESPCN 模型试验后果

模型读取局部要害代码如下所示,其中 espcn.pt 为未量化之前的模型。

// Deserialize the ScriptModule from a file using torch::jit::load().
auto  device = torch::kCUDA;
std::string str = "espcn.pt";
  
try
{module = torch::jit::load(str, device);
}
catch (const c10::Error& e)
{std::cerr << "error loading the model\n" << e.what();
}

pmodule = &module;

模型的推理如下代码所示,output 即为模型推理的输入。因为输入的数据为 0 到 1,须要对输入数据进行限定和转换。

须要留神的是,ESPCN 模型默认是针对 Y 通道的超分,对 UV 数据而言,间接进行双三次插值(bicubic),即实现了 YUV 三个通道的超分。

std::vector<torch::jit::IValue> inputs;
inputs.push_back((img_tensor1.cuda()));
at::Tensor output = pmodule->forward(inputs).toTensor();
output = output.mul(255).clamp(0, 255).to(torch::kU8);

量化后的 ESPCN 模型成果


(原始图像)

将原始图像采纳双三次插值(bicubic)放大成指标尺寸

通过 ESPCN 模型超分重建

从视觉效果来看,ESPCN 模型的成果要远好于 bicubic 插值的办法。

本文次要介绍了基于图像超分辨率技术进行 WebRTC 传输优化的计划,波及模型抉择、训练、量化等方面。

视频传输优化计划泛滥,图像超分辨率技术仅是其中之一。在实时音视频交互成为通信根本诉求的当下,融云会踊跃联合相干实践和成熟算法,研发新技术,对视频压缩和传输进行优化,满足遍布寰球、需要各异的各类用户需要。

退出移动版