সেজমেকার গ্রাউন্ড ট্রুথ ব্যবহার করে ঘন বিন্দু ক্লাউড ডেটা টীকা করুন

উত্স নোড: 834877

স্বায়ত্তশাসিত যানবাহন সংস্থাগুলি সাধারণত ব্যবহার করে LiDAR সেন্সরগুলি তাদের যানবাহনের চারপাশের পরিবেশ সম্পর্কে একটি 3D বোঝাপড়া তৈরি করতে। উদাহরণস্বরূপ, তারা পার্শ্ববর্তী 3D পরিবেশের পয়েন্ট-ইন-টাইম স্ন্যাপশট ক্রমাগত ক্যাপচার করতে তাদের যানবাহনে একটি LiDAR সেন্সর মাউন্ট করে। LiDAR সেন্সর আউটপুট হল 3D পয়েন্ট ক্লাউড ফ্রেমের একটি ক্রম (সাধারণ ক্যাপচার রেট প্রতি সেকেন্ডে 10 ফ্রেম)। আমাজন সেজমেকার গ্রাউন্ড ট্রুথ মেশিন লার্নিং (ML) প্রশিক্ষণ ডেটাসেট তৈরির জন্য একটি একক 3D ফ্রেমে বা 3D পয়েন্ট ক্লাউড ফ্রেমের একটি ক্রম জুড়ে বস্তুর লেবেল করা সহজ করে তোলে। গ্রাউন্ড ট্রুথ আটটি ভিডিও ক্যামেরা ইনপুট সহ ক্যামেরা এবং LiDAR ডেটার সেন্সর ফিউশনকেও সমর্থন করে।

যেহেতু LiDAR সেন্সরগুলি আরও অ্যাক্সেসযোগ্য এবং সাশ্রয়ী হয়ে উঠেছে, গ্রাহকরা রোবোটিক্স, সিগন্যাল ম্যাপিং এবং অগমেন্টেড রিয়েলিটির মতো নতুন স্থানগুলিতে পয়েন্ট ক্লাউড ডেটা ব্যবহার করছেন৷ কিছু নতুন মোবাইল ডিভাইস এমনকি LiDAR সেন্সর অন্তর্ভুক্ত করে, যার মধ্যে একটি এই পোস্টের জন্য ডেটা সরবরাহ করেছে! LiDAR সেন্সরগুলির ক্রমবর্ধমান প্রাপ্যতা ML কার্যগুলির জন্য পয়েন্ট ক্লাউড ডেটার প্রতি আগ্রহ বাড়িয়েছে, যেমন 3D অবজেক্ট সনাক্তকরণ এবং ট্র্যাকিং, 3D সেগমেন্টেশন, 3D অবজেক্ট সংশ্লেষণ এবং পুনর্গঠন, এবং এমনকি 3D গভীরতা অনুমান যাচাই করার জন্য 2D ডেটা ব্যবহার করা।

যদিও ঘন বিন্দু ক্লাউড ডেটা তথ্য সমৃদ্ধ (1 মিলিয়ন পয়েন্ট ক্লাউডের বেশি), এটি লেবেল করা চ্যালেঞ্জিং কারণ লেবেলিং ওয়ার্কস্টেশনগুলিতে প্রায়ই সীমিত মেমরি থাকে এবং গ্রাফিক্স ক্ষমতা এবং টীকাগুলি ভৌগলিকভাবে বিতরণ করা হয়, যা লেটেন্সি বাড়াতে পারে। যদিও একটি লেবেলারের ওয়ার্কস্টেশনে প্রচুর সংখ্যক পয়েন্ট রেন্ডারযোগ্য হতে পারে, বহু-মিলিয়ন আকারের পয়েন্ট ক্লাউডের সাথে কাজ করার সময় রেন্ডারিং সময়, লেবেলিংয়ের খরচ ব্যাপকভাবে বৃদ্ধি করে এবং দক্ষতা হ্রাস করার কারণে লেবেলার থ্রুপুট হ্রাস করা যেতে পারে।

এই খরচ এবং সময় কমানোর একটি উপায় হল পয়েন্ট ক্লাউড লেবেলিং কাজগুলিকে ছোট, আরও সহজে রেন্ডার করা কাজগুলিতে রূপান্তর করা যা টীকাটির জন্য পয়েন্ট ক্লাউডের বেশিরভাগ মূল তথ্য সংরক্ষণ করে। আমরা এই পদ্ধতিগুলিকে বিস্তৃতভাবে উল্লেখ করি ডাউনস্যাম্পলিং, অনুরূপ, একই, সমতুল্য ডাউনস্যাম্পলিং সিগন্যাল প্রসেসিং ডোমেনে। সিগন্যাল প্রসেসিং ডোমেনের মতো, পয়েন্ট ক্লাউড ডাউনস্যাম্পলিং পদ্ধতিগুলি মূল পয়েন্ট ক্লাউডের বিশ্বস্ততা রক্ষা করার সময় পয়েন্টগুলি সরানোর চেষ্টা করে। ডাউনস্যাম্পল পয়েন্ট ক্লাউড টীকা করার সময়, আপনি আউটপুট 3D ব্যবহার করতে পারেন কিউবয়েড উন্নত অবজেক্ট ট্র্যাকিং এবং অবজেক্ট সনাক্তকরণ পূর্ণ আকারের পয়েন্ট ক্লাউডে সরাসরি প্রশিক্ষণ বা বৈধতার জন্য কাজগুলি লেবেলিংয়ের সময় বাঁচানোর সময় মডেলের কার্যকারিতার উপর সামান্য থেকে কোন প্রভাব ফেলে না। অন্যান্য পদ্ধতির জন্য, যেমন শব্দার্থিক বিভাজন, যেখানে প্রতিটি পয়েন্টের নিজস্ব লেবেল রয়েছে, আপনি মূল পয়েন্ট ক্লাউডের প্রতিটি পয়েন্টের লেবেলগুলির পূর্বাভাস দিতে আপনার ডাউনস্যাম্পল লেবেলগুলি ব্যবহার করতে পারেন, যা আপনাকে লেবেলার খরচ (এবং লেবেলযুক্ত ডেটার পরিমাণ) এবং অল্প পরিমাণের মধ্যে ট্রেডঅফ করতে দেয় পূর্ণ-আকারের পয়েন্ট ক্লাউডে পয়েন্টের ভুল শ্রেণীবিভাগ।

