---
title: "วิธีกำหนดท่าทางแบบให้ได้ดั่งใจด้วย ControlNet ใน Stable Diffusion [Part4]"
url: https://www.thepexcel.com/stable-diffusion-part4/
type: post
date: 2023-04-02
updated: 2025-04-24
author: Sira Ekabut
categories: ["AI Image &amp; Video"]
tags: [controlnet, ai arts, stable diffusion]
---

# วิธีกำหนดท่าทางแบบให้ได้ดั่งใจด้วย ControlNet ใน Stable Diffusion [Part4]

[ในตอนก่อนหน้านี้](https://www.thepexcel.com/stable-diffusion-part3/)เราได้เรียนรู้วิธีการทำงานของ Prompt เบื้องต้นไปแล้ว แต่หากใครลองใช้ไปซักพักจะพบว่า ถึงเราจะกำหนด Prompt ยังไง บางครั้งก็ไม่สามารถบรรยายให้แบบมีท่าทางตามที่ต้องการได้เป๊ะๆ อยู่ดี…

 

แล้วเราจะทำยังไงถึงจะสามารถกำหนดท่าทางได้ดั่งใจล่ะ?

 

ทางออกของสิ่งนี้คือการใช้ Extension ที่ชื่อว่า ControlNet มาช่วยนั่นเอง

 

**หมายเหตุ : **บทความนี้เขียนตอน ControlNet V1 แต่ตอนนี้มีตัว V1.1 ออกมาแล้ว ใครสนใจไปดูอันใหม่ได้เลย

  

> [เจาะลึก ControlNet ใน Stable Diffusion [Part8]](https://www.thepexcel.com/stable-diffusion-part8/)

  

## อะไรคือ ControlNet?

 

ControlNet นั้นเป็น Extension หรือส่วนเสริมที่จะช่วยให้เราสามารถควบคุมผลลัพธ์ของรูปให้ได้ดั่งใจมากขึ้น ซึ่งมีอยู่หลาย Model แต่ละ Model มีความสามารถในการควบคุมที่แตกต่างกัน ผมจะขอแนะนำ Model ที่สำคัญมากๆ 2 ตัว นั่นก็คือ OpenPose และ Depth

 

### OpenPose

 
- **Preprocessor : **สามารถอ่านท่าทางจากรูป ให้ออกมาเป็นมนุษย์ก้าง OpenPose ได้
- **Model :** สามารถใช้รูปมนุษย์ก้าง OpenPose มาควบคุมท่าทางแบบที่ Generate ออกมาได้
- แปลว่าถ้าเรามีรูปมนุษย์ก้างอยู่แล้ว ให้เลือก Preprocessor เป็น None นะ

 ![1](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-003-1024x519.png) 

### Depth

 
- **Preprocessor : **สามารถอ่านความตื้นลึกของรูปต้นฉบับออกมาเป็น Depth Map ได้
- **Model :** สามารถใช้ความตื้นลึก Depth Map มาควบคุมสิ่งที่ Generate ออกมาได้
- แปลว่าถ้าเรามี Depth Map อยู่แล้ว ให้เลือก Preprocessor เป็น None นะ

 ![2](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-004-1024x474.png) 

สำหรับตัวอย่าง Model อื่นๆ ลองดูได้จากที่นี่

  

## วิธีการติดตั้ง ControlNet

 ![3](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-021-1024x424.png) 
- ไปที่ Extension -> Install from URL
- ใส่ url ว่า [https://github.com/Mikubill/sd-webui-controlnet](https://github.com/Mikubill/sd-webui-controlnet)
- กด install รอให้เสร็จ
- แล้ว Install Extension อีกตัวนึงที่มักใช้คู่กัน คือ [https://github.com/jexom/sd-webui-depth-lib](https://github.com/jexom/sd-webui-depth-lib)
- จากนั้น installแล้ว กลับไปที่ tab Installed แล้วกดปุ่มส้มๆ “Apply and restart UI”
- ไปโหลด Model ของ ControlNet เพิ่มมาจาก 
    - V1 : [https://huggingface.co/lllyasviel/ControlNet/tree/main/models](https://huggingface.co/lllyasviel/ControlNet/tree/main/models)
    - V1.1 : [https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main](https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main) (ตัวใหม่ เจ๋งกว่าเดิมเยอะ)
- ซึ่งผมขอให้โหลดตัวที่สำคัญมากๆ เช่น OpenPose กับ Depth ส่วนตัวอื่นจะโหลดหรือไม่ก็ได้

 ![4](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-001-1024x732.png) 
- จากนั้นเอา Model ที่โหลดมา ไปไว้ใน Folder \**stable-diffusion-webui\models\ControlNet** ให้เรียบร้อย
- ให้ไปตั้งค่าใน Setting เพิ่มเติม เพื่อให้เราสามารถใช้ ControlNet ได้หลาย Model พร้อมๆ กัน โดยให้ตั้งค่า Multi ControlNet: Max models amount เป็น 2-3 แล้วแต่ความต้องการ (ผมตั้งเป็น 2)

 

แล้ว Apply Setting แล้วกด Reload UI (ปุ่มข้างๆ) ซะ

 ![5](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-007-1024x450.png) 

**Tips :** **การใช้ ControlNet จะกิน VRAM เพิ่มขึ้น **(ยิ่งถ้าใช้ Multi-ControlNet ยิ่งหนัก) ดังนั้น **ถ้าใครมีปัญหา VRAM ไม่พอ คือ Gen รูปไม่ผ่าน ให้ลองตั้งค่า ดังนี้ใน webui-user.bat ดูนะครับ**

 

เพิ่ม medvram หรือ lowvram เข้าไปใน COMMANDLINE_ARGS เช่น

 

```
set COMMANDLINE_ARGS=--xformers --medvram --autolaunch
```

 

## วิธีใช้งาน ControlNet

 

เราสามารถใช้งาน ControlNet ได้ทั้งในส่วนของ txt2Img และ Img2Img ซึ่งผมจะสอนในส่วนของ txt2img ก่อนน่าจะเข้าใจง่ายกว่า (เดี๋ยวเราจะไปใช้ใน img2img ช่วงท้ายบทความ)

 

วิธีการก็คือให้เราใส่ Prompt ไปตามปกติ แต่อย่าใส่คำอะไรที่จะไปขัดให้มันขัดกับท่าทางที่เราจะควบคุมด้วย ControlNet

 

เช่น สมมติว่า **Generation Data** ที่เราทำไว้แบบนี้ ด้วย [Model ChillOutMix](https://civitai.com/models/6424/chilloutmix) อันเดิม

 

```
(best quality:1.4), (ultra highres:1.2), (photorealistic:1.4), (8k, RAW photo:1.2), (1 korean girl), smile, (standing on the beach:1.3), (long hair:1.3), (wearing white tank top and red Shorts:1.3)
Negative prompt: paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)),((text))
Steps: 30, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 2637412235, Size: 512x768, Model hash: fc2511737a, Model: chilloutmix_NiPrunedFp32Fix
```

    

ซึ่งจะออกมาได้ภาพนี้

 ![6](https://www.thepexcel.com/wp-content/uploads/2023/04/00133-2637412235.png)   

แต่เราอยากจะได้ Pose ของภาพนี้

 ![7](https://www.thepexcel.com/wp-content/uploads/2023/04/pexels-myicahel-tamburini-1152994-683x1024.jpg)   

**หมายเหตุ **: เราควร Crop รูปให้มีอัตราส่วนตามรูปที่เราต้องการจะ Gen ด้วย จะได้การควบคุมที่คุณภาพดีกว่า เช่น รูปที่ผมจะ Gen มีอัตราส่วน 2:3 ก็ควรจะ Resize/Crop ให้เป็น 2:3 ด้วย แต่เผอิญต้นฉบับเรา 2:3 อยู่แล้วเลยไม่ต้องทำอะไร

 

วิธีทำคือ ให้ ไปที่ ControlNet แล้ว Enable แล้ว Upload รูปต้นฉบับ แล้วตั้งค่าตามนี้

 ![8](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-008.png) 

แล้วตั้งค่า Width กับ Height ให้สัดส่วนเท่ารูปที่เราอยากจะ Gen

 ![9](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-006.png) 

จากนั้นกด Generate ใหม่ เราจะได้ผลลัพธ์ออกมา 2 อัน คือ รูปที่ Gen กับ OpenPose ที่ใช้ควบคุมรูป

   ![10](https://www.thepexcel.com/wp-content/uploads/2023/04/00132-2637412235.png)   ![11](https://www.thepexcel.com/wp-content/uploads/2023/04/tmp5zz2q8xn.png)   

เราจะเห็นได้ว่า OpenPose สามารถควบคุมท่าทางโดยรวมได้ดีพอสมควรเลย อาจจะเหลือเรื่องมือที่ยังไม่ได้ควบคุมด้วย OpenPose ปกติ (จริงๆ สามารถเปิด Setting ให้ Detect มือได้ แต่ผมว่ามันยังไม่ค่อย Work เท่าไหร่)

 

**ในตอนนี้ปัญหาหลักๆ ของภาพที่ได้คือ หน้ายังไม่ค่อยสวย และมือเบี้ยว **ซึ่งเรื่องหน้าเดี๋ยวเราจะแก้ด้วยการ Inpaint ทับทีหลัง ดังนั้นเราจะมาแก้ปัญหาเรื่องมือก่อน

 

ส่วนเรื่องมือเดี๋ยวเราจะไปแก้ด้วย ControlNet อีก Model นึงก็คือ Depth นั่นเอง แต่ว่าเราจะใช้ Depth มาจัดการแค่ในส่วนของมือเท่านั้น ซึ่งเราจะใช้ Depth Library มาช่วยควบคุม ControlNet ตัว Depth Model

 

## ใช้งาน Depth Library

 

เข้า tab Depth Library แล้ว Add Background Image เป็นรูปอะไรก็ได้ที่จะทำให้เรารู้ว่ามือควรอยู่ตรงไหน เช่นจะใช้รูปมนุษย์ก้างก็ได้

 ![12](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-009-1024x486.png) 

หรือจะเอารูปที่เรา Gen ไปแล้วมือเบี้ยวมาเลยก็ได้เห็นภาพชัดดี (แต่ให้ปรับ size ให้ตรง)

 

จากนั้นให้ Add Hands เข้าไปแล้วปรับตำแหน่งให้เหมาะสม แล้วกด Save รูป Depth เอาไว้ (หรือจะกดส่งเข้า ControlNet เลยก็ได้)

 ![13](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-014-1024x543.png) 

ซึ่งจะได้ Depth อันนี้มา

 ![14](https://www.thepexcel.com/wp-content/uploads/2023/04/pose.png) 

## เอา Depth มาใส่ ControlNet

 

จากนั้นกลับมาที่ ControlNet แล้วเลือกอีก Tab นึง แล้วโหลดรูป Depth ตามรูปนี้ (อย่าลืม Enable และเลือก Preprocessor เป็น None เพราะเรามี Depth แล้ว)

 ![15](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-013.png) 

จากนั้นลองกด Generate ดู เราจะได้ภาพนี้ออกมา ซึ่งจะพบว่ามือไม่หงิก (ซักเท่าไหร่) แล้ว 55

 ![16](https://www.thepexcel.com/wp-content/uploads/2023/04/00135-2637412235.png) 

## ทำยังไงให้ภาพใหญ่ขึ้น ละเอียดขึ้น เป๊ะขึ้น?

 

ทีนี้**เราลองกด Hires-Fix แบบ Latent **ดูซัก 1.5 เท่า แล้ว Generate ดูว่าผลลัพธ์ยัง ok อยู่หรือไม่?

 

**หมายเหตุ **: การใช้แบบ Latent คือมันจะ Gen รูปตามปกติก่อนรอบนึง แล้วคล้ายๆ ว่าจะ Denoise แล้ว Upscale ต่อโดยเติมรายละเอียดเข้าไป ซึ่งผลที่ได้จะได้รายละเอียดที่ดีขึ้นเยอะเลย (แต่มีสิทธิ์ที่ภาพจะเพี้ยนไปจากเดิมก่อนที่จะ Upscale)  
  
แต่ถ้าเรา Upscale แบบอื่น แม้ภาพจะไม่เพี้ยน แต่ว่าจะไม่ได้รายละเอียดของภาพที่ดีครับ

 

ในทีนี้ผมตั้ว **Upscale แบบ Latent 1.5 เท่า และ Denoising strength เป็น 0.5 **(แบบ Latent ถ้า denoise น้อยกว่านี้ภาพจะเน่า) ผลจะได้ที่ภาพใหญ่โดยรวมชัดเจนขึ้น แต่มือดันหงิกขึ้น

 

**หมายเหตุ** : ปัจจุบัน ControlNet อาจมีปัญหากับ HiresFix อยู่บ้าง โดยเฉพาะ Model ที่ต้องการความเป๊ะเช่น Depth หรือ Canny แต่สำหรับ OpenPose ไม่ค่อยมีปัญหาอะไร

 ![17](https://www.thepexcel.com/wp-content/uploads/2023/04/00136-2637412235-683x1024.png) 

ดังนั้นสำหรับเคสนี้หากกด Hires Fix แบบ Latent จะยังไม่ ok เท่าไหร่ บางทีก็ยังจบงานไม่ได้ ( แต่ถ้ามองว่ามือแบบนี้ ok แล้วก็จบอ่ะนะ 55)

 

### แก้ปัญหายังไงดี?

 

ดังนั้นถ้าหากต้องการทำให้มือเป๊ะกว่านี้ ตอนนี้มี 3 ทางเลือก คือ

 

1.Gen รูปที่ความละเอียดสูงขึ้นแต่แรกเลย เช่น 768 x 1152 (แต่ผลลัพธ์อาจเปลี่ยนจากเดิมพอสมควร และจะเริ่มมีบางอย่างดูแปลกๆ เช่น ฉากหลัง สีกางเกง แถมมือก็ยังแปลกอยู่ดี 55)

 ![18](https://www.thepexcel.com/wp-content/uploads/2023/04/00137-2637412235-683x1024.png) 

2. ใช้การ Upscale แบบที่ไม่ใช่ Latent เช่น ESRGAN_4X (แต่ในที่นี้อัป 1.5x) ภาพที่ได้อาจจะไม่มีรายละเอียดมากนัก แต่จะไม่เพี้ยนจากรูปเดิมเลย เช่น ของผมจะได้แบบนี้ ซึ่งก็ดู ok นะ (แม้มือจะเพี้ยนไปบ้าง)

 ![19](https://www.thepexcel.com/wp-content/uploads/2023/04/00138-2637412235-683x1024.png) 

3. ใช้การ Inpaint ช่วยทำงานต่อจากรูป Upscale มือหงิกนี่แหละ โดยกดปุ่ม Send to Inpaint ต่อได้เลย

 ![20](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-015-1024x625.png) 

ในที่นี้ผมจะทำจากภาพมือหงิกในแบบที่ 3 ให้ดูว่าแก้ยังไง?

 

### การใช้ Inpaint เพื่อแก้รายละเอียดภาพ

 

พอกด Send to Inpaint แล้วผลลัพธ์ที่เราทำจะถูกส่งมาหน้า Inpaint ของ img2img **ซึ่ง Inpaint คือเครื่องมีที่สามารถแก้รูปเฉพาะส่วนที่ต้องการได้** ซึ่งดีมากๆ เพราะเรากำหนดจุดโดยการระบายสีดำเพื่อ Mask พื้นที่ได้ตามต้องการ

 

ให้ใช้ Prompt ดังนี้ เพื่อแก้ส่วนมือ

 

```
(best quality:1.4), (ultra highres:1.2), (photorealistic:1.4), (8k, RAW photo:1.2), ( korean girl hand)
```

 

ซึ่งให้เราใช้ Negative Prompt ดังนี้ (อันเดิม)

 

```
paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)),((text))
```

 

แล้วระบายสีส่วนมือที่จะแก้ แล้วตั้งค่าตามนี้ (ในเคสนี้เราเลือก **Inpaint Area เป็น Whole Picture แล้วกำหนดขนาดเต็มรูป 768×1152 เพื่อให้สอดคล้องกับขนาดของ Depth ใน Control Net**)

 ![21](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-018.png) 

จากนั้นตั้งค่า ControlNet ของการ Inpaint เป็น Depth ตามนี้

 ![22](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-017.png) 

พอ Generate รูปจะได้ตามนี้ ซึ่งคราวนี้มือกลับมาตรงแล้ว (ถ้ายังไม่ดีให้แก้ seed เป็น random แล้วให้มัน gen ออกมาหลายๆ รูปแล้วเลือกรูปที่ดี)

 ![23](https://www.thepexcel.com/wp-content/uploads/2023/04/00147-2637412235-fix-hand-683x1024.png) 

ทีนี้ให้เราจะแก้ตรงลูกหน้าต่อโดย**กดปุ่ม Send to Inpaint เพื่อเอาผลลัพธ์ที่แก้มือแล้วไปใช้ต่อ**เป็นจุดตั้งต้นอีกรอบนึง

 

ทีนี้ถ้าจะแก้หน้าตา เราอาจแก้ prompt เป็น

 

```
(best quality:1.4), (ultra highres:1.2), (photorealistic:1.4), (8k, RAW photo:1.2), (korean girl face, smile)
```

 

ระบายสีดำตรงหน้าอย่างเดียว แล้วตั้งค่าตามนี้ (ในเคสนี้เราเลือก Inpaint Area เป็น **Only Masked เพื่อให้ให้มัน Render แค่ตรงสีดำๆ** ด้วยขนาดที่กำหนด เช่น 768×768)

 

แล้ว Denoise บางๆ หน่อย ไม่ต้องเยอะมาก (เช่น 0.2-0.4) เพื่อให้ผลลัพธ์ไม่เพี้ยนจากเดิมเยอะจนเกินไป

 ![24](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-020-886x1024.png) 

แล้วไม่ต้อง Enable ControlNet แล้ว พอ Generate ออกมาจะได้แบบนี้ ถ้าคิดว่าแบบนี้พอใจแล้วก็จบได้เลย ถ้าไม่พอใจก็ปรับค่านิดๆ หน่อยๆ แล้ว Gen เพิ่มเพื่อเลือกรูปที่ ok

   

Denoise 0.25

 ![25](https://www.thepexcel.com/wp-content/uploads/2023/04/00150-2637412235-fin2-683x1024.png)   

Denoise 0.3

 ![26](https://www.thepexcel.com/wp-content/uploads/2023/04/00148-2637412235-fin-683x1024.png)   

เท่านี้ก็น่าจะได้ผลลัพธ์ที่ดีขึ้นแล้วล่ะ!

 

### สามารถเป๊ะได้มากกว่านี้อีกนะ

 

การใช้ ControlNet อ่าน OpenPose จากรูป หรือการใช้ Depth Library เอามือมาแปะ เป็นวิธีที่ง่ายและสะดวก แต่ผลลัพธ์อาจไม่เป๊ะตามต้องการ เพราะอาจไม่มี Pose หรือ Depth ที่เราต้องการจริงๆ อยู่ก็ได้ วิธีที่จะได้สิ่งที่ต้องการมีอีก 2 ระดับ **(อันที่ 2คือวิธีที่เป๊ะที่สุด)**

 

1.[ใช้ Extension ชื่อ PoseX](https://github.com/hnmr293/posex) จัด OpenPose ได้ดั่งใจ แถมหมุนมุมกล้องได้ด้วย (ข้อดีคือง่าย แต่ข้อเสียคือจัดท่าแล้วเพี้ยนง่ายเช่นกัน เพราะมันลากจุดไปไหนก็ได้ เดี๋ยวมือยาวเป็นแม่นาคเลย)

 ![27](https://www.thepexcel.com/wp-content/uploads/2023/04/ControlNet-022.png) 

2. **ใช้ Blender เพื่อใช้ Model 3D (โหลดมาได้เลย ไม่ต้องปั้นเอง) มาทำ OpenPose กับ Depth เพื่อกำหนดท่าทาง และมือแบบเป๊ะๆ** ใครสนใจไปดูคลิปนี้ได้ คุณทีทำไว้ดีมากๆ ละเอียดมาก แบบไม่เคยใช้ Blender ก็ทำตามได้ แถมภาษาไทยด้วย

    

## ตอนต่อไป

 

ในตอนต่อไป เราจะมาเรียนรู้วิธี Train Model LoRA ขึ้นมาใช้เอง เพื่อให้สามารถกำหนดหน้าตา เสื้อผ้า หรือสไตล์ของรูปที่เราจะ Gen ออกมาได้ รับรองว่าเด็ดสุดๆ แน่นอน คอยติดตามได้เลยครับ

 

## รวมบทความ Stable Diffusion

---

_Source: [https://www.thepexcel.com/stable-diffusion-part4/](https://www.thepexcel.com/stable-diffusion-part4/)_
