Как DeepVariant создает изображения RGB из последовательностей ДНК?
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.
Базовое качество: устанавливается секвенсором. Белый - более высокого качества.
Качество картографии: устанавливается элайнером. Белый - более высокого качества.
Направление расклада: черные идут вперед; белый наоборот.
Чтение поддерживает вариант: белый цвет означает, что чтение поддерживает данный альтернативный аллель, серый означает, что нет.
База отличается от эталона: белый цвет означает, что база отличается от эталона, темно-серый означает, что база соответствует эталону.

Ответы
На самом деле газета прояснила, как они это сделали. Достаточно внимательно ознакомиться с дополнительными материалами.
На их рисунках из бумаги: 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)
Основываясь на дополнительном материале, упомянутом в комментарии Девона Райана:
Вторая фаза 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