最新综述丨视频超分辨率研究方法

摘自:极市平台,作者@ Wangsy

https://zhuanlan.zhihu.com/p/342225916

本文是第一个也是唯一一个视频超分方向的综述,回顾了基于深度学习的视频超分技术的研究进展,提出了一种基于深度学习的视频超分分类方法,并总结了SOTA方法在一些公共基准数据集上的性能。

论文地址:https://arxiv.org/abs/2007.12928

看点

近年来,深度学习在很多领域取得了进展,其中包括视频超分辨率任务。本文是第一个也是唯一一个视频超分方向的综述,主要看点如下:

1)回顾了基于深度学习的视频超分技术的研究进展;
2)提出了一种基于深度学习的视频超分分类方法,利用不同处理帧间信息的方式进行分类;
3)总结了SOTA方法在一些公共基准数据集上的性能;
4)分析了视频超分任务的一些前景和挑战;

分类

多篇研究表明,帧间信息的利用对视频超分的性能有很大影响。正确、充分地利用这些信息可以提高超分的最终结果。因此,根据帧间信息的利用方式——是否对齐,将现有方法分为两大类:对齐方法和非对齐方法,如下图所示:

总结

到目前为止,已经有了许多的视频超分算法。下图总结了近年来基于深度学习的视频超分方法的特点。其中MEMC表示运动估计和补偿方法,DC表示可变形卷积方法,3D Conv表示3D卷积方法,RCNN表示循环卷积神经网络方法。

趋势和挑战

尽管基于深度学习的视频超分方法已经取得了很大的进展,但是仍然存在一些挑战。

轻量级超分模型

基于深度学习的视频超分辨率方法虽然具有很高的性能,但由于模型参数庞大,需要大量的计算和存储资源,训练时间长,在实际问题中难以有效部署。随着移动设备在现代生活中的流行,人们期望将模型应用到这些设备上。如何设计和实现一种高性能、轻量级的超分算法,以满足实际应用的需要是一个挑战。

模型的可解释性

深度神经网络通常被认为是黑箱。也就是说,不管模型表现如何,我们也无法知道模型学到了什么真正的信息。在现有的视频超分模型中,卷积神经网络如何恢复低分辨率视频序列还没有一个理论解释。随着对其解释的深入研究,包括视频和图像超分方法在内的超分算法的性能可能会有很大的提高。

大尺度超分辨率

对于视频超分任务,现有的工作主要集中在放大倍数为4的情况下。更具挑战性的尺度(如×8、×16)很少被探索。随着高分辨率(如4K、8K)显示设备的普及,大尺度的超分有待进一步研究。显然,随着尺度的增大,视频序列中未知信息的预测和恢复会变得越来越困难。这可能导致算法的性能下降,削弱模型的鲁棒性。因此,如何开发稳定的深度学习算法来实现更大规模的视频超分辨率仍然是一个重要的问题。

更合理、更恰当的视频降质过程

在现有的研究中,LR视频的退化通常由两种方法得到。一种是使用插值(如双三次插值)直接对HR视频进行下采样。另一种是对HR视频进行高斯模糊,然后对视频序列进行降采样。虽然这两种方法在理论上都有很好的表现,但在实践中却总是表现不佳。真实世界的退化过程是非常复杂的,并且在真实世界的问题中包含了大量的不确定性,模糊和插值对问题的建模是不够的。因此,在构建LR视频时,应该从理论上建立与实际情况相一致的退化模型,以缩小研究与实践之间的差距。 大多数最先进的视频超分辨率方法都是有监督学习。由于降质过程是复杂的和HR/LR对获取是比较难获取的。或许无监督的超分方法可能会称为解决这个问题的一个方法。

更有效的场景变换算法

现有的视频超分方法很少涉及场景变化的视频。实际上,一个视频序列通常有许多不同的场景。在研究这类视频的超分问题时,必须在不改变场景的情况下将其分割成多个片段,并分别进行处理。这可能会导致大量的计算和计算时长。因此,能够处理场景变化的深度学习方法对于实际应用是必要的。

更合理的视频质量评价标准

评价超分辨率结果质量的标准主要有PSNR和SSIM。然而,它们的值并不能反映视频质量对人的感知。也就是说,即使视频的PSNR值很高,视频对人类来说也不一定是舒服的。因此,需要开发出符合人类感知的新的视频评价标准。虽然提出了一些评价标准,但仍需要更多能被广泛接受的标准。

利用帧间信息的更有效方法

视频超分的一个重要特征是利用帧间信息。它的有效利用直接影响着模型的性能。尽管本文提出了许多方法,但仍存在一些不足。例如,三维卷积和非局部模运算量大,光流估计的精度无法保证等。因此,有效利用帧间信息的方法值得进一步研究。

BasicVSR|视频超分算法

视频超分====”钞“能力,没几张显卡真玩不了。

paper: https://arxiv.org/abs/2012.0218

该文是南洋理工&腾讯PCG、CUHK-SenseTime联合实验室、中科院深圳先进技术研究院2020年提出的一种视频超分方案BasicVSR。在多个数据集上、在两种退化方式上,所提BasicVSR与IconVSR均超越已有视频超分方案,特别的,在UDM10数据集上取得了高达0.68dB的性能提升。

Video Super-Resolution on MSU Video Super Resolution Benchmark:

截至2022,该方法仍是sota方法。

正如作者所说,BasicVSR及其扩展IconVSR可以作为未来VSR方法的强大基线!!!

