前言

恩。。最近太忙了,一直在忙著自己的研究生毕业设计,刚刚才提交了初稿,很多内容没有及时更新,见谅见谅...

今天来讲讲基于DeepVariant框架的简化版,Simple Convolutional Neural Network for Genomic Variant Calling with TensorFlow

这是一个工程师的博客内容,他工作在一间单分子测序的公司,不算是一篇文章,但是思路还是很好的,和大家分享一下。

网页: 主要介绍了作者的一些动机和方法介绍

源码地址:也用tensorflow写的,不过框架相对简单

Motivation

深度学习的快速发展改变著对待基因组学的方式。许多初创企业都强调将人工智慧和机器学惯用于他们的研究和产品。但是工业上的公司更加注重于深度学习带来的对于传统工业行业的改变,谷歌的deepVariant改变了很多人对于想法,相比与对于直接数据的分析测定,一个端到端的网路的会有这么强的表现。

作者指出了如果使用deepVariant的计算流程用于异常检测,特别是在单分子异常检测的情况下,会导致信息的丢失,因为DeepVariant的计算流程其实是只用了例如base quality、 变异位点序列信息等等,因此在原始序列转图像序列的过程中会产生信息的丢失,其次,deepvariant的网路也更加复杂, 训练和计算都相对耗时,因此,作者希望通过设计一个专门用於单分子测序异常检测的演算法。

工作流程

具体的工作流程在作者的论文中已经给出:

作者希望设计一个卷积神经网路用於单分子测序的异常检测,输入为变异候选位置的基因片段,输出为不同的变异类型,作者分成了四种(heterozygous variant」, 「homozygous variant」, 「non-variant」, or 「complex-variant」)分别对应杂合子变异,纯合子变异,非变异区段,和复杂变异;和四种不同碱基的变异可能性。

其中碱基可能性采用均方误差计算,四种类别采用softmax来计算,所以整个模型可以看做为一个多任务(multi-mask 模型)

预处理

? 首先,核心还是序列转图像的过程,作者对于每个异常位点,会生成一个15X4X3的图像,如上面中间的图所示,变异的类型一共有三种,分别为SNP,inset和 deletion. 作者的版本只检测最简单的碱基替换。

第一个15X4的图像是对应异常序列的ACGT的序列信息,对于每一个变异位点,作者将左右的序列各扩展7个.生成15个长度的序列信息,并做了onehot编码,这个和deepvarinat的方式是一样的,第二个和第三个分别对应参考序列和变异序列的不同位点,通过不同的组合来表示不同的变异类型,比如上面图那个就是一种类型,在第8个位点发生了一次替换,通过第二个和第三个通道的图像来表达。最后每一个异常序列都可以生成这么个15X4X3的图像。

网路结构

相比于deepvariant采用的Google inception结构,作者为了更快的计算效率,采用了更为简单的结构,直接采用了两个卷积层和三个全连接层(2 convolution + maxpool layers followed by 3 full connect + drop-out layers),计算效率和训练的时间都相对的简单。整个网路训练只要10分钟左右,比deepvariant恩。。

训练和测试

由于这么版本非常简单,作者在NA12878 PacBio上做了训练和测试,训练的样本和测试样本都非常小训练是在chr21数据集上,测试是在chr22数据集上,都是只有几万个SNP变异的,但是总体的效果还是不错的,最终的召回率达到98%.

这是chr22最终变异检测结果

原图在这

虽然最后的输出类别是变异类型,实际上是可以输出预测位置的错误位点的,即检测出错误类型后通过输出的碱基类别来纠正错误位置

有兴趣的可以看看作者的代码,相对deepvariant整体封装好的框架还是相对好理解很多,也便于初学者学习。有兴趣也可以pull下来跑一下,需要装个tensorflow和interetree模块。

本次介绍部分就到这,欢迎和我讨论!

欢迎大家关注我的知乎专栏:从零开始生物信息学

相同内容也可以关注我的微信公众号: 壹读基因:


推荐阅读:
相关文章