In che modo DeepVariant costruisce immagini RGB da sequenze di DNA?

Aug 19 2020

DeepVariant è una pipeline per richiamare varianti genetiche dai dati di sequenziamento del DNA.

Un passo importante, prima di alimentare la CNN, è tradurre queste sequenze di DNA in immagini. Non è chiaro perché e come Google costruisca le immagini RGB dai dati del DNA. Ovviamente, il DNA è una stringa su un alfabeto con i caratteri: {A, T, C, G}.

È persino difficile capire come funziona la mappatura in base al codice sorgente dei test unitari .

Nella loro figura dal foglio: A è rosso, C è verde, G è blu e T è giallo (G+R), ma non è ancora chiaro come costruiscano l' 3xNxNimmagine.


EDIT dal blog di Google :

In questo articolo mostreremo i sei canali di fila, ma in DeepVariant sono codificati come sei livelli nella terza dimensione, dando a ciascun tensore una forma di (100, 221, 6) corrispondente a (altezza, larghezza, canali). La variante in questione è sempre al centro di ogni immagine pileup, qui contrassegnata da una piccola linea in alto.

I canali sono mostrati in scala di grigi sotto nel seguente ordine:

Base di lettura: diverse intensità rappresentano A, C, G e T.

Qualità base: stabilita dalla macchina sequenziatrice. Il bianco è di qualità superiore.

Qualità della mappatura: impostata dall'allineatore. Il bianco è di qualità superiore.

Filo di allineamento: il nero è in avanti; il bianco è al contrario.

La lettura supporta la variante: il bianco significa che la lettura supporta l'allele alternativo dato, il grigio significa che non lo fa.

La base è diversa dalla referenza: il bianco indica che la base è diversa dalla referenza, il grigio scuro indica che la base corrisponde alla referenza.

Risposte

1 SmallChess Aug 26 2020 at 07:03

In realtà il giornale ha chiarito come hanno fatto. Devi solo leggere più da vicino i materiali supplementari.

Nella loro figura dal foglio: A è rosso, C è verde, G è blu e T è giallo (G+R), ma questo non è ancora chiaro come abbiano l'immagine 3xNxN.

In RGB, ogni dimensione è un'immagine NxN. Dato che hai tre dimensioni, quindi è 3xNxN. La dimensione rossa è stata utilizzata per codificare le basi nucleotidiche. La dimensione verde è stata utilizzata per codificare i punteggi di qualità. Infine, la dimensione blu è stata utilizzata per codificare le informazioni sul filamento.

Ovviamente, il DNA è una stringa su un alfabeto con i caratteri: {A, T, C, G}.

Questo è facile. Ci sono molti modi. Potresti fare una codifica one-hot o cosa ha usato 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

Sulla base del materiale supplementare menzionato in un commento di Devon Ryan:

La seconda fase di DeepVariant codifica il riferimento e il supporto di lettura per ogni variante candidata in un'immagine RGB. Lo pseudo-codice per questo componente è mostrato di seguito; contiene tutte le operazioni chiave per costruire l'immagine, tralasciando per chiarezza la gestione degli errori, il codice per gestire i casi limite come quando le varianti si verificano vicino all'inizio o alla fine del cromosoma e l'implementazione di non essenziali e/o evidenti funzioni.

Ecco la funzione principale

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