DeepVariant的安装和使用

概述

2018年,DeepVariant以letters的形式发表在Nature biotechnology (IF2022: 46.9) 期刊上,并在Github上进行了开源。在Benchmark的测试结果中,DeepVariant与其他变异检测方法或工具(GATKFreeBayesSAMtools16GTStrelka等等)都进行了比较,并展示出了极佳的变异检测效果。

DeepVariant是一个应用深度学习方法来对二代/三代测序数据进行变异检测的pipeline或者分析流程。该流程以BAM或者CRAM格式作为输入,随后将每个位点的比对结果转换为六张连续堆叠的图像张量作为卷积神经网络(CNN)的输入并进行分类,最后会生成标准的VCFgVCF文件和HTML报告文件供后续的分析。以下是一个位点对应的图像张量展示:

DeepVariant的优点如下:

  • 准确性高

  • 灵活

  • 易用

  • 成本低

  • 速度快

  • 用法广

安装DeepVariant

使用docker安装DeepVariant

BIN_VERSION="1.5.0"

sudo apt -y update
# 拉取镜像
sudo docker pull google/deepvariant:"${BIN_VERSION}"

使用singularity安装DeepVariant

BIN_VERSION="1.5.0"

# 拉取镜像
singularity pull docker://google/deepvariant:"${BIN_VERSION}"

当然,对于其他意外情况,如服务器无法连接外网,这里提供一个可以参考的思路:

1-在windows上安装docker并下载所需的镜像

2-使用如下命令将镜像打包为tar文件

# 查看镜像是否存在
docker images

# 打包镜像
# docker save IMAGE_ID -o IMAGE_NAME.tar
docker save 45f6c7767ff0 -o deepvariant.tar

# 打包完后可以选择删除镜像
docker rmi 45f6c7767ff0

3-将打包后的文件上传至服务器上,并转为镜像文件

docker命令

docker load -i deepvariant.tar

singularity命令

singularity build deepvariant.sif docker-archive://deepvariant.tar

# 运行
singularity run deepvariant.sif /opt/deepvariant/bin/run_deepvariant --helpfull

使用Conda安装DeepVariant

软件查询

conda search -c bioconda deepvariant
deepvariant                    1.0.0  py36hf3e76ba_1  bioconda
deepvariant                    1.0.0  py36hf3e76ba_2  bioconda
deepvariant                    1.0.0  py36hf3e76ba_3  bioconda
deepvariant                    1.0.0  py36hf5a246b_0  bioconda
deepvariant                    1.1.0  py36hf3e76ba_0  bioconda
deepvariant                    1.1.0  py36hf3e76ba_1  bioconda
deepvariant                    1.1.0  py36hf3e76ba_2  bioconda
deepvariant                    1.2.0  py36hf3e76ba_0  bioconda
deepvariant                    1.3.0  py36hf3e76ba_0  bioconda
deepvariant                    1.4.0  py36hf3e76ba_0  bioconda
deepvariant                    1.5.0  py36hf3e76ba_0  bioconda

环境创建和软件安装

conda create -c bioconda -n deepvariant-1.5.0 deepvariant=1.5.0

激活环境

conda activate deepvariant-1.5.0

下载测试数据

INPUT_DIR="${PWD}/quickstart-testdata"
DATA_HTTP_DIR="https://storage.googleapis.com/deepvariant/quickstart-testdata"

mkdir -p ${INPUT_DIR}
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/NA12878_S1.chr20.10_10p1mb.bam
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/NA12878_S1.chr20.10_10p1mb.bam.bai
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/test_nist.b37_chr20_100kbp_at_10mb.bed
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/test_nist.b37_chr20_100kbp_at_10mb.vcf.gz
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/test_nist.b37_chr20_100kbp_at_10mb.vcf.gz.tbi
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.fai
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.gz
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.gz.fai
wget -P ${INPUT_DIR} "${DATA_HTTP_DIR}"/ucsc.hg19.chr20.unittest.fasta.gz.gzi

下载后的测试数据目录结构如下

quickstart-testdata/
├── NA12878_S1.chr20.10_10p1mb.bam
├── NA12878_S1.chr20.10_10p1mb.bam.bai
├── test_nist.b37_chr20_100kbp_at_10mb.bed
├── test_nist.b37_chr20_100kbp_at_10mb.vcf.gz
├── test_nist.b37_chr20_100kbp_at_10mb.vcf.gz.tbi
├── ucsc.hg19.chr20.unittest.fasta
├── ucsc.hg19.chr20.unittest.fasta.fai
├── ucsc.hg19.chr20.unittest.fasta.gz
├── ucsc.hg19.chr20.unittest.fasta.gz.fai
└── ucsc.hg19.chr20.unittest.fasta.gz.gzi

0 directories, 10 files

运行DeepVariant

DeepVariant包含3个主要的命令(或者是3个主要的步骤,如下图所示):make_examplescall_variantspostprocess_variants。为了更方便操作,这3个命令或步骤被整合到了一个叫做run_deepvariant.pypython脚本内,并可以被docker或者singularity直接运行。

DeepVariant使用帮助信息

flags:

/opt/deepvariant/bin/run_deepvariant.py:  
  --call_variants_extra_args: 可以对`call_variants`这一步使用flag_name=flag_value添加额外的键值对参数,多个键值对参数间使用逗号分隔。"flag_name" 必须是call_variants.py脚本中的有效参数. "flag_value"可以是布尔值true或者false

  --customized_model: 可选的,为 "call_variants "步骤加载模型检查点的路径。如果没有设置,将使用--model_type参数对应的默认值.

  --[no]dry_run: 可选的,如果使用了该选项,只打印命令而不执行。(默认:'false',即直接运行)

  --intermediate_results_dir: 可选的,如果指定,这应该是一个在docker内部可见的现有目录,并将被用来存储中间输出。

  --logging_dir: 可选的,将每个阶段的运行日志文件写入指定目录下

  --make_examples_extra_args: 一个用逗号分隔的flag_name=flag_value的列表。"flag_name "必须是`make_examples.py`脚本中的有效参数。如果"flag_value"是布尔值,它必须是flag_name=true或flag_name=false。

  --model_type: <WGS|WES|PACBIO|ONT_R104|HYBRID_PACBIO_ILLUMINA>: 必须参数。用于指定变异检测的模型类型。设置这个参数是为了使用与每个类型相关的默认模型,并启用与每个模型对应的必要参数。如果你想使用一个自定义的模型,除了这个参数外,还要加上--customized_model参数指定模型文件。

  --num_shards: 可选的,`make_examples`步骤中需要使用的CPU数量。 (默认:'1',整数类型)

  --output_gvcf: 可选的,需要输出gVCF文件时加上该参数,并指定gVCF文件的输出路径

  --output_vcf: 必须参数, 指定VCF文件的输出路径

  --postprocess_variants_extra_args: 一个用逗号分隔的flag_name=flag_value的列表。 "flag_name "必须是`postprocess_variants.py`脚本中的有效参数。如果"flag_value"是布尔值,它必须是flag_name=true或flag_name=false。

  --reads: 必须参数。指定一个比对后的、排序后的、有索引的BAM文件用于变异检测。该参数应该与--ref参数一同使用。

  --ref: 必须参数,指定需要使用的参考基因组,该参考基因组必须有一个对应的fai结尾的索引文件。支持经gzip压缩后的参考基因组文件。该参数应该与--reads参数一同使用。

  --regions: 可选的,指定需要分析处理的目标区域,多个区域用空格分隔。目标区域格式可以写成(如chr20:10-20)或使用BED/BEDPE文件代替。

  --[no]runtime_report: 如果使用了该选项,则会输出`make_examples`运行过程中的时间统计指标,并使用runtime_by_region_vis创建一个可视化的运行时间报告。需要与--logging_dir参数一同使用。(默认:'false')

  --sample_name: 指定输出的样本名称,而不使用来自BAM文件中的样本名称(header的SM标签)。这个参数用于`make_examples`和`postprocess_variants`步骤

  --[no]use_hp_information: (在v1.4.0版本中已废弃)可选。如果使用了该选项,相应的参数将被设置,以正确使用BAM输入中的HP信息

  --[no]vcf_stats_report: 可选的,输出一个关于VCF文件统计结果的可视化报告(HTML)。(默认:'true')

  --[no]version: 可选的,如果使用了该选项,则打印出版本号并退出。

使用docker运行DeepVariant

BIN_VERSION="1.5.0"
INPUT_DIR="${PWD}/quickstart-testdata"
OUTPUT_DIR="${PWD}/quickstart-output"

mkdir -p "${OUTPUT_DIR}"

sudo docker run \
-v "${INPUT_DIR}":"/input" \
-v "${OUTPUT_DIR}":"/output" \
google/deepvariant:"${BIN_VERSION}" \
/opt/deepvariant/bin/run_deepvariant \
--model_type=WGS \
--ref=/input/ucsc.hg19.chr20.unittest.fasta \
--reads=/input/NA12878_S1.chr20.10_10p1mb.bam \
--regions "chr20:10,000,000-10,010,000" \
--output_vcf=/output/output.vcf.gz \
--output_gvcf=/output/output.g.vcf.gz \
--intermediate_results_dir /output/intermediate_results_dir \
--num_shards=1

使用singularity运行DeepVariant

BIN_VERSION="1.5.0"
INPUT_DIR="${PWD}/quickstart-testdata"
OUTPUT_DIR="${PWD}/quickstart-output"

mkdir -p "${OUTPUT_DIR}"

# Run DeepVariant.
singularity run \
-B "${INPUT_DIR}":"/input","${OUTPUT_DIR}":"/output" \
docker://google/deepvariant:"${BIN_VERSION}" \
/opt/deepvariant/bin/run_deepvariant \
--model_type=WGS \
--ref=/input/ucsc.hg19.chr20.unittest.fasta \
--reads=/input/NA12878_S1.chr20.10_10p1mb.bam \
--regions "chr20:10,000,000-10,010,000" \
--output_vcf=/output/output.vcf.gz \
--output_gvcf=/output/output.g.vcf.gz \
--intermediate_results_dir /output/intermediate_results_dir \
--num_shards=1

运行完后的目录结构如下

.
├── quickstart-output # 输出结果目录
│   ├── intermediate_results_dir # 输出结果临时目录
│   │   ├── call_variants_output.tfrecord.gz
│   │   ├── gvcf.tfrecord-00000-of-00001.gz
│   │   ├── make_examples.tfrecord-00000-of-00001.gz
│   │   └── make_examples.tfrecord-00000-of-00001.gz.example_info.json
│   ├── output.g.vcf.gz # 输出的gvcf文件,用于后续的合并操作
│   ├── output.g.vcf.gz.tbi # 输出的gvcf文件索引
│   ├── output.vcf.gz # 输出的vcf文件
│   ├── output.vcf.gz.tbi # 输出的vcf文件索引
│   └── output.visual_report.html # 输出的变异检测报告文件
└── quickstart-testdata # 测试数据目录
    ├── NA12878_S1.chr20.10_10p1mb.bam
    ├── NA12878_S1.chr20.10_10p1mb.bam.bai
    ├── test_nist.b37_chr20_100kbp_at_10mb.bed
    ├── test_nist.b37_chr20_100kbp_at_10mb.vcf.gz
    ├── test_nist.b37_chr20_100kbp_at_10mb.vcf.gz.tbi
    ├── ucsc.hg19.chr20.unittest.fasta
    ├── ucsc.hg19.chr20.unittest.fasta.fai
    ├── ucsc.hg19.chr20.unittest.fasta.gz
    ├── ucsc.hg19.chr20.unittest.fasta.gz.fai
    └── ucsc.hg19.chr20.unittest.fasta.gz.gzi

使用conda运行DeepVariant

run_deepvariant.py脚本并不支持conda使用,因此需要逐步运行,参数使用参考上述信息

python dv_make_examples.py
python dv_call_variants.py
python dv_postprocess_variants.py

打开报告文件output.visual_report.html,可以看到如下统计结果,里面的图形也是可交互的:

作者 :LXD
转载 :DeepVariant的安装和使用
来源 :微信公众号
著作权归作者所有,任何形式的转载都请联系作者。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容