คู่มือฉบับสมบูรณ์สำหรับการสร้าง Generative Adversarial Network (GAN) เพื่อสร้างตัวละครอนิเมะของคุณเองด้วย Keras

ในโพสต์นี้ เราจะเรียนรู้เกี่ยวกับการพัฒนาเครือข่ายปฏิปักษ์เชิงสร้างสรรค์ (GAN) เพื่อสร้างตัวละครมังงะหรืออนิเมะที่สมจริง

ฉันประหลาดใจกับแอนิเมชั่นที่สดใสมาโดยตลอด โดยเฉพาะมังงะที่มีรูปลักษณ์และลายเส้นที่โดดเด่น คงจะดีไม่น้อยหากสามารถวาดภาพตัวเองสักสองสามภาพ และสัมผัสประสบการณ์ความตื่นเต้นในการสร้างมันขึ้นมาด้วยความช่วยเหลือของโครงข่ายประสาทเทียมที่พัฒนาขึ้นเอง!

แล้วอะไรทำให้ GAN แตกต่าง?

วิธีที่ดีที่สุดในการฝึกฝนทักษะคือการฝึกฝนและด้นสดจนกว่าคุณจะพอใจกับตัวเองและความพยายามของคุณ สำหรับเครื่องจักรหรือโครงข่ายประสาทเทียม ผลลัพธ์ที่ดีที่สุดที่สามารถสร้างได้คือผลลัพธ์ที่ตรงกับเอาต์พุตที่มนุษย์สร้างขึ้น หรือแม้แต่หลอกให้มนุษย์เชื่อว่ามนุษย์จริงๆ แล้วสร้างเอาต์พุตดังกล่าว นั่นคือสิ่งที่ GAN ทำ อย่างน้อยก็เป็นรูปเป็นร่าง ;)

เมื่อเร็ว ๆ นี้ เครือข่ายปฏิปักษ์ทั่วไปเป็นประเด็นร้อนในการเรียนรู้เชิงลึก เปิดตัวโดย Ian Goodfellow และคณะ พวกเขามีความสามารถในการสร้างผลลัพธ์ตั้งแต่เริ่มต้น

ภาพรวมโดยย่อของเครือข่ายปฏิปักษ์ทั่วไป

ในเครือข่ายปฏิปักษ์โดยกำเนิด สองเครือข่ายจะฝึกฝนและแข่งขันกันเอง ส่งผลให้เกิดการแสดงด้นสดร่วมกัน ตัวสร้างทำให้ผู้เลือกปฏิบัติเข้าใจผิดโดย สร้างอินพุตปลอมที่น่าสนใจและพยายามหลอกผู้เลือกปฏิบัติให้คิดว่าสิ่งเหล่านี้เป็นอินพุตจริง ผู้แยกแยะจะบอกว่าอินพุตนั้นเป็นของจริงหรือของปลอม

มี 3 ขั้นตอนหลักในการฝึกอบรม GAN:

  1. การใช้ตัวสร้างเพื่อสร้างอินพุตปลอมตามสัญญาณรบกวนแบบสุ่ม หรือในกรณีของเราคือสัญญาณรบกวนปกติแบบสุ่ม
  2. ฝึกอบรมผู้เลือกปฏิบัติด้วยอินพุตทั้งของจริงและของปลอม (พร้อมกันโดยการเชื่อมอินพุตของจริงและของปลอมเข้าด้วยกัน หรือเชื่อมต่อกันระหว่างอินพุตจริงและของปลอม)
  3. ฝึกโมเดลทั้งหมด:โมเดลถูกสร้างขึ้นโดยใช้เครื่องแยกแยะรวมกับเครื่องกำเนิดไฟฟ้า

จุดสำคัญที่ควรทราบคือน้ำหนักของผู้เลือกปฏิบัติจะถูกแช่แข็งในระหว่างขั้นตอนสุดท้าย

เหตุผลในการรวมทั้งสองเครือข่ายเข้าด้วยกันคือไม่มีการตอบกลับเกี่ยวกับเอาต์พุตของเครื่องกำเนิดไฟฟ้า แนวทางเดียวคือหากผู้เลือกปฏิบัติยอมรับเอาต์พุตของเครื่องกำเนิด

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

นั่นเป็นภาพรวมโดยย่อของสถาปัตยกรรมของ GAN หากยังไม่เพียงพอ คุณสามารถดู "คำแนะนำโดยละเอียด" นี้

การเรียนรู้เชิงลึก — สำหรับผู้เชี่ยวชาญ โดยผู้เชี่ยวชาญ เราใช้ประสบการณ์หลายทศวรรษในการส่งมอบ "แหล่งข้อมูลการเรียนรู้เชิงลึกที่ดีที่สุดไปยังกล่องจดหมายของคุณในแต่ละสัปดาห์"

GAN ของเรา

