Bagaimana DeepVariant membuat gambar RGB dari urutan DNA?

Aug 19 2020

DeepVariant adalah saluran untuk memanggil varian genetik dari data sekuensing DNA.

Langkah besar, sebelum memberi makan CNN, adalah menerjemahkan urutan DNA ini menjadi gambar. Tidak jelas mengapa dan bagaimana Google membuat gambar RGB dari data DNA. Jelas, DNA adalah string di atas alfabet dengan karakter: {A, T, C, G}.

Bahkan sulit untuk memahami cara kerja pemetaan berdasarkan kode sumber pengujian unit mereka .

Dalam gambar mereka dari kertas: A Merah, C Hijau, G biru, dan T Kuning (G + R), tapi ini masih belum jelas bagaimana mereka membangun 3xNxNcitra.


EDIT dari blog google :

Dalam artikel ini kita akan menunjukkan enam saluran berturut-turut, tetapi di DeepVariant mereka dikodekan sebagai enam lapisan dalam dimensi ketiga, memberikan bentuk (100, 221, 6) yang sesuai dengan (tinggi, lebar, saluran) untuk setiap tensor. Variasi yang dimaksud selalu berada di tengah setiap gambar pileup, di sini ditandai dengan garis kecil di bagian atas.

Saluran ditampilkan dalam skala abu-abu di bawah dengan urutan sebagai berikut:

Basis baca: intensitas yang berbeda mewakili A, C, G, dan T.

Kualitas dasar: diatur oleh mesin sequencing. Putih lebih berkualitas.

Kualitas pemetaan: diatur oleh aligner. Putih lebih berkualitas.

Untai keselarasan: Hitam di depan; putih terbalik.

Baca mendukung varian: Putih berarti bacaan mendukung alel alternatif yang diberikan, abu-abu berarti tidak.

Basis berbeda dari referensi: Putih berarti basis berbeda dari referensi, abu-abu tua berarti basis cocok dengan referensi.

Jawaban

1 SmallChess Aug 26 2020 at 07:03

Sebenarnya kertas telah menjelaskan bagaimana mereka melakukannya. Anda hanya perlu membaca materi pelengkap lebih dekat.

Dalam gambar mereka dari kertas: A Merah, C Hijau, G biru, dan T Kuning (G + R), tapi ini masih belum jelas bagaimana mereka gambar 3xNxN.

Dalam RGB, setiap dimensi adalah gambar NxN. Karena Anda memiliki tiga dimensi, jadi 3xNxN. Dimensi merah digunakan untuk menyandikan basa nukleotida. Dimensi hijau digunakan untuk menyandikan skor kualitas. Akhirnya, dimensi biru digunakan untuk menyandikan informasi untai.

Jelas, DNA adalah string di atas alfabet dengan karakter: {A, T, C, G}.

Ini mudah. Banyak cara. Anda dapat melakukan encoding one-hot atau yang digunakan 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

Berdasarkan materi pelengkap seperti yang disebutkan dalam komentar oleh Devon Ryan:

Fase kedua DeepVariant mengenkode referensi dan membaca dukungan untuk setiap varian kandidat ke dalam gambar RGB. Pseudo-code untuk komponen ini ditampilkan di bawah; itu berisi semua operasi kunci untuk membangun gambar, meninggalkan penanganan kesalahan kejelasan, kode untuk menangani kasus tepi seperti ketika varian terjadi dekat dengan awal atau akhir kromosom, dan implementasi non-esensial dan / atau jelas fungsi.

Inilah fungsi utamanya

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