এই পোস্টে, আমরা লেবেলিংয়ের জন্য আপনার পয়েন্ট ক্লাউড ডেটা প্রস্তুত করতে ডাউনস্যাম্পলিং কৌশলগুলি কীভাবে সঞ্চালন করব তার মধ্য দিয়ে হেঁটেছি, তারপর একটি সাধারণ ML মডেলের সাথে কিছু ইন-স্যাম্পল ইনফারেন্স ব্যবহার করে আপনার আসল পূর্ণ-আকার ডেটাসেটে প্রয়োগ করার জন্য কীভাবে আপনার আউটপুট লেবেলগুলিকে আপস্যাম্পল করতে হয় তা প্রদর্শন করি। এটি সম্পন্ন করার জন্য, আমরা গ্রাউন্ড ট্রুথ এবং ব্যবহার করি অ্যামাজন সেজমেকার নোটবুকের উদাহরণ লেবেলিং এবং সমস্ত প্রিপ্রসেসিং এবং পোস্টপ্রসেসিং পদক্ষেপগুলি সম্পাদন করতে।

তথ্যটি

এই পোস্টে আমরা যে ডেটা ব্যবহার করি তা হল একটি অ্যাপার্টমেন্ট বিল্ডিংয়ের ছাদের একটি স্ক্যান যা iPhone3 প্রোতে 12D স্ক্যানার অ্যাপ ব্যবহার করে তৈরি করা হয়েছে। অ্যাপটি আপনাকে একটি নির্দিষ্ট এলাকা স্ক্যান করতে এবং একটি পয়েন্ট ক্লাউড ফাইল রপ্তানি করতে মোবাইল ডিভাইসে অন্তর্নির্মিত LiDAR স্ক্যানার ব্যবহার করতে দেয়। এই ক্ষেত্রে, পয়েন্ট ক্লাউড ডেটা xyzrgb ফরম্যাটে, একটি গ্রাউন্ড ট্রুথ পয়েন্ট ক্লাউডের জন্য একটি স্বীকৃত বিন্যাস। গ্রাউন্ড ট্রুথ পয়েন্ট ক্লাউডে অনুমোদিত ডেটা প্রকার সম্পর্কে আরও তথ্যের জন্য, দেখুন কাঁচা 3D ডেটা ফর্ম্যাট স্বীকৃত.

নিচের ছবিটি আমাদের 3D স্ক্যান দেখায়।

পদ্ধতি

লেবেলিং পয়েন্ট ক্লাউডের জন্য ডেটাসেটের আকার কমাতে আমরা প্রথমে কয়েকটি পদ্ধতির মধ্য দিয়ে হেঁটে যাই: টাইলিং, নির্দিষ্ট ধাপের নমুনা এবং ভক্সেল গড়। আমরা প্রদর্শন করি কেন ডাউনস্যাম্পলিং কৌশলগুলি টীকা গুণমানকে উল্লেখযোগ্যভাবে ত্যাগ না করে আপনার লেবেলিং থ্রুপুট বাড়াতে পারে এবং তারপরে আমরা প্রদর্শন করি কিভাবে ডাউনস্যাম্পল পয়েন্ট ক্লাউডে তৈরি লেবেলগুলি ব্যবহার করতে হয় এবং একটি আপস্যাম্পলিং পদ্ধতির সাথে আপনার আসল পয়েন্ট ক্লাউডে প্রয়োগ করতে হয়।

ডাউনস্যাম্পলিং পন্থা

ডাউনস্যাম্পলিং হল আপনার পূর্ণ-আকারের ডেটাসেট নেওয়া এবং হয় লেবেল করার জন্য এটি থেকে পয়েন্টগুলির একটি উপসেট বেছে নেওয়া, বা নতুন পয়েন্টগুলির একটি প্রতিনিধি সেট তৈরি করা যা অগত্যা আসল ডেটাসেটে নেই, কিন্তু লেবেলিংয়ের অনুমতি দেওয়ার জন্য যথেষ্ট কাছাকাছি।

টালি দ্বারা আচ্ছাদন

একটি নিষ্পাপ পদ্ধতি হল আপনার পয়েন্ট ক্লাউড স্পেসকে 3D কিউবগুলিতে ভাঙ্গা, অন্যথায় হিসাবে পরিচিত ভক্সেল, (উদাহরণস্বরূপ) 500,000 পয়েন্ট প্রতিটি যা স্বাধীনভাবে সমান্তরালে লেবেল করা হয়েছে। এই পদ্ধতি, বলা হয় টালি দ্বারা আচ্ছাদন, কার্যকরভাবে লেবেলিংয়ের জন্য দৃশ্যের আকার হ্রাস করে।

যাইহোক, এটি লেবেল করার সময় এবং খরচকে ব্যাপকভাবে বৃদ্ধি করতে পারে, কারণ একটি সাধারণ 8-মিলিয়ন-পয়েন্ট দৃশ্যকে 16টিরও বেশি উপ-দৃশ্যে বিভক্ত করার প্রয়োজন হতে পারে। এই পদ্ধতির ফলে যে বিপুল সংখ্যক স্বাধীন কাজ হয় তার অর্থ হল কাজের মধ্যে প্রসঙ্গ পরিবর্তনের জন্য আরও বেশি টীকাকার সময় ব্যয় করা হয়, এবং দৃশ্যটি খুব ছোট হলে কর্মীরা প্রসঙ্গ হারাতে পারে, ফলে ডেটা ভুল লেবেল করা হয়।

স্থির পদক্ষেপের নমুনা

