Skip to main content

Stable Diffusion - Embedding Model Training

Embedding Model หรือ Textual Inversion แล้วแต่จะเรียก

ตัวอย่างจะเน้นการฝึกภาพบุคคล

Workflow


เตรียมภาพเพื่อฝึกโมเดล

สมมุติว่าต้องการฝึกหน้าคน เช่นนาย A ให้เตรียมภาพไว้อย่างน้อย 10-20 รูป ก็เพียงพอโดย

  • เน้นภาพคม ๆ คุณภาพสูง noise ไม่เยอะ
  • พื้นหลังและสภาพแสงหลาย ๆ แบบ
  • หลากหลายมุมไม่ใช่หน้าตรงอย่างเดียว เงยหน้า ก้มหน้า หันข้าง ได้หมด

ภาพยิ่งเยอะยิ่งใช้เวลาฝึกนาน

หลังจากนั้นให้ resize ให้มีขนาด 512*512 โดยใช้โปรแกรมที่ถนัด หรือใช้

https://www.birme.net/?target_width=512&target_height=512

โดย resize ให้บุคคลอยู่ตรงกลางภาพหลังจากนั้นจึงจับใส่ folder ให้เรียบร้อยเช่น

D:\AI\Model\ชื่อ folder



สร้าง caption

เปิด Stable Diffusion แล้วไปที่ Train > Preprocess images

Source directory ให้ใส่ path folder ภาพ เช่น

D:\AI\Model\ชื่อ folder


Destination directory ให้ใส่ path folder ภาพที่ทำการสร้าง caption แล้ว เช่น

D:\AI\Model\ชื่อ folder\processed


ติ๊กถูกที่ Use BLIP for caption หลังจากนั้นกด Preprocess

โปรแกรมจะทำการสร้าง caption พร้อมกับ copy รูปไปไว้ใน Destination directory




แก้ไข caption





จบขั้นตอนการเตรียมภาพ




Model Training


https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/

สร้างโดยการ Embedding หรือ Textual Tnversion


ใช้ Google Colab

สำหรับคนที่ต้องการใช้ Google Colab ให้อ่านตรงนี้
ย้ายไฟล์เข้า Google Drive

Copy ไฟล์จาก folder processed ที่ทำไว้ ไปใน Google Drive ของเราเช่น

My Drive/AI/ชื่อบุคคลที่จะทำ/processed


 


 


การใช้งานบน Colab จะกินพื้นที่ Goggle Drive ของเรา ไม่แน่ใจว่าเท่าไร น่าจะ 8-9 GB

เนื่องจากเราใช้ Coab แบบฟรี Colab จะทำงานได้ประมาณ 10-12 ชม หลังจากนั้นต้องปล่อยพัก 12 ชม+ ถึงจะกลับมาใช้งานได้อีก

เปิดใช้งาน Colab


ให้เปิดไฟล์ Colab ตัวอย่างที่เขาทำกันไว้

https://colab.research.google.com/github/TheLastBen/fast-book.biribiri.me/books/stable-diffusion/blob/main/fast_stable_diffusion_AUTOMATIC1111.ipynbpage/stable-diffusion-model-training

หลังจากนั้นให้ copy Colab โดยกดที่ Copy to Drive โดยไฟล์จะถูก copy ไปไว้ใน Colab Notebook ใน Google Drive ของเรา

image.png

ไกด์ยังไมได้เขียนจนเสร็จ

เปิดไฟล์ดูไกด์จาก ColabYoutube ของเราเองด้านล่างไปก่อน (ครั้งแรก browser จะเด้งไปที่ tab ใหม่ให้เลย) แล้วจะเห็นเมนูหลักตัวใหญ่แต่มีไกด์ไลน์ตั้งค่าสำคัญ5 ขั้นตอนจดไว้ให้

