PSP - 基于 OpenFold 训练的 Finetuning 模型与推理逻辑评估

news2024/9/28 1:15:20

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/132410296

OpenFold

AlphaFold2 以其能够以极高的准确度预测蛋白质结构的能力,彻底改变了结构生物学。然而,AlphaFold2 的实现,缺乏训练新模型所需的代码和数据。这些是必要的,用于

  1. 解决新的任务,如蛋白质-配体复合物结构预测。
  2. 探索模型学习的过程,这仍然是一个难以理解的问题。
  3. 评估模型在未见过的折叠空间区域的泛化能力。

OpenFold 是一个快速、节省内存、可训练的 AlphaFold2 的实现,以及 OpenProteinSet 是最大的公开的蛋白质多序列比对数据库。使用 OpenProteinSet 从头开始训练 OpenFold,完全匹配 AlphaFold2 的准确度。在建立了平等性之后,通过使用精心设计的数据集重新训练 OpenFold,评估在折叠空间中泛化的能力。尽管训练集的大小和多样性极度减少,甚至包括几乎完全消除了二级结构元素类别,OpenFold 仍然具有非常强大的泛化能力。通过分析 OpenFold 在训练过程中产生的中间结构,获得了一些令人惊讶的观点,发现模型学习折叠蛋白质的方式,以及发现空间维度是顺序学习的。总而言之,研究展示 OpenFold 的强大和实用性,将成为蛋白质建模社区一个至关重要的新资源。

OpenFold:

  • Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization
  • GitHub: https://github.com/aqlaboratory/openfold
  • Huggingface: https://huggingface.co/nz/OpenFold

OpenFold 的运行环境配置,参考 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

使用相同的 MSA 文件,测试 OpenFold 的不同模型与 AlphaFold2 的差异,OpenFold 支持 AlphaFold2 的默认模型与 Finetuning 的模型,比较预测的蛋白质结构之间的差异,由于随机种子与模型架构 (Tensorflow 或 PyTorch) 的差异,实验结果,仅作为参考。

T1104-A117modelTMScoreRMSDTemplate
alphafold2model_1_ptm_pred_00.87601.832022-04-01
unrelaxed_model_1_pred_00.90361.662022-04-01
openfoldmodel_1_ptm0.56633.822022-04-01
model_10.86251.912022-04-01
model_1_ptm_finetune0.90011.442022-04-01
model_1_finetune0.81142.402022-04-01

其中,不同结构的比较,黄色是真实结构,蓝色来源于 AlphaFold2 的 monomer_ptm 模型,粉色来源于 OpenFold 的 finetuning_monomer_ptm 模型,即:
Img

1. 模型测试

测试序列 T1104-D1_A117.fasta 来自于 CASP15,即:

>A
QLEDSEVEAVAKGLEEMYANGVTEDNFKNYVKNNFAQQEISSVEEELNVNISDSCVANKIKDEFFAMISISAIVKAAQKKAWKELAVTVLRFAKANGLKTNAIIVAGQLALWAVQCG

MSA 来自于 AF2 的搜索结果,合计包括 380 条序列,即:

bfd_uniref_hits.a3m
mgnify_hits.sto
pdb_hits.hhr
uniref90_hits.sto

MSA 中 序列数量如下,来自于 AlphaFold2 的日志,即:

Uniref90 MSA size: 29 sequences.
BFD MSA size: 333 sequences.
MGnify MSA size: 28 sequences.
Final (deduplicated) MSA size: 380 sequences.

1.1 AlphaFold2 Monomer pTM 实验

使用 AlphaFold2 的 monomer_ptmmonomer 模型,作为对照实验,测试命令:

  • FASTA 路径:mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta
  • MSA 与 outputs 路径:mydata/openfold_test/monomer_ptm_outputs/mydata/openfold_test/monomer_outputs/,使用已搜索的 MSA 文件夹
  • 只使用 pred_0 结构,作为对照。

即:

bash run_alphafold.sh -o mydata/openfold_test/monomer_ptm_outputs/ -f mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta -m monomer_ptm -c full_dbs

bash run_alphafold.sh -o mydata/openfold_test/monomer_ptm_outputs/ -f mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta -m monomer -c full_dbs