สำหรับงานปัจจุบัน เราใช้ DCGAN (เครือข่ายฝ่ายตรงข้ามที่สร้างเชิงลึกแบบ Convolutional)

แนวทางปฏิบัติบางประการสำหรับ DCGAN:

  1. แทนที่การรวมกลุ่มสูงสุดทั้งหมดด้วยก้าวก้าวแบบหมุนวน
  2. ใช้การสลับแบบสลับสำหรับการสุ่มตัวอย่าง
  3. กำจัดเลเยอร์ที่เชื่อมต่อกันอย่างสมบูรณ์
  4. ใช้การทำให้เป็นมาตรฐานแบบแบตช์ ยกเว้นเลเยอร์เอาต์พุตสำหรับตัวสร้างและเลเยอร์อินพุตของตัวแยกแยะ
  5. ใช้ ReLU ในตัวสร้าง ยกเว้นเอาต์พุตซึ่งใช้ tanh
  6. ใช้ LeakyReLU ในตัวแยกแยะ

รายละเอียดการตั้งค่า

  1. เวอร์ชัน Keras==2.2.4
  2. เทนเซอร์โฟลว์==1.8.0
  3. สมุดบันทึกจูปีเตอร์
  4. Matplotlib และไลบรารียูทิลิตี้อื่น ๆ เช่น NumPy, Pandas
  5. หลาม==3.5.7

ชุดข้อมูล

ชุดข้อมูลสำหรับใบหน้าอนิเมะสามารถสร้างขึ้นได้โดยการม้วนงอผ่านเว็บไซต์มังงะต่างๆ และดาวน์โหลดภาพ ครอบตัดใบหน้าออก และปรับขนาดให้เป็นขนาดมาตรฐาน รับด้านล่างเป็นลิงค์สำหรับรหัส A Python ที่แสดงให้เห็นสิ่งเดียวกัน:



ฉันโชคดีที่พบชุดข้อมูลที่ประมวลผลล่วงหน้า (ครอบตัดใบหน้า) จากไซต์ต่อไปนี้:





ภาพรวมของชุดข้อมูล-

นางแบบ

ตอนนี้เรามาดูสถาปัตยกรรมของโครงข่ายประสาทเทียมของเรากันดีกว่า! อย่าลืมประเด็นที่เราพูดคุยกันก่อนหน้านี้เกี่ยวกับ DCGAN

การใช้งาน GAN นี้ใช้เลเยอร์ deconv ใน Keras ฉันได้ลองใช้เลเยอร์ต่างๆ รวมกัน เช่น:

  • Conv + การสุ่มตัวอย่าง
  • Conv + ไบลิเนียร์
  • Conv + การลดขนาดพิกเซลย่อย

หมายเหตุ: คุณสามารถอ้างถึง พื้นที่เก็บข้อมูลของฉัน สำหรับโค้ดที่สมบูรณ์

เครื่องกำเนิดไฟฟ้า

เครื่องกำเนิดไฟฟ้าประกอบด้วยชั้นขนย้ายแบบหมุนวน ตามด้วยการทำให้เป็นมาตรฐานแบบแบทช์ และฟังก์ชันการเปิดใช้งาน ReLU ที่รั่วสำหรับการอัปแซมปลิง เราจะใช้พารามิเตอร์ก้าวในเลเยอร์การบิด ทำเช่นนี้เพื่อหลีกเลี่ยงการฝึกที่ไม่มั่นคง Leaky ReLUs เป็นความพยายามอย่างหนึ่งในการแก้ไขปัญหา "ReLU ที่กำลังจะตาย" แทนที่จะให้ฟังก์ชันเป็นศูนย์เมื่อ x ‹ 0 ReLU ที่รั่วจะมีความชันเป็นลบเล็กน้อยแทน (เท่ากับ 0.01 หรือมากกว่านั้น)

รหัส

ผู้เลือกปฏิบัติ

ตัวแยกแยะยังประกอบด้วยเลเยอร์การบิดซึ่งเราใช้ความก้าวหน้าในการสุ่มตัวอย่างและการทำให้เป็นมาตรฐานแบบแบทช์เพื่อความเสถียร

รหัส

GAN ที่คอมไพล์แล้ว

ในการดำเนินการ back propagation สำหรับเครื่องกำเนิดไฟฟ้า เพื่อที่จะตรวจสอบเอาท์พุตของมัน เรารวบรวมเครือข่ายใน Keras—เครื่องกำเนิดตามด้วย discriminator

ในเครือข่ายนี้ อินพุตจะเป็นสัญญาณรบกวนแบบสุ่มสำหรับเครื่องกำเนิดไฟฟ้า และเอาต์พุตจะเป็นเอาต์พุตของเครื่องกำเนิดไฟฟ้าที่ป้อนให้กับเครื่องแบ่งแยก ซึ่งจะทำให้น้ำหนักของผู้เลือกปฏิบัติถูกแช่แข็งเพื่อหลีกเลี่ยง การล่มสลายของฝ่ายตรงข้าม.ฟังดูเท่ใช่ไหมล่ะ? "ค้นดูสิ!"