একটি বিকল্প পদ্ধতি হল একটি রৈখিক উপ-নমুনা দ্বারা বিন্দুগুলির একটি হ্রাস করা সংখ্যা নির্বাচন করা বা তৈরি করা, যাকে বলা হয় a স্থির পদক্ষেপের নমুনা. ধরা যাক আপনি 500,000 পয়েন্টের লক্ষ্যে আঘাত করতে চান (আমরা লক্ষ্য করেছি যে এটি সাধারণত একটি ভোক্তা ল্যাপটপে রেন্ডারযোগ্য - দেখুন গৃহীত কাঁচা 3D ডেটা বিন্যাস), কিন্তু আপনার কাছে 10 মিলিয়ন পয়েন্ট সহ একটি পয়েন্ট ক্লাউড আছে। আপনি আপনার ধাপ আকার হিসাবে গণনা করতে পারেন step = 10,000,000 / 500,000 = 20. আপনার একটি ধাপের আকারের পরে, আপনি একটি নতুন পয়েন্ট ক্লাউড তৈরি করে আপনার ডেটাসেটের প্রতি 20 তম পয়েন্ট নির্বাচন করতে পারেন। যদি আপনার পয়েন্ট ক্লাউড ডেটা যথেষ্ট উচ্চ ঘনত্বের হয়, তবে লেবেলারদের এখনও লেবেলিংয়ের জন্য কোনও প্রাসঙ্গিক বৈশিষ্ট্য তৈরি করতে সক্ষম হওয়া উচিত যদিও আপনার মূল দৃশ্যে প্রতি 1টির জন্য শুধুমাত্র 20 পয়েন্ট থাকতে পারে।

এই পদ্ধতির নেতিবাচক দিক হল যে সমস্ত পয়েন্ট চূড়ান্ত ডাউনস্যাম্পল ফলাফলে অবদান রাখে না, যার অর্থ হল যদি একটি বিন্দু কয়েকটি গুরুত্বপূর্ণগুলির মধ্যে একটি হয়, কিন্তু নমুনার অংশ না হয়, তাহলে আপনার টীকাকারীরা বৈশিষ্ট্যটি সম্পূর্ণভাবে মিস করতে পারে।

ভক্সেল মানে

ডাউনস্যাম্পলিং এর একটি বিকল্প ফর্ম যা একটি ডাউনস্যাম্পল পয়েন্ট ক্লাউড তৈরি করতে সমস্ত পয়েন্ট ব্যবহার করে গ্রিড ফিল্টারিং. গ্রিড ফিল্টারিং মানে আপনি পয়েন্ট ক্লাউড জুড়ে নিয়মিত 3D বাক্সে (বা ভক্সেল) ইনপুট স্পেস ভেঙ্গে ফেলুন এবং একটি ভক্সেলের মধ্যে সমস্ত পয়েন্টকে একটি একক প্রতিনিধি বিন্দু দিয়ে প্রতিস্থাপন করুন (উদাহরণস্বরূপ, গড় পয়েন্ট)। নিম্নলিখিত চিত্রটি একটি উদাহরণ ভক্সেল লাল বাক্স দেখায়।

যদি একটি প্রদত্ত ভক্সেলের মধ্যে ইনপুট ডেটাসেট থেকে কোনো বিন্দু বিদ্যমান না থাকে, তাহলে সেই ভক্সেলের জন্য ডাউনস্যাম্পল পয়েন্ট ক্লাউডে কোনো বিন্দু যোগ করা হয় না। গ্রিড ফিল্টারিং একটি নির্দিষ্ট ধাপের নমুনা থেকে আলাদা কারণ আপনি এটিকে গোলমাল কমাতে ব্যবহার করতে পারেন এবং কার্নেলের আকার এবং গড় ফাংশন সামঞ্জস্য করে কিছুটা ভিন্ন চূড়ান্ত পয়েন্ট ক্লাউড তৈরি করে এটিকে আরও টিউন করতে পারেন। নিম্নোক্ত বিন্দু ক্লাউডগুলি সাধারণ (নির্দিষ্ট ধাপের নমুনা) এবং উন্নত (ভক্সেল গড়) ডাউনস্যাম্পলিংয়ের ফলাফল দেখায়। উন্নত পদ্ধতি ব্যবহার করে বিন্দু ক্লাউড ডাউনস্যাম্পল মসৃণ, উভয় দৃশ্যের পিছনে লাল ইটের প্রাচীরের তুলনা করার সময় এটি বিশেষভাবে লক্ষণীয়।

আপস্যাম্পলিং পদ্ধতি

আপনার ডেটা ডাউনস্যাম্পলিং এবং লেবেল করার পরে, আপনি ছোট, ডাউনস্যাম্পল পয়েন্ট ক্লাউডে উত্পাদিত লেবেলগুলিকে পূর্ণ-আকারের পয়েন্ট ক্লাউডে প্রজেক্ট করা দেখতে চাইতে পারেন, যাকে আমরা বলি আপস্যাম্পলিং. অবজেক্ট সনাক্তকরণ বা ট্র্যাকিং কাজের জন্য এটি করার জন্য পোস্ট-প্রসেসিংয়ের প্রয়োজন হয় না। ডাউনস্যাম্পল পয়েন্ট ক্লাউডের লেবেলগুলি (কিউবয়েডের মতো) বৃহত্তর পয়েন্ট ক্লাউডের জন্য সরাসরি প্রযোজ্য কারণ সেগুলি পূর্ণ-আকারের পয়েন্ট ক্লাউড (x, y, z, উচ্চতা, প্রস্থ, দৈর্ঘ্য) দ্বারা ভাগ করা একটি বিশ্ব স্থানাঙ্কের জায়গায় সংজ্ঞায়িত করা হয়েছে। এই লেবেলগুলি বস্তুর সীমানা বরাবর খুব ছোট ত্রুটির জন্য ন্যূনতম সংবেদনশীল হয় যখন একটি সীমানা বিন্দু ডাউনস্যাম্পল ডেটাসেটে ছিল না, তবে এই ধরনের মাঝে মাঝে এবং ছোটখাটো ত্রুটিগুলি ঘনক্ষেত্রের মধ্যে অতিরিক্ত, সঠিকভাবে লেবেলযুক্ত পয়েন্টের সংখ্যার চেয়ে বেশি হয় যা হতে পারে প্রশিক্ষিত

