DeepVariant สร้างภาพ RGB จากลำดับดีเอ็นเออย่างไร

Aug 19 2020

DeepVariantเป็นท่อสำหรับเรียกสายพันธุ์ทางพันธุกรรมจากข้อมูลการจัดลำดับดีเอ็นเอ

ขั้นตอนสำคัญก่อนให้อาหาร CNN คือการแปลลำดับดีเอ็นเอเหล่านี้เป็นภาพ ไม่มีความชัดเจนว่าเหตุใด Google จึงสร้างอิมเมจ RGBจากข้อมูล DNA อย่างไร เห็นได้ชัดว่า DNA เป็นสตริงเหนือตัวอักษรที่มีอักขระ: {A, T, C, G}

มันเป็นยากที่จะเข้าใจวิธีการทำแผนที่การทำงานบนพื้นฐานของรหัสที่มาของการทดสอบหน่วย

ในรูปของพวกเขาจากกระดาษ: A คือสีแดง, C คือสีเขียว, G คือสีน้ำเงินและ T คือสีเหลือง (G + R) แต่ก็ยังไม่ชัดเจนว่าพวกเขาสร้าง3xNxNภาพอย่างไร


แก้ไขจากบล็อกของ Google :

ในบทความนี้เราจะแสดงหกช่องติดต่อกัน แต่ใน DeepVariant จะเข้ารหัสเป็นหกชั้นในมิติที่สามโดยให้แต่ละเทนเซอร์มีรูปร่าง (100, 221, 6) ที่สอดคล้องกับ (ความสูงความกว้างช่อง) ตัวแปรที่เป็นปัญหามักจะอยู่ตรงกลางของรูปภาพไพล์อัพแต่ละภาพโดยจะมีเส้นเล็ก ๆ ที่ด้านบน

ช่องจะแสดงเป็นสีเทาด้านล่างตามลำดับต่อไปนี้:

ฐานการอ่าน: ความเข้มที่แตกต่างกันแสดงถึง A, C, G และ T.

คุณภาพพื้นฐาน: กำหนดโดยเครื่องเรียงลำดับ สีขาวมีคุณภาพสูงขึ้น

คุณภาพการทำแผนที่: กำหนดโดยเครื่องมือจัดตำแหน่ง สีขาวมีคุณภาพสูงขึ้น

Strand of alignment: สีดำไปข้างหน้า; สีขาวกลับด้าน

Read รองรับตัวแปร: สีขาวหมายถึงการอ่านรองรับอัลลีลสำรองที่ระบุสีเทาหมายความว่าไม่

ฐานแตกต่างจากการอ้างอิง: สีขาวหมายถึงฐานแตกต่างจากการอ้างอิงสีเทาเข้มหมายถึงฐานตรงกับข้อมูลอ้างอิง

คำตอบ

1 SmallChess Aug 26 2020 at 07:03

จริงๆแล้วกระดาษได้ทำให้ชัดเจนว่าพวกเขาทำอย่างไร คุณต้องอ่านข้อมูลเสริมให้ใกล้ชิดมากขึ้น

ในรูปของพวกเขาจากกระดาษ: A คือสีแดง C คือสีเขียว G เป็นสีน้ำเงินและ T คือสีเหลือง (G + R) แต่ก็ยังไม่ชัดเจนว่าภาพ 3xNxN เป็นอย่างไร

ใน RGB แต่ละมิติคือภาพ NxN เนื่องจากคุณมีสามมิติจึงเป็น 3xNxN มิติสีแดงถูกใช้เพื่อเข้ารหัสฐานของนิวคลีโอไทด์ มิติข้อมูลสีเขียวถูกใช้เพื่อเข้ารหัสคะแนนคุณภาพ ในที่สุดมิติข้อมูลสีน้ำเงินก็ถูกใช้เพื่อเข้ารหัสข้อมูลเกลียว

เห็นได้ชัดว่า DNA เป็นสตริงเหนือตัวอักษรที่มีอักขระ: {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

ขึ้นอยู่กับวัสดุเสริมดังที่กล่าวไว้ในความคิดเห็นของ Devon Ryan:

ขั้นตอนที่สองของ 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