วันศุกร์ที่ 11 สิงหาคม พ.ศ. 2566

Object Detection

 Faster R-CNN

วีดีโอภาษาไทย อธิบายหลักการทำงาน Object Detection โดยใช้วิธีที่เรียกว่า Faster R-CNN


วันจันทร์ที่ 6 กุมภาพันธ์ พ.ศ. 2566

KL-Devergence?

 
ในบาง Machine learning จะเห็นใช้ KL-Devergence 
แล้ว KL-Devergence คืออะไรสามารถไปดูได้ที่วีดีโอครับ


วันอังคารที่ 15 พฤศจิกายน พ.ศ. 2565

การใช้ YOLO V5 สำหรับทำ Object Detection

 สวัสดีครับ วันนี้จะมาแชร์การใช้งาน Yolo v5 สำหรับ ทำ Object Detection บน Online กัน


วันเสาร์ที่ 4 มิถุนายน พ.ศ. 2565

การทำให้ 2 เสียงที่เหมือนกันไม่เกิดการ Delay

สวัสดีครับ แอดได้ไปลองแกะโคดแล้วเจอวิธีที่ทำให้เสียง 2 เสียงที่เหมือนกัน แต่บางครั้งเกิดการ Delay ได้ดังรูป



Sound1



Sound2



จะเห็นว่า คลื่นเสียงที่ 1 และ คลื่นเสียงที่ 2 มีรูปคลื่นเหมือนกันเลย ยกเว้นช่วงเวลาที่ต่างกัน ก็คือ เสียงเพลงที่ 1 จะเริ่มเล่นก่อน แล้วเสียงเพลงที่ 2 ค่อยเริ่มเล่นตาม


แต่เราต้องการให้ เสียงเพลงที่ 1 กับเสียงเพลงที่ 2 ให้เล่นพร้อมกันเลย
สิ่งที่เราจะทำได้ก็อาจจะตัดช่วงเริ่มต้นของเพลงที่2 ออก





"แล้วเราจะรู้ได้อย่างไรว่าควรตัดช่วงเริ่มต้นของเพลงออกกี่วินาที ถึงจะทำให้เล่นเพลงที่ 1 กับ 2 พร้อมกันได้"

ถ้าในการเขียนโคดวิธีนึงนั้นเราจะใช้การคำนวณ correlate เข้ามาช่วย




จากวีดีโอด้านบน การคำนวณ Correlate จะเป็นการคำนวณโดยการเอาเสียงที่ต้องการเปรียบเทียบมาทาบในแต่ละช่วงเวลาแล้วคำนวณค่า Correlate ซึ่งช่วงเวลาใหนมีค่า Correlate มากที่สุดแสดงว่าช่วงเวลานั้นมีความใกล้เคียงกับเสียงที่เปรียบเทียบมากที่สุดนั่นเอง

เมื่อเราได้ช่วงเวลาที่ให้ค่า Correlate ที่มากที่สุด เราก็สามารถตัดช่วงเวลาก่อนหน้าออกได้เลยนั่นเอง



จากที่กล่าวมาทั้งหมดคือการทำ Correlate แบบคร่าวๆให้เข้าใจได้ง่ายและเห็นภาพ ต่อมาเราจะมาเขียนโคดกัน

แต่ก่อนจะเขียนโคด ขออธิบายหน้าตาข้อมูลที่ใช้ในการเก็บเสียงเพลงกันก่อนครับ

ข้อมูลในการเก็บเสียงเพลงนั้น จะเป็นการกับเก็บค่าตัวเลขของ Amplitude ของคลื่นในแต่ละช่วงเวลา เราสามารถแปลงเป็นข้อมูลได้ดังรูปครับ


Sound1





Sound2

เมื่อเราได้ข้อมูลของเสียงมาแล้ว เราก็จะเขียนโคดได้ดังนี้

offset = len(sound1) - 1
delay = np.argmax(np.correlate(sound1, sound2, 'full')) - offset

if delay > 0:
    sound1 = sound1[:, delay:]
else:
    sound2 = sound2[:, np.abs(delay):]


จากโคดจะเห็นว่าเรามีคำสั่ง np.correlate(sound1, sound2, 'full') หรือก็คือการนำ Sound1 กับ Sound2 มา correlate กันดังวีดีโอด้านล่าง





หลังจาก correlate กันแล้วเราก็จะเลือกช่วงที่มีคะแนนที่มากที่สุดโดยใช้คำสั่ง np.armax(...) โดย np.armax(...) จะให้ตำแหน่งที่มากที่สุดมานั่นเอง

หลังจากนั้นเราก็เอาตำแหน่งที่ได้มาลบกับ ช่วงทั้งหมดของเสียง Sound1 ก็คือการนำมาลบกับ offset

delay = np.argmax(np.correlate(sound1, sound2, 'full')) - offset


เมื่อทำการลบ แล้วก็ได้ช่วงที่ Delay มา หลังจากนั้นเราก็สามารถ เอาช่วงที่เริ่มต้นที่เหลือมออกโดยใช้โคดด้านล่างครับ

if delay > 0:
    a = a[:, delay:]
else:
    b = b[:, np.abs(delay):]



"แล้วการคำนวณ Correlate คำนวณอย่างไร"

ในการคำนวณ Correlate ในคลื่นเสียงนั้นจะเอาเสียงมาทาบ แล้วหาผลบวกของผลคูณของตำแหน่งที่ตรงกัน เพื่อให้เข้าใจมากขึ้นมาดูตัวอย่างกันครับ

ตัวอย่างที่ 1

ในการทาบช่วงเวลาดังกล่าวก็จะได้ค่า Correlate เป็น 0.02 คือการคำนวณจาก 

(0.1 x 0.2) = 0.02



ตัวอย่างที่ 2


ในการทาบช่วงเวลาดังกล่าวก็จะได้ค่า Correlate เป็น 0.19 คือการคำนวณจาก 


(0.1 x -0.1) + (1 x 0.2) = 0.19



ตัวอย่างที่ 3

ในการทาบช่วงเวลาดังกล่าวก็จะได้ค่า Correlate เป็น 0.19 คือการคำนวณจาก 


(0.1 x 1) + (1 x -0.1) + (-1 x 0.2) = -0.2


สุดท้ายนี้หวังว่าโพสน์นี้จะมีประโยชน์นะครับ 😁 ขอบคุณครับ







วันพุธที่ 25 พฤษภาคม พ.ศ. 2565

คำสั่ง linux command ในการตรวจเช็ค URL


สวัสดีครับวันนี้แอดไปพบคำสั่งใน Linux ในการเรียก URL จนกว่าจะเรียกได้สำเร็จตามเวลาที่กำหนด ดังนี้ครับ


curl --head --location --silent --output /dev/null --write-out '%{http_code}' www.google.com --connect-timeout 30 --retry 20 --retry-delay 30


โดยสิ่งที่น่าสนในก็คือตรงส่วน ของ --output ให้ save ลง /dev/null 

ซึ่งใน /dev/null ใน Linux นั้นจะเป็น Path ที่พิเศษอย่างหนึ่งก็คือ หากเราทำการ Save file ลงไว้ที่ /dev/null ไฟล์ดังกล่าวจะถูกลบออกจาก /dev/null เสมอ


ซึ่งผมใช้คำสั่งนี้เนื่องจากผมต้องการค่า http_code ค่าสุดท้ายค่าเดียวเท่านั้น ส่วนค่าอื่นให้กำจัดทิ้งไปที่ /dev/null นั่นเองครับ



วันพุธที่ 18 พฤษภาคม พ.ศ. 2565

ความแตกต่างระหว่าง PG และ DQN

 บทความที่แล้วเรารู้จักเรื่อง Deep Q Network (DQN) http://cakeknowledgeblogs.blogspot.com/2020/09/deep-q-network.html กันไปแล้ว ครั้งนี้เลยจะมาแชร์เรื่อง Policy Gradient (PG) และความตากแตกต่างระหว่าง PG และ DQN กัน



วันเสาร์ที่ 4 ธันวาคม พ.ศ. 2564

Optimizer คืออะไร

 

สวัสดีครับในการศึกษาเรื่อง Neural Network จะมีคำศัพท์นึงที่ได้ยินกันบ่อยนั้นก็คือคำที่ชื่อว่า Optimizer แล้ว Optimizer คืออะไร หากใครสงสัยสามารถดูได้ที่คลิปวีดีโอได้เลยครับ


วันพุธที่ 31 มีนาคม พ.ศ. 2564

การทำงานของ Convolution Neural Network

    สวัสดีครับหลังจากไปไม่ได้เขียน Blogs นานวันจะมาแชร์เรื่องหลักการทำงานของ Convolution Neural Network ที่เป็นหลักการทำงานเพื่อให้คอมพิวเตอร์สามารถเข้าใจรูปได้เช่น การแยกแยะภาพหมากับแมว หรือภาพอะไรก็ได้ หากอยากรู้ว่าทำงานอย่างไรสามารถเข้าไปชมได้ที่ช่องทาง Youtube ได้เลยครับ


หลัการทำงานของ CNN




ReLU เพิ่มเติม





วันพฤหัสบดีที่ 26 พฤศจิกายน พ.ศ. 2563

หลักการทำงาน Double Deep Q Networks

 สวัสดีครับวันจะมาแชร์เรื่อง Double Deep Q Networks ซึ่งผมได้ทำวีดีโอไว้แล้วมาดูกันเลยครับ


  • หลักการทำงาน Double Deep Q Networks

  • มาเขียนโคด DDQN กัน




วันเสาร์ที่ 12 กันยายน พ.ศ. 2563

หลักการทำงาน Deep Q Network

    สวัสดีครับวันนี้จะมาแชร์เรื่อง Deep Q Network ซึ่งผมได้ทำวีดีโอไว้แล้วสามารถดูวีดีโอได้ดังนี้ครับ

  •  หลักการทำงานของ Deep Q Network



  • มาเขียนโคด Deep Q Network 





วันอังคารที่ 25 สิงหาคม พ.ศ. 2563

Image Processing

 

     สวัสดีครับวันนี้จะเป็น หัวข้อเกี่ยวกับกระบวนการทำงานของรูปภาพในคอมพิวเตอร์กัน ซึ่งผมได้ทำวีดีโอไว้ดังนี้ครับ


- คอมพิวเตอร์มองรูปภาพเป็นเป็นอย่างไร



- กระบวนการทำ Convolution เช่น การทำให้ภาพเบลอ


- สร้างโปรแกรมการทำ Convolution ด้วยตนเองกัน


วันเสาร์ที่ 20 มิถุนายน พ.ศ. 2563

Q Learning


    สวัสดีครับวันนี้จะมาแชร์ Algorithm หนึ่งที่ใช้ใน AI ที่ชื่อว่า Q-Learning กันครับ งั้นมาเริ่มกันเลยครับ


1. Q Learning
 
2. วิธีการลง OpenAI Gym




3. มารู้จักเครื่องมือ OpenAI Gym ก่อนเริ่มเขียน Q Learning



4. มาเริ่มเขียน Q Learning กัน


5. สร้างกราฟดูผล





6. Q-Learning ในเกมที่ชื่อว่า CartPole EP.1



7. Q-Learning ในเกมที่ชื่อว่า CartPole EP.2





วันอังคารที่ 16 มิถุนายน พ.ศ. 2563

Reinforcement Learning

สวัสดีครับวันนี้จะมาแชร์เรื่อง Reinforcement Learning ที่เป็น ประเภทหนึ่ง ของ Machine learning กันหากใครอยากรู้ว่าคืออะไรสามารถดูได้ที่วีดีโอครับ


วันเสาร์ที่ 9 พฤษภาคม พ.ศ. 2563

Neural Network คืออะไร

🤖 สวัสดีครับ
วันนี้จะมาแชร์เกี่ยวกับ "Machine Learning" ในหัวข้อเรื่อง "Neural Network" ว่าคืออะไรทำงานอย่างไร สามารถดูได้ที่ video ด้านล่างได้เลยครับ

1. ทฤษฎี Neural Network ก่อนเขียน code




2. เขียนโคด Neural Network โดยไม่ใช้ Library กัน #1






3. เขียนโคด Neural Network โดยไม่ใช้ Library Final


วันอาทิตย์ที่ 29 มีนาคม พ.ศ. 2563

Genetic Algorithm#2


   สวัสดีครับหลังจากบทความที่แล้ว https://cakeknowledgeblogs.blogspot.com/2020/03/genetic-algorithm.html ได้พูดถึงทฤษฎีของอัลกอริทึมหนึ่งที่ชื่อว่า Genetic Algorithm วันนี้เราเลยจะนำความรู้มาใช้กันครับซึ่งเราจะนำความรู้มาแก้ปัญหา TSP(Traveling Salesman Problem) นั่นเอง

"แล้วปัญหา TSP(Traveling Salesman Problem) คืออะไร"

TSP(Traveling Salesman Problem) เป็นปัญหาสำหรับหาเส้นทางในการเดินทางไปยัง N สถานที่แล้วให้ได้ประโยชน์มากสุดเช่น เวลาที่สั้น หรือ ระยะทางที่สั้นที่สุดเป็นต้น

ตัวอย่างเช่น
เราต้องการไปทำบุญ 9 วัดซึ่งเรามีวัดในใจอยู่แล้ว แต่เราต้องการเดินทางไปทำบุญ 9 วัดโดยใช้ระยะทางทั้งหมดน้อยที่สุด ดังนั้นเราจะนำ Genetic Algorithm นี้แหละมาทำการจัดลำดับการเดินทางแล้วหวังว่าการเดินทางนั้นจะใช้เวลาที่น้อยที่สุดครับ



"แล้วเราจะเอา genetic algorithm มาใช้เพื่อแก้ปัญหา TSP อย่างไร?"



หลังจากที่เราได้เรียนรู้แล้วว่า genetic algorithm นั้น จะมีขั้นตอนหลักๆ คือ
1.         Initial population
2.         Fitness Function
3.         Selection
4.         Crossover
5.         Mutation
เราก็จะเอาขั้นตอนพวกนี้แหละมาดัดแปลงเพื่อแก้ปัญหา TSP(Traveling Salesman Problem) กันดังนี้

1. Initial population

   เราจะทำการสร้างคำตอบหลายคำตอบขึ้นมาก่อนซึ่งจะมีหน้าตาดังนี้

จากรูปจะเห็นว่าคำตอบของเราคือ การซุ่มลำดับของวัดที่เราจะเดินทางขึ้นมา และก็ทำการซุ่มอีกคำตอบเพื่อให้ได้หลายคำตอบ
จากคำตอบที่ 1 จะเห็นว่าจะมีการเดินทางดังนี้
จากบ้านไป วัดเอก, วัดจตุ, วัดสัตต , วัดโท , วัดตรี, วัดเบญจ, วัดนว ,วัดฉะ , วัดอัฎฐ, แล้วค่อยกลับมาบ้าน

(หมายเหตุชื่อวัดเป็นวัดที่คิดขึ้นมาเอง ดังนั้นอาจจะไม่มีชื่อวัดจริงบนโลก)

2. Fitness Function

   หลังจากนั้นเราก็มาทำการให้คะแนนคำตอบกันซึ่งการให้คะแนนนั้นจะให้คะแนนจากคนที่ใช้ระยะทางในการเดินทาง โดยคำตอบใหนใช้ระยะทางเดินทางสั้นก็จะได้คะแนนเยอะ ส่วนคำตอบใหนที่ใช้ระยะทางเยอะก็จะได้คแนนน้อยดังรูป

จากรูปจะเห็นว่าค่า fitness สำหรับปัญหา TSP TSP(Traveling Salesman Problem) เราจะใช้ 1/ระยะทางการเดินทางทั้งหมด เนื่องจากเราต้องการให้ระยะทางที่สั้นต้องได้คะแนนมากกว่าระยะทางที่ยาวนั่นเอง

3. Selection

   หลังจากเราให้ได้คะแนนของทุกคำตอบแล้วเราก็มาทำการเลือกคำตอบที่ดีที่สุดมา N จำนวนดังรูป โดยการเลือกคำตอบที่ดีที่สุดนั้นก็ดูจากค่า fitness ที่มากที่สุดมา N คำตอบนั่นเอง


4. Cross over

   หลังจากเราเลือกมาแล้วเราก็ทำการ Crossover กัน หรือก็คือการสร้างคำตอบขึ้นมาใหม่ที่เกิดจากการแลกคำตอบย่อยกันนั่นเองดังรูป



5. Mutation

   หลังจากที่เราได้คำตอบที่เกิดจาก Cross over มาใหม่แล้วเราก็อาจจะทำการสุ่มคำตอบย่อยมา เพื่อเปลี่ยนค่า โดยในที่นี้คือการสุ่มคำตอบย่อยมา 2 ตัวเพื่อมาสลับลำดับการเดินทางใหม่นั่นเอง



โดยขั้นตอนการทำงานของโปรแกรมนั้นก็จะทำ Initial population -> Fitness Function -> Selection -> Crossover -> Mutaion และก็เริ่มทำ Fitness Function ใหม่วนไปเรื่อยๆจนกระทั่งได้ระยะทางการเดินทางที่พอใจหรือระยะทางในแต่ละครั้งไม่ค่อยมีการเปลี่ยนแปลงนั่นเองครับ


ซึ่งหากใครสนใจอยากเขียนโปรแกรมการคำนวณ TSP(Traveling Salesman Problem) สามารถไปโหลดศึกษาดู code ได้ที https://github.com/CakeNuthep/GA_TSP โดยแอดได้เอาโคดต้นฉบับมากจาก https://github.com/7lb/TSP แล้วมาใส่คำอธิบายภาษาไทยไว้แล้วเพื่อให้สามารถเข้าใจได้เร็วขึ้น และสุดท้ายนี้หวังว่าโพสน์นี้จะมีประโยชน์นะครับ
ขอบคุณครับ


Refference