其中,日志如下:

  • 模版日期:2022-04-01
  • MSA 数量:Final (deduplicated) MSA size: 380 sequences.

1.2 OpenFold 基于 AF2 模型参数 实验

测试命令:

  • FASTA 路径:mydata/openfold_test/monomer_fasta/T1104-D1_A117.fasta
  • MSA 与 outputs 路径:mydata/openfold_test/monomer_ptm_outputs/mydata/openfold_test/monomer_outputs/
  • 在 OpenFold 中默认的 max_template_date 与当前日期相同,因此,需要指定 2022-04-01

即:

python3 run_pretrained_openfold.py \
mydata/openfold_test/monomer_fasta/ \
af2-data-v230/pdb_mmcif/mmcif_files \
--uniref90_database_path af2-data-v230/uniref90/uniref90.fasta \
--mgnify_database_path af2-data-v230/mgnify/mgy_clusters_2022_05.fa \
--pdb70_database_path af2-data-v230/pdb70/pdb70 \
--uniclust30_database_path deepmsa2/uniclust30/uniclust30_2018_08 \
--output_dir mydata/openfold_test/monomer_ptm_outputs/T1104-D1_A117/ \
--bfd_database_path af2-data-v230/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
--model_device "cuda:0" \
--jackhmmer_binary_path /opt/openfold/hhsuite-speed/jackhmmer \
--hhblits_binary_path /opt/conda/envs/openfold/bin/hhblits \
--hhsearch_binary_path /opt/conda/envs/openfold/bin/hhsearch \
--kalign_binary_path /opt/conda/envs/openfold/bin/kalign \
--config_preset "model_1_ptm" \
--jax_param_path af2-data-v230/params/params_model_1_ptm.npz \
--max_template_date 2022-04-01

测试非 ptm 版本:

#...
--config_preset "model_1" \
--jax_param_path af2-data-v230/params/params_model_1.npz \
#...

1.3 OpenFold 基于 Finetuning 模型参数 实验

模型来源于 Huggingface 地址,即:

  • finetuning_ptm_2:Checkpoints in chronological order corresponding to peaks in the pTM training phase of the mainline branch. Models in this category include the pTM module and comprise the most recent of the checkpoints in said branch.
  • 按时间顺序排列的检查点,对应于主线分支的 pTM 训练阶段的峰值。 此类别中的模型,包括 pTM 模块,并且包含所述分支中最新的检查点。

测试命令:

# ...
--config_preset "model_1_ptm" \
--openfold_checkpoint_path openfold/resources/openfold_params/finetuning_ptm_2.pt \
# ...

测试基础版本 model_1finetuning_5.pt 模型,命令如下:

# ...
--config_preset "model_1" \
--openfold_checkpoint_path openfold/resources/openfold_params/finetuning_5.pt \
# ...

2. 源码简读

将参数 openfold_checkpoint_path 修改成 jax_param_path,添加 AF2 的模型地址,即可推理,如下:

af2-data-v230/params/params_model_1_ptm.npz

测试命令:

python3 run_pretrained_openfold.py \
mydata/test \
af2-data-v230/pdb_mmcif/mmcif_files \
--uniref90_database_path af2-data-v230/uniref90/uniref90.fasta \
--mgnify_database_path af2-data-v230/mgnify/mgy_clusters_2022_05.fa \
--pdb70_database_path af2-data-v230/pdb70/pdb70 \
--uniclust30_database_path deepmsa2/uniclust30/uniclust30_2018_08 \
--output_dir mydata/output \
--bfd_database_path af2-data-v230/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
--model_device "cuda:0" \
--jackhmmer_binary_path /opt/openfold/hhsuite-speed/jackhmmer \
--hhblits_binary_path /opt/conda/envs/openfold/bin/hhblits \
--hhsearch_binary_path /opt/conda/envs/openfold/bin/hhsearch \
--kalign_binary_path /opt/conda/envs/openfold/bin/kalign \
--config_preset "model_1_ptm" \
--jax_param_path af2-data-v230/params/params_model_1_ptm.npz

输出日志:

