论文题目:

研究背景:

1. 三维空间结构及相关信息可以通过深度图像(depth images)、网格(meshes)和体素网格(voxel grids)等多种方式获取、处理、存储和利用。
2. 药物设计领域通常需要准确预测配体(通常是小分子)和靶标蛋白之间的结合亲和力。目前有多种方法可以处理蛋白和配体的3D结构信息,比如:将3D结构信息转化为molecular descriptors、转化为2D的互作图谱、3D体素或图形数据等。但是在本研究中,作者选择了两种基于处理点云数据的神经网络(PointNet和PointTransformer)来构建蛋白-配体结合亲和力预测模型。
3. 点云(point cloud)是由一系列点的三维坐标(x, y, z)构成(有时也会有一些额外的信息,但是坐标信息是必须的),它是一种常用于保存3D对象的原始几何信息的文件格式。
4. PointNet是一种基于DL的处理点云数据的方法,它可以把点的坐标直接作为输入,利用对称函数(symmetry functions)实现置换不变性,通过MLP和Max Pooling对三维坐标信息进行处理。与PointNet相比,PointTransformer则增加了分级的空间结构和自注意力模块。

我的理解是:假设一个三维结构可以由A、B、C、D四个点的坐标来表示,那么按照D,A,C,B的顺序来存储这四个点的坐标并不会影响该三维结构。在这种情况下,用对称函数处理坐标信息也不会受到坐标的先后顺序的影响。比如说:max([A,B,C,D]),无论怎样改变ABCD的顺序,最终的值都是这四个值中最大的那一个。

可以参考B站的这个视频https://www.bilibili.com/video/BV1Sv4y1S7x7/?share_source=copy_web&vd_source=9f1b2c7e5841d2b27667d708de6a93d0

5. 利用PointNet处理点云数据可以极大减少预处理的时间,同时保持结构信息的相对完整。

材料和方法:

首先明确这是一个回归任务,所以作者用相关性系数来评估最终结果。

数据集:

关于PDBbind-2016数据集,可见:https://blog.csdn.net/2201_75349501/article/details/128225366

数据预处理:

1). 去掉配体为多肽的复合物(590);
2). 去掉共价连接的配体的复合物(379);
3). 去掉配体不完整的复合物(481);

数据集划分:

训练集:PDBbind-2016 的 refined set(包括3772个protein-ligand complex data sets);
测试集:PDBbind-2016 的 core set(包括285个protein-ligand complex data sets,从训练集中去掉所有测试集的数据);
拓展数据集:为了评估模型对于更大数据集的预测效果, 整合 PDBbind-2016 的 refined 和 general sets(包括11327个protein-ligand complex data sets);

此外,还有PDBbind-2007和PDBbind-2013的数据集,如下所示:

数据集划分后的处理:

1). 将数据集中的溶剂分子、金属离子等去除,结合亲和力取负对数,之后转化为点云数据格式;
2). 为了评估不同原子属性对于预测结果的影响,额外增加三种不同的特征用于模型训练:
I. 七种原子类型:hydrogen, carbon, nitrogen, oxygen, phosphorus, sulfur and halogen(氢,碳,氮,氧,磷,硫,卤);
II. 原子的采样数目由1024增加到2048;
III. 训练集和拓展数据集中,每个原子的理化性质(包括:芳族,杂原子,极性氢,非极性氢,氢键受体和氢键给体);

思路:

1. 在合并点云进行训练之前,我们将蛋白质-配体复合物的坐标对齐到配体中心,确保模型不受平移的影响。
2. 收集配体的所有原子以及与配体对应的蛋白上的外层原子,一共1024个点。为了简化计算,将这些点看作独立的点,不考虑配位键的问题。
3. 每个原子都由6个数据构成(x, y, z coordinates, van der Waals radius, atomic weight, source [1 for protein; -1 for ligands])。原子坐标由距离配体中心最远的原子距离做标准化处理,van der Waals redius和atomic weight也被另外进行标准化处理。

预测流程:

整个过程分为两条线:预测protein-ligand结合亲和力 & protein-ligand 互作特征可视化。
可视化:用K-means将1024个point聚为20个groups,然后独立删掉每一个group,用PointNet和PointTransformer预测结合亲和力,记录下预测结果和实际结果之间的差值。如果差值>均值,那么认为这个group是一个能够影响结果的关键的group。当差值>=均值,标记为红色;否则标记为蓝色(这个和流程图中那些多种颜色之间没啥关系,流程图中是cluster之后的结果,后面的红蓝标记结果在附件中)。