Abstract

​ 由于需要利用额外的时序信息,视频超分往往比图像超分包含更多的模块,这就导致了各式各样的复杂结构。

​ 该文作者对视频超分进行了梳理并重新审查了视频超分的四个基本模块:PropagationAlignmentAggregation以及Upsampling。通过复用现有方案的模块并添加微小改动,作者提出了一种简单方案:BasicVSR,它在推理速度、复原质量方面取得了引人注目的提升。

​ 作者对BasicVSR进行了系统的分析,解释了性能提升的原因所在,同时也讨论了其局限性。在BasicVSR的基础上,作者进一步提出了“信息寄存(information-refile)”与“耦合传播(coupled propagation)”两种机制促进信息集成。所提BasicVSR及其改进IconVSR将视频超分的性能进行了更进一步的提升,可以作为视频超分领域的一个更强的基准。

Introduction

​ 作者对现有各式各样的VSR方案按照各个模块的功能(propagation, alignment, aggregation, upsampling)进行了拆分,相关总结见下表。

  • Propagation:在这里特指信息的流动,比如局部信息,单向信息流动,双向信息流动;
  • Alignment:在这里特指对齐的类型以及有无;
  • Aggregation:在这里指的是对齐特征的集成方式;
  • Upsampling:在这里指的是上采样过程所采用的方案,基本都是Pixel-Shuffle。

​ 在上述四个功能单元中,Propagation和Alignment对性能和效率影响最大。双线传播有助于最大化的进行信息汇集,光流方案有助于进行相邻帧特征对齐。通过简单的上述模块组合所得的BasicVSR即取得了超越SOTA的指标与速度(指标提升0.61dB,推理速度快了24倍)。

什么是光流法?光流是一种用于描述图像运动的技术。它通常应用于它们之间具有小时间步长的一系列图像,例如视频帧。光流计算图像中点的速度,并估计点可能在下一个图像序列中的位置。

光流是由物体或照相机的运动引起的两个连续帧之间图像物体的视运动的模式。它是2D向量场,其中每个向量都是位移向量,表示点从第一帧到第二帧的运动。考虑下面的图片,它显示了一个球连续5帧运动。箭头显示其位移向量。光流在以下领域具有许多应用: – 运动的结构 – 视频压缩 – 视频稳定…光流基于以下几个假设进行工作: 1. 在连续的帧之间,对象的像素强度不变。 2. 相邻像素具有相似的运动。

光流

​ 在BasicVSR的基础上,作者提出了如下两种新颖的扩展得到了IconVSR。

  • 信息寄存,它采用了额外的模块提取从稀疏选择帧(比如关键帧)中提取特征,然后插入到主网络用于特征改善。
  • 耦合传播,它促进了前向与反向传播分支中的信息交换。

​ 这两个模块不仅可以降低误差累积问题,同时可以获取更完整的时序信息以生成更高质量的特征,进而得到更好的重建结果。得益于上述两种设计,IconVSR以0.31dB指标提升超过了BasicVSR。

Method

 上图给出了BasicVSR的架构示意图。在这里我们先对BasicVSR转给你所涉及到的几个功能性模块进行一些简单的介绍。

Propagation

Propagation 是VSR中最具影响力的模块,它特指信息的利用方式。现有的传播机制可以分为一下三大类:

  • Local Propagation: 滑动窗口的方法(比如RBPN,TGA,EDVR)采用局部窗口内的多帧LR图像作为输入并进行中间帧的重建。这种设计方式约束了信息范围,进而影响了模型的性能。下图给出了不同信息范围下的模型性能对比,可以看到:(1)全局信息的利用具有更佳性能;(2) 片段的两端性能差异非常大,说明了长序列累积信息(即全局信息)的重要性。

Unidirectional: 已有单向传播方案(比如RLSP、RSDN、RRN、FRVSR)采用了从第一帧到最后一帧的单向传播的方式,这种方式导致了不同帧接受的信息是不平衡的,比如第一帧只会从自身接受信息,而最后一帧则可以接受整个序列的信息。下图给出了单向传播与双向传播的性能差异对比。可以看到:(1)在早期,单向传播方案的PSNR指标严重低于双向传播方案;(2)整体来看,单向传播方案的指标要比双向传播的方案低0.5dB。

Bidirectional:上述两种信息传播方案的弊端可以通过双向传播方案解决。BasicVSR采用了经典的双向传播机制,给定输入图像及其近邻帧,相应的特征传播分别描述为和

Alignment

​ 空间对齐在VSR中起着非常重要的作用,它负责将高度相关的的图像/特征进行对齐并送入到后续的集成模块。主流VSR方案可以分别以下三大类:

  • Without Alignment: 现有的递归方案(比如RLSP、BRCN、RSDN、RRN)通常不进行对齐,非对齐的特征直接进行集成导致了次优的性能。作者在实验中发现:不添加对齐会导致1.19dB的指标下降,也就是说对齐是非常有必要
  • Image Alignment:早期的TOFlow采用光流在图像层面进行对齐,已有研究表明:相比图像层面对齐,特征层面的对齐可以取得显著的性能提升
  • Feature Alignment: 作者采用了类似TOFlow的光流方案,并用于特征对齐,对齐后的特征融入到后的残差模块中。这里采用的特征对齐可以描述如下:

Aggregation and Upsampling

​ BasicVSR采用了非常基本的模块(残差模块以及PixelShuffle)用于特征集成与上采样,假设中间特征表示,这里的特征集成与上采样模块描述如下:

​ 总而言之,BasicVSR采用了双向传播机制、特征层面的光流对齐、concate进行特征集成,pixelshuffle进行上采样。

IconVSR

​ 以BasicVSR作为骨干,作者引入了两种新颖的单元以消除传播过程中的误差累积促进时序信息集成。

  • Information-Refil: 不精确的对齐会导致误差累积问题,尤其是该文所采用的长期传播方案。为消除上述问题,作者提出了信息寄存机制,见下图。

​ 它采用了额外的特征提取器提取关键帧与近邻帧的特征,所提取的特征将于对齐特征通过卷积进行融合。

Coupled Propagation: 在双向传播中,特征经由相反的方向进行独立处理。作者对此添加了耦合传播机制,使得两者产生关联

Experiments

​ 训练数据:REDS和Vimeo90K;测试数据:REDS4、REDSval4、Vid4、UDM10、Vimeo90K-T。数据退化方式BI和BD。

​ SpyNet用于光流估计,EDVR-M用于特征提取,Adam优化器,Cosine学习率机制,特征提取与光流部分的学习率为,其他部分的学习率为。总计训练300K,特征提取与光流的权值在前5000次冻结。Batch=8,LR的大小为,Cb损失。

​ 下表给出了所提方案与其他视频超分方案在不同退化方式、不同测试集上的指标、推理速度以及参数量的对比。

​ 从上表可以看到:

  • BasicVSR以全面优势超过了现有视频超分方案,在UDM10数据集上,以0.61dB超过了RSDN且具有相当的参数量、更快的速度;
  • IconVSR可以进一步提升BasicVSR的指标高达0.31dB

Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network

论文标题:Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network

github: https://github.com/leftthomas/ESPCN

2016年的文章。在此之前使用CNN进行SR的方法都是将LR图像先用一个single filter(通常是bicubic)upscale至HR的尺寸,再进行reconstruction的。所有SR的操作都再HR空间进行。  而本文提出在LR空间进行特征提取。并引入sub-pixel convolution layer用于学习一组upscaling filter,用这些针对特征图训练得到的更复杂的filter代替手工bicubic filter。可以降低计算成本,实现实时SR。直接将LR图像输入一个l层的CNN中,之后通过一层sub-pixel卷积层upscaleLR特征图生成对应的HR图像。

这篇论文提出了一种亚像素卷积的方法来对图像进行超分辨率重建,速度特别快。虽然论文里面称提出的方法为亚像素卷积(sub-pixel convolution),但是实际上并不涉及到卷积运算,是一种高效、快速、无参的像素重排列的上采样方式。由于很快,直接用在视频超分中也可以做到实时。其在Tensorflow中的实现称为depthtospace ,在Pytorch中的实现为PixelShuffle

这种上采样的方式很多时候都成为了上采样的首选,经常用在图像重建领域,如后续有在降噪领域中的FFDNet

论文的主要创新点为:

1. 只在模型末端进行上采样,可以使得在低分辨率空间保留更多的纹理区域,在视频超分中也可以做到实时。
2.模块末端直接使用亚像素卷积的方式来进行上采样,相比于显示的将LR插值到HR,这种上采样方式可以学习到更好、更为复杂的方式,可以获得更好的重建效果。

可以看到,相比于其他的一些超分算法,这里实际上只改动了最后的上采样方式。在模型倒数第二层学习对应的通道数( r2c )的卷积,其中c为最终的通道数,如输出是RGB图,则c为3,如输出是灰度图或者Y通道的图,则c为1;r为需要进行的上采样倍数,为正整数倍,不同的上采样倍数只需要调整这一层卷积的通道数即可。

由于带计算的操作都是在低分辨率空间中进行的,所以速度相对会快很多。

这里给出的示例为r=3,c=1,即单通道图的3倍上采样图。结合超像素的思想来看,以第一张特征图进行的3×3宫格的像素重排列,行优先地按顺序将不同深度的特征依次重排列到宫格上。

这里给出的示例图是简单场景,像素重排列的方式为:

从公式可以看出,对于多通道的图,以通道数作为一个整体,即将特征图通道数中连续的c个通道作为一个整体,再然后进行像素重排列,得到多通道的上采样图。

论文的核心创新点就在于这里的像素重排列的方式。

整体的效果上来说,也是非常的惊人。从模型的角度上而言,其主干模型可以采样其他SOTA的主干结构。由于上采样的差异,可以学习到更好、更复杂的上采样方式,所以最终的重建效果是要稍好于SOTA的模型的。并且由于上采样特别高效,速度非常的快。从PSNR的角度来看,ESPCN比TNRD(TNRD发表于TPAMI2015,是DnCNN的前身)稍好,但是速度却相差一个数量级左右。

结论

这篇论文提出了一种亚像素卷积层,在低分辨率空间中可以学习到更好、更复杂的上采样方式,对于不同的重建倍数,只需要对应地更改低分辨率空间中的卷积通道数,非常灵活。其最终的重建PSNR效果也是SOTA,速度上具有很巨大的优势,视频超分也能做到实时。这种上采样方式也广泛地应用于其他的重建领域中。

mmediting 中文文档

MMEditing: 多任务图像视频编辑工具箱

这是一个图像和视频编辑的工具箱,它目前包含了常见的编辑任务,比如图像修复,图像抠图,超分辨率和生成模型。在编辑图像或者视频的时候,我们往往是需要组合使用以上任务的,因此将它们整理到一个统一的框架下,方便大家使用。