INFO:openfold/utils/script_utils.py:Successfully loaded JAX parameters at af2-data-v230/params/params_model_1_ptm.npz...
INFO:run_pretrained_openfold.py:Using precomputed alignments for A at mydata/output/alignments...
INFO:openfold/utils/script_utils.py:Running inference for A...
INFO:openfold/utils/script_utils.py:Inference time: 10.29592083580792
INFO:run_pretrained_openfold.py:Output written to mydata/output/predictions/A_model_1_ptm_unrelaxed.pdb...
INFO:run_pretrained_openfold.py:Running relaxation on mydata/output/predictions/A_model_1_ptm_unrelaxed.pdb...
INFO:openfold/utils/script_utils.py:Relaxation time: 6.760884702205658
INFO:openfold/utils/script_utils.py:Relaxed output written to mydata/output/predictions/A_model_1_ptm_relaxed.pdb...

MSA 部分的结构,outputs/alignments/A,即:

  • 没有单独的 fasta 同名文件夹。
  • 在 alignments 文件夹中,包括链名 A,之后就是 msa 文件。
  • 默认搜索格式都是 msa 格式,而 af2 部分是 sto 格式。

即:

bfd_uniclust_hits.a3m
mgnify_hits.a3m
pdb70_hits.hhr
uniref90_hits.a3m

在源码 run_pretrained_openfold.py 中,搜索 MSA 的部分,如下:

  • tags 是链名,即 ['A']
  • seqs 是序列,即 ['QLEDS...AVQCG']
  • precompute_alignments 是预计算 MSA 文件的方法。

# ...
logger.info(f"[CL] tags: {tags}, seqs: {seqs}")
# Does nothing if the alignments have already been computed
precompute_alignments(tags, seqs, alignment_dir, args)
# feature_dicts 第1次是空的,随着循环进行,逐步缓存已有的tag (链名)
feature_dict = feature_dicts.get(tag, None)
if feature_dicts:
    logger.info(f"[CL] feature_dict.keys: {feature_dict.keys()}")
# ...

在源码 run_pretrained_openfold.py 中,处理特征的部分,如下:

  • 临时 fasta 文件:process_fasta - tmp_fasta_path: mydata/output/tmp_26020.fasta,其中 26020 是 pid,即进程 id,避免重复。

即:

local_alignment_dir = os.path.join(alignment_dir, tag)
logger.info(f"[CL] process_fasta - tmp_fasta_path: {tmp_fasta_path}")
feature_dict = data_processor.process_fasta(
    fasta_path=tmp_fasta_path, alignment_dir=local_alignment_dir
)

在源码 openfold/data/data_pipeline.py 中,process_fasta() 是处理特征的部分,如下:

  • 特征包括:template_features 模版特征、sequence_features 序列特征、msa_features MSA 特征。
  • template_features 模版特征包括:template_aatypetemplate_all_atom_masktemplate_all_atom_positionstemplate_domain_namestemplate_sequencetemplate_sum_probs等 6 个部分。
  • sequence_features 序列特征包括:aatypebetween_segment_residuesdomain_nameresidue_indexseq_lengthsequence等 6 个部分。
  • msa_features MSA 特征包括:deletion_matrix_intmsanum_alignments等 3 个部分。
  • 这个特征,是整体特征预处理的核心。

即:

def process_fasta(
    self,
    fasta_path: str,
    alignment_dir: str,
    alignment_index: Optional[str] = None,
) -> FeatureDict:
    """Assembles features for a single sequence in a FASTA file""" 
    with open(fasta_path) as f:
        fasta_str = f.read()
    input_seqs, input_descs = parsers.parse_fasta(fasta_str)
    if len(input_seqs) != 1:
        raise ValueError(
            f"More than one input sequence found in {fasta_path}."
        )
    input_sequence = input_seqs[0]
    input_description = input_descs[0]
    num_res = len(input_sequence)

    hits = self._parse_template_hits(alignment_dir, alignment_index)
    template_features = make_template_features(
        input_sequence,
        hits,
        self.template_featurizer,
    )
    logger.info(f"[CL] template_features: {template_features.keys()}")

    sequence_features = make_sequence_features(
        sequence=input_sequence,
        description=input_description,
        num_res=num_res,
    )
    logger.info(f"[CL] sequence_features: {sequence_features.keys()}")

    msa_features = self._process_msa_feats(alignment_dir, input_sequence, alignment_index)
    logger.info(f"[CL] msa_features: {msa_features.keys()}")

    return {
        **sequence_features,
        **msa_features, 
        **template_features
    }

