กลับไปหน้าบทความ

อ่าน 7 นาที

แบบจำลองการแพร่กระจายแฝง

แบบจำลองการแพร่กระจายแฝง ( LDM ) เป็น สถาปัตยกรรม แบบจำลองการแพร่กระจายที่พัฒนาโดยกลุ่ม CompVis (Computer Vision & Learning) ที่LMU Munich

แบบจำลองการแพร่กระจายแฝง

แบบจำลองการแพร่กระจายแฝง
ผู้เขียนต้นฉบับคอมพวิส
ปล่อย20 ธันวาคม 2021
เขียนเป็นไพธอน
พิมพ์
ใบอนุญาตเอ็มไอที
ที่เก็บข้อมูลgithub.com/CompVis/latent-diffusion

แบบจำลองการแพร่กระจายแฝง ( LDM ) [ 1 ]เป็น สถาปัตยกรรม แบบจำลองการแพร่กระจายที่พัฒนาโดยกลุ่ม CompVis (Computer Vision & Learning) [ 2 ]ที่LMU Munich [ 3 ]

โมเดลการแพร่กระจาย (Diffusion Models หรือ DMs) ซึ่งเปิดตัวในปี 2015 นั้นได้รับการฝึกฝนโดยมีวัตถุประสงค์เพื่อกำจัดสัญญาณรบกวน (โดยทั่วไปคือสัญญาณรบกวนแบบเกาส์เซียน ) ที่เกิดขึ้นซ้ำๆ บนภาพฝึกฝน โมเดล LDM เป็นการปรับปรุงจากโมเดล DM มาตรฐาน โดยทำการสร้างแบบจำลองการแพร่กระจายในพื้นที่แฝงและอนุญาตให้มีการปรับเงื่อนไขแบบ self-attention และ cross-attention ได้

LDM ถูกนำมาใช้กันอย่างแพร่หลายในแบบจำลองการแพร่กระจายในทางปฏิบัติ ตัวอย่างเช่นStable Diffusionเวอร์ชัน 1.1 ถึง 2.1 ใช้สถาปัตยกรรม LDM เป็นพื้นฐาน[ 4 ]

ประวัติเวอร์ชัน

แบบจำลองการแพร่กระจายได้รับการแนะนำในปี 2015 ในฐานะวิธีการเรียนรู้แบบจำลองที่สามารถสุ่มตัวอย่างจากการกระจายความน่าจะเป็นที่ซับซ้อนมาก พวกเขาใช้เทคนิคจากอุณหพลศาสตร์ที่ไม่สมดุลโดยเฉพาะอย่างยิ่งการแพร่กระจาย [ 5 ] มาพร้อมกับการใช้งานซอฟต์แวร์ในTheano [ 6 ]

บทความปี 2019 เสนอเครือข่ายคะแนนเงื่อนไขเสียงรบกวน (NCSN)หรือการจับคู่คะแนนด้วยพลวัต Langevin (SMLD) [ 7 ]บทความดังกล่าวมาพร้อมกับแพ็คเกจซอฟต์แวร์ที่เขียนด้วยPyTorchซึ่งเผยแพร่บน GitHub [ 8 ]

เอกสารฉบับปี 2020 [ 9 ]เสนอแบบจำลองความน่าจะเป็นของการแพร่กระจายการลดเสียงรบกวน (DDPM)ซึ่งปรับปรุงวิธีการก่อนหน้าด้วยการอนุมานแบบแปรผัน เอกสารดังกล่าวมาพร้อมกับแพ็คเกจซอฟต์แวร์ที่เขียนด้วยTensorFlowซึ่งเผยแพร่บน GitHub [ 10 ]และได้รับการเขียนใหม่ในPyTorchโดย lucidrains [ 11 ] [ 12 ]

เมื่อวันที่ 20 ธันวาคม พ.ศ. 2564 เอกสาร LDM ได้รับการเผยแพร่บน arXiv [ 13 ]และ คลังข้อมูล Stable Diffusion [ 14 ]และ LDM [ 15 ]ได้รับการเผยแพร่บน GitHub อย่างไรก็ตาม คลังข้อมูลทั้งสองยังคงเหมือนเดิมโดยประมาณ ข้อมูลสำคัญเกี่ยวกับ Stable Diffusion v1 เพิ่งถูกเพิ่มลงใน GitHub เมื่อวันที่ 10 สิงหาคม พ.ศ. 2565 [ 16 ]

ระบบปฏิบัติการ Stable Diffusion (SD) เวอร์ชัน 1.1 ถึง XL ทั้งหมด ล้วนเป็นการนำสถาปัตยกรรม LDM มาใช้ในรูปแบบเฉพาะเจาะจง

SD 1.1 ถึง 1.4 ได้รับการเผยแพร่โดย CompVis ในเดือนสิงหาคม 2022 ไม่มี "เวอร์ชัน 1.0" SD 1.1 เป็น LDM ที่ฝึกฝนบนชุดข้อมูล laion2B-en SD 1.1 ได้รับการปรับแต่งเป็น 1.2 บนภาพที่สวยงามยิ่งขึ้น SD 1.2 ได้รับการปรับแต่งเป็น 1.3, 1.4 และ 1.5 โดยตัดเงื่อนไขข้อความออก 10% เพื่อปรับปรุงการแนะนำแบบไม่ต้องใช้ตัวจำแนก[ 17 ] [ 18 ] SD 1.5 ได้รับการเผยแพร่โดยRunwayMLในเดือนตุลาคม 2022 [ 18 ]

สถาปัตยกรรม

แม้ว่า LDM จะสามารถใช้สร้างข้อมูลใดๆ ก็ได้โดยมีเงื่อนไขขึ้นอยู่กับข้อมูลใดๆ ก็ได้ แต่เพื่อให้เห็นภาพชัดเจน เราจะอธิบายการทำงานของมันในการสร้างภาพจากข้อความโดยมีเงื่อนไข

LDM ประกอบด้วยvariational autoencoder (VAE), U-Net ที่ได้รับการดัดแปลง และตัวเข้ารหัสข้อความ

ตัวเข้ารหัส VAE บีบอัดภาพจากพื้นที่พิกเซลไปยังพื้นที่แฝงที่ มีมิติเล็กกว่า โดยจับความหมายเชิงความหมายพื้นฐานของภาพได้มากขึ้น มีการใช้สัญญาณรบกวนแบบเกาส์เซียนซ้ำๆ กับการแสดงแทนแฝงที่ถูกบีบอัดในระหว่างการแพร่กระจายไปข้างหน้า บล็อก U-Net ซึ่งประกอบด้วยโครงสร้างหลักResNet จะลดสัญญาณรบกวนของเอาต์พุตจากการแพร่กระจายไปข้างหน้าย้อนกลับเพื่อให้ได้การแสดงแทนแฝง สุดท้าย ตัวถอดรหัส VAE จะสร้างภาพสุดท้ายโดยการแปลงการแสดงแทนกลับไปเป็นพื้นที่พิกเซล[ 4 ]

ขั้นตอนการลดสัญญาณรบกวนสามารถกำหนดเงื่อนไขได้จากสตริงข้อความ รูปภาพ หรือรูปแบบอื่น ข้อมูลเงื่อนไขที่เข้ารหัสจะถูกส่งไปยัง U-Net ลดสัญญาณรบกวนผ่านกลไกความสนใจแบบไขว้ [ 4 ] สำหรับ การกำหนดเงื่อนไขบนข้อความ จะใช้ตัวเข้ารหัสข้อความ CLIP ViT-L/14 ที่ได้รับการฝึกฝนล่วงหน้าแบบคงที่เพื่อแปลงข้อความแจ้งเตือนไปยังพื้นที่ฝังตัว[ 3 ]

ตัวเข้ารหัสอัตโนมัติแบบแปรผัน

เพื่อบีบอัดข้อมูลภาพ ขั้นตอนแรกคือการฝึกฝน Variational Autoencoder (VAE) บนชุดข้อมูลภาพ ส่วนตัวเข้ารหัส (encoder) ของ VAE จะรับภาพเป็นอินพุตและส่งออกการแสดงผลแบบแฝง (latent representation) ที่มีมิติต่ำกว่า จากนั้นการแสดงผลแบบแฝงนี้จะถูกใช้เป็นอินพุตสำหรับ U-Net เมื่อโมเดลได้รับการฝึกฝนแล้ว ตัวเข้ารหัสจะถูกใช้ในการเข้ารหัสภาพให้เป็นการแสดงผลแบบแฝง และตัวถอดรหัสจะถูกใช้ในการถอดรหัสการแสดงผลแบบแฝงกลับเป็นภาพอีกครั้ง

ให้ตัวเข้ารหัสและตัวถอดรหัสของ VAE เป็น.

ในการเข้ารหัสภาพ RGB ช่องทั้งสามของภาพจะถูกหารด้วยค่าสูงสุด ส่งผลให้ได้เทนเซอร์ ที่มีรูปร่างโดยที่ค่าทั้งหมดอยู่ในช่วงเวกเตอร์ที่เข้ารหัสคือโดยมีรูปร่างโดยที่ 0.18215 เป็นไฮเปอร์พารามิเตอร์ ซึ่งผู้เขียนดั้งเดิมเลือกเพื่อทำให้ เวกเตอร์ที่เข้ารหัส มีความขาวขึ้น โดยประมาณ จนมีค่าความแปรปรวนเป็นหนึ่ง ในทางกลับกัน เมื่อกำหนดเทนเซอร์แฝงภาพที่ถอดรหัสแล้วคือจากนั้นจะถูกตัดให้อยู่ในช่วง[ 19 ] [ 20 ]

ในเวอร์ชันที่นำไปใช้[ 3 ] : ldm/models/autoencoder.py ตัวเข้ารหัสเป็นโครงข่ายประสาทเทียมแบบคอนโวลูชัน (CNN) ที่มีกลไกการให้ความสนใจตนเองเพียงตัวเดียวใกล้ส่วนท้าย โดยรับเทนเซอร์ที่มีรูปร่างและส่งออกเทนเซอร์ที่มีรูปร่างซึ่งเป็นการต่อกันของค่าเฉลี่ยและความแปรปรวนที่คาดการณ์ของเวกเตอร์แฝง ซึ่งแต่ละตัวมีรูปร่างความแปรปรวนจะถูกใช้ในการฝึกฝน แต่หลังจากฝึกฝนแล้ว โดยปกติจะใช้เพียงค่าเฉลี่ยเท่านั้น โดยทิ้งความแปรปรวนไป

ตัวถอดรหัสก็เป็นโครงข่ายประสาทเทียมแบบ CNN เช่นกัน โดยมีกลไกการให้ความสนใจตนเองเพียงกลไกเดียวอยู่ใกล้ส่วนท้าย มันรับเทนเซอร์ที่มีรูปร่างและส่งออกเทนเซอร์ที่มีรูปร่าง

ยูเน็ต

โครงสร้างพื้นฐานของ U-Net รองรับอินพุตประเภทต่อไปนี้:

  • อาร์เรย์ภาพแฝงที่สร้างโดยตัวเข้ารหัส VAE มีมิติโดยทั่วไปคือ
  • เวกเตอร์ฝังตัวแบบขั้นเวลา (timestep-embedding vector ) ซึ่งบอกโครงสร้างหลักว่ามีสัญญาณรบกวนในภาพมากน้อยเพียงใด ตัวอย่างเช่น การฝังตัวแบบขั้นเวลาจะบ่งชี้ว่าภาพอินพุตนั้นปราศจากสัญญาณรบกวนแล้ว ในขณะที่จะหมายความว่ามีสัญญาณรบกวนมาก
  • ลำดับเวกเตอร์ฝังโมดาลิตี้ (modality-embedding vector sequence ) ซึ่งบ่งบอกเงื่อนไขเพิ่มเติมสำหรับการลดสัญญาณรบกวนให้กับโครงสร้างหลัก (backbone) ตัวอย่างเช่น ในการสร้างภาพจากข้อความ ข้อความจะถูกแบ่งออกเป็นลำดับของโทเค็น จากนั้นเข้ารหัสโดยตัวเข้ารหัสข้อความ เช่นตัวเข้ารหัส CLIPก่อนที่จะป้อนเข้าสู่โครงสร้างหลัก อีกตัวอย่างหนึ่งคือ ภาพอินพุตสามารถประมวลผลโดยVision Transformerให้เป็นลำดับของเวกเตอร์ ซึ่งสามารถนำมาใช้กำหนดเงื่อนไขให้กับโครงสร้างหลักสำหรับงานต่างๆ เช่น การสร้างภาพในสไตล์เดียวกัน

แต่ละรอบการประมวลผลผ่านโครงสร้างหลักของ U-Net จะสร้างเวกเตอร์สัญญาณรบกวนที่คาดการณ์ไว้ เวกเตอร์สัญญาณรบกวนนี้จะถูกปรับขนาดลงและลบออกจากอาร์เรย์ภาพแฝง ส่งผลให้ภาพแฝงมีสัญญาณรบกวนน้อยลงเล็กน้อย กระบวนการลดสัญญาณรบกวนจะถูกทำซ้ำตามตารางการลดสัญญาณรบกวน ("ตารางสัญญาณรบกวน") และผลลัพธ์จากขั้นตอนสุดท้ายจะถูกประมวลผลโดยตัวถอดรหัส VAE ให้เป็นภาพที่เสร็จสมบูรณ์

กลไกการให้ความสนใจข้ามแบบเดี่ยว ดังที่ปรากฏในแบบจำลองภาษา Transformer มาตรฐาน
แผนภาพบล็อกแสดงสถาปัตยกรรม Transformer แบบเต็ม ส่วนประกอบทางด้านขวาคือตัวถอดรหัส Transformer มาตรฐานก่อน LN ซึ่งโดยพื้นฐานแล้วเหมือนกับSpatialTransformer.

เช่นเดียวกับ U-Netมาตรฐานโครงสร้างพื้นฐานของ U-Net ที่ใช้ใน SD 1.5 นั้นประกอบด้วยเลเยอร์ลดขนาดตามด้วยเลเยอร์เพิ่มขนาดเป็นหลัก อย่างไรก็ตาม โครงสร้างพื้นฐานของ U-Net มีโมดูลเพิ่มเติมเพื่อให้สามารถจัดการกับการฝังข้อมูลได้ ตัวอย่างเช่น เราจะอธิบายเลเยอร์ลดขนาดเพียงเลเยอร์เดียวในโครงสร้างพื้นฐาน:

  • อาร์เรย์แฝงและการฝังเวลาจะถูกประมวลผลโดยResBlock:
    • อาร์เรย์แฝงจะถูกประมวลผลโดยเลเยอร์คอนโวลูชัน
    • เวกเตอร์การฝังเวลาจะถูกประมวลผลโดยเครือข่ายฟีดฟอร์เวิร์ด แบบชั้นเดียว จากนั้นจึงเพิ่มเข้าไปในอาร์เรย์ก่อนหน้า (กระจายไปยังพิกเซลทั้งหมด)
    • ข้อมูลนี้จะถูกประมวลผลโดยเลเยอร์การแปลงแบบคอนโวลูชันอีกชั้นหนึ่ง จากนั้นจึงทำการฝังเวลาอีกครั้ง
  • อาร์เรย์แฝงและลำดับเวกเตอร์ฝังตัวจะถูกประมวลผลโดย ซึ่งโดยพื้นฐานแล้วคือ ตัวถอดรหัส TransformerSpatialTransformerมาตรฐานก่อน LN โดยไม่มีการบดบังเชิงสาเหตุ
    • ในบล็อกการให้ความสนใจแบบไขว้ (cross-attentional blocks) อาร์เรย์แฝง (latent array) เองทำหน้าที่เป็นลำดับคำถาม โดยมีเวกเตอร์คำถามหนึ่งตัวต่อพิกเซลหนึ่งพิกเซล ตัวอย่างเช่น หากที่เลเยอร์นี้ใน U-Net อาร์เรย์แฝงมีมิติ n ลำดับคำถามจะมีเวกเตอร์ n ตัว ซึ่งแต่ละตัวมีมิติ n ลำดับเวกเตอร์ฝังตัว (embedding vector sequence) ทำหน้าที่เป็นทั้งลำดับคีย์และลำดับค่า
    • เมื่อไม่มีการป้อนลำดับเวกเตอร์ฝังตัว บล็อกการให้ความสนใจข้ามจะเปลี่ยนไปใช้การให้ความสนใจตนเองโดยค่าเริ่มต้น โดยอาร์เรย์แฝงทำหน้าที่เป็นคำถาม คีย์ และค่า[ 21 ] : บรรทัดที่ 251

ในรหัสเทียม

def ResBlock ( x , time , residual_channels ): x_in = x time_embedding = feedforward_network ( time ) x = concatenate ( x , residual_channels ) x = conv_layer_1 ( activate ( normalize_1 ( x ))) + time_embedding x = conv_layer_2 ( dropout ( activate ( normalize_2 ( x )))) return x_in + xdef SpatialTransformer ( x , cond ): x_in = x x = normalize ( x ) x = proj_in ( x ) x = cross_attention ( x , cond ) x = proj_out ( x ) return x_in + xdef unet ( x , time , cond ): residual_channels = [] for resblock , spatialtransformer in downscaling_layers : x = resblock ( x , time ) residual_channels . append ( x ) x = spatialtransformer ( x , cond )x = middle_layer.resblock_1 ( x , time ) x = middle_layer.spatialtransformer ( x , time ) x = middle_layer.resblock_2 ( x , time )สำหรับresblock และspatialtransformer ในupscaling_layers : residual = residual_channels.pop ( ) x = resblock ( concatenate ( x , residual ) , time ) x = spatialtransformer ( x , cond )ส่งคืนx

สถาปัตยกรรมโดยละเอียดสามารถพบได้ใน[ 22 ] [ 23 ]

การฝึกอบรมและการอนุมาน

แบบ จำลอง LDM ได้รับการฝึกฝนโดยใช้ห่วงโซ่มาร์คอฟเพื่อค่อยๆ เพิ่มสัญญาณรบกวนให้กับภาพฝึกฝน จากนั้นแบบจำลองจะได้รับการฝึกฝนให้ย้อนกระบวนการนี้ โดยเริ่มต้นจากภาพที่มีสัญญาณรบกวนและค่อยๆ ลบสัญญาณรบกวนออกจนกระทั่งได้ภาพต้นฉบับกลับคืนมา โดยรายละเอียดแล้ว กระบวนการฝึกฝนสามารถอธิบายได้ดังนี้:

  • กระบวนการแพร่กระจายไปข้างหน้า: เมื่อได้รับภาพจริง จะมีการสร้าง ลำดับของตัวแปรแฝงโดยการค่อยๆ เพิ่มสัญญาณรบกวนแบบเกาส์เซียนเข้าไปในภาพ ตาม "ตารางสัญญาณรบกวน" ที่กำหนดไว้ล่วงหน้า
  • กระบวนการแพร่แบบย้อนกลับ: เริ่มต้นจากตัวอย่างสัญญาณรบกวนแบบเกาส์เซียนโมเดลจะเรียนรู้ที่จะทำนายสัญญาณรบกวนที่เพิ่มเข้ามาในแต่ละขั้นตอน เพื่อย้อนกลับกระบวนการแพร่และสร้างภาพต้นฉบับขึ้นมาใหม่

แบบจำลองได้รับการฝึกฝนเพื่อลดความแตกต่างระหว่างสัญญาณรบกวนที่คาดการณ์ไว้กับสัญญาณรบกวนจริงที่เพิ่มเข้ามาในแต่ละขั้นตอน โดยทั่วไปจะทำโดยใช้ ฟังก์ชัน ความคลาดเคลื่อนกำลังสองเฉลี่ย (MSE)

เมื่อฝึกฝนโมเดลเสร็จแล้ว ก็สามารถนำไปใช้สร้างภาพใหม่ได้โดยการเรียกใช้กระบวนการแพร่กระจายย้อนกลับโดยเริ่มจากตัวอย่างสัญญาณรบกวนแบบสุ่ม โมเดลจะค่อยๆ กำจัดสัญญาณรบกวนออกจากตัวอย่าง โดยอาศัยการกระจายสัญญาณรบกวนที่เรียนรู้มา จนกระทั่งได้ภาพสุดท้าย

ดูรายละเอียดเพิ่มเติมได้ที่หน้า แบบจำลองการแพร่กระจาย

ดูเพิ่มเติม

อ่านเพิ่มเติม

  • Wang, Phil (2024-09-07). "lucidrains/denoising-diffusion-pytorch" . GitHub . สืบค้นเมื่อ2024-09-07 .
  • "แบบจำลองการแพร่กระจายแบบมีคำอธิบายประกอบ" . huggingface.co . สืบค้นเมื่อ2024-09-07 .
  • "U-Net สำหรับการแพร่กระจายที่เสถียร" . U-Net สำหรับการแพร่กระจายที่เสถียร. สืบค้นเมื่อ2024-08-31 .
  • "หม้อแปลงสำหรับการแพร่กระจายที่เสถียรของ U-Net"หม้อแปลงสำหรับการแพร่กระจายที่เสถียรของ U-Net สืบค้นเมื่อ2024-09-07
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Latent_diffusion_model&oldid=1359928266 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ แบบจำลองการแพร่กระจายแฝง

แบบจำลองการแพร่กระจายแฝง ( LDM ) เป็น สถาปัตยกรรม แบบจำลองการแพร่กระจายที่พัฒนาโดยกลุ่ม CompVis (Computer Vision & Learning) ที่LMU Munich

ประวัติเวอร์ชัน

แบบจำลองการแพร่กระจายได้รับการแนะนำในปี 2015 ในฐานะวิธีการเรียนรู้แบบจำลองที่สามารถสุ่มตัวอย่างจากการกระจายความน่าจะเป็นที่ซับซ้อนมาก พวกเขาใช้เทคนิคจาก อุณหพลศาสตร์ที่ไม่สมดุล โดยเฉพาะอย่างยิ่ง การแพร่กระจาย [ 5 ] มา พร้อมกับการใช้งานซอฟต์แวร์ใน Theano [ 6 ]

สถาปัตยกรรม

แม้ว่า LDM จะสามารถใช้สร้างข้อมูลใดๆ ก็ได้โดยมีเงื่อนไขขึ้นอยู่กับข้อมูลใดๆ ก็ได้ แต่เพื่อให้เห็นภาพชัดเจน เราจะอธิบายการทำงานของมันในการสร้างภาพจากข้อความโดยมีเงื่อนไข

ตัวเข้ารหัสอัตโนมัติแบบแปรผัน

เพื่อบีบอัดข้อมูลภาพ ขั้นตอนแรกคือการฝึกฝน Variational Autoencoder (VAE) บนชุดข้อมูลภาพ ส่วนตัวเข้ารหัส (encoder) ของ VAE จะรับภาพเป็นอินพุตและส่งออกการแสดงผลแบบแฝง (latent representation) ที่มีมิติต่ำกว่า จากนั้นการแสดงผลแบบแฝงนี้จะถูกใช้เป็นอินพุตสำหรับ...