মানব ক্রিয়া পূর্বাভাস
বিবরণ
এই প্রকল্পটি ২০২০ সালের বসন্ত সেমিস্টারে কলোরাডো স্কুল অফ মাইন্স-এ ড. ঝাং-এর Human Centered Robotics (CSCI473) ক্লাসের জন্য প্রকল্প #3 ছিল। এটি সাপোর্ট ভেক্টর মেশিন (SVM)-এর ব্যবহার মাধ্যমে রোবোটিক্সে মেশিন লার্নিং-এর একটি পরিচয় দেওয়ার জন্য ডিজাইন করা হয়েছিল। মূল প্রকল্পের ডেলিভারেবল/বিবরণ এখানে দেখা যেতে পারে।
এই প্রকল্পের জন্য MSR ডেইলি অ্যাক্টিভিটি 3D ডেটাসেট (চিত্র 2), কিছু পরিবর্তনসহ, ব্যবহার করা হয়েছিল। এই ডেটাসেটে Xbox Kinetic সেন্সর থেকে সংগৃহীত এবং কঙ্কাল হিসেবে সংরক্ষিত ১৬টি মানব ক্রিয়া রয়েছে। কঙ্কাল হলো একটি ফ্রেমে রেকর্ড করা একজন মানুষের ২০টি জয়েন্টের বাস্তব জগতের (x, y, z) স্থানাঙ্কের একটি অ্যারে। এখানে একটি চিত্র আছে যা দেখায় একটি কঙ্কাল কী:
মানব ক্রিয়া পূর্বাভাস অর্জন করতে, কাঁচা ডেটাকে এমন একটি আকারে উপস্থাপন করতে হয় যা একটি SVM দ্বারা প্রক্রিয়াজাত করা যায়। এই প্রকল্পের জন্য, নিম্নলিখিত উপস্থাপনাগুলি ব্যবহার করা হয়েছিল:
- আপেক্ষিক কোণ ও দূরত্ব (RAD) উপস্থাপনা
- জয়েন্ট অবস্থান পার্থক্যের হিস্টোগ্রাম (HJPD) উপস্থাপনা
শ্রেণিবিন্যাসের জন্য, উপস্থাপনাটি LIBSVM দ্বারা চালিত একটি SVM-এ পাঠানো হয়, যাতে এমন একটি মডেল তৈরি করা যায় যা মানব ক্রিয়া পূর্বাভাস দিতে পারে। দুটি মডেল তৈরি করা হবে, একটি 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-এ কেবল ৮, ১০, ১২, ১৩, ১৫, ও ১৬ নম্বর ক্রিয়াগুলি রয়েছে। এছাড়াও পরিবর্তিত সংস্করণে কিছু “দূষিত” ডেটা পয়েন্ট আছে, কিন্তু সম্পূর্ণ ডেটাসেটে সেগুলো নেই।
- Space-Time Representation of People Based on 3D Skeletal Data: A Review
- YouTube: How the Kinect Depth Sensor Works in 2 Minutes
- Medium: Understanding Kinect V2 Joints & Coordinate System
- Kinect Wikipedia Page
- Jameco Xbox Kinect
- SVM(গুলি) ও LibSVM সম্পর্কে তথ্য: cjlin libsvm, libsvm pypi page, এবং libsvm github
- SVM ও LIBSVM লজিক ও ডকুমেন্টেশন: cjlin guide paper এবং cjlin libsvmtools datasets
- ব্যবহৃত/পরিবর্তিত ডেটাসেট সম্পর্কে তথ্য