LoRA เป็นเครื่องมือที่ช่วยให้เราสามารถสร้างคาแรกเตอร์หรือโมเดลเฉพาะที่สามารถเจนซ้ำได้เรื่อยๆ จะเจนเปลี่ยนท่าทาง หรือปรับรายละเอียดของภาพ LoRA จะยังคงลักษณะของคาแรกเตอร์ที่เราเทรนไว้ได้ ถึงแม้ว่าในปัจจุบันจะมีช่องทางที่จะช่วยให้เราเทรน LoRA ได้ง่ายมากขึ้น แต่ความเข้าใจพื้นฐานในค่า Parameter ต่างๆ จะช่วยให้เราปรับแต่ง LoRA ได้ดั่งใจมากขึ้นและใช้เวลาน้อยลง บทความนี้จะพาไปทำความเข้าใจการตั้งค่าที่สำคัญในกรเทรน LoRA Model
LoRA คืออะไร?
LoRA (Low-Rank Adaptation) ช่วยในการปรับแต่งโมเดล Stable Diffusion โดยใช้ dataset หรือชุดรูปภาพของเราเองหรือก็คือ ใช้ชุดข้อมูลของ LoRA แทนชุดข้อมูลของ Base Model เช่น คำว่า “Blue Robot holding microphone” จะให้ผลต่างกันเมื่อใส่หรือไม่ใส่ LoRA


จากภาพตัวอย่างจะเห็นว่าเมื่อไม่ใส่ LoRA หุ่นยนต์ฟ้าจะออกมาตาม Dataset ของ Checkpoint แต่เมื่อใส่ LoRA หุ่นยนต์ฟ้า จะออกมาตาม Dataset ที่เราได้เทรนใว้
สำหรับใครที่อยากสร้างคาแรกเตอร์เฉพาะตัว ไม่ว่าจะเป็นมาสคอต ตัวละครจากจินตนาการ หรือสไตล์ LoRA คือคำตอบ เพราะเราสามารถเทรนโมเดลที่สามารถเจนภาพในแบบของเราได้นั้นเอง
Download Template
ก่อนลงลึก
ก่อนจะลงลึกให้เข้าใจไว้ว่าการเทรน LoRa นั้นไม่ยาก แค่ทำตามขั้นตอนข้างล่างนี้ การเจาะลึกลงไปในรายละเอียดเป็นเพียงให้เข้าใจที่มาของสูตร และเข้าใจการปรับแต่งในขั้นที่สูงขึ้นต่อไป
1. เตรียมรูปภาพสำหรับเทรน (Dataset) ตามเทมเพลตที่ให้ไป
2. โหลด Config ไฟล์ที่เตรียมใว้ให้
3. กด Start Traning และรอให้การเทรนเสร็จ
*เวลาในการเทรนขึ้นอยู่กับจำนวน Step และ Base Model ที่เลือกใช้ มีตั้งแต่15 นาทีไปจนถึงหลายชั่วโมง แนะนำให้เทรนก่อนนอนและรอดูผลตอนเช้า
Step การเทรนโมเดลขึ้นอยู่กับจำนวนรูปตั้งต้นและการตั้งค่าอื่นๆ
Step ไม่ควรน้อยหรือมากเกินไป โดยมากจะเทรนอยู่ที่ประมาณ 3000 step
การเตรียม Dataset เพื่อเทรน Character
ให้ใช้ภาพขนาด 1:1 จะเป็น 512,768 หรือ 1024 ขนาดในขนาดหนึ่ง (แนะนำที่ 1024*1024) หรือจะใช้ผสมกันก็ได้ หรือจะไม่กำหนดขนาดภาพเลยก็ได้เหมือนในตัวอย่างที่ให้ไป
โดยให้เตรียมภาพคาแรกเตอร์ในมุมมองต่างๆ ประมาณ 10 ภาพ ในตัวอย่างจะใช้โมเดลสามมิติของหุ่นยนสีฟ้า (Blue Robot) จัดท่าทางหลายๆ แบบเพื่อนำมาทำเป็น Dataset
สูตรคำนวณ Max Train Steps ของ Kohya_ss
max train steps = (Total Step / Batch Size / Gradient Accumulation Steps) * Epoch * Regulatization Factor
โดยส่วนมากจะกำหนด batch size , gradient accumulation,Regulatization Factor = 1
โครงสร้างของ Folder
โครงสร้าง Folder จะแบ่งออกเป็น 3 โฟลเดอร์คือ
- image สำหรับใส่ภาพที่เตรียมใว้
- log สำหรับเก็บ log ที่เกิดขึ้นระกว่างเทรน
- model สำหรับเก็บโมเดลที่เทรนเสร็จแล้ว


