สารบัญ:
- ขั้นตอนที่ 1: วิดีโอ
- ขั้นตอนที่ 2: ฮาร์ดแวร์
- ขั้นตอนที่ 3: ชิ้นส่วนของรหัส
- ขั้นตอนที่ 4: รับรูปภาพ
- ขั้นตอนที่ 5: เครื่องมือและภาษาที่ใช้
- ขั้นตอนที่ 6: การเตรียมชุดข้อมูลสำหรับการฝึกอบรม
- ขั้นตอนที่ 7: โครงข่ายประสาทเทียม
- ขั้นตอนที่ 8: ฝึกอบรมโครงข่ายประสาทเทียม
- ขั้นตอนที่ 9: การทดสอบโครงข่ายประสาทเทียม
- ขั้นตอนที่ 10: ผลลัพธ์และส่วนถัดไป…
- ขั้นตอนที่ 11: การตรวจจับวัตถุ
- ขั้นตอนที่ 12: วิดีโอ
- ขั้นตอนที่ 13: การติดฉลาก
- ขั้นตอนที่ 14: การติดฉลาก GUI
- ขั้นตอนที่ 15: ห้องสมุดที่จำเป็น
- ขั้นตอนที่ 16: เซลล์ที่เหลืออยู่
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
เมื่อไม่กี่วันก่อน ฉันได้รับบาดเจ็บที่มือขวาที่ยิม หลังจากนั้นทุกครั้งที่ฉันใช้เมาส์คอมพิวเตอร์ มันทำให้ปวดมากเพราะมุมข้อมือที่สูงชัน
นั่นคือตอนที่มันกระทบฉัน " คงจะดีไม่น้อยถ้าเราสามารถแปลงพื้นผิวใดๆ ให้เป็นแทร็คแพดได้ " และฉันไม่รู้ว่าทำไม แต่ด้วยเหตุผลบางอย่าง ฉันนึกถึงเธอ หนังเรื่อง HER ฉันจะให้พวกคุณคิดดู ออก. เป็นความคิดที่น่าตื่นเต้น แต่ฉันไม่รู้ว่าจะทำได้ไหม ฉันตัดสินใจลองดู
บทความนี้รวบรวมสิ่งที่ออกมาจากมัน
ก่อนที่เราจะเริ่มต้นฉันมีข้อจำกัดความรับผิดชอบ-
' ในตอนท้ายของบทความนี้ ฉันไม่สามารถแปลงพื้นผิวใดๆ ให้เป็นแทร็คแพดได้ แต่ฉันได้เรียนรู้อะไรมากมายและเพิ่มเครื่องมือขนาดใหญ่ให้กับคลังแสงของฉัน ฉันหวังว่าจะเกิดขึ้นกับคุณเช่นกัน '
มาเริ่มกันเลย.
ขั้นตอนที่ 1: วิดีโอ
นี่คือวิดีโอสั้นๆ 5 นาทีที่ครอบคลุมทุกขั้นตอน ลองดูสิ.
ขั้นตอนที่ 2: ฮาร์ดแวร์
ฉันติดตั้ง raspberry pi พร้อมกับกล้อง raspberry pi ที่ความสูงประมาณ 45 ซม. ทำให้เราตรวจสอบพื้นที่ใต้กล้องได้ประมาณ 25x25 ซม.
กล้อง Raspberry pi และ raspberry pi นั้นหาได้ง่าย เพียงแค่ google และคุณควรจะสามารถหาร้านค้าในพื้นที่ได้
ดูลิงก์นี้หรือหนึ่งในเพลย์ลิสต์ Raspberry pi ของฉันเพื่อให้ pi ที่ไม่มีหัวของคุณเริ่มทำงาน
หลังจากการตั้งค่านี้ เราจำเป็นต้องมีโค้ดหนึ่งชิ้นที่จะตัดสินว่ามีมืออยู่ในบริเวณที่กล้องกำลังตรวจสอบอยู่หรือไม่ และถ้าเป็นเช่นนั้น อยู่ที่ไหน
ขั้นตอนที่ 3: ชิ้นส่วนของรหัส
โค้ดชิ้นหนึ่งที่ช่วยให้เราตัดสินใจได้ว่ามีส่วนไหนที่น่าสนใจหรือไม่ ใช้สิ่งที่เรียกว่า Neural Network พวกเขาอยู่ในหมวดหมู่ของการเขียนโปรแกรมที่เราไม่ได้กำหนดกฎในการตัดสินใจ แต่เราแสดงข้อมูลเครือข่ายประสาทเพียงพอที่จะหากฎด้วยตัวเอง
ในกรณีของเรา แทนที่จะเขียนโค้ดว่ามือใดดูเหมือน เราจะแสดงภาพโครงข่ายประสาทเทียมที่ถ่ายจาก Raspberry Pi ที่มีมือและไม่มีมือ ระยะนี้เรียกว่าการฝึกโครงข่ายประสาทเทียม และภาพที่ใช้เรียกว่าชุดข้อมูลการฝึก
ขั้นตอนที่ 4: รับรูปภาพ
ฉันลงชื่อเข้าใช้ raspberry pi จากระยะไกลและจับภาพจำนวนมากโดยใช้คำสั่งต่อไปนี้
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o เฟรม%04d.jpg
ฉันถ่ายภาพด้วยมือ 80 ภาพและภาพที่ไม่มีมือ 80 ภาพ ภาพ 160 ภาพไม่เพียงพอที่จะฝึกโครงข่ายประสาทเทียม แต่ควรเพียงพอสำหรับการพิสูจน์แนวคิด
นอกจาก 160 ภาพแล้ว ฉันยังถ่ายภาพอีก 20 ภาพเพื่อทดสอบเครือข่ายของเราเมื่อได้รับการฝึกฝน
เมื่อชุดข้อมูลพร้อม ผมก็เริ่มเขียนโค้ดสำหรับโครงข่ายประสาทเทียม
ขั้นตอนที่ 5: เครื่องมือและภาษาที่ใช้
ฉันเขียนโครงข่ายประสาทเทียมในไลบรารีการเรียนรู้เชิงลึกของ python ชื่อ Keras และโค้ดถูกเขียนบนสมุดบันทึก jupyter จากอนาคอนดาเนวิเกเตอร์
ขั้นตอนที่ 6: การเตรียมชุดข้อมูลสำหรับการฝึกอบรม
ก่อนอื่น (รูปภาพ #1) ฉันรวมไลบรารีทั้งหมดที่จำเป็นสำหรับโครงการนี้ ซึ่งรวมถึง PIL, matplotlib, numpy, os และ Keras ในเซลล์ที่สองของสมุดบันทึกหลาม (รูปภาพ #2) ฉันกำหนดเส้นทางไปยังชุดข้อมูลและพิมพ์จำนวนตัวอย่าง ตอนนี้เราต้องโหลดรูปภาพทั้งหมดลงในอาร์เรย์ numpy ดังนั้นในเซลล์ที่สาม (รูปภาพ #2) ฉันสร้างอาร์เรย์จำนวน 82 (จำนวนตัวอย่างมือ) +75 (จำนวนตัวอย่างที่ไม่ใช่มือ) เช่น 157x100x100x3 157 คือจำนวนรูปภาพทั้งหมดที่ฉันมี 100x100 คือขนาดรูปภาพที่ปรับขนาดแล้ว 3 สำหรับเลเยอร์สีแดง สีเขียว และสีน้ำเงินในภาพ
ในเซลล์ที่สี่และห้า เราโหลดรูปภาพที่มีมือตามด้วยรูปภาพที่ไม่มีมือในอาร์เรย์ numpy ในเซลล์ที่หก เราหารแต่ละค่าด้วย 255 ดังนั้นจึงจำกัดช่วงค่าจาก 0 ถึง 1 (รูปภาพ #3)
ขออภัยหากภาพที่แนบมาไม่ดีพอ นี่คือลิงค์ไปยังที่เก็บ GITHUB เพื่อให้คุณดูรหัส อย่าลืมเปลี่ยนชื่อเส้นทางไดเรกทอรีด้วยเส้นทางของคุณ:)
ไปเรื่อย.
ต่อไป เราต้องติดป้ายกำกับแต่ละภาพ ดังนั้นเราจึงสร้างอาร์เรย์ numpy หนึ่งมิติที่มีความยาว 157 82 รายการแรกถูกตั้งค่าเป็น 1 และอีก 75 รายการที่เหลือจะถูกตั้งค่าเป็น 0 ถ่ายทอดโครงข่ายประสาทเทียมที่ 82 ภาพแรกมาจากคลาสหนึ่งและที่เหลือมาจากอีกคลาสหนึ่ง (รูปภาพ #4)
ตอนนี้เรามาสร้างโครงข่ายประสาทเทียมกัน
ขั้นตอนที่ 7: โครงข่ายประสาทเทียม
ในเซลล์ที่เก้า เรากำหนดโครงข่ายประสาทเทียมของเรา ประกอบด้วยเลเยอร์การบิดซ้ำสามครั้งตามด้วยเลเยอร์ maxpool พร้อมตัวกรองการบิด 8, 12 และ 16 ตามลำดับ ต่อจากนั้นเรามีโครงข่ายประสาทหนาแน่นสองโครง แนบสองภาพสำหรับขั้นตอนนี้ อย่างแรกคือสแน็ปโค้ดที่สร้างโครงข่ายประสาทเทียม และประการที่สองคือการแสดงรูปภาพของโครงข่ายประสาทเทียมที่มีขนาดเอาต์พุตและการดำเนินการที่มีคำอธิบายประกอบ
ขั้นตอนที่ 8: ฝึกอบรมโครงข่ายประสาทเทียม
ในเซลล์ที่สิบ เรากำหนดค่าเครื่องมือเพิ่มประสิทธิภาพเครือข่ายประสาทให้เป็น 'adam' และสูญเสียฟังก์ชันเป็น 'binary_crossentropy' พวกเขามีบทบาทสำคัญในการปรับปรุงน้ำหนักเครือข่าย ในที่สุดเมื่อเราเรียกใช้เซลล์ที่ 11 โครงข่ายประสาทเทียมก็เริ่มฝึก ในขณะที่เครือข่ายกำลังฝึก ให้มองหาฟังก์ชันการสูญเสียและตรวจสอบให้แน่ใจว่ากำลังลดลง
ขั้นตอนที่ 9: การทดสอบโครงข่ายประสาทเทียม
เมื่อ Neural Network ได้รับการฝึกฝนแล้ว เราต้องเตรียมชุดข้อมูลทดสอบ เราทำซ้ำขั้นตอนที่ทำเพื่อเตรียมชุดการฝึกในเซลล์ที่ 3, 4, 5 และ 6 บนข้อมูลการทดสอบเพื่อสร้างชุดทดสอบ เรายังเตรียมเลเบลสำหรับชุดทดสอบด้วย แต่คราวนี้เรารันโมเดลบนชุดข้อมูลเหล่านี้เพื่อรับการคาดการณ์ ไม่ใช่เพื่อฝึก
ขั้นตอนที่ 10: ผลลัพธ์และส่วนถัดไป…
ฉันได้รับความแม่นยำในการทดสอบที่ 88% แต่ใช้เกลือเพียงเล็กน้อยเพราะชุดข้อมูลที่ใช้ในการฝึกและทดสอบโมเดลนี้มีขนาดเล็กมากและไม่เพียงพอต่อการฝึกโมเดลนี้อย่างเหมาะสม
อย่างไรก็ตาม ฉันหวังว่าคุณจะสนุกกับบทความนี้ ความตั้งใจของฉันที่อยู่เบื้องหลังแบบฝึกหัดนี้ยังไม่สมบูรณ์และโปรดระวังส่วนที่ 2 ฉันจะอัปโหลดโดยเร็วที่สุด
ในส่วนต่อไป เราจะฝึกโครงข่ายประสาทเทียมอีกตัวที่จะบอกตำแหน่งของมือในภาพที่ตรวจพบด้วยมือ
ยินดีต้อนรับทุกข้อสงสัย
หากใครสนใจใช้ชุดข้อมูลเล็ก ๆ ของฉันแจ้งให้เราทราบในความคิดเห็น ฉันจะทำให้มันใช้ได้
ขอบคุณที่อ่าน. แล้วพบกันใหม่ตอนที่สอง ทำไมคุณไม่สร้างและฝึกโครงข่ายประสาทเสียล่ะ
แก้ไข:- ขั้นตอนถัดไปสำหรับส่วนที่สอง
ขั้นตอนที่ 11: การตรวจจับวัตถุ
ในขั้นตอนก่อนหน้านี้ เราได้สร้าง NN ที่บอกเราว่าภาพทดสอบมีมือหรือไม่ แล้วไงต่อ? ถ้า NN จำแนกภาพเป็นมือที่มี เราอยากจะทราบตำแหน่งของมือ สิ่งนี้เรียกว่าการตรวจจับวัตถุในวรรณคดีคอมพิวเตอร์วิทัศน์ เรามาฝึก NN ที่ทำแบบเดียวกันกัน
ขั้นตอนที่ 12: วิดีโอ
วิดีโอ 3 นาทีอธิบายขั้นตอนที่เหลือทั้งหมด ลองดูสิ.
ขั้นตอนที่ 13: การติดฉลาก
หากคุณต้องการให้โครงข่ายประสาทแสดงตำแหน่งของมือ เราจำเป็นต้องฝึกมันในลักษณะดังกล่าว ซึ่งไม่เหมือนกับโครงข่ายประสาทเทียมรุ่นก่อนๆ ซึ่งแต่ละภาพมีป้ายกำกับด้วยมือและมือเปล่า คราวนี้รูปภาพทั้งหมดที่มีมือจะมีป้ายกำกับสี่ป้ายที่สอดคล้องกับพิกัดแนวทแยงของกรอบรอบมือในภาพนั้น
รูปภาพที่แนบมาของไฟล์ csv มีป้ายกำกับสำหรับแต่ละรูปภาพ โปรดทราบว่าพิกัดจะถูกทำให้เป็นมาตรฐานด้วยขนาดภาพ เช่น หากพิกัด X ด้านบนอยู่ที่ 320 พิกเซลในภาพที่มีความกว้าง 640 พิกเซล เราจะติดป้ายกำกับเป็น 0.5
ขั้นตอนที่ 14: การติดฉลาก GUI
คุณอาจสงสัยว่าฉันจัดการภาพทั้ง 82 ภาพได้อย่างไร ดีฉันเขียน GUI ในหลามที่ช่วยฉันในงานนี้ เมื่อโหลดรูปภาพใน GUI แล้ว ฉันคลิกซ้ายที่พิกัดบนและคลิกขวาที่พิกัดล่างของกล่องขอบเขตที่น่าจะเป็นรอบมือ พิกัดเหล่านี้จะถูกเขียนลงในไฟล์โดยที่ฉันคลิกปุ่มถัดไปเพื่อโหลดรูปภาพถัดไป ฉันทำขั้นตอนนี้ซ้ำสำหรับรถไฟทั้งหมด 82 ภาพและภาพทดสอบ 4 ภาพ เมื่อป้ายกำกับพร้อม ก็ถึงเวลาฝึก
ขั้นตอนที่ 15: ห้องสมุดที่จำเป็น
ก่อนอื่นเราต้องโหลดไลบรารีที่จำเป็นทั้งหมด ซึ่งรวมถึง
- PIL สำหรับการปรับแต่งภาพ
- matplotlib สำหรับการพล็อต
- numpy สำหรับการดำเนินการเมทริกซ์
- ระบบปฏิบัติการสำหรับการทำงานที่ขึ้นกับระบบปฏิบัติการและ
- keras สำหรับโครงข่ายประสาทเทียม
ขั้นตอนที่ 16: เซลล์ที่เหลืออยู่
ในเซลล์ที่ 2, 3, 4 และ 5 เราโหลดรูปภาพลงในอาร์เรย์ numpy และสร้างอาร์เรย์สี่มิติจากไฟล์ csv เพื่อทำหน้าที่เป็นป้ายกำกับ ในเซลล์หมายเลข 6 เราสร้างโครงข่ายประสาทเทียม สถาปัตยกรรมเหมือนกับโครงข่ายประสาทเทียมที่ใช้ในการจำแนกประเภท ยกเว้นมิติเอาต์พุตชั้นที่ 4 และไม่ใช่ 1 ความแตกต่างอีกประการหนึ่งมาจากฟังก์ชันการสูญเสียที่ใช้ซึ่งเป็นข้อผิดพลาดกำลังสองเฉลี่ย ในเซลล์หมายเลข 8 เราเริ่มฝึกโครงข่ายประสาทเทียมเมื่อฝึกแล้ว ฉันรันโมเดลนี้ในชุดทดสอบเพื่อรับการคาดการณ์สำหรับ bounding box บนพิกัดการซ้อนทับของ bounding box ที่ดูค่อนข้างแม่นยำ
ขอบคุณที่อ่าน.