日志:

run_pretrained_openfold.py:Using precomputed alignments for A at mydata/output/alignments...
run_pretrained_openfold.py:[CL] generate_feature_dict - alignment_dir: mydata/output/alignments
run_pretrained_openfold.py:[CL] len(seqs): 1, seqs: ['QLEDSEVEAVAKGLEEMYANGVTEDNFKNYVKNNFAQQEISSVEEELNVNISDSCVANKIKDEFFAMISISAIVKAAQKKAWKELAVTVLRFAKANGLKTNAIIVAGQLALWAVQCG']
run_pretrained_openfold.py:[CL] process_fasta - tmp_fasta_path: mydata/output/tmp_26020.fasta
openfold/data/data_pipeline.py:[CL] template_features: dict_keys(['template_aatype', 'template_all_atom_mask', 'template_all_atom_positions', 'template_domain_names', 'template_sequence', 'template_sum_probs'])
openfold/data/data_pipeline.py:[CL] sequence_features: dict_keys(['aatype', 'between_segment_residues', 'domain_name', 'residue_index', 'seq_length', 'sequence'])
openfold/data/data_pipeline.py:[CL] msas size: 3
openfold/data/data_pipeline.py:[CL] msa_features['msa']: (260, 117)
openfold/data/data_pipeline.py:[CL] msa_features: dict_keys(['deletion_matrix_int', 'msa', 'num_alignments'])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt开发环境安装(版本5.14.2)

1.Qt下载 下载地址:https://download.qt.io/archive/qt/ 界面如下: 因为从qt 5.15开始,qt不再提供安装包,需要自行编译。本次我们选择5.14.2进行操作。 我们是在windows下安装,所以选择windows版本进行下载 下载完成…

使用 ChatGPT 的代码解释器进行数据科学的 5 种方法

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 通过代码解释器集成,ChatGPT 现在可以在沙盒环境中编写和执行 Python 代码,以提供更准确和精确的答案。这允许它通过代码执行(而不仅仅是文本预测)执行复…

sdk manager (ubuntu20.4) 安装

1、首先下载sdk manager 1.9.3 下载链接 https://www.baidu.com/link?urlVXJhUqxxhS3eFK3bOPTzi5LFl6ybeW3JwDY1CwANaPf1gvO3IxQKzY547NIe53x1blJxnAXg7FTRTvs-cnfnVa&wd&eqida22baa7b0004ca980000000664e2d426 当然要登录自己的账号才能成功下载,下载对应…

MyBatis-Plus 详解

文章目录 MyBatisPlus一、入门案例1.1 准备表结构和数据1.2 添加依赖1.3 yml 配置1.4 添加 Factor 实体1.5 创建Mapper接口1.6 创建Mapper.xml 文件1.7 测试操作1.8 日志输出 二、CRUD操作2.1 插入因子2.2 更新因子2.3 删除因子① 根据id删除② 批量删除③ 通过Map删除 2.4 查询…

系统架构合理性的思考 | 京东云技术团队

最近牵头在梳理部门的系统架构合理性,开始工作之前,我首先想到的是如何定义架构合理性? 从研发的角度来看如果系统上下文清晰、应用架构设计简单、应用拆分合理应该称之为架构合理。 基于以上的定义可以从以下三个方面来梳理评估&#xff1…

标签准备——labelIMG工具使用

当我们已经准备了大量用于图片标注所需的图片后,便需要使用labelIMG工具进行打标签的操作了。 1、标签规划 在我们开始打标签之前,首先需要注意的是,打标签是我们开展训练、识别工作的基础,我们需要准确最好标签的规划,明确都有哪些标签,并在venv/Lib/site-packages/la…

怎么压缩视频?一分钟学会视频压缩技巧

现在拍摄的视频文件体积都比较大,如果再加上后期的剪辑处理,动不动就是几个GB起步,这样一来不仅占用空间,还不方便传输,今天就围绕这个问题给大家分享几个压缩视频的方法,需要的朋友可以参考下。 方法一&am…

如何拥有观影氛围感?极米投影仪H6为你打造美好之夜

