วันอังคารที่ 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 กัน