মানব ক্রিয়া পূর্বাভাস
বিস্তারিত
এই প্রকল্পটি Dr. Zhang-এর Human Centered Robotics (CSCI473) শ্রেণীর জন্য স্প্রিং 2020 সেমিস্টারে করা প্রজেক্ট #3 ছিল Colorado School of Mines-এ। এটি রোবটিক্সে মেশিন লার্নিংয়ের একটি ভূমিকা পরিচয় প্রদানের জন্য Support Vector Machines (SVM) ব্যবহার করে ডিজাইন করা হয়েছিল। মূল প্রকল্পের ডেলিভারেবল/বর্ণনা এখানে দেখা যেতে পারে এখানে।
এই প্রকল্পের জন্য MSR Daily Activity 3D Dataset (চিত্র 2), কিছু পরিবর্তনসহ, ব্যবহার করা হয়েছে। এই ডেটাসেটে Xbox Kinetic সেন্সর থেকে সংগ্রহকৃত 16টি মানব ক্রিয়াকলাপ রয়েছে এবং সেগুলি কঙ্কাল (skeleton) হিসেবে সংরক্ষিত। কঙ্কাল হল একটি অ্যারে বাস্তব জগতের (x, y, z) কোঅর্ডিনেটের যা একটি ফ্রেমে রেকর্ড করা মানুষের 20টি জয়েন্টের অবস্থান দেখায়। এখানে একটি চিত্র আছে যা দেখায় কঙ্কাল কী:
มนব ক্রিয়া পূর্বাভাস অর্জন করতে, কাঁচা ডেটাকে এমন একটি রূপে উপস্থাপন করতে হবে যা SVM দ্বারা প্রক্রিয়াজাত করা যায়। এই প্রকল্পের জন্য নিম্নলিখিত প্রতিনিধিত্বগুলি ব্যবহার করা হয়েছে:
- আপেক্ষিক কোণ এবং দূরত্ব (Relative Angles and Distances, RAD) প্রতিনিধিত্ব
- জয়েন্ট পজিশন পার্থক্যের হিস্টোগ্রাম (Histogram of Joint Position Differences, HJPD) প্রতিনিধিত্ব
শ্রেণীবিভাগের জন্য, প্রতিনিধিত্ব(গুলি) একটি SVM-এ প্রেরিত হয়, যা LIBSVM দ্বারা চালিত, একটি মডেল তৈরির জন্য যা মানব ক্রিয়া পূর্বাভাস করতে পারে। দুটি মডেল তৈরি করা হবে, একটি RAD ব্যবহার করে এবং আরেকটি HJPD ব্যবহার করে। লক্ষ্য হল এই মডেলগুলোকে যতটা সম্ভব সঠিক করা এবং দেখা কোন প্রতিনিধিত্বটি সবচেয়ে ভাল পারফর্ম করে।
এটি জেনে, এখানে কোডটি কী করে তার একটি ওভারভিউ:
- পরিবর্তিত ডেটাসেট থেকে কাঁচা ডেটা লোড করা
- লোড করা ডেটাসেট থেকে কোনো আউটলায়ার এবং/অথবা ত্রুটিপূর্ণ ডেটা অপসারণ করা
- চূড়ান্ত কাঁচা ডেটাকে RAD এবং HJPD প্রতিনিধিত্বে রূপান্তর করা
- প্রতিনিধিত্ব(গুলি) টিউন করা SVM(গুলিতে) পাঠানো হয় দুটি মডেল তৈরির জন্য
- উভয় মডেলকে টেস্ট কাঁচা ডেটা খাওয়ানো হয় এবং মডেলের কার্যকারিতা মাপার জন্য একটি কনফিউশন ম্যাট্রিক্স তৈরি করা হয়
ফলাফল
কোড চালানোর এবং মডেলগুলো আমার সামর্থ্যের সেরা রুপে টিউন করার পরে, এখানে RAD এবং HJPD মডেল দুটির চূড়ান্ত কনফিউশন ম্যাট্রিক্স রয়েছে:
Representation: RAD
Accuracy: 62.5%
LIBSVM Classification 8.0 10.0 12.0 13.0 15.0 16.0
Actual Activity Number
8.0 8 0 0 0 0 0
10.0 1 5 0 0 1 1
12.0 0 1 1 0 3 3
13.0 0 0 0 6 1 1
15.0 0 0 0 1 5 2
16.0 0 0 0 0 3 5
Representation: HJPD
Accuracy: 70.83%
LIBSVM Classification 8.0 10.0 12.0 13.0 15.0 16.0
Actual Activity Number
8.0 7 1 0 0 0 0
10.0 1 5 0 0 0 2
12.0 0 0 7 0 1 0
13.0 2 0 1 5 0 0
15.0 0 0 0 0 7 1
16.0 0 2 0 0 3 3
উপসংহার
যেহেতু উভয় নির্ভুলতাই ৫০% এর ওপরে, এই প্রকল্পটি সফল হিসেবে ধরা হলো। এছাড়া, HJPD প্রতিনিধিত্বটি এই শ্রেণীবিভাগের জন্য অপেক্ষাকৃত বেশি সঠিক প্রতিনিধিত্ব বলে মনে হচ্ছে। এর ফলে, কঙ্কাল ডেটা ব্যবহার করে মানব ক্রিয়া পূর্বাভাস করতে সক্ষম একটি/কয়েকটি মডেল তৈরি হয়েছে। এখানে থাকা মডেল(গুলি) সম্পূর্ণ নিখুঁত নয় কিন্তু র্যান্ডমের চেয়ে ভালো। এই প্রকল্পটি পরে Moving Pose প্রকল্পের জন্ম দিয়েছিল।
অতিরিক্ত নোট:
- এই প্রকল্পটি Python সংস্করণ 3.8.13-এ পরীক্ষা করা হয়েছে
- এই প্রকল্পের জন্য, সম্পূর্ণ MDA3 ডেটাসেট এবং একটি পরিবর্তিত MDA3 ডেটাসেট ব্যবহার করা হয়েছে। পরিবর্তিত MDA3-এ শুধুমাত্র ক্রিয়াগুলি 8, 10, 12, 13, 15, & 16 রয়েছে। এছাড়া পরিবর্তিত ভার্সনে কিছু “ক্রিপ্টেড” ডেটা পয়েন্ট রয়েছে যেখানে সম্পূর্ণ ডেটাসেটে সেগুলি নেই।
- 3D কঙ্কাল ডেটার উপর ভিত্তি করে মানুষদের স্থান-সময় প্রতিনিধিত্ব: একটি পর্যালোচনা
- YouTube: কিভাবে Kinect ডেপথ সেন্সর 2 মিনিটে কাজ করে
- Medium: Kinect V2 জয়েন্ট ও কোঅর্ডিনেট সিস্টেম বোঝা
- Kinect উইকিপিডিয়া পেজ
- Jameco Xbox Kinect
- SVM(গুল) ও LibSVM সম্পর্কে তথ্য: cjlin libsvm, libsvm pypi পেজ, & libsvm github
- SVM ও LIBSVM লজিক ও ডকুমেন্টেশন: cjlin গাইড পেপার & cjlin libsvmtools ডেটাসেটসমূহ
- ব্যবহৃত/পরিবর্তিত ডেটাসেট সম্পর্কে তথ্য