Как DeepVariant создает изображения RGB из последовательностей ДНК?

Aug 19 2020

DeepVariant - это конвейер для вызова генетических вариантов на основе данных секвенирования ДНК.

Важным шагом перед загрузкой CNN является перевод этих последовательностей ДНК в изображения. Непонятно, почему и как Google создает изображения RGB из данных ДНК. Очевидно, ДНК - это строка в алфавите с символами: {A, T, C, G}.

Даже трудно понять, как работает отображение на основе исходного кода их модульных тестов .

На их рисунке из бумаги: A - красный, C - зеленый, G - синий, а T - желтый (G + R), но все еще неясно, как они строят 3xNxNизображение.


ИЗМЕНИТЬ из блога Google :

В этой статье мы покажем шесть каналов подряд, но в DeepVariant они закодированы как шесть слоев в третьем измерении, давая каждому тензору форму (100, 221, 6), соответствующую (высоте, ширине, каналам). Рассматриваемый вариант всегда находится в центре каждого изображения pileup, здесь он отмечен небольшой линией вверху.

Каналы показаны ниже в градациях серого в следующем порядке:

Считайте базу: разная интенсивность представляет A, C, G и T.

Базовое качество: устанавливается секвенсором. Белый - более высокого качества.

Качество картографии: устанавливается элайнером. Белый - более высокого качества.

Направление расклада: черные идут вперед; белый наоборот.

Чтение поддерживает вариант: белый цвет означает, что чтение поддерживает данный альтернативный аллель, серый означает, что нет.

База отличается от эталона: белый цвет означает, что база отличается от эталона, темно-серый означает, что база соответствует эталону.

Ответы

1 SmallChess Aug 26 2020 at 07:03

На самом деле газета прояснила, как они это сделали. Достаточно внимательно ознакомиться с дополнительными материалами.

На их рисунках из бумаги: A - красный, C - зеленый, G - синий, а T - желтый (G + R), но до сих пор неясно, как они образуют 3xNxN.

В RGB каждое измерение представляет собой изображение размером NxN. Поскольку у вас три измерения, значит, это 3xNxN. Красное измерение использовали для кодирования нуклеотидных оснований. Зеленое измерение использовалось для кодирования показателей качества. Наконец, синий размер использовался для кодирования информации о пряди.

Очевидно, ДНК - это строка в алфавите с символами: {A, T, C, G}.

Это легко. Много способов. Вы можете выполнить однократное кодирование или то, что использовал 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

Основываясь на дополнительном материале, упомянутом в комментарии Девона Райана:

Вторая фаза DeepVariant кодирует ссылку и поддержку чтения для каждого варианта-кандидата в изображение RGB. Псевдокод для этого компонента показан ниже; он содержит все ключевые операции для построения изображения, исключая для ясности обработку ошибок, код для работы с крайними случаями, например, когда варианты возникают близко к началу или концу хромосомы, и реализацию несущественных и / или очевидных функции.

Вот основная функция

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