ใช้ RNN (LSTM) สำหรับระบบจดจำท่าทาง


10

ฉันกำลังพยายามสร้างระบบรู้จำท่าทางเพื่อจำแนกASL (ภาษามือแบบอเมริกัน)ท่าทางดังนั้นการป้อนข้อมูลของฉันควรเป็นลำดับของเฟรมไม่ว่าจะเป็นจากกล้องหรือไฟล์วิดีโอจากนั้นมันจะตรวจจับลำดับและแมปตามความเหมาะสม ชั้นเรียน (การนอนหลับการช่วยเหลือการกินการวิ่งเป็นต้น)

สิ่งนี้คือฉันได้สร้างระบบที่คล้ายกันแล้ว แต่สำหรับรูปภาพแบบสแตติก (ไม่รวมการเคลื่อนไหว) มันมีประโยชน์สำหรับการแปลตัวอักษรเฉพาะในการสร้างซีเอ็นเอ็นนั้นเป็นงานที่ตรงไปตรงมาเนื่องจากมือไม่ขยับมากและ โครงสร้างชุดข้อมูลก็จัดการได้เช่นกันเมื่อฉันใช้kerasและอาจยังตั้งใจจะทำเช่นนั้น (ทุก ๆ โฟลเดอร์มีชุดภาพสำหรับสัญญาณเฉพาะและชื่อของโฟลเดอร์คือชื่อคลาสของเครื่องหมายนี้เช่น A, B, C , .. )

คำถามของฉันที่นี่ว่าฉันสามารถจัดชุดข้อมูลของฉันเพื่อให้สามารถป้อนข้อมูลลงในRNNใน keras และสิ่งที่ฟังก์ชั่นบางอย่างที่ฉันควรใช้ให้เกิดประสิทธิภาพในการฝึกอบรมรุ่นและพารามิเตอร์ใด ๆ ที่จำเป็นของฉันบางคนแนะนำให้ใช้TimeDistributedชั้น แต่ฉันทำไม่ได้ มีความคิดที่ชัดเจนเกี่ยวกับวิธีการใช้เพื่อประโยชน์ของฉันและคำนึงถึงรูปร่างอินพุตของทุกเลเยอร์ในเครือข่าย

การพิจารณาว่าชุดข้อมูลของฉันจะประกอบด้วยภาพฉันอาจต้องใช้เลเยอร์ convolutional เป็นไปได้อย่างไรที่จะรวมเลเยอร์Convเข้ากับLSTMหนึ่ง (ฉันหมายถึงในแง่ของรหัส)

ตัวอย่างเช่นฉันจินตนาการว่าชุดข้อมูลของฉันเป็นแบบนี้

โครงสร้างชุดข้อมูล

โฟลเดอร์ที่ชื่อว่า 'Run' มี 3 โฟลเดอร์ 1, 2 และ 3 แต่ละโฟลเดอร์สอดคล้องกับเฟรมในลำดับ

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นRun_1จะมีชุดของภาพสำหรับกรอบแรกบางRun_2สำหรับกรอบสองและRun_3สำหรับสามรูปแบบของฉันวัตถุประสงค์คือการได้รับการอบรมที่มีลำดับนี้การส่งออกคำเรียก


ชุดข้อมูลใดที่คุณใช้สำหรับ ASL
Sam Johnson

ขออภัยเราบันทึกชุดข้อมูลของเราเองและไม่ได้จัดการเผยแพร่ต่อสาธารณะมันไม่ได้ใหญ่มากนักและไม่ได้ให้ความแม่นยำตามที่คาดหวัง
Anasovich

เป็นไปได้อย่างแน่นอนและไม่เหมือนการเขียนโค้ดพิเศษมากเกินไปจากบทความที่กล่าวถึงด้านล่าง แต่ฉันไม่ได้พูดจากประสบการณ์เพราะไม่ใช่สถาปัตยกรรมที่ฉันเคยใช้มาก่อน หวังว่าบทความนี้จะชี้ให้คุณในทิศทางที่ถูกต้อง: machinelearningmastery.com/cnn-long-short-term-memory-networks
Ollie Graham

คำตอบ:


2

จากความเข้าใจของฉันสิ่งนี้ดูเหมือนจะทำให้เกิดปัญหาการจำแนกประเภทหลายคลาส (แต่ละชุด / ลำดับของท่าทางมือในที่สุดสอดคล้องกับคำ / สัญลักษณ์) สถาปัตยกรรม RNN / LSTM / GRU เป็นจุดเริ่มต้นที่ดี แต่จะมีราคาแพงและค่อนข้างช้าในการฝึกอบรม อย่างไรก็ตามไม่ว่าคุณจะต้องการสิ่งเหล่านี้อย่างน้อยหนึ่งอย่างหรือไม่นั้นขึ้นอยู่กับว่าโครงสร้างข้อมูลของคุณเป็นอย่างไรและคุณสามารถหลีกเลี่ยงการรักษาภาพของคุณเป็นชุดแทนที่จะเป็นลำดับ

นี่คือแนวคิดที่เป็นไปได้บางส่วน:

  1. เริ่มต้นด้วยการตั้งค่าเลเยอร์ CNN สำหรับแต่ละโฟลเดอร์ "RUN_ *" พร้อมด้วย dropoutและ / หรือflatteningระหว่างแต่ละเลเยอร์

  2. เริ่มต้นด้วยการตั้งค่าเวกเตอร์ยาวเดียวที่เป็นตัวแทนของทุกขั้นตอนของลำดับแล้วเพิ่มคู่ของชั้นของ CNNs ยังมี และdropout / หรือflattening

การดำเนินการนี้จะใช้เวลาสำรวจและปรับแต่งเพื่อดูว่าอะไรดีที่สุดและคุณต้องเลือกเมตริกการประเมินที่คุณต้องการปรับให้เหมาะสม (เช่นความแม่นยำ / การเรียกคืน)

เหตุผลที่ฉันแนะนำ CNN นั้นเป็นเพราะในบางกรณี CNNs สามารถให้ประสิทธิภาพที่คล้ายคลึงกับแบบจำลองที่เกิดซ้ำได้ แต่มีค่าใช้จ่ายเพียงเล็กน้อย น่าเสียดายที่มันยากที่จะบอกข้อมูลเกี่ยวกับคุณเพียงเล็กน้อยหรือไม่มีเลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.