Skip to main content

Stable Diffusion - Model Training

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

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

สมมุติว่าต้องการฝึกหน้าคน เช่นนาย 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/

ใช้ 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-stable-diffusion/blob/main/fast_stable_diffusion_AUTOMATIC1111.ipynb

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

image.png

เปิดไฟล์ Colab ของเราเอง (ครั้งแรก 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

สมมุติว่าภาพที่นำมาฝึกมีทั้งหมด 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