3D পয়েন্ট ক্লাউড সেম্যান্টিক সেগমেন্টেশন কাজের জন্য, তবে, লেবেলগুলি সম্পূর্ণ আকারের ডেটাসেটে সরাসরি প্রযোজ্য নয়। আমাদের শুধুমাত্র লেবেলগুলির একটি উপসেট আছে, কিন্তু আমরা এই উপসেটের উপর ভিত্তি করে বাকি সম্পূর্ণ ডেটাসেট লেবেলগুলির পূর্বাভাস দিতে চাই৷ এটি করার জন্য, আমরা একটি সহজ ব্যবহার করতে পারেন K- নিকটতম প্রতিবেশী (K-NN) শ্রেণিবদ্ধকারী প্রশিক্ষণ সেট হিসাবে পরিবেশন করা ইতিমধ্যে লেবেল পয়েন্ট সঙ্গে. K-NN হল একটি সাধারণ তত্ত্বাবধানে থাকা ML অ্যালগরিদম যা "K" সবচেয়ে কাছের লেবেলযুক্ত পয়েন্ট এবং একটি ওজনযুক্ত ভোট ব্যবহার করে একটি বিন্দুর লেবেলের পূর্বাভাস দেয়। K-NN-এর সাহায্যে, আমরা তিনটি নিকটতম (ইউক্লিডীয় দূরত্ব অনুসারে) বিন্দুর সংখ্যাগরিষ্ঠ শ্রেণীর উপর ভিত্তি করে পূর্ণ-আকারের ডেটাসেটে লেবেলবিহীন বাকি বিন্দুগুলির বিন্দু শ্রেণী ভবিষ্যদ্বাণী করতে পারি। K-NN ক্লাসিফায়ারের হাইপারপ্যারামিটারের পরিবর্তনের মাধ্যমে আমরা এই পদ্ধতিটিকে আরও পরিমার্জিত করতে পারি, যেমন বিবেচনা করার জন্য নিকটতম পয়েন্টের সংখ্যা এবং সেই সাথে পয়েন্টের দূরত্ব মেট্রিক এবং ওজন নির্ধারণের স্কিম।

আপনি সম্পূর্ণ ডেটাসেটে নমুনা লেবেলগুলি ম্যাপ করার পরে, আপস্যাম্পলিং কৌশলটি কতটা ভাল কাজ করেছে তা দেখতে আপনি পূর্ণ-আকারের ডেটাসেটের মধ্যে টাইলগুলি কল্পনা করতে পারেন৷

এখন যেহেতু আমরা এই পোস্টে ব্যবহৃত পদ্ধতিগুলি পর্যালোচনা করেছি, আমরা এই কৌশলগুলিকে সেজমেকার নোটবুকে একটি উদাহরণে শব্দার্থিক বিভাজন পয়েন্ট ক্লাউড দৃশ্যে প্রদর্শন করি।

পূর্বশর্ত

এই সমাধানের মাধ্যমে হাঁটতে আপনার নিম্নলিখিতগুলি প্রয়োজন:

নোটবুক সেটআপ

আমরা নোটবুকটি ব্যবহার করি ground_truth_annotation_dense_point_cloud_tutorial.ipynb মধ্যে সেজমেকার উদাহরণ এই ডাউনস্যাম্পলিং এবং আপস্যাম্পলিং পদ্ধতিগুলি প্রদর্শন করার জন্য একটি নোটবুকের উদাহরণের বিভাগ। এই নোটবুকে প্রিপ্রসেসিং, লেবেলিং এবং পোস্টপ্রসেসিং করার জন্য প্রয়োজনীয় সমস্ত কোড রয়েছে।

নোটবুক অ্যাক্সেস করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. একটি নোটবুক উদাহরণ তৈরি করুন. নোটবুক ইনস্ট্যান্স চালু করতে আপনি ইনস্ট্যান্স টাইপ, ml.t2.xlarge ব্যবহার করতে পারেন। অনুগ্রহ করে কমপক্ষে 16 GB RAM সহ একটি উদাহরণ চয়ন করুন৷
    1. আপনি প্রথম দিকে তৈরি করা নোটবুক IAM ভূমিকা ব্যবহার করতে হবে। এই ভূমিকাটি আপনার নোটবুককে আপনার ডেটাসেট Amazon S3-এ আপলোড করতে এবং সমাধান API-কে কল করার অনুমতি দেয়।
  2. Jupyter Lab বা Jupyter এ খুলুন আপনার নোটবুক উদাহরণ অ্যাক্সেস করুন.
  3. জুপিটারে, বেছে নিন সেজমেকার উদাহরণ জুপিটার ল্যাবে, সেজমেকার আইকনটি চয়ন করুন।
  4. বেছে নিন গ্রাউন্ড ট্রুথ লেবেলিং জবস এবং তারপর নির্বাচন করুন আইপিনব নোটবই.
  5. আপনি যদি জপিটার ব্যবহার করছেন তবে চয়ন করুন ব্যবহার নোটবুকটি আপনার দৃষ্টান্তে অনুলিপি করুন এবং এটি চালান। আপনি যদি জপিটার ল্যাবে থাকেন তবে চয়ন করুন একটি অনুলিপি তৈরি করুন.

নোটবুক ইনপুট প্রদান

প্রথমত, আমরা আমাদের ব্যক্তিগত কাজের দল ARN এবং আমাদের ডেটাসেট এবং সেইসাথে আমাদের লেবেলগুলি সংরক্ষণ করার জন্য যে বালতি অবস্থান ব্যবহার করি তা যোগ করতে আমরা নোটবুকটি পরিবর্তন করি।

বিভাগ 1: ডেটাসেট পুনরুদ্ধার করুন এবং পয়েন্ট ক্লাউডটি কল্পনা করুন

আমরা আমাদের নোটবুকের বিভাগ 1 চালিয়ে আমাদের ডেটা ডাউনলোড করি, যা Amazon S3 থেকে আমাদের ডেটাসেট ডাউনলোড করে এবং আমাদের নোটবুকের উদাহরণে পয়েন্ট ক্লাউড লোড করে। আমরা একটি AWS মালিকানাধীন বালতি থেকে কাস্টম প্রস্তুত ডেটা ডাউনলোড করি। একটি বস্তু বলা হয় rooftop_12_49_41.xyz S3 বালতির মূলে থাকা উচিত। এই ডেটা একটি অ্যাপার্টমেন্ট বিল্ডিং ছাদ কাস্টম একটি মোবাইল ডিভাইসে তৈরি একটি স্ক্যান. এই ক্ষেত্রে, পয়েন্ট ক্লাউড ডেটা xyzrgb ফর্ম্যাটে রয়েছে।