รหัส

การฝึกอบรมโมเดล

การกำหนดค่าพื้นฐานของโมเดล

  1. สร้างสัญญาณรบกวนปกติแบบสุ่มสำหรับอินพุต

2. เชื่อมต่อข้อมูลจริงที่สุ่มตัวอย่างจากชุดข้อมูลเข้ากับสัญญาณรบกวนที่สร้างขึ้น

3. เพิ่มเสียงรบกวนให้กับป้ายกำกับอินพุต

4. ฝึกอบรมเฉพาะเครื่องกำเนิดไฟฟ้าเท่านั้น

5. ฝึกอบรมเฉพาะผู้เลือกปฏิบัติ

6. ฝึกอบรม GAN แบบรวม

7. การบันทึกอินสแตนซ์ของเครื่องกำเนิดและเครื่องแยกแยะ

ฉันฝึกโค้ดนี้กับ Acer-Predator helios 300 ซึ่งใช้เวลาเกือบครึ่งชั่วโมงสำหรับ 10,000 ขั้นตอนและรูปภาพประมาณ 32,000 ภาพ ด้วย GPU Nvidia GTX GeForce 1050Ti

ผลลัพธ์ของ Manga-Generator

หลังจากฝึกครบ 10,000 ก้าว ผลลัพธ์ที่ได้ก็ดูเจ๋งและน่าพึงพอใจ ลองดูสิ!

ในแง่ของการปรับปรุงโมเดล ฉันคิดว่าการฝึกเป็นระยะเวลานานขึ้นและชุดข้อมูลที่ใหญ่ขึ้นจะช่วยปรับปรุงผลลัพธ์ให้ดียิ่งขึ้น (ใบหน้าบางหน้าก็น่ากลัวแปลกๆ! ไม่ใช่ Manga ทั่วไป ฉันต้องบอกว่า :D)

บทสรุป

งานสร้างใบหน้าสไตล์มังงะนั้นน่าสนใจอย่างแน่นอน

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

พื้นที่เก็บข้อมูล

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



แหล่งที่มา

  1. https://towardsdatascience.com/generate-anime-style-face-using-dcgan-and-explore-its-latent-feature-representation-ae0e905f3974
  2. https://github.com/pavitrakumar78/Anime-Face-GAN-Keras
  3. https://medium.com/@jonathan_hui/gan-dcgan-deep-convolutional-generative-adversarial-networks-df855c438f

ฉันหวังว่าคุณจะสนุกกับบทความแรกของฉันเกี่ยวกับเครือข่ายปฏิปักษ์เชิงสร้างสรรค์สำหรับการสร้างหน้ามังงะ! อย่าลืมกดโหวตและปุ่มติดตาม!

หมายเหตุสำหรับบรรณาธิการ: Heartbeat เป็นสิ่งพิมพ์ออนไลน์และชุมชนที่ขับเคลื่อนโดยผู้ร่วมให้ข้อมูล ซึ่งอุทิศตนเพื่อจัดหาทรัพยากรทางการศึกษาชั้นนำสำหรับวิทยาการข้อมูล การเรียนรู้ของเครื่อง และผู้ปฏิบัติงานด้านการเรียนรู้เชิงลึก เรามุ่งมั่นที่จะสนับสนุนและสร้างแรงบันดาลใจให้กับนักพัฒนาและวิศวกรจากทุกสาขาอาชีพ

Heartbeat เป็นอิสระด้านบรรณาธิการ สนับสนุนและเผยแพร่โดย Comet ซึ่งเป็นแพลตฟอร์ม MLOps ที่ช่วยให้นักวิทยาศาสตร์ข้อมูลและทีม ML สามารถติดตาม เปรียบเทียบ อธิบาย และเพิ่มประสิทธิภาพการทดลองของพวกเขา เราจ่ายเงินให้กับผู้ร่วมให้ข้อมูล และเราไม่ขายโฆษณา

หากคุณต้องการมีส่วนร่วม ตรงไปที่ เรียกผู้ร่วมให้ข้อมูล ของเรา คุณยังสามารถลงทะเบียนเพื่อรับจดหมายข่าวรายสัปดาห์ของเรา ("Deep Learning Weekly" และ "Comet Newsletter") เข้าร่วมกับเราที่ « ""Slack" และติดตาม Comet บน "Twitter" และ "LinkedIn" เพื่อดูแหล่งข้อมูล กิจกรรม และ อีกมากมายที่จะช่วยให้คุณสร้างโมเดล ML ที่ดีขึ้น เร็วขึ้น