โดยในโฟลเดอร์ image จะมีโพลเดอร์พิเศษที่ต้องตั้งชื่อตามกฏของ kohya_ss เพื่อกำหนด Total Step ดังนี้
ตัวอย่างโฟลเดอร์ชื่อ “30_mascot” มีรูป 10 รูป
คือ “repeat 30” หมายถึง 30*10 = 300 step
เมื่อเทนสูตร max train steps จะได้ (300 / 1 / 1 * 10 * 1) = 3000 step
เมื่อเตรียมรูปภาพแล้ว ต่อไปต้องจัดเตรียม Keyword เราจะเขียนขึ้นเองหรือใช้เครื่องมือของ Koyha ก็ได้ แต่ควรมีคำสำคัญอยู่หนึ่งคำ (Prompt) ที่ใช้เรียกคาแรกเตอร์ของเรา ในที่นี้ใช้คำว่า “NongBroadcast” ซึ่งเป็นชื่อเรียกเฉพาะ จะได้ไม่กระทบกับ Dataset อื่นๆ ในโมเดลหลัก

ไฟล์ 01_01.tx
NongBroadcast,a blue robot with headphones holding a camera
ตัวอย่างภาพที่ได้จากการใช้ LoRA สร้าง Chacter Mascot เป็นของตัวเอง
รู้จักกับ kohya_ss
kohya_ss เป็นโปรแกรมที่ออกแบบมาเพื่อเทรนโมเดล Stable Diffusion หรือ LoRA ด้วยขั้นตอนและเครื่องมือต่างๆ ที่ง่ายต่อการใช้งาน ไม่ว่าจะเป็นการตั้งค่าเทรน การเลือกภาพ Dataset หรือการปรับค่าพื้นฐานต่างๆ ทำให้สามารถปรับแต่งโมเดลตามความต้องการของเราได้อย่างตรงจุด
สามารถดาวน์โหลดและติดตั้ง Kohya_ss ได้ที่นี่
https://github.com/bmaltais/kohya_ss
ขั้นตอนและการตั้งค่าที่ควรรู้
ในการเทรน LoRA ด้วย Kohya มีค่าพื้นฐานหลายอย่างที่ต้องทำความเข้าใจและตั้งค่าอย่างเหมาะสม เพื่อให้ได้โมเดลที่ดีที่สุด โดยหน้าหลักของการตั้งค่าการเทรนจะประกอบไปด้วย
1. Train Batch Size
- จำนวนภาพที่โมเดลจะเรียนรู้ในแต่ละรอบของการเทรน (Batch) ค่าที่มากขึ้นจะทำให้การเรียนรู้เร็วขึ้น แต่จะใช้ VRAM มากขึ้นด้วย
- การตั้งค่าแนะนำ: ถ้าใช้ GPU ที่มี VRAM ต่ำ เช่น 8-12GB ตั้งค่าเป็น 1-4 แต่ถ้าใช้ GPU ที่มี VRAM มากกว่า เช่น 24GB ขึ้นไป สามารถตั้งค่าได้ถึง 8-16
2. Epoch
- จำนวนรอบที่โมเดลจะทำการเรียนรู้จากข้อมูลทั้งหมดในชุดข้อมูล 1 Epoch คือ 1 รอบการเรียนรู้ทั้งหมด
- การตั้งค่าแนะนำ: เริ่มต้นที่ 10-50 Epoch ขึ้นอยู่กับจำนวนภาพใน Dataset ยิ่งภาพน้อย ยิ่งควรเพิ่ม Epoch เพื่อให้โมเดลเรียนรู้ได้เต็มที่
3. Mixed Precision (fp16)
- การใช้ความละเอียดต่ำลงในการประมวลผล เพื่อลดการใช้หน่วยความจำและทำให้การเทรนเร็วขึ้น
- การตั้งค่าแนะนำ: เปิดใช้งาน fp16 หาก GPU รองรับ เพื่อเพิ่มประสิทธิภาพในการใช้หน่วยความจำ
4. Learning Rate
- อัตราการเรียนรู้ของโมเดล หากตั้งค่าสูงไป โมเดลจะเรียนรู้เร็วแต่เสี่ยงที่จะเกิด “Overfitting” แต่ถ้าตั้งต่ำเกินไป โมเดลจะเรียนรู้ช้าเกิน
- การตั้งค่าแนะนำ: เริ่มต้นที่ 0.00003 ปรับลดหรือเพิ่มตามผลลัพธ์ของการเทรน
5. Max Resolution
- ความละเอียดสูงสุดของภาพที่ใช้ในการเทรน ค่าที่สูงขึ้นจะช่วยให้โมเดลเข้าใจรายละเอียดของภาพได้ดีขึ้น แต่ใช้หน่วยความจำมากขึ้นด้วย
- การตั้งค่าแนะนำ: 512×512 ,768×768 หรือ 1024×1024
7. LR Scheduler
- กำหนดการเปลี่ยนแปลงของค่า Learning Rate ถ้าตั้งเป็น constant ค่าจะไม่เปลี่ยนแปลง แต่ถ้าเลือก cosine หรือ polynomial ค่าจะลดลงเรื่อยๆ
- การตั้งค่าแนะนำ: ควรใช้ constant สำหรับการเริ่มต้น ถ้าต้องการความยืดหยุ่นมากขึ้นสามารถลองใช้ cosine
8. Optimizer
- Optimizer ช่วยปรับปรุงการเรียนรู้ของโมเดล ค่าที่นิยมใช้คือ AdamW
- การตั้งค่าแนะนำ: ใช้ AdamW ซึ่งเป็นค่าเริ่มต้นที่ดีที่สุดในการเทรนโมเดล Stable Diffusion
9. Network Alpha
- กำหนดความซับซ้อนของโครงข่ายในโมเดล ยิ่งค่ามาก โมเดลจะซับซ้อนขึ้น
- การตั้งค่าแนะนำ: ตั้งไว้ที่ 32 หรือ 64 สำหรับงานทั่วไป ถ้ามีการใช้ภาพรายละเอียดสูง อาจเพิ่มค่านี้ได้
10. Rank Dropout
- การสุ่มปิดการทำงานบางส่วนของโมเดลเพื่อป้องกันการเกิด Overfitting ช่วยให้โมเดลมีความยืดหยุ่นมากขึ้น
- การตั้งค่าแนะนำ: ควรตั้งค่าอยู่ที่ 0.1-0.3 เพื่อช่วยลด Overfitting
11. Save Every N Epochs
- บันทึกผลการเทรนทุกๆ กี่ Epoch เพื่อป้องกันข้อมูลสูญหายระหว่างการเทรน
- การตั้งค่าแนะนำ: ตั้งค่าเป็นทุกๆ 2-5 Epoch เพื่อให้สามารถบันทึกผลได้สม่ำเสมอ
6. Enable Buckets
- ช่วยจัดการภาพหลายขนาดให้การประมวลผลทำได้ดีขึ้น ใช้หน่วยความจำน้อยลงในระหว่างการเทรน
- การตั้งค่าแนะนำ: เปิดใช้งานหากภาพใน Dataset มีหลายขนาด เพื่อให้การเทรนเป็นไปอย่างราบรื่น
12. Min/Max Bucket Resolution
- กำหนดความละเอียดต่ำสุดและสูงสุดของภาพใน Bucket เพื่อให้โปรแกรมจัดการภาพได้ดีขึ้น
- การตั้งค่าแนะนำ: ใช้ค่า 256 และ 1024 หรือปรับตามขนาดของภาพใน Dataset
13. Gradient Accumulation Steps
- ค่านี้ช่วยสะสมการเรียนรู้จากหลาย Step ก่อนที่โมเดลจะทำการอัปเดตน้ำหนัก การตั้งค่าให้เป็น 1 หมายความว่าโมเดลจะทำการอัปเดตทุก Step โดยไม่สะสมอะไรเพิ่มเติม
- การตั้งค่าแนะนำ : 1
14. Regulatization Factor
- ปัจจัยการปรับน้ำหนักการเรียนรู้ที่ใช้ในบางกรณีเพื่อปรับสมดุลการเรียนรู้ให้เหมาะสม แต่ในกรณีนี้ตั้งไว้ที่ 1 ซึ่งหมายความว่าไม่มีการปรับเปลี่ยนเพิ่มเติมใดๆ การคำนวณก็จะไม่มีการเปลี่ยนแปลงจากผลลัพธ์พื้นฐาน
- การตั้งค่าแนะนำ : 1
สรุปการตั้งค่าแนะนำ:
- Train Batch Size: 1-4 (ขึ้นอยู่กับหน่วยความจำ GPU)
- Epoch: 10-50 (ขึ้นอยู่กับจำนวนภาพ)
- Learning Rate: 0.00003
- Max Resolution: 768×768 หรือ 1024×1024
- Enable Buckets: เปิดใช้งาน
- Mixed Precision: เปิดใช้งาน fp16 (หาก GPU รองรับ)
- Optimizer: AdamW
- Network Alpha: 32 หรือ 64
- Rank Dropout: 0.1-0.3