当前人们对于家庭舒适度的要求越来越高,“仪式感”也被越来越多的人关注起来,对于喜欢看电影的年轻人来说,在家里的观影氛围感当然也不能少。今天,笔者就为大家带来了一款打造观影氛围感好物极米H6。 作为极米H系列首款4K分辨率的…

Docker基本操作命令(一)

Docker基本操作命令 1、搜索镜像 docker search命令搜索存放在 Docker Hub中的镜像,此命令默认Docker会在Docker Hub中搜索镜像,可以配置了其他镜像仓库 [rootzch01 ~]# docker search centos NAME:镜像仓库名称DESCRIPTION:镜像仓库描述STARS:镜像仓…

探索聊天型AI进阶:从ChatGPT到提示工程入门

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 导言 近年来&#xff0…

滑动验证组件---设置movable-view组件的x属性在微信小程序端失效的问题

场景 采用uniapp的movable-view组件实现滑动验证组件。 流程 滑块未滑到最右端时,回弹到原点滑块滑到最右端时,则显示滑动结束,不可再滑动 问题 频繁设置uniapp的movable-view组件的x属性,在H5端正常,但在微信小程…

实时操作系统与非实时操作系统

一、实时操作系统 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务&am…

win10 版本21H2 + vs2022 + Windows 11 版本 22H2 WDK

打开VS,工具–>获取工具和功能–>单个组件。在里面搜索SDK Windows 11 SDK(10.0.22621.0) Windows 11 版本 21H2 WDK 不支持 Visual Studio 2022。 若要使用 Visual Studio 2022 开发和测试驱动程序,请下载 Windows 11 版本 22H2 WDK。 #include…

自定义目录高亮的锚点计算位移

如果可以实现记得给个星星,谢谢老铁~ 一、问题的描述 一个支持目录树形结构,自定义目录高亮的锚点计算位移,且支持选中该目录后锚点对应的内容。这里只提供左边的组件思路,右边展示对应的内容最好自己自定义组件控制更为灵活&am…

MyBatis(一)执行流程概述

目录 一、简介二、MyBatis执行流程1.读取核心配置文件 mybatis-config.xml2.构建会话工厂 SqlSessionFactory3.创建会话 SqlSession4.Executor 执行器5.MappedStatement 对象6.输入参数处理(map,list,String,Integer,pojo)7.操作数据库8.输出结果处理&am…

[C语言]分支语句和循环语句

[C语言]分支语句和循环语句 文章目录 [C语言]分支语句和循环语句C语言语句分类分支语句if语法结构else的匹配规则switch语句switch语句中的breakswitch语句中default 循环语句while循环while循环中的break和continuefor循环for循环中的break和continuefor循环的变种do while循环…

ARM汇编【1】:数据类型

与高级语言类似,ARM支持对不同数据类型的操作。我们可以加载或存储的数据类型可以是有符号和无符号字、半字或字节。这些数据类型的扩展名是:-h或-sh表示半字,-b或-sb表示字节,不表示字的扩展名。有符号数据类型或无符号数据类型之…

二重积分小技巧---交换积分

又一个奇技淫巧。 【例1】 ∫ 0 1 d y ∫ y 1 x 3 1 d x ? \int _0 ^1 dy \int _{\sqrt y} ^ 1 \sqrt{x^3 1} dx ? ∫01​dy∫y ​1​x31 ​dx? 解析: 不说话,看下图: ∫ 0 1 d y ∫ y 1 x 3 1 d x ∫ 0 1 d x ∫ 0 x 2 x 3 1 d…

照亮虚拟网络流量“盲区”:超融合网络流量可视化功能解读

云计算时代下,网络虚拟化使网络管理更加集中、灵活和便捷,但同时也让云内的网络变得更加复杂。传统网络流量诊断方法和工具,难以对云内虚拟网络的“东-西向流量”进行可视化呈现和分析,形成了网络运维管理的盲区,提升了…

Shopify独立站也会被封店?告诉你这背后深藏的玄机!

很多人觉得做独立站就完全自由了,不被平台监管,也不会被封店。但事实真的是这样吗?其实独立站只是相对自由,受到的监管相对较少,封店的风险较小,但并不是完全高枕无忧。想知道什么情况下会被封店&#xff1…