กดปุ่ม play เพื่อเชื่อม Google Drive ของเราไว้ดึงไฟล์ รูปภาพที่จะใช้ทำโมเดลจาก folder processed

image.png

เมื่อเชื่อมต่อเรียบร้อยแล้วจะเห็น folder Google Drive เราทั้งหมด และจะเห็น MyDrive/AI ที่เราทำไว้

กดปุ่ม play Install/Update AUTOMATIC1111 repo (รอจนเสร็จ)

กดปุ่ม play Requirements (รอจนเสร็จ)

Model Download/Load
    เปิดมาครั้งแรกจะยังไม่มีโมเดล โดยในตัวอย่างนี้จะใช้โมเดลปัจจุบันคือ SD 1.5
    ดูที่ MODEL_LINK และใส่ url ของโมเดล 1.5 ลงไป จะได้ตามรูปด้านล่างหลังจากนั้น กดปุ่ม play และรอโหลดโมเดลจนเสร็จ
    https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt

    image.png

    โมเดลที่โหลดมาแล้วจะถูกเปลี่ยนชื่อเป็น model.ckpt [e1141589a6] ซึ่งจะไม่เหมือนกับที่เราโหลดไปใช้งานบน PC

    Start Stable-Diffusion
      กดปุ่ม play แล้วรอสักครู่ จะมี URL มาให้กดเปิดใช้งานเหมือนตอนใช้บน PC
      วิธีใช้งานให้ทำตามขั้นตอนปกติเหมือนบน PC ได้เลย

      เมื่อต้องการใช้งาน Colab ในภายหลังให้ไปที่ Colab Notebook ของเรา และทำตามขั้นตอนเดิมทุกอย่าง ยกเว้นการ Download Model ที่ทำทีเดียว


      ใช้ Automatic 1111 ในเครื่องของเราเอง

      ไกด์ยังไมได้เขียน

      ดูไกด์จาก


      Create embedding

      number of vectors per token

        2-3 = ต่ำกว่า 10 รูป

        5-6 = 10-30 รูป

        8-10 = 40-60 รูป

        10-12 = 60-100 รูป




        เน้นเฉพาะค่าที่จำเป็นต้องใช้งาน และต้องตั้งก่อนฝึก

        Train

        Embedding: ให้เลือกจาก Create embedding ที่เราสร้างไว้ก่อนหน้านี้

        Embedding Learning rate: คือค่าที่กำหนดว่า AI เรียนรู้ภาพที่เราใส่ไปเร็วแค่ไหนยิ่งเร็วมากก็ยิ่งคุณภาพแย่ ยิ่งช้ามากก็จะเรียนเยอะเกินไปจนโมเดลนั้นพังสามารถตั้งได้ 2 แบบคือ

        • แบบคงที่แนะนำให้ตั้งไว้ที่ 0.004
        • แบบขั้นบันไดให้ตั้งไว้ที่ 0.05:10, 0.02:20, 0.01:60, 0.005:200, 0.002:500, 0.001:3000, 0.0005

        ตัวอย่างจะแนะนำให้ใช้ Embedding Learning rate แบบขั้นบันไดซึ่งหมายถึงให้ AI เรียนรู้โครตสร้างของภาพเร็ว ๆ ในช่วงแรกๆ และมาเน้นรายละเอียดเจาะลึกในช่วงหลัง ๆ

        Batch size: ตั้งให้สูงที่สุดเท่าที่ GPU จะรับไหว หาก Train แล้วไม่ไหวขึ้น CUDA Core Error ค่อยปรับลดลงมา
        Gradient: accumulation step: เปรียบเสมือนตัวคูณของ Batch size และห้ามมีค่ามากกว่า Batch size

        Google Colab น่าจะตั้งได้สูงสุดที่ Batch size 3 และ Gradient 1 เกินนั้นน่าจะ error ถ้าอยากเพิ่มก็ลองเอา

        สมมุติว่าภาพที่นำมาฝึกมีทั้งหมด 20 รูป ก็ควรตั้ง Batch size*Gradient ไว้ที่ 20*1 หรือ 10*2 แล้วแต่ว่า GPU จะไหวแค่ไหน ถ้าไม่ไหวก็ปรับ Batch size ลงไปเรื่อย ๆ แต่เมื่อคูณแล้วห้ามเกินจำนวนรูปทั้งหมด ดังนั้น เราจะใช้ 7*3 ไม่ได้เพราะเกินจาก 20 รูป ให้ใช้ 6*3 แทน

        Dataset directory: คือที่ตั้งของภาพใน folder process ที่ทำไว้แล้วเช่น

        D:\AI\ชื่อบุคคล\processed

        Dataset directory สำหรับ Google Colab อ่านที่นี่

        ให้ดูตรงเมนู Files ด้านซ้าย gdrive > MyDrive แล้วกดไปยัง folder processed จะเห็นจุด 3 ตัวด้านหลังเป็นเมนู กด copy path ก็จะได้ path มาใส่ เช่น

        /content/gdrive/MyDrive/AI/ชื่อบุคคล/processed

        image.png


        Prompt template: ให้เลือกไฟล์ template ที่สร้างไว้ จากตัวอย่างคือ custom_subject_filewords.txt

        สร้างไฟล์ custom_subject_filewords.txt

        จากตัวอย่างให้ไปที่ D:\AI\stable-diffusion-webui\textual_inversion_templates 

        ทำการ copy ไฟล์ subject_filewords.txt และเปลี่ยนชื่อเป็น custom_subject_filewords.txt (หรือะไรก็ได้ที่เข้าใจ)

        เปิดไฟล์ Custom_subject_filewords.txt ลบทุกบรรทัดทิ้งให้หมด เหลือแค่ a photo of a [name], [filewords] ไว้ หลังจากนั้นให้เซฟ

        image.png

        บรรทัดที่เหลือไว้หมายถึงเราจะใช้ prompt จากในไฟล์โดย

        [name] หมายถึงข้อมูลจากใน txt ที่คู่กับรูปของเรา เช่นพวก a woman smile
        [filewords] หมายถึงชื่อไฟล์ .pt ของเราจะใช้ในการเรียก prompt ซึ่งตรงนี้หลังจาก train เสร็จแล้วเราพอใจ .pt ไหน เราจะ rename ชื่ออะไรก็ได้แต่ให้เรียกใช้จากชื่อตามนั้น

        Google Colab ก็ทำแบบเดียวกัน แต่ไปทำใน Google Drive หรืออะไรก็ช่างแล้วแต่ถนัดโดย path ไฟล์จะอยู่ใน

        My Drive\sd\stable-diffusion-webui\textual_inversion_templates

        เมื่อทำเสร็จแล้ว หากเปิด Colab ที่เชื่อมไว้แล้วให้รอสักครู่ แล้ว refresh เดี๋ยวไฟล์มันก็จะขึ้นมาเอง


        Max step: ให้ตั้งไว้เท่าไรก็ได้ แนะนำที่ 3000 เพราะเกินกว่านั้นส่วนมากโมเดลจะพัง (จากที่ลองมาบางที 2800 ก็เละแล้ว)

        Save an image to log และ Save a copy to embedding: ให้ตั้งไว้ที่ 50 ซึ่งหมายถึง ให้เซฟตัวอย่างภาพและโมเดล ทุก ๆ การฝึก 50 step

        Shuffle tags by ',' when creating prompts ให้ติ๊กถูก

        Drop out tags when creating prompts ให้ตั้งไว้ที่ 0.1

        Choose lantent sampling method: เลือก deterministic

        เมื่อตั้งค่าทั้งหมดแล้วสามารถกด Train ได้เลย หาก error ซึ่งส่วนมากจะเป็น CUDA out of memory ให้กลับไปลดขนาด Batch size

        image.png