DeepVariant สร้างภาพ RGB จากลำดับดีเอ็นเออย่างไร
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 รองรับตัวแปร: สีขาวหมายถึงการอ่านรองรับอัลลีลสำรองที่ระบุสีเทาหมายความว่าไม่
ฐานแตกต่างจากการอ้างอิง: สีขาวหมายถึงฐานแตกต่างจากการอ้างอิงสีเทาเข้มหมายถึงฐานตรงกับข้อมูลอ้างอิง

คำตอบ
จริงๆแล้วกระดาษได้ทำให้ชัดเจนว่าพวกเขาทำอย่างไร คุณต้องอ่านข้อมูลเสริมให้ใกล้ชิดมากขึ้น
ในรูปของพวกเขาจากกระดาษ: 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)
ขึ้นอยู่กับวัสดุเสริมดังที่กล่าวไว้ในความคิดเห็นของ 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