¿Cómo construye DeepVariant imágenes RGB a partir de secuencias de ADN?

Aug 19 2020

DeepVariant es una tubería para llamar variantes genéticas a partir de datos de secuenciación de ADN.

Un paso importante, antes de alimentar la CNN, es traducir estas secuencias de ADN en imágenes. No está claro por qué y cómo Google construye las imágenes RGB a partir de los datos de ADN. Obviamente, el ADN es una cadena sobre un alfabeto con los caracteres: {A, T, C, G}.

Incluso es difícil entender cómo funciona el mapeo basado en el código fuente de sus pruebas unitarias .

En su figura del papel: A es rojo, C es verde, G es azul y T es amarillo (G+R), pero aún no está claro cómo construyen la 3xNxNimagen.


EDITAR del blog de Google :

En este artículo mostraremos los seis canales seguidos, pero en DeepVariant están codificados como seis capas en la tercera dimensión, dando a cada tensor una forma de (100, 221, 6) correspondiente a (alto, ancho, canales). La variante en cuestión siempre está en el centro de cada imagen acumulada, aquí marcada con una pequeña línea en la parte superior.

Los canales se muestran en escala de grises a continuación en el siguiente orden:

Base de lectura: diferentes intensidades representan A, C, G y T.

Calidad base: establecida por la máquina de secuenciación. El blanco es de mayor calidad.

Calidad del mapeo: establecida por el alineador. El blanco es de mayor calidad.

Hilo de alineación: Negro está adelante; el blanco es al revés.

La lectura admite la variante: el blanco significa que la lectura admite el alelo alternativo dado, el gris significa que no.

La base difiere de la referencia: el blanco significa que la base es diferente de la referencia, el gris oscuro significa que la base coincide con la referencia.

Respuestas

1 SmallChess Aug 26 2020 at 07:03

En realidad, el periódico ha dejado claro cómo lo hicieron. Solo tiene que leer los materiales complementarios más de cerca.

En su figura del papel: A es rojo, C es verde, G es azul y T es amarillo (G+R), pero aún no está claro cómo obtienen la imagen 3xNxN.

En RGB, cada dimensión es una imagen NxN. Como tienes tres dimensiones, entonces es 3xNxN. La dimensión roja se usó para codificar las bases de nucleótidos. La dimensión verde se utilizó para codificar puntuaciones de calidad. Finalmente, la dimensión azul se usó para codificar la información del hilo.

Obviamente, el ADN es una cadena sobre un alfabeto con los caracteres: {A, T, C, G}.

Esto es facil. Muchas maneras. Podrías hacer una codificación one-hot o lo que usó DeepVariant:

def get_base_color(base):
    base_to_color = {'A': 250, 'G': 180, 'T': 100, 'C': 30}
    return base_to_color.get(base, 0)
0x90 Aug 23 2020 at 22:48

Basado en el material complementario mencionado en un comentario de Devon Ryan:

La segunda fase de DeepVariant codifica la referencia y el soporte de lectura para cada variante candidata en una imagen RGB. El pseudocódigo de este componente se muestra a continuación; contiene todas las operaciones clave para construir la imagen, omitiendo para mayor claridad el manejo de errores, el código para tratar los casos extremos, como cuando las variantes ocurren cerca del inicio o el final del cromosoma, y ​​la implementación de elementos no esenciales y/o obvios. funciones

Aquí está la función principal.

WIDTH = 221
HEIGHT = 100;
def create_pileup_images(candidate_variants):
 for candidate in candidate_variants:
 for biallelic_variant in split_into_biallelics(candidate):
 start = biallelic_variant.start - (WIDTH-1) / 2
 end = WIDTH - span_start
 ref_bases = reference.get_bases(start, end)
 image = Image(WIDTH, HEIGHT)
 row_i = fill_reference_pixels(ref, image)
 for read in reads.get_overlapping(start, end):
 if row_i < HEIGHT and is_usable_read(read):
 add_read(image, read, row_i)
 row_i += 1
 yield image

def fill_reference_pixels(ref, image):
 for row in range(5):
 for col in range(WIDTH):
 alpha = 0.4
 ref_base = ref[col]
 red = get_base_color(ref_base)
 green = get_quality_color(60) # The reference is high quality
 blue = get_strand_color(True) # The reference is on the positive strand
 image[row, col] = make_pixel(red, green, blue, alpha)
 return 5