基于 PyTorch 的图像&视频编辑开源工具箱, 提供修复/抠图/超分辨率/生成等任务最先进的算法。

github: https://github.com/open-mmlab/mmediting

中文文档: https://mmediting.readthedocs.io/zh_CN/latest/

目前 MMEditing 支持下列任务:

主分支代码目前支持 PyTorch 1.5 以上的版本。

MMEditing 的优势:

1. 统一的框架:我们设计了先进的框架来统一最常见的图像修复,图像抠图,超分辨率和生成模型这几个任务。用户可以在一个框架中方便地调用不同的算法和模型。

2. 灵活的模块化设计:用户能够基于这套框架灵活地增加新的功能和算法。

3. 丰富的模型和文档:下图中展示了我们支持的算法数目,要知道其中有不少算法是首次有完整的复现哦~我们也完善了文档(文档覆盖率高达90%以上)和入门材料,方便用户上手。

4. 高效的实现:MMEditing所有的训练包括 GAN 的对抗训练都是基于高效的分布式训练框架部署的,对于一些基础的操作单元,我们也相应地进行了优化。

主要特性

  • 模块化设计MMEditing 将编辑框架分解为不同的组件,并且可以通过组合不同的模块轻松地构建自定义的编辑器模型。
  • 支持多种编辑任务MMEditing 支持修复抠图超分辨率生成等多种主流编辑任务。
  • SOTAMMEditing 提供修复/抠图/超分辨率/生成等任务最先进的算法。

需要注意的是 MMSR 已作为 MMEditing 的一部分并入本仓库。 MMEditing 缜密地设计新的框架并将其精心实现,希望能够为您带来更好的体验。

安装

MMEditing 依赖 PyTorch 和 MMCV,以下是安装的简要步骤。

步骤 1. 依照官方教程安装PyTorch

步骤 2. 使用 MIM 安装 MMCV

pip3 install openmim
mim install mmcv-full

步骤 3. 从源码安装 MMEditing

git clone https://github.com/open-mmlab/mmediting.git
cd mmediting
pip3 install -e .

模型库

支持的算法:图像修复

图像抠图

图像超分辨率

视频超分辨率

图像生成

视频插帧

请参考模型库了解详情。

Super-Resolution 超分辨率

超分辨率(简称超分),是将低分辨率图像放大到高分辨率图像,如下图,一只小狒狒经过 SR网络后,可以得到放大,变成一只“大”狒狒。

随着深度学习的兴起,早在2014年,香港中文大学多媒体实验室就提出了首个使用卷积神经网络解决超分辨率的模型——SRCNN。作为图像超分辨率工作,SRCNN 对后续计算机视觉的底层算法研究产生了重要影响。后续,各种各样的网络结构如雨后春笋般地冒了出来,比如VDSR,EDSR,SRResNet 等等; 还有追求视觉效果的 SRGAN, ESRGAN。

MMEditing把一些基本的超分算法,比如 SRCNN,EDSR,SResNet,SRGAN还有视频的 EDVR 算法都包括进去。之前 OpenMMLab 中的 MMSR 也有类似的功能,相比之下,MMEditing 使用了更好的框架设计,用上了 MMCV 和 MMDetection 在发展过程中的经验积淀。整个 MM 系列都采用了类似的框架,只要掌握了一种,就能够轻而易举地掌握其他任务的代码库。

Inpainting修复

Inpainting(图像修复)是图像编辑领域里面一项基础的任务,其主要目标是修复图像中的受损(污染)区域。如下图中,左边是原图,中间是受损区域示意图,你可以去除图像中的不想要的人物,或者是图像中杂乱的不规则的受损区域。然后经过 Inpainting 修复算法就得到最右边的图啦。

Inpainting 作为一项基础任务,现如今已经被广泛的应用到各种各样的场景,比如面部修复,背景填充以及视频编辑中。

之前传统的 Patch-Matching 算法可以通过图中已知区域的纹理来快速填补当前受损区域。随着深度学习的发展,越来越多的工作利用深度神经网络实现更好的图像修复效果。深度图像修复领域中,有许多经典的开创性的工作像 Global&Local、Partial Conv 以及 DeepFill 系列,他们作为深度图像修复的经典模型被广泛地应用到后来的研究工作当中。可是这些方法都没有官方的 PyTorch 实现,为了方便大家更好的研究和深入了解这些模型,我们在 MMEditing 中集成了这些算法的训练和测试功能。同时,我们对其中一些重要的模块进行了代码上的优化,以使其更加符合 PyTorch 的风格,甚至是更快的 GPU 计算,从而能够有更好的训练速度。

Matting抠像

抠像(Matting)问题是一个在计算机视觉研究领域有重要价值的研究课题,其在工业界也有非常重要的应用。

抠像是将前景从图片或者视频中与背景分离开来的问题,比如下图中,输入是左图,一位超级可爱的小姐姐在秀丽的风景前中,我们希望得到右边的小姐姐的抠像结果(b)。它和 segmentation分割的不同之处在于,matting 需要得到更精准的边缘(如头发)以及与背景的组合系数。

为了降低求解的难度,一种最常见的方式是引入用户输入的 trimap(如下图),来对图片进行简单的三分类。其中,图中的黑色为背景,白色为前景,灰色为未知区域。给定 trimap 后,我们只需要求解未知区域的抠图结果,这大大降低了求解的难度。

在 MMEditing 中,我们首次完整复现了 DIM(Deep Image Matting)在原论文中的性能。除此之外,MMEditing 还包含当前开源 Matting 模型中性能最好的 GCA Matting 模型,以及速度最快的 IndexNet Matting。

Generation生成模型

Generation,中文含义为“生成”。所谓生成,不同于其他图像编辑的任务,旨在创造新的图像。我们试图通过深度学习的方式,让神经网络成为创造者,产生新的信息。生成任务一般分为两种,非条件(unconditional)和条件(conditional)的生成。所谓非条件生成,主要是从潜在空间(latent space)中的噪声(noise)往图像域(image domain)进行转换,并试图近似相关边缘概率分布,产生逼真的图像;所谓条件生成,主要是从一个图像域映射到潜在空间,并进一步转换到另一个图像域。目前的MMEditing主要支持后者,即从一个图像域映射到另一个图像域,如分割的mask转换到真实图像、马转换到斑马等。后者的条件生成也更加符合目前图像编辑的主题。

而目前 MMEditing 支持的条件图像生成,又可以分为两种不同的设定。其中一种生成模型的训练数据中,包含成对的训练数据,被称为“成对图像到图像转换(paired image-to-image translation)”。这种设定一般生成任务的难度比较低,但对数据本身的要求比较高,生成效果一般比较良好。最经典的成对图像到图像转换的方法,名为 pix2pix。 它也是图像到图像转换领域开山鼻祖的文章,因此我们在这个版本中首先考虑对它进行实现,获得了与作者官方实现一致的结果。

另一种生成模型的训练数据中,仅包含非成对的训练数据,被称为“非成对图像到图像转换(unpaired image-to-image translation)”。这种设定一般对数据要求较低,很容易构建两个明确的图像域,但生成难度较大,生成效果会略微降低。提出非成对图像到图像转换问题,并首先给出解决方案(cycle-consistency)的方法,名为 CycleGAN。CycleGAN 作为最经典的非成对图像到图像转换的生成方法,我们在这个版本中同样首先考虑对它进行实现和效果对齐。

生成(Generation)任务通常比较困难,但向人们展示出了惊人的效果和广阔的研究前景。在未来 MMEditing 代码库的版本中,我们会考虑加入更多不同的生成设定,以及多种生成方法,让我们的代码库更加全面、丰富、强大。

AlphaFold2蛋白质结构预测

摘自 机器学习算法工程师

科学界已知的几乎所有蛋白质结构,都在这里了。蛋白质是生命的基础构件,它们由氨基酸链组成,折叠成不同的复杂形状。蛋白质的功能通常由其 3D 结构决定。如果我们了解蛋白质的折叠方式,就可以开始探索它们是如何工作的,并尝试改变它们的功能。尽管 DNA 提供了制造氨基酸链的指令,但预测它们如何相互作用以形成蛋白质的 3D 结构是一个巨大的挑战。
一年前,DeepMind 发布了 AlphaFold2,以原子水平的准确度预测了 2/3 的蛋白质结构,并与 EMBL-EBI 共同发布了开放可搜索的蛋白质结构数据库 AlphaFold DB,与世界共同分享这一技术。
7 月 28 日,DeepMind 宣布 AlphaFold DB 已从 100 万个结构扩展到超过 2 亿个结构,扩大超过 200 倍,这一进展将极大地提升人们对于生物学的理解。
几乎涵盖所有已知蛋白质
「你可以认为它基本涵盖了所有蛋白质结构。包括植物、细菌、动物和许多其他生物的预测结构,这为 AlphaFold 开辟了巨大的新机会,可以对环保、粮食安全和被忽视疾病等重要问题产生影响,」DeepMind 创始人、首席执行官杰米斯 · 哈萨比斯在介绍 AlphaFold DB 这次扩展时说道。

这一更新包括植物、细菌、动物和其他生物的蛋白质预测结构。

这一更新意味着蛋白质数据库 UniProt 都将带有蛋白质预测结构(UniProt 是一个全面的,高质量的,免费使用的蛋白质序列与功能信息数据库,它还包含了大量来自研究文献的关于蛋白的生物学功能信息)。研究者可以通过 Google Cloud Public Datasets 批量下载,让世界各地的科学家更容易访问 AlphaFold。
斯克里普斯转化研究所创始人 Eric Topol 表示:「AlphaFold 是生命科学领域独一无二的重大进步,展示了 AI 的力量。过去确定蛋白质的 3D 结构需要数月或数年,现在只需几秒钟。AlphaFold 已经加速并实现了大规模发现,包括破解核孔复合体的结构。新的蛋白质结构不断增加,几乎照亮了整个蛋白质宇宙,我们可以期待每天都有更多的生物谜团被解开。」
AlphaFold 的影响
自发布至今,AlphaFold 已产生令人难以置信的影响。它是 DeepMind 构建的最复杂的人工智能系统,需要多项关键创新,并已应用到多种下游任务中。
AlphaFold2 可以在原子精度上准确地预测蛋白质的结构,它不仅为生物学中 50 年来的重大挑战提供了解决方案,也证明了:人工智能可以极大地加速科学发现,进而推动人类进步,这一点意义重大。
DeepMind 已经开源了 AlphaFold 的代码,并在《自然》杂志上发表了两篇深度论文,引用量已超过 4000。此外,DeepMind 还与 EMBL-EBI 合作设计了一种帮助生物学家使用 AlphaFold 的工具,并共同发布了 AlphaFold DB。
在发布 AlphaFold 之前,DeepMind 征求了 30 多名生物学研究专家的意见,使得他们以最大化潜在利益和最小化潜在风险的方式与世界分享 AlphaFold 。

迄今为止,来自 190 个国家 / 地区的超过 500000 名研究人员访问了 AlphaFold DB,查看了超过 200 万个结构。一些免费提供的蛋白质结构也已集成到其他公共数据集中,例如 Ensembl、UniProt 和 OpenTargets,被数百万用户访问。

在与其他机构合作时,DeepMind 优先考虑那些最具积极社会效益的应用,重点关注那些资金不足或被忽视的计划。
拼凑核孔复合体
在最新一期《科学》杂志特刊上,几个研究团队描述了 AlphaFold 帮助拼凑核孔复合体——生物学中最具挑战性的难题之一。这个巨大的结构由数百个蛋白质部分组成,控制着进出细胞核的一切。

人们通过使用现有的实验方法揭示它的轮廓,结合 AlphaFold 预测完成和解释其中不清楚的区域,最终揭示了它的微妙结构。《科学》将其称为实验结构生物学的胜利,这种新研究方式现在正成为实验室的常规做法,开启了新的科学研究道路。
结构搜索工具
Foldseek、Dali 等结构搜索工具允许用户非常快速地搜索与给定蛋白质相似的结构。这将是为实际有用的蛋白质(例如分解塑料的蛋白质)挖掘大型序列数据集的第一步,它可以提供有关蛋白质功能的线索。
对人类健康的影响
AlphaFold 已经对人类健康产生了重大而直接的影响。与欧洲人类遗传学会的合作证明 AlphaFold 对于解开罕见遗传疾病的原因至关重要。此外,AlphaFold 还通过更好地了解新发现的可能成为药物靶点的蛋白质,帮助科学家更快地找到与其结合的潜在药物来加速药物发现。
参考内容:https://www.science.org/doi/10.1126/science.add2210https://www.theverge.com/2022/7/28/23280743/deepmind-alphafold-protein-database-alphabethttps://www.deepmind.com/blog/alphafold-reveals-the-structure-of-the-protein-universehttps://www.nature.com/articles/d41586-022-02083-2

YOLOv7-Pose 基于YOLOv7的关键点模型

目前人体姿态估计总体分为Top-down和Bottom-up两种,与目标检测不同,无论是基于热力图或是基于检测器处理的关键点检测算法,都较为依赖计算资源,推理耗时略长,今年出现了以YOLO为基线的关键点检测器。玩过目标检测的童鞋都知道YOLO以及各种变种目前算是工业落地较多的一类检测器,其简单的设计思想,长期活跃的社区生态,使其始终占据着较高的话题度。

【演变】

在ECCV 2022和CVPRW 2022会议上,YoLo-Pose和KaPao(下称为yolo-like-pose)都基于流行的YOLO目标检测框架提出一种新颖的无热力图的方法,类似于很久以前谷歌使用回归计算关键点的思想,yolo-like-pose一不使用检测器进行二阶处理,二部使用热力图拼接,虽然是一种暴力回归关键点的检测算法,但在处理速度上具有一定优势。

kapao

去年11月,滑铁卢大学率先提出了 KaPao:Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation,基于YOLOv5进行关键点检测,该文章目前已被ECCV 2022接收,该算法所取得的性能如下:

paper:https://arxiv.org/abs/2111.08557

code:https://github.com/wmcnally/kapao

yolov5-pose

今年4月,yolo-pose也挂在了arvix,在论文中,通过调研发现 HeatMap 的方式普遍使用L1 Loss。然而,L1损失并不一定适合获得最佳的OKS。且由于HeatMap是概率图,因此在基于纯HeatMap的方法中不可能使用OKS作为loss,只有当回归到关键点位置时,OKS才能被用作损失函数。因此,yolo-pose使用oks loss作为关键点的损失

相关代码在https://github.com/TexasInstruments/edgeai-yolov5/blob/yolo-pose/utils/loss.py也可见到:

 if self.kpt_label:
                    #Direct kpt prediction
                    pkpt_x = ps[:, 6::3] * 2. – 0.5
                    pkpt_y = ps[:, 7::3] * 2. – 0.5
                    pkpt_score = ps[:, 8::3]
                    #mask
                    kpt_mask = (tkpt[i][:, 0::2] != 0)
                    lkptv += self.BCEcls(pkpt_score, kpt_mask.float()) 
                    #l2 distance based loss
                    #lkpt += (((pkpt-tkpt[i])*kpt_mask)**2).mean()  #Try to make this loss based on distance instead of ordinary difference
                    #oks based loss
                    d = (pkpt_x-tkpt[i][:,0::2])**2 + (pkpt_y-tkpt[i][:,1::2])**2
                    s = torch.prod(tbox[i][:,-2:], dim=1, keepdim=True)
                    kpt_loss_factor = (torch.sum(kpt_mask != 0) + torch.sum(kpt_mask == 0))/torch.sum(kpt_mask != 0)
                    lkpt += kpt_loss_factor*((1 – torch.exp(-d/(s*(4*sigmas**2)+1e-9)))*kpt_mask).mean()

yolov7-pose

上个星期,YOLOv7的作者也放出了关于人体关键点检测的模型,该模型基于YOLOv7-w6

目前作者提供了.pt文件和推理测试的脚本,有兴趣的童靴可以去看看,本文的重点更偏向于对yolov7-pose.pt进行onnx文件的抽取和推理。

【yolov7-pose + onnxruntime】

首先下载好官方的预训练模型,使用提供的脚本进行推理:

% weigths = torch.load('weights/yolov7-w6-pose.pt')
% image = cv2.imread('sample/pose.jpeg')
!python pose.py 

一、yolov7-w6 VS yolov7-w6-pose

首先看下yolov7-w6使用的检测头

二、修改export脚本

如果直接使用export脚本进行onnx的抽取一定报错,在上一节我们已经看到pose.pt模型使用的检测头为IKeypoint,那么脚本需要进行相应更改:在export.py的这个位置插入:

 # 原代码:
    for k, m in model.named_modules():
        m._non_persistent_buffers_set = set()  # pytorch 1.6.0 compatibility
        if isinstance(m, models.common.Conv):  # assign export-friendly activations
            if isinstance(m.act, nn.Hardswish):
                m.act = Hardswish()
            elif isinstance(m.act, nn.SiLU):
                m.act = SiLU()
     model.model[-1].export = not opt.grid  # set Detect() layer grid export
                
    # 修改代码:
    for k, m in model.named_modules():
        m._non_persistent_buffers_set = set()  # pytorch 1.6.0 compatibility
        if isinstance(m, models.common.Conv):  # assign export-friendly activations
            if isinstance(m.act, nn.Hardswish):
                m.act = Hardswish()
            elif isinstance(m.act, nn.SiLU):
                m.act = SiLU()
        elif isinstance(m, models.yolo.IKeypoint):
            m.forward = m.forward_keypoint  # assign forward (optional)
            # 此处切换检测头
    model.model[-1].export = not opt.grid  # set Detect() layer grid export

forward_keypoint在原始的yolov7 repo源码中有,作者已经封装好,但估计是还没打算开放使用。

使用以下命令进行抽取:python export.py –weights ‘weights/yolov7-w6-pose.pt’ –img-size 960 –simplify True

三、onnxruntime推理

onnxruntime推理代码:

import onnxruntime
import matplotlib.pyplot as plt
import torch
import cv2
from torchvision import transforms
import numpy as np
from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts

device = torch.device("cpu")

image = cv2.imread('sample/pose.jpeg')
image = letterbox(image, 960, stride=64, auto=True)[0]
image_ = image.copy()
image = transforms.ToTensor()(image)
image = torch.tensor(np.array([image.numpy()]))

print(image.shape)
sess = onnxruntime.InferenceSession('weights/yolov7-w6-pose.onnx')
out = sess.run(['output'], {'images': image.numpy()})[0]
out = torch.from_numpy(out)

output = non_max_suppression_kpt(out, 0.25, 0.65, nc=1, nkpt=17, kpt_label=True)
output = output_to_keypoint(output)
nimg = image[0].permute(1, 2, 0) * 255
nimg = nimg.cpu().numpy().astype(np.uint8)
nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
for idx in range(output.shape[0]):
    plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)

# matplotlib inline
plt.figure(figsize=(8, 8))
plt.axis('off')
plt.imshow(nimg)
plt.show()
plt.savefig("tmp")

推理效果几乎无损,但耗时会缩短一倍左右,另外有几个点:

  • image = letterbox(image, 960, stride=64, auto=True)[0] 中stride指的是最大步长,yolov7-w6和yolov5s下采样多了一步,导致在8,16,32的基础上多了64的下采样步长
  • output = non_max_suppression_kpt(out, 0.25, 0.65, nc=1, nkpt=17, kpt_label=True) ,nc 和 kpt_label 等信息在netron打印模型文件时可以看到
  • 所得到的onnx相比原半精度模型大了将近三倍,后续排查原因
  • yolov7-w6-pose极度吃显存,推理一张960×960的图像,需要2-4G的显存,训练更难以想象

ParseNet: Looking Wider to See Better

论文地址: https://arxiv.org/abs/1506.04579

代码: https://github.com/weiliu89/caffe

U形的编解码结构奠定了深度学习语义分割的基础,随着基线模型的表现越来越好,深度学习语义分割关注的焦点开始由原先的编解码架构下上采样如何更好的恢复图像像素转变为如何更加有效的利用图像上下文信息和提取多尺度特征。因而催生出语义分割的第二个主流的结构设计:多尺度结构。接下来的几篇论文解读将对重在关注图像上下文信息和多尺度特征的结构设计网络进行梳理,包括ParseNet、PSPNet、以空洞卷积为核心的Deeplab系列、HRNet以及其他代表性的多尺度设计。

自从全卷积网络(Fully Convolutional Networks, FCN)和UNet提出以来,主流的改进思路是围绕着编解码结构来进行的。但又一些改进在当时看来却不是那么“主流”,其中有一些是针对如何提升网络的全局信息提取能力来进行改进的。FCN提出之后,一些学者认为FCN忽略了图像作为整张图的全局信息,因而在一些应用场景下不能有效利用图像的语义上下文信息。图像全局信息除了增加对图像的整体理解之外,还有助于模型对局部图像块的判断,此前一种主流的方法是将概率图模型融入到CNN训练中,用于捕捉图像像素的上下文信息,比如说给模型加条件随机场(Conditional Random Field,CRF),但这种方式会使得模型难以训练并且变得低效。

针对如何高效利用图像的全局信息问题,相关研究在FCN结构的基础上提出了ParseNet,一种高效的端到端的语义分割网络,旨在利用全局信息来指导局部信息判断,并且引入太多的额外计算开销。提出ParseNet的论文为ParseNet: Looking Wider to See Better,发表于2015年,是在FCN基础上基于上下文视角的一个改进设计。在语义分割中,上下文信息对于提升模型表现非常关键,在仅有局部信息情况下,像素的分类判断有时候会变得模棱两可。尽管理论上深层卷积层的会有非常大的感受野,但在实际中有效感受野却小很多,不足以捕捉图像的全局信息。ParseNet通过全局平均池化的方法在FCN基础上直接获取上下文信息,图1为ParseNet的上下文提取模块,具体地,使用全局平均池化对上下文特征图进行池化后得到全局特征,然后对全局特征进行L2规范化处理,再对规范化后的特征图反池化后与局部特征图进行融合,这样的一个简单结构对于语义分割质量的提升的巨大的。如图2所示,ParseNet能够关注到图像中的全局信息,保证图像分割的完整性。

关于全局特征与局部特征的融合,ParseNet给出两种融合方式:早期融合(early fusion)和晚期融合(late fusion)。早期融合就是图6-1中所展现的融合方式,对全局特征反池化后直接与局部特征进行融合,然后在进行像素分类。而晚期融合则是把全局特征和局部特征分别进行像素分类后再进行某种融合,比如说进行加权。但无论是早期融合还是晚期融合,如果选取的归一化方式合适,其效果是差不多的。

下图是ParseNet在VOC 2012数据集上的分割效果,可以看到,ParseNet的分割能够明显关注到图像全局信息。

补充:反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)

图(a)表示UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。

与之相对的是图(b),两者的区别在于UnSampling阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。从图中即可看到两者结果的不同。

图(c)为反卷积的过程,反卷积是卷积的逆过程,又称作转置卷积。最大的区别在于反卷积过程是有参数要进行学习的(类似卷积过程),理论是反卷积可以实现UnPooling和unSampling,只要卷积核的参数设置的合理。

2、FCN 全卷积网络 Fully Convolutional Networks

FCN对图像进行像素级的分类,从而解决了语义级别的图像分割(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

简单的来说,FCN与CNN的区别在把于CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。

论文写作全攻略|一篇学术科研论文该怎么写

摘自: 深度学习与计算机视觉

论文通俗来说是本科和硕士的升学助力,也是学术界的硬通货,更是未来工作的加分项和敲门砖。

论文的写作对很多学生来说,是一种挑战。有些学生不知该如何对论文做选题,更多的学生则是对毕业论文写作到底有什么要求不清楚,不知从何下手,常常为毕业论文发愁。

论文写作的分为四个顺序:阅读论文→确定创新点→Coding/实验→论文写作。

1、阅读论文

发表论文的前提是大量阅读论文!!!文献阅读分为三个阶段,初期找方向,中期重点突破,后期广泛涉猎。

初期读论文需要逐字精读,方向不必严格限定,感兴趣论文涉及的论文链都可以去读。一篇论文用时一天,英文论文+中文分享,前期阅读论文数量30篇以上,可以提高学术英语阅读能力和专业术语积累。

中期读论文要重点精读,严格限定研究方向和方向涉及的论文链。重点论文时间控制在半天,泛泛论文是一小时,重点论文重复读+源码学习,论文阅读数最好为10篇以上。了解学习技术演进、学习方法创新和整理创新方法链。

后期少数精读+大量泛读,不限定方向,自己重点方向+涉猎方向。

重点论文两小时,泛泛论文半小时,跟随研究方向的最新发展,了解其他方向的大致进展,思考创新点引进嫁接。

2、确定创新点

可以从以下四个方面确定自己论文的创新点:

1. 数据集的改动:噪声、几何变换、遮挡、光照条件、场景依赖

2. 模型的问题:模型体积、推理速度、收敛困难、非端到端、后处理优化

3. 结构替换:transformer、FCN、AE、

4. 特定场景的应用:通用模型考虑泛化能力特定应用考虑专用性。比如夜间检测、水下检测、鱼眼相机检测。

另外就是要记住A+B+C/2.5法则

A:本研究方向的继承性创新点(自然演进)

B:其他方向的既有方法(嫁接到其他任务)

C:细节上的创新(数据增强/数据集/损失函数设计)

例如下面这篇CVPR2021: CutPaste,运用的就是A+B+C/2.5法则。

A:自然演进  cutout—cutpaste+B:既有方法  将自监督学习的pretask应用于异常检测+C:细节创新   高斯概率密度估计(GDE)判断异常

3、Coding/实验

原则:1篇论文代码复现(至少读懂代码实现)>>跑通多个项目demo

1. 找到baseline论文的代码;

2. 在baseline代码上实现期望功能的最小化实现;

3. 逐步实现最终的功能代码,同时做实现验证各部分设计的效果。

4、 论文写作

01:写作策略:

选择2篇左右的范文,去分析论文结构(Introduction)、重点词句(Related Work)、语言风格(Method)、实验设计(Experiment)、绘图风格(Conclusion)和故事设计(References)。

02:论文写作技巧

(1)论文写作技巧——注意标题

  • 用⼀句话概括你所做的工作
  • 考虑搜索引擎的影响,包含关键词
  • 可以新颖一些

(2)论文写作技巧——首页加图

(3)论文写作技巧—Introduction直接列贡献

  • 不用介绍各个部分如何组织的;
  • 直接说做出了哪些贡献;
  • 标明贡献位置。