由于不太关注可视化方面,所以该流程中的可视化部分没有细看。

protein-ligand结合亲和力预测:
point cloud --> PointNet OR PointTransformer --> Pool --> XGBoost --> Protein-ligand affinity
该部分的详细信息如下所述。

模型框架:

1. PointNet框架:

参考: https://doi.org/10.48550/arXiv.1612.00593
    https://www.bilibili.com/video/BV1Sv4y1S7x7/?share_source=copy_web&vd_source=9f1b2c7e5841d2b27667d708de6a93d0

1.1 原始的 PointNet 框架:

原始的PointNet框架如上图所示:可以分为 Classification Network 和 Segmentation Network 两部分。
1). Classification Network

input points 就是point cloud中的原子坐标(如果有法向量,那么就是 nx6);
input points 经过 T-Net (3x3的transform),二者相乘,得到nx3;MLP升维,得到nx64;T-Net (64x64的tranform)相乘,得到nx64; MLP升维,得到nx1024;max pool,得到 1x1024 的global feature (max pool是对nx1024中按照列取最大值,即每一列保留一个最大值,所以最终得到1x1024的矩阵作为全局特征);再经过MLP进行降维,得到 1xk 的output scores。

2). Segmentation Network

前面都一样,只是在后面得到全局特征(global feature)后,将global feature矩阵(1x1024)与前面的nx64的局部特征矩阵相拼接,得到 nx1088(这里的global feature 会进行广播,将1x1024转变为nx1024);之后经过MLP降维得到nx258(点的特征 point features,相当于全局特征&局部特征);再经过MLP得到nxm的output scores。

这里用MLP对输入特征进行升维,目的是产生更多的冗余信息,从而在Max Pooling操作时尽可能减少信息损失

global feature是对nx1024矩阵取Max Pooling后的结果,也就是说每一列只保留一个最大值,最终得到1x1024的矩阵。之所以称之为global feature,我觉得在Max Pooling过程中,每个特征只保留了一个位置上的原子对应的最大值,所以最终得到的是由全局的最大值构成的矩阵,也就是全局的特征。

point features是将全局特征与所有特征的整合,经降维之后仍旧保留了n个点,即得到的是每个点的特征(这个point feature既包含所有特征,也包含全局特征)。

因为Classification Network需要对3D对象进行分类,所以只需要全局的特征即可;而Segmentation Network需要对3D对象进行分割,所以需要保留全局和局部特征。

T-Net 结构:

参考:https://github.com/yanx27/Pointnet_Pointnet2_pytorch/blob/master/models/pointnet_utils.py

3x3和64x64的结构是一样的,3x3的T-Net的目的在于对 input 进行 automatic alignment;

64x64的T-Net的目的在于对 Embedding Space Alignment;

class STN3d(nn.Module):def __init__(self, channel):super(STN3d, self).__init__()self.conv1 = torch.nn.Conv1d(channel, 64, 1) ## 输入特征数母、输出特征数目、卷积核self.conv2 = torch.nn.Conv1d(64, 128, 1)self.conv3 = torch.nn.Conv1d(128, 1024, 1)self.fc1 = nn.Linear(1024, 512)self.fc2 = nn.Linear(512, 256)self.fc3 = nn.Linear(256, 9)self.relu = nn.ReLU()self.bn1 = nn.BatchNorm1d(64) ## 批标准化self.bn2 = nn.BatchNorm1d(128)self.bn3 = nn.BatchNorm1d(1024)self.bn4 = nn.BatchNorm1d(512)self.bn5 = nn.BatchNorm1d(256)def forward(self, x):batchsize = x.size()[0] ## x的构成:batchsize, 3维(x,y,z)和6维(x,y,z + 法向量), 1024(取得点的数目) = x.size()[0], x.size()[1], x.size()[2]x = self.relu(self.bn1(self.conv1(x)))x = self.relu(self.bn2(self.conv2(x)))x = self.relu(self.bn3(self.conv3(x)))x = torch.max(x, 2, keepdim=True)[0] ## 按照dim=2取最大值,保留维度,[0]是取 values 的张量x = x.view(-1, 1024) ## 将 x 的 shape 改成 1x1024 (x.view(-1,1024)生成1x1024;如果是x.view(-1,512)的话,则生成2x512)x = self.relu(self.bn4(self.fc1(x)))x = self.relu(self.bn5(self.fc2(x)))x = self.fc3(x)iden = Variable(torch.from_numpy(np.array([1, 0, 0, 0, 1, 0, 0, 0, 1]).astype(np.float32))).view(1, 9).repeat(batchsize, 1) ## 创建一个 batchsize x 1 x 9 的 Tensor,其 value 是 [1, 0, 0, 0, 1, 0, 0, 0, 1]。这一步的目的是创建一个初始化的单位矩阵(见 https://arxiv.org/pdf/1612.00593.pdf)if x.is_cuda:iden = iden.cuda()x = x + iden ## affine transformation:“仿射变换”就是一种简单的变换,它的变化包括旋转、平移、伸缩,原来的直线仿射变换后还是直线,原来的平行线经过仿射变换之后还是平行线,这就是仿射。x = x.view(-1, 3, 3) ## 生成 batch x 3 x 3return x

整体上来看,正如作者所言,T-Net 就像是一个 mini 的 PointNet。其结构和PointNet的结构是比较相近的,T-Net的目的是对特征进行仿射变换。我觉得做仿射变换的目的在于将空间坐标进行平移、旋转这些操作,从而增强模型的泛化能力(自己想的,不一定对)。

1.2 本文中的 PointNet 框架:

参考:本文附件

和上面原始的PointNet框架基本一致,只不过这里除了坐标(Coordinate)外,还加了一些额外的特征(Features)。

在对坐标进行Transform Block(3D)处理之后,与Features矩阵拼接并升维之后,再用Transform Block(6D)处理一次,经过升维完成对PointNetEncoder。按照原始的PointNet框架,可以完全直接将这6个特征整合一起作为原始输入,但作者这里单独对坐标进行transform操作

原因我觉得可能是:
原始的PointNet框架输入6个特征的话,那这6个特征包括3个坐标及对应的法向量,也就是说这6个特征都是和坐标相关的;而本文作者这里的6个特征中,3个是坐标,剩下的3个则是原子的理化性质(范德华半径、原子质量和原子来源),也就是说这6个特征不是同一个属性的,所以需要分开处理。

本文PointNet框架和原始的PointNet框架的代码基本是一致的。

2. PointTransformer 框架:

2.1 原始的 PointTransformer 框架:

参考: https://doi.org/10.48550/arXiv.2012.09164
    https://github.com/qq456cvb/Point-Transformers
    https://zhuanlan.zhihu.com/p/234638980

如 Figure 3 所示,PointTransformer 也可以分为 segmentation 和 classification 两部分。

segmentation 部分:主要是降采样 Point Transformer和升采样 Point Transformer的过程。Transition Down & Point Transformer 对特征进行降采样,得到 point-wise 的特征,最终得到的 N/256 x 512 可以被视为 global feature。接着通过 Transition Up & Point Transformer 以及 skip connection 实现上采样并得到 global + local 的 point-wise 特征,使最终得到的 point-wise 特征兼具全局和局部特征,使之更具有区分度,从而实现对3D结构的语义分割。

classification 部分:基本上就是segmentation前半部分,通过降采样得到全局特征,之后再经过 Global AvgPooling 和 MLP 实现对3D结构的分类。

整体上给我的感觉就是:PointTransformer 和 PointNet++ 很像(可见:https://zhuanlan.zhihu.com/p/266324173)。

具体的每个子模块的结构:

1). point transformer block:

公式:

框架:

x: a set of feature vectors;
p: 3D coordinates

代码(可见https://github.com/qq456cvb/Point-Transformers/blob/master/models/Hengshuang/transformer.py):

2). Transition Down(下采样):

框架:

代码(可见 https://github.com/qq456cvb/Point-Transformers/blob/master/models/Hengshuang/model.py):

3). Transition Up(上采样):

框架:

代码(可见 https://github.com/qq456cvb/Point-Transformers/blob/master/models/Hengshuang/model.py):

2.2 本文中的 PointTransformer 框架:

参考:本文附件


本文中的 PointTransformer 和 原始的 PointTransformer 框架中的 classification 的结构是一致的(代码基本也是一样的)。

模型预测效果:

作者分别用PDBbind-2016 refined set 和 Larger data sets (拓展数据集,包括PDB-2016的 refined set 和 general set) 构建模型(5-fold cross validation),然后在PDBbind-2016 core set 上进行测试,结果如下:

  1. PointNet-1024 (R)PointNet-AtomChannel (R)相比,增加额外原子类型特征可以提高Person’s correlation coefficient R,降低 MAE 和 RMSE。
  2. PointNet-1024 (R)PoingNet-2048 (R)相比,增加采样点的数目,也可以提升模型的性能。

PointNet (AtomChannel) with seven additional channels including hydrogen, carbon, nitrogen, oxygen, phosphorus, sulfur and halogen.

  1. PointTransformer (1024)PointNet-1024 相比,预测效果差别不大。

  2. 整体上PointNetPointTransformer 在PDBbind-2016 上的表现不如PSH-GBTTopBP(complex)。

  3. 但是增加额外的原子理化性质特征反而会降低模型的性能。

原因作者认为在点云数据中添加额外的原子理化性质可能会使模型混淆对原子性质的理解。

  1. 在更大的数据集上测试发现,数据集越大,模型效果越好;训练之前对点云坐标进行旋转(rotating of the point cloud for 24 times before training)可以提升模型预测效果;将多个模型进行整合(5个最好的模型整合为PointTransformer-ensemble)可以进一步提升模型性能。

坐标旋转:将训练集和测试集中的point cloud绕配体的中心沿x、y、z旋转0,90,180和270度,将所有结果取均值作为该坐标旋转之后的结果。
5个最好的模型见附件。


7. 模型(PointTransformer)的优势和局限性:

因为 PointTransformer 的性能优于 PointNet,所以作者比较了 PointTransformer 与其他 protein-ligand 亲和力预测方法的性能(Pearson correlation coefficient)。

从图中可以看出,在 PDBbind-2007、PDBbind-2013 和 PDBbind-2016 三个数据集上的预测结果中,前三名是 PointTransformer(Our Model)、PerSpect 和 PSH,其中PointTransformer 基于 point cloud 数据、PerSperct 和 PSH 都是基于 molecular descriptors 数据。

与PerSpect 和 PSH 相比,PointTransformer 的优势在于:
1. 耗时短(如下图所示:Point cloud 和 PSH);

2. 特征精简,能够用更少的特征来描述 protein-ligand interactions(Our Model: 10 x 512;PerSpect: 36 x 250 x 11 + 50 x 100 x 11);
3. PointTransformer 基于 Pytorch,因此可以用GPU加速;

与PerSpect 和 PSH 相比,PointTransformer 的局限性在于:
1. 与基于 molecular descriptors 的方法相比,PointTransformer训练之前需要对三维坐标进行旋转,这将增加数据量及训练时间;

总结:

  1. 基于结构特征的DL模型对于protein-ligand亲和力的预测表现出巨大的潜力;
  2. 与其他ML或DL方法相比,基于点云数据的模型减少了数据预处理的耗时,测试结果也表明基于点云数据的PointNet和PointTransformer在protein-ligand亲和力预测方法表现突出,可以促进protein-ligand互作预测方法的发展;
  3. 与PointNet相比,PointTransformer更加耗时,所以优化模型结构有可能提升模型的性能;
  4. PointNet可以被用做 protein-ligand complex 的编码器,从而使点云数据得到更广泛的应用(比如用于强化学习);同时也可以开发一些应用于其他方面的模型,比如酶活性位点的研究、分子对接等;

基于点云的深度学习方法预测蛋白-配体结合亲和力【Briefings in Bioinformatics, 2022】相关推荐

  1. 搜索推荐中的召回匹配模型综述(二):基于表示学习的深度学习方法

    " 本文是搜索推荐中的召回匹配模型综述系列的第二篇,上一篇为搜索推荐中的召回匹配模型综述(一)--传统方法. 本文主要介绍了搜索推荐中基于representation learning的深度 ...

  2. 汇总|基于3D点云的深度学习方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|计算机视觉工坊 前言 三维数据通常可以用不同的格式表示,包 ...

  3. [论文阅读]使用深度学习方法预测蛋白质磷酸化位点DeepPhos: prediction of protein phosphorylation sites with deep learning(一)

    文章目录 摘要 一.背景 二.数据收集和预处理 三.Deepphos框架和模型训练 摘要 这项研究中,文章提出了一种新颖的多层CNN架构DeepPhos,以准确预测具有蛋白质序列信息的磷酸化位点.与之 ...

  4. DAEMKL:基于多核学习的深度自动编码器预测miRNA与疾病的关联(IEEE Transactions on Neural Networks and Learning Systems)

    DAEMKL:Predicting miRNA–Disease Associations Through Deep Autoencoder With Multiple Kernel Learning( ...

  5. 基于端到端深度学习方法的语音唤醒(Keyword Spotting)模型和论文

    语音唤醒,即关键词检索(keyword spotting, KWS).用语音唤醒设备,让设备由休眠状态切换至工作状态. 下面主要对基于端到端的深度学习方法的语音唤醒模型总结. 模型输入为语音,输出为各 ...

  6. 基于Detectron2模型和深度学习方法的改进森林火灾检测方法

     1.文章信息 本次介绍的文章是来自韩国科研团队的一篇2023年火灾检测文章,文章立足于森林火灾检测,题目为<An Improved Forest Fire Detection Method B ...

  7. 机器翻译中的多语言语言建模与翻译质量提升:从基于统计方法到深度学习方法

    作者:禅与计算机程序设计艺术 随着越来越多的语言被翻译成计算机可以理解的语言,机器翻译成为一个重要研究课题.在机器翻译中,语言模型是重要的组成部分.语言模型是一个概率分布,用来描述某个输入序列的可能性 ...

  8. 三维点云的深度学习研究综述

    作者丨aaa 来源丨https://zhuanlan.zhihu.com/p/455210291 编辑丨3D视觉工坊 摘要 点云学习由于在计算机视觉.自动驾驶.机器人等领域的广泛应用,近年来受到越来越 ...

  9. Deep Learning for 3D Point Clouds: A Survey - 3D点云的深度学习:一项调查 (IEEE TPAMI 2020)

    Deep Learning for 3D Point Clouds: A Survey - 3D点云的深度学习:一项调查(IEEE TPAMI 2020) 摘要 1. 引言 2. 背景 2.1 数据集 ...

最新文章

  1. 如何创建启动界面Splash Screen
  2. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点
  3. Vue.js 单文件组件
  4. C指针原理(23)-win32汇编及.NET调试
  5. springboot整合shiro+mybatis-plus
  6. .NET Core简介
  7. linux 状态码的意义,HTTP状态码是什么?常见的状态码描述都有什么?
  8. ureport2 mysql_Ureport2 安装,配置及问题详解
  9. 云计算与 Cloud Native | 数人云CEO王璞@KVM分享实录
  10. 计算机四级知识试卷答案,计算机四级考试试题及答案
  11. php 变量传给另外一个函数,将在一个函数中创建的PHP变量传递给另一个
  12. 07- HTTP协议详解及Fiddler抓包
  13. linux中副规则_linux中命名规则_学习笔记
  14. Delphi XE10百集视频教程计划
  15. 微型计算机控制技术王艳芳,基于单片机液位控制器的设计与实现最终版(样例3)...
  16. Firefox 扩展“此组件无法安装,因为它未通过验证。”问题的解决
  17. WinRAR 5.60 无广告正式版
  18. 数据分析报表使用指南
  19. 经典人工智能及开发工具--不看会后悔!!
  20. 共射级放大电路—实现最大输出振幅的方法竟如此简单

热门文章

  1. 基于临近图片相似性分析的图片碎片拼接算法matlab仿真
  2. 产品经理不再纸上谈兵——微信公众号PK原生App
  3. 2021 SoK: The Progress, Challenges, and Perspectives of Directed Greybox Fuzzing
  4. Win10文件夹右键卡死
  5. Epec RMA Process
  6. 街舞中的rolling机器人_《这就是街舞》第二季队长大秀 易烊千玺机器人舞
  7. novate 的混淆出错
  8. 第十天 移动端网页特效
  9. Logistic回归——银行违约情况分析
  10. 生信人的linux考试 题解