আমরা Matplotlib ব্যবহার করে আমাদের পয়েন্ট ক্লাউড কল্পনা করতে পারি scatter3d ফাংশন পয়েন্ট ক্লাউড ফাইলে সমস্ত সঠিক পয়েন্ট রয়েছে কিন্তু সঠিকভাবে ঘোরানো হয় না। আমরা একটি ঘূর্ণন ম্যাট্রিক্স দ্বারা বিন্দু মেঘকে গুণ করে বস্তুটিকে তার অক্ষের চারপাশে ঘোরাতে পারি। আমরা ব্যবহার করে একটি ঘূর্ণন ম্যাট্রিক্স পেতে পারি ঘৃণ্য এবং ব্যবহার করে প্রতিটি অক্ষে আমরা যে ডিগ্রি পরিবর্তন করতে চাই তা নির্দিষ্ট করুন from_euler পদ্ধতি:

!aws s3 cp s3://smgt-downsampling-us-east-1-322552456788/rooftop_12_49_41.xyz pointcloud.xyz # Let's read our dataset into a numpy file pc = np.loadtxt("pointcloud.xyz", delimiter=",") print(f"Loaded points of shape {pc.shape}") # playing with view of 3D scene from scipy.spatial.transform import Rotation def plot_pointcloud(pc, rot = [[30,90,60]], color=True, title="Simple Downsampling 1", figsize=(50,25), verbose=False): if rot: rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) R1 = rot1.as_matrix() if verbose: print('Rotation matrix:','n',R1) # matrix multiplication between our rotation matrix and pointcloud pc_show = np.matmul(R1, pc.copy()[:,:3].transpose() ).transpose() if color: try: rot_color1 = np.matmul(R1, pc.copy()[:,3:].transpose() ).transpose().squeeze() except: rot_color1 = np.matmul(R1, np.tile(pc.copy()[:,3],(3,1))).transpose().squeeze() else: pc_show = pc fig = plt.figure( figsize=figsize) ax = fig.add_subplot(111, projection="3d") ax.set_title(title, fontdict={'fontsize':20}) if color: ax.scatter(pc_show[:,0], pc_show[:,1], pc_show[:,2], c=rot_color1[:,0], s=0.05) else: ax.scatter(pc_show[:,0], pc_show[:,1], pc_show[:,2], c='blue', s=0.05) # rotate in z direction 30 degrees, y direction 90 degrees, and x direction 60 degrees rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) print('Rotation matrix:','n', rot1.as_matrix()) plot_pointcloud(pc, rot = [[30,90,60]], color=True, title="Full pointcloud", figsize=(50,30)) 

বিভাগ 2: ডেটাসেটের নমুনা নিন

এরপরে, আমরা ডেটাসেটটিকে 500,000 পয়েন্টের কম করে দেই, যা ভিজ্যুয়ালাইজ এবং লেবেল করার জন্য পয়েন্টের একটি আদর্শ সংখ্যা। আরো তথ্যের জন্য, দেখুন পয়েন্ট ক্লাউড রেজোলিউশন সীমা in কাঁচা 3D ডেটা ফর্ম্যাট স্বীকৃত. তারপরে আমরা বিভাগ 2 চালিয়ে আমাদের ডাউনস্যাম্পিংয়ের ফলাফলগুলি প্লট করি।

যেমনটি আমরা আগে আলোচনা করেছি, ডাউনস্যাম্পলিং-এর সহজতম রূপ হল আমরা আমাদের ফলাফল বিন্দু ক্লাউড কত বড় হতে চাই তার উপর ভিত্তি করে একটি নির্দিষ্ট ধাপের আকার ব্যবহার করে মান নির্বাচন করা।

একটি আরও উন্নত পদ্ধতি হল ইনপুট স্পেসকে কিউবগুলিতে ভাঙা, অন্যথায় ভক্সেল হিসাবে পরিচিত, এবং একটি গড় ফাংশন ব্যবহার করে প্রতি বাক্সে একটি একক পয়েন্ট বেছে নেওয়া। এটির একটি সহজ বাস্তবায়ন নিম্নলিখিত কোডে দেখানো হয়েছে।

আরও আক্রমণাত্মক ডাউনস্যাম্পলিং সঞ্চালিত হওয়ার কারণে আপনি পয়েন্ট ক্লাউড স্পষ্টতা হ্রাস দেখতে ব্যবহৃত পয়েন্টের লক্ষ্য সংখ্যা এবং বাক্সের আকার টিউন করতে পারেন।

#Basic Approach target_num_pts = 500_000 subsample = int(np.ceil(len(pc) / target_num_pts)) pc_downsample_simple = pc[::subsample] print(f"We've subsampled to {len(pc_downsample_simple)} points") #Advanced Approach boxsize = 0.013 # 1.3 cm box size. mins = pc[:,:3].min(axis=0) maxes = pc[:,:3].max(axis=0) volume = maxes - mins num_boxes_per_axis = np.ceil(volume / boxsize).astype('int32').tolist() num_boxes_per_axis.extend([1]) print(num_boxes_per_axis) # For each voxel or "box", use the mean of the box to chose which points are in the box. means, _, _ = scipy.stats.binned_statistic_dd( pc[:,:4], [pc[:,0], pc[:,1], pc[:,2], pc[:,3]], statistic="mean", bins=num_boxes_per_axis, ) x_means = means[0,~np.isnan(means[0])].flatten() y_means = means[1,~np.isnan(means[1])].flatten() z_means = means[2,~np.isnan(means[2])].flatten() c_means = means[3,~np.isnan(means[3])].flatten() pc_downsample_adv = np.column_stack([x_means, y_means, z_means, c_means]) print(pc_downsample_adv.shape) 

বিভাগ 3: 3D রেন্ডারিং কল্পনা করুন

আমরা পয়েন্টের একটি 3D স্ক্যাটার প্লট ব্যবহার করে পয়েন্ট ক্লাউডগুলি কল্পনা করতে পারি। যদিও আমাদের বিন্দু মেঘের রঙ আছে, আমাদের রূপান্তরগুলির রঙের উপর বিভিন্ন প্রভাব রয়েছে, তাই তাদের একটি একক রঙে তুলনা করা আরও ভাল তুলনা প্রদান করে। আমরা দেখতে পাচ্ছি যে উন্নত ভক্সেল গড় পদ্ধতি একটি মসৃণ পয়েন্ট ক্লাউড তৈরি করে কারণ গড় একটি শব্দ কমানোর প্রভাব রয়েছে। নিম্নলিখিত কোডে, আমরা আমাদের বিন্দু মেঘগুলিকে বিভিন্ন ঘূর্ণন ম্যাট্রিক্স দ্বারা গুণ করে দুটি পৃথক দৃষ্টিকোণ থেকে দেখতে পারি।

আপনি যখন নোটবুকে সেকশন 3 চালান, তখন আপনি একটি লিনিয়ার স্টেপ অ্যাপ্রোচ বনাম বক্স গ্রিড অ্যাপ্রোচের তুলনাও দেখতে পাবেন, বিশেষ করে কীভাবে বক্স গ্রিড ফিল্টার সামগ্রিক পয়েন্ট ক্লাউডে সামান্য মসৃণ প্রভাব ফেলে। আপনার ডেটাসেটের শব্দের স্তরের উপর নির্ভর করে এই স্মুথিং গুরুত্বপূর্ণ হতে পারে। গ্রিড ফিল্টারিং ফাংশনকে গড় থেকে মধ্যম বা অন্য কিছু গড় ফাংশন পরিবর্তন করাও চূড়ান্ত বিন্দু ক্লাউড স্পষ্টতা উন্নত করতে পারে। সরল (নির্দিষ্ট ধাপের আকার) এবং উন্নত (ভক্সেল গড়) ডাউন নমুনা উদাহরণগুলির পিছনের দেয়ালের দিকে মনোযোগ সহকারে দেখুন, নির্দিষ্ট ধাপের আকার পদ্ধতির তুলনায় ভক্সেল গড় পদ্ধতির মসৃণ প্রভাব লক্ষ্য করুন।

rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) R1 = rot1.as_matrix() simple_rot1 = pc_downsample_simple.copy() simple_rot1 = np.matmul(R1, simple_rot1[:,:3].transpose() ).transpose() advanced_rot1 = pc_downsample_adv.copy() advanced_rot1 = np.matmul(R1, advanced_rot1[:,:3].transpose() ).transpose() fig = plt.figure( figsize=(50, 30)) ax = fig.add_subplot(121, projection="3d") ax.set_title("Simple Downsampling 1", fontdict={'fontsize':20}) ax.scatter(simple_rot1[:,0], simple_rot1[:,1], simple_rot1[:,2], c='blue', s=0.05) ax = fig.add_subplot(122, projection="3d") ax.set_title("Voxel Mean Downsampling 1", fontdict={'fontsize':20}) ax.scatter(advanced_rot1[:,0], advanced_rot1[:,1], advanced_rot1[:,2], c='blue', s=0.05) # to look at any of the individual pointclouds or rotate the pointcloud, use the following function plot_pointcloud(pc_downsample_adv, rot = [[30,90,60]], color=True, title="Advanced Downsampling", figsize=(50,30)) 

বিভাগ 4: একটি শব্দার্থিক সেগমেন্টেশন কাজ চালু করুন

এই পয়েন্ট ক্লাউডটি নিতে নোটবুকে বিভাগ 4 চালান এবং এটি ব্যবহার করে একটি গ্রাউন্ড ট্রুথ পয়েন্ট ক্লাউড সিমেন্টিক সেগমেন্টেশন লেবেলিং কাজ চালু করুন। এই কোষগুলি প্রয়োজনীয় ইনপুট ম্যানিফেস্ট ফাইল তৈরি করে এবং গ্রাউন্ড ট্রুথ সামঞ্জস্যপূর্ণ উপস্থাপনায় পয়েন্ট ক্লাউড ফর্ম্যাট করে।

গ্রাউন্ড ট্রুথের ইনপুট ফর্ম্যাট সম্পর্কে আরও জানতে কারণ এটি পয়েন্ট ক্লাউড ডেটার সাথে সম্পর্কিত, দেখুন তথ্য অন্তর্ভুক্তী এবং কাঁচা 3D ডেটা ফর্ম্যাট স্বীকৃত.

এই বিভাগে, আমরা কর্মী পোর্টালে লেবেলিংও সম্পাদন করি। আমরা পয়েন্ট ক্লাউডের একটি উপসেট লেবেল করি যাতে কিছু টীকা থাকে যার সাথে আপস্যাম্পলিং করা যায়। কাজটি সম্পূর্ণ হলে, আমরা আমাদের পোস্টপ্রসেসিংয়ের জন্য Amazon S3 থেকে একটি NumPy অ্যারেতে টীকা লোড করি। নীচে গ্রাউন্ড ট্রুথ পয়েন্ট ক্লাউড শব্দার্থিক সেগমেন্টেশন টুল থেকে একটি স্ক্রিনশট।

বিভাগ 5: লেবেল আপস্যাম্পলিং সম্পাদন করুন

এখন যেহেতু আমাদের ডাউনস্যাম্পড লেবেল রয়েছে, আমরা SKLearn থেকে একটি K-NN ক্লাসিফায়ারকে প্রশিক্ষণ দিই আমাদের টীকাকৃত পয়েন্টগুলিকে প্রশিক্ষণ ডেটা হিসাবে বিবেচনা করে এবং আমাদের পূর্ণ-আকারের পয়েন্ট ক্লাউডে লেবেলবিহীন বিন্দুগুলির অবশিষ্টাংশের অনুমান করে সম্পূর্ণ ডেটাসেট লেবেলগুলির পূর্বাভাস দিতে।

লেবেল অনুমান কীভাবে সঞ্চালিত হয় তা প্রভাবিত করার জন্য আপনি ব্যবহৃত পয়েন্টের সংখ্যার পাশাপাশি দূরত্ব মেট্রিক এবং ওজনের স্কিম টিউন করতে পারেন। আপনি যদি পূর্ণ-আকারের ডেটাসেটে কয়েকটি টাইল লেবেল করেন, তাহলে K-NN ভবিষ্যদ্বাণীগুলির যথার্থতা মূল্যায়ন করতে আপনি সেই লেবেলযুক্ত টাইলগুলিকে গ্রাউন্ড ট্রুথ হিসাবে ব্যবহার করতে পারেন। তারপরে আপনি K-NN-এর হাইপারপ্যারামিটার টিউনিংয়ের জন্য এই নির্ভুলতা মেট্রিকটি ব্যবহার করতে পারেন বা অবজেক্টের সীমানার মধ্যে আপনার ভুল শ্রেণীবদ্ধ পয়েন্টের সংখ্যা কমাতে বিভিন্ন অনুমান অ্যালগরিদম চেষ্টা করতে পারেন, যার ফলে সম্ভাব্য নমুনা ত্রুটির হার সর্বনিম্ন হয়। নিম্নলিখিত কোড দেখুন:

# There's a lot of possibility to tune KNN further # 1) Prevent classification of points far away from all other points (random unfiltered ground point) # 2) Perform a non-uniform weighted vote # 3) Tweak number of neighbors knn = KNeighborsClassifier(n_neighbors=3) print(f"Training on {len(pc_downsample_adv)} labeled points") knn.fit(pc_downsample_adv[:,:3], annotations) print(f"Upsampled to {len(pc)} labeled points") annotations_full = knn.predict(pc[:,:3]) 

অধ্যায় 6: নমুনাযুক্ত লেবেলগুলি কল্পনা করুন

এখন যেহেতু আমরা আমাদের লেবেলযুক্ত ডেটার আপস্যাম্পলিং সঞ্চালিত করেছি, আমরা মূল পূর্ণ-আকারের পয়েন্ট ক্লাউডের একটি টাইল কল্পনা করতে পারি। আমরা সমস্ত পূর্ণ-আকারের পয়েন্ট ক্লাউড রেন্ডার করছি না কারণ এটি আমাদের ভিজ্যুয়ালাইজেশন টুলকে রেন্ডারিং থেকে বাধা দিতে পারে। নিম্নলিখিত কোড দেখুন:

pc_downsample_annotated = np.column_stack((pc_downsample_adv[:,:3], annotations)) pc_annotated = np.column_stack((pc[:,:3], annotations_full)) labeled_area = pc_downsample_annotated[pc_downsample_annotated[:,3] != 255] min_bounds = np.min(labeled_area, axis=0) max_bounds = np.max(labeled_area, axis=0) min_bounds = [-2, -2, -4.5, -1] max_bounds = [2, 2, -1, 256] def extract_tile(point_cloud, min_bounds, max_bounds): return point_cloud[ (point_cloud[:,0] > min_bounds[0]) & (point_cloud[:,1] > min_bounds[1]) & (point_cloud[:,2] > min_bounds[2]) & (point_cloud[:,0] < max_bounds[0]) & (point_cloud[:,1] < max_bounds[1]) & (point_cloud[:,2] < max_bounds[2]) ] tile_downsample_annotated = extract_tile(pc_downsample_annotated, min_bounds, max_bounds) tile_annotated = extract_tile(pc_annotated, min_bounds, max_bounds) rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) R1 = rot1.as_matrix() down_rot = tile_downsample_annotated.copy() down_rot = np.matmul(R1, down_rot[:,:3].transpose() ).transpose() down_rot_color = np.matmul(R1, np.tile(tile_downsample_annotated.copy()[:,3],(3,1))).transpose().squeeze() full_rot = tile_annotated.copy() full_rot = np.matmul(R1, full_rot[:,:3].transpose() ).transpose() full_rot_color = np.matmul(R1, np.tile(tile_annotated.copy()[:,3],(3,1))).transpose().squeeze() fig = plt.figure(figsize=(50, 20)) ax = fig.add_subplot(121, projection="3d") ax.set_title("Downsampled Annotations", fontdict={'fontsize':20}) ax.scatter(down_rot[:,0], down_rot[:,1], down_rot[:,2], c=down_rot_color[:,0], s=0.05) ax = fig.add_subplot(122, projection="3d") ax.set_title("Upsampled Annotations", fontdict={'fontsize':20}) ax.scatter(full_rot[:,0], full_rot[:,1], full_rot[:,2], c=full_rot_color[:,0], s=0.05) 

যেহেতু আমাদের ডেটাসেট ঘন, তাই আমরা একটি টাইলের মধ্যে আপস্যাম্পল লেবেলগুলিকে পূর্ণ-আকারের পয়েন্ট ক্লাউডে আপস্যাম্পল করা ডাউনস্যাম্পল লেবেলগুলি দেখতে পারি৷ যদিও অবজেক্টের মধ্যে সীমানা অঞ্চলে অল্প সংখ্যক ভুল শ্রেণীবিভাগ থাকতে পারে, তবে আপনার কাছে প্রাথমিক পয়েন্ট ক্লাউডের তুলনায় পূর্ণ-আকারের পয়েন্ট ক্লাউডে আরও অনেক সঠিকভাবে লেবেল করা পয়েন্ট রয়েছে, যার অর্থ আপনার সামগ্রিক ML নির্ভুলতা উন্নত হতে পারে।

পরিষ্কার কর

নোটবুকের উদাহরণ: আপনি যদি তৈরি করা নোটবুক ইনস্ট্যান্স চালু রাখতে না চান তবে আপনার কাছে দুটি বিকল্প রয়েছে। আপনি যদি এটিকে পরবর্তী সময়ের জন্য সংরক্ষণ করতে চান তবে আপনি এটি মুছে ফেলার পরিবর্তে থামাতে পারেন৷

  • থেকে বন্ধ করা একটি নোটবুক উদাহরণ: ক্লিক করুন নোটবুক উদাহরণস্বরূপ সেজমেকার কনসোল হোম পেজের বাম ফলকে লিঙ্ক। পরবর্তী, ক্লিক করুন থামুন আপনার নোটবুক ইনস্ট্যান্সের নামের বাম দিকে 'ক্রিয়া' কলামের নীচে লিঙ্ক করুন। নোটবুক ইন্সট্যান্স বন্ধ হওয়ার পরে, আপনি ক্লিক করে এটি আবার শুরু করতে পারেন শুরু লিঙ্ক মনে রাখবেন যে আপনি এটি মুছে ফেলার পরিবর্তে থামিয়ে দিলে, এটির সাথে যুক্ত স্টোরেজের জন্য আপনাকে চার্জ করা হবে।
  • থেকে মুছে ফেলা একটি নোটবুক উদাহরণ: প্রথমে উপরের নির্দেশ অনুসারে এটি বন্ধ করুন। এরপরে, আপনার নোটবুকের পাশের রেডিও বোতামে ক্লিক করুন, তারপর নির্বাচন করুন মুছে ফেলা থেকে কার্যপ্রণালী ড্রপ ডাউন মেনু

উপসংহার

অবজেক্ট ডিটেকশন এবং অবজেক্ট ট্র্যাকিং লেবেলিংয়ের জন্য ডেটা প্রিপ্রসেস করার সময় ডাউনস্যাম্পলিং পয়েন্ট ক্লাউড একটি কার্যকর পদ্ধতি হতে পারে। এটি এখনও উচ্চ-মানের আউটপুট লেবেল তৈরি করার সময় লেবেলিং খরচ কমাতে পারে, বিশেষ করে 3D অবজেক্ট সনাক্তকরণ এবং ট্র্যাকিং কাজের জন্য। এই পোস্টে, আমরা দেখিয়েছি কিভাবে ডাউনস্যাম্পলিং পদ্ধতি কর্মীদের জন্য পয়েন্ট ক্লাউডের স্পষ্টতাকে প্রভাবিত করতে পারে, এবং কিছু পন্থা দেখিয়েছি যেগুলি ডেটাসেটের শব্দ স্তরের উপর ভিত্তি করে ট্রেডঅফ রয়েছে৷

অবশেষে, আমরা দেখিয়েছি যে আপনি ডাউনস্যাম্পল ডেটাসেটে 3D পয়েন্ট ক্লাউড সেম্যান্টিক সেগমেন্টেশন কাজগুলি সম্পাদন করতে পারেন এবং নমুনা ভবিষ্যদ্বাণীর মাধ্যমে পূর্ণ-আকারের পয়েন্ট ক্লাউডে লেবেলগুলি ম্যাপ করতে পারেন৷ আমরা ইতিমধ্যেই লেবেল করা পয়েন্টগুলিকে প্রশিক্ষণের ডেটা হিসাবে ব্যবহার করে অবশিষ্ট সম্পূর্ণ ডেটাসেট আকারের পয়েন্টগুলিতে অনুমান করার জন্য একটি শ্রেণিবদ্ধকারীকে প্রশিক্ষণ দিয়ে এটি সম্পন্ন করেছি। এই পদ্ধতিটি এখনও ভাল সামগ্রিক লেবেল গুণমান বজায় রেখে অত্যন্ত ঘন বিন্দু ক্লাউড দৃশ্যগুলির ব্যয়-কার্যকর লেবেলিং সক্ষম করে৷

পরীক্ষা এই নোটবুক গ্রাউন্ড ট্রুথ-এ আপনার নিজস্ব ঘন বিন্দু ক্লাউড দৃশ্যের সাথে, ডাউনস্যাম্পলিং এবং আপস্যাম্পলিং কৌশলগুলি আপনার লেবেলিং খরচ কমাতে পারে কিনা তা দেখতে চূড়ান্ত ইন-স্যাম্পল ভবিষ্যদ্বাণীর জন্য K-NN এর বাইরেও নতুন মডেলগুলি চেষ্টা করে দেখুন।


লেখক সম্পর্কে

 বিদ্যা সাগর রবিপতি এর একটি গভীর শিক্ষার স্থপতি অ্যামাজন এমএল সলিউশন ল্যাবযেখানে তিনি বিশাল আকারের বিতরণ ব্যবস্থাগুলিতে তার বিশাল অভিজ্ঞতা এবং বিভিন্ন শিল্পের উল্লম্ব অঞ্চলে এডাব্লুএস গ্রাহকদের তাদের এআই এবং ক্লাউড গ্রহণকে ত্বরান্বিত করতে সহায়তা করার জন্য মেশিন লার্নিংয়ের প্রতি তাঁর আগ্রহকে উপকৃত করেন। পূর্বে, তিনি অ্যামাজনে কানেক্টিভিটি সার্ভিসে মেশিন লার্নিং ইঞ্জিনিয়ার ছিলেন যিনি ব্যক্তিগতকরণ এবং ভবিষ্যদ্বাণীমূলক রক্ষণাবেক্ষণ প্ল্যাটফর্ম তৈরিতে সহায়তা করেছিলেন।

আইজাক প্রিভিটেরা হ'ল একটি মেশিন লার্নিং বিশেষজ্ঞ সলিউশন সমাধান আর্কিটেক্ট এবং গ্রাহকদের এডাব্লুএস-এ এন্টারপ্রাইজ-গ্রেড কম্পিউটার ভিশন সলিউশন ডিজাইন করতে এবং তৈরি করতে সহায়তা করে। আইজ্যাক কম্পিউটার দৃষ্টিভঙ্গি এবং সংকেত বিশ্লেষণের জন্য মেশিন লার্নিং এবং ত্বরণযুক্ত কম্পিউটিং ব্যবহারে একটি পটভূমি রয়েছে। আইজাক রান্না করা, পর্বতারোহণ এবং অবসর সময়ে মেশিন লার্নিংয়ের সর্বশেষ অগ্রগতিগুলি চালিয়ে উপভোগ করেন।

জেরেমি ফেল্টেরকো আমাজন ওয়েব সার্ভিসেসে অ্যামাজন এমএল সলিউশন ল্যাব সহ একটি সফটওয়্যার ডেভলপমেন্ট ইঞ্জিনিয়ার। তিনি তার পটভূমি কম্পিউটার দৃষ্টি, রোবোটিকস এবং মেশিন লার্নিংয়ে এডাব্লুএস গ্রাহকদের তাদের এআই গ্রহণকে ত্বরান্বিত করতে সহায়তা করার জন্য ব্যবহার করেন।

সূত্র: https://aws.amazon.com/blogs/machine-learning/annotate-dense-point-cloud-data-using-sagemaker-ground-truth/

সময় স্ট্যাম্প:

থেকে আরো এডাব্লুএস মেশিন লার্নিং ব্লগ

Amazon Recognition কাস্টম লেবেল ব্যবহার করে একটি কম্পিউটার ভিশন মডেল তৈরি করুন এবং একটি কাস্টম প্রশিক্ষিত TensorFlow মডেলের সাথে ফলাফলের তুলনা করুন

উত্স নোড: 1576512
সময় স্ট্যাম্প: ডিসেম্বর 15, 2021