In che modo DeepVariant costruisce immagini RGB da sequenze di DNA?
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' 3xNxN
immagine.
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
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)
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