GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์
cGAN ที่กำหนดเงื่อนไขด้วยคลาส แนวคิด CycleGAN และการถ่ายโอนสไตล์ด้วยโครงข่ายประสาทโดยใช้ VGG
GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์ เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
การควบคุมสิ่งที่ GAN สร้าง
GAN ทั่วไปสร้างตัวอย่างแบบสุ่ม ดังนั้นคุณจึงไม่สามารถขอให้สร้างประเภทที่ต้องการได้โดยเฉพาะ บทเรียนนี้ครอบคลุม การสร้างแบบมีเงื่อนไข (cGANs) การแปลงข้อมูลระหว่างขอบเขตแบบไม่มีคู่ข้อมูล (CycleGAN) และ การถ่ายโอนรูปแบบด้วยโครงข่ายประสาทเทียม
GAN แบบมีเงื่อนไข (cGAN)
cGAN เพิ่มเงื่อนไข เช่น ป้ายกำกับประเภท ให้กับทั้งตัวสร้างและตัวจำแนก ตอนนี้คุณสามารถขอให้ "สร้างเลข 7" ได้ด้วยการส่งป้ายกำกับไปพร้อมกับสัญญาณรบกวน
การกำหนดเงื่อนไขให้ตัวสร้าง
ตัวสร้างจะ นำป้ายกำกับมาต่อเข้าด้วยกัน (แบบเข้ารหัสหนึ่งตำแหน่งหรือแบบฝังตัว) กับเวกเตอร์สัญญาณรบกวน ข้อมูลนำเข้าที่รวมกันนี้ช่วยให้ตัวสร้างสร้างตัวอย่างของประเภทที่ต้องการได้
label_emb = embedding(label) # e.g. dim 10
z = torch.randn(batch, 100)
gen_input = torch.cat([z, label_emb], dim=1)
fake = generator(gen_input)การกำหนดเงื่อนไขให้ตัวจำแนก
ตัวจำแนกจะได้รับป้ายกำกับด้วย ดังนั้นมันจึงไม่ได้ตัดสินเพียงว่า "นี่เป็นของจริงหรือไม่" แต่ยังตัดสินว่า "นี่เป็นตัวอย่างจริง ของประเภทนี้ หรือไม่" ด้วย วิธีนี้บังคับให้ตัวสร้างเคารพเงื่อนไขที่กำหนด
d_input = torch.cat([image, label_emb], dim=1)
score = discriminator(d_input)การแปลงภาพแบบไม่มีคู่ข้อมูล
บ่อยครั้งที่เราไม่มีคู่ข้อมูลที่ตรงกัน เช่น ม้าตัวเดียวกันในภาพม้าลาย CycleGAN จะแปลงข้อมูลระหว่างขอบเขตสองแบบโดยใช้ภาพที่ ไม่มีคู่ข้อมูล เรียนรู้การแปลงจากม้าเป็นม้าลายและย้อนกลับได้โดยไม่ต้องมีตัวอย่างที่จัดแนวตรงกัน
ตัวสร้างสองตัว สองขอบเขตข้อมูล
CycleGAN ใช้ตัวสร้างสองตัว ได้แก่ G: A to B และ F: B to A โดยแต่ละตัวมีตัวจำแนกของตนเอง ทั้งสองทำงานร่วมกันเพื่อแปลงข้อมูลไปมาระหว่างขอบเขตข้อมูลทั้งสองทิศทาง
# G: photo -> painting
# F: painting -> photoค่าความสูญเสียจากความสอดคล้องแบบวัฏจักร
แนวคิดสำคัญคือ การแปลงจาก A ไป B แล้วกลับมายัง A ควรได้ข้อมูลเดิมคืนมา ค่าความสูญเสียจากความสอดคล้องแบบวัฏจักรจะบังคับให้เป็นไปตาม F(G(a)) == a ซึ่งจำกัดการจับคู่โดยไม่ต้องใช้ข้อมูลที่เป็นคู่กัน
cycle_loss = (
l1(F(G(a)), a) +
l1(G(F(b)), b)
)การถ่ายโอนรูปแบบด้วยโครงข่ายประสาทเทียม
การถ่ายโอนรูปแบบด้วยโครงข่ายประสาทเทียมผสม เนื้อหา ของภาพหนึ่งเข้ากับ รูปแบบ ของอีกภาพหนึ่ง เช่น ภาพถ่ายที่วาดให้เหมือนผลงานของแวนโก๊ะ วิธีนี้ปรับภาพผลลัพธ์โดยตรงโดยใช้คุณลักษณะจาก CNN ที่ฝึกไว้ล่วงหน้า
ค่าความสูญเสียด้านเนื้อหา
ค่าความสูญเสียด้านเนื้อหาช่วยให้โครงสร้างระดับสูงของผลลัพธ์ใกล้เคียงกับภาพเนื้อหา โดยเปรียบเทียบแผนผังคุณลักษณะเชิงลึกจาก CNN วิธีนี้ช่วยรักษา สิ่งที่ อยู่ในภาพไว้
content_loss = mse(features_out, features_content)ค่าความสูญเสียด้านรูปแบบและเมทริกซ์แกรม
รูปแบบจะถูกแทนด้วย เมทริกซ์แกรม ซึ่งแสดงความสัมพันธ์ระหว่างช่องคุณลักษณะ การทำให้เมทริกซ์แกรมตรงกันจะถ่ายโอนพื้นผิวและสี ค่าความสูญเสียด้านรูปแบบจะเปรียบเทียบเมทริกซ์แกรมของผลลัพธ์กับภาพรูปแบบ
def gram(f):
b, c, h, w = f.size()
f = f.view(c, h * w)
return f @ f.t()
style_loss = mse(gram(features_out), gram(features_style))การรวมค่าความสูญเสีย
ค่าความสูญเสียทั้งหมดเป็นผลรวมแบบถ่วงน้ำหนักดังนี้ alpha * content_loss + beta * style_loss การปรับน้ำหนักจะเป็นการแลกเปลี่ยนระหว่างปริมาณเนื้อหาที่ผลลัพธ์รักษาไว้กับระดับที่ผลลัพธ์รับรูปแบบมาใช้
total = alpha * content_loss + beta * style_loss
total.backward() # gradients update the output IMAGEตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับการสร้างแบบมีเงื่อนไข
สรุป: GAN แบบมีเงื่อนไขและการถ่ายโอนรูปแบบ
คุณได้เรียนรู้ว่า cGANs นำป้ายกำกับประเภทมาต่อกับข้อมูลนำเข้าของตัวสร้างและตัวจำแนกเพื่อควบคุมการสร้างข้อมูล CycleGAN ใช้ ค่าความสูญเสียจากความสอดคล้องแบบวัฏจักรสำหรับการแปลงข้อมูลที่ไม่มีคู่กัน และ การถ่ายโอนรูปแบบด้วยโครงข่ายประสาทเทียมจะผสมค่าความสูญเสียด้านเนื้อหาเข้ากับค่าความสูญเสียด้านรูปแบบจาก เมทริกซ์แกรม เพื่อวาดภาพใหม่
คำถามที่พบบ่อย
บทเรียน “GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์”
cGAN ที่กำหนดเงื่อนไขด้วยคลาส แนวคิด CycleGAN และการถ่ายโอนสไตล์ด้วยโครงข่ายประสาทโดยใช้ VGG คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ออโตเอนโคดเดอร์สำหรับการเรียนรู้การแทนค่า
- ออโตเอนโคดเดอร์แบบแปรผัน (VAE)
- GAN: ตัวสร้างและตัวจำแนก
- GAN แบบมีเงื่อนไขและการถ่ายโอนสไตล์