TensorFlow.js এর সাথে নোডে TFlite মডেল চালানোর জন্য Coral Edge TPUs ব্যবহার করুন

1। পরিচিতি

54e81d02971f53e8.png

শেষ আপডেট: 2022-04-11

এই কোডল্যাবে, আপনি শিখতে পারেন কীভাবে শিক্ষনীয় মেশিন ব্যবহার করে একটি চিত্র শ্রেণিবিন্যাসের মডেলকে প্রশিক্ষণ দিতে হয় এবং জাভাস্ক্রিপ্টের জন্য একটি শক্তিশালী এবং নমনীয় মেশিন লার্নিং লাইব্রেরি TensorFlow.js ব্যবহার করে কোরাল হার্ডওয়্যার ত্বরণের সাথে এটি চালাতে হয়। আপনি একটি ইলেক্ট্রন অ্যাপ তৈরি করেন যা একটি ওয়েবক্যাম থেকে ছবি প্রদর্শন করে এবং একটি কোরাল এজ TPU ব্যবহার করে তাদের শ্রেণীবদ্ধ করে। এই কোডল্যাবের একটি সম্পূর্ণ কার্যকরী সংস্করণ sig-tfjs GitHub রেপোতে উপলব্ধ।

আমার কি কোরাল ডিভাইস দরকার?

না। আপনি কোরাল ডিভাইস ছাড়াই এই কোডল্যাব ব্যবহার করে দেখতে পারেন এবং এর পরিবর্তে WebNN অ্যাক্সিলারেটর ব্যবহার করে ডেস্কটপ মেশিনে ভালো পারফরম্যান্স পেতে পারেন।

আপনি কি নির্মাণ করবেন

এই কোডল্যাবে, আপনি একটি ইলেক্ট্রন অ্যাপ তৈরি করেন যা ছবিকে শ্রেণীবদ্ধ করে। আপনার অ্যাপ:

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

আপনি কি শিখবেন

  • Node.js-এ TFLite মডেল চালানোর জন্য tfjs-tflite-node NPM প্যাকেজ কিভাবে ইনস্টল ও সেট আপ করবেন।
  • কোরাল ডিভাইসে মডেল চালানোর জন্য এজ টিপিইউ রানটাইম লাইব্রেরি কীভাবে ইনস্টল করবেন।
  • কোরাল এজ টিপিইউ ব্যবহার করে মডেল ইনফারেন্সকে কীভাবে ত্বরান্বিত করবেন।
  • কিভাবে WebNN এর সাথে মডেল অনুমানকে ত্বরান্বিত করবেন।

এই কোডল্যাবটি Node.js-এ TFLite-এ ফোকাস করে। অ-প্রাসঙ্গিক ধারণা এবং কোড-ব্লকগুলিকে চকচকে করা হয়েছে এবং আপনাকে কেবল অনুলিপি এবং পেস্ট করার জন্য সরবরাহ করা হয়েছে।

আপনি কি প্রয়োজন হবে

এই কোডল্যাবটি সম্পূর্ণ করতে আপনার প্রয়োজন:

2. সেট আপ করুন

কোড পান

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

দৃঢ়ভাবে প্রস্তাবিত: রাস্পবেরি পাইতে রেপো ক্লোন করতে গিট ব্যবহার করুন

কোড পেতে, একটি নতুন টার্মিনাল উইন্ডো খুলুন এবং রেপো ক্লোন করুন:

git clone https://github.com/tensorflow/sig-tfjs.git

কোডল্যাবের জন্য আপনার যে সমস্ত ফাইল সম্পাদনা করতে হবে tfjs-tflite-node-codelab ডিরেক্টরিতে রয়েছে ( sig-tfjs ভিতরে)। এই ডিরেক্টরিতে, আপনি starter_code , cpu_inference_working , coral_inference_working , এবং webnn_inference_working নামের সাবডিরেক্টরিগুলি পাবেন। এই কোডল্যাবের ধাপগুলির জন্য চেকপয়েন্ট।

সংগ্রহস্থলের অন্যান্য ফাইলগুলির মধ্যে রয়েছে NPM প্যাকেজগুলি যেগুলির উপর tfjs-tflite-node-codelab নির্ভর করে। আপনাকে এই ফাইলগুলির কোনটি সম্পাদনা করতে হবে না, তবে আপনার পরিবেশ সঠিকভাবে সেট আপ করা হয়েছে তা নিশ্চিত করতে আপনাকে তাদের কিছু পরীক্ষা চালাতে হবে।

এজ টিপিইউ রানটাইম লাইব্রেরি ইনস্টল করুন

কোরাল ডিভাইসগুলির জন্য আপনাকে ব্যবহার করার আগে এজ টিপিইউ রানটাইম লাইব্রেরি ইনস্টল করতে হবে। আপনার প্ল্যাটফর্মের জন্য নির্দেশাবলী অনুসরণ করে এটি ইনস্টল করুন।

লিনাক্স / রাস্পবেরি পাইতে

লিনাক্সে, x86-64 এবং Armv8 (64-বিট) আর্কিটেকচারের জন্য লাইব্রেরিটি Google-এর PPA থেকে ডেবিয়ান প্যাকেজ , libedgetpu1-std হিসাবে উপলব্ধ। যদি আপনার প্রসেসর একটি ভিন্ন আর্কিটেকচার ব্যবহার করে, তাহলে আপনাকে এটি উৎস থেকে কম্পাইল করতে হবে।

গুগলের কোরাল পিপিএ যোগ করতে এবং এজ টিপিইউ রানটাইম লাইব্রেরি ইনস্টল করতে এই কমান্ডটি চালান।

# None of this is needed on Coral boards
# This repo is needed for almost all packages below
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
# This repo is needed for only python3-coral-cloudiot and python3-coral-enviro
echo "deb https://packages.cloud.google.com/apt coral-cloud-stable main" | sudo tee /etc/apt/sources.list.d/coral-cloud.list

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update
sudo apt-get install libedgetpu1-std

উইন্ডোজ/অন্যান্য ওএসে

প্রাক-সংকলিত বাইনারিগুলি MacOS এবং Windows এর x86-64 সংস্করণের জন্য উপলব্ধ এবং একবার ডাউনলোড করার পরে সংরক্ষণাগারে install.sh বা install.bat স্ক্রিপ্ট চালিয়ে ইনস্টল করা যেতে পারে।

আপনার ডিভাইস পুনরায় চালু করুন

Edge TPU রানটাইম ইনস্টল হয়ে গেলে, ইনস্টলার যোগ করা নতুন Coral Udev নিয়ম সক্রিয় করতে ডিভাইসটি পুনরায় চালু করুন।

আপনার প্রবাল ডিভাইস সনাক্ত করা হয়েছে তা যাচাই করুন

আপনার কোরাল ডিভাইস শনাক্ত হয়েছে এবং কাজ করছে কিনা তা যাচাই করতে, coral-tflite-delegate প্যাকেজের জন্য ইন্টিগ্রেশন পরীক্ষা চালান। এই প্যাকেজটি সংগ্রহস্থলের রুট ডিরেক্টরিতে পাওয়া যায়। ইন্টিগ্রেশন পরীক্ষা চালানোর জন্য, আপনার কোরাল অ্যাক্সিলারেটর প্লাগ ইন করুন এবং প্যাকেজের ডিরেক্টরিতে এই কমান্ডগুলি চালান:

npx yarn
npx yarn build-deps
npx yarn test-integration

আপনি এই মত একটি আউটপুট দেখতে হবে:

yarn run v1.22.17
$ yarn build && yarn test-integration-dev
$ tsc
$ jasmine --config=jasmine-integration.json
Platform node has already been set. Overwriting the platform with node.
Randomized with seed 78904
Started

============================
Hi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.
============================
WARNING: converting 'int32' to 'uint8'
.


1 spec, 0 failures
Finished in 2.777 seconds
Randomized with seed 78904 (jasmine --random=true --seed=78904)
Done in 6.36s.

লগগুলিতে উল্লিখিত হিসাবে @tensorflow/tfjs-node, ইনস্টল করার বিষয়ে চিন্তা করবেন না, যেহেতু আপনি TFLite-এ মডেলটি চালাবেন।

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

স্টার্টার কোড চালান

এখন আপনি স্টার্টার কোড চালানোর জন্য প্রস্তুত। শুরু করতে এই পদক্ষেপগুলি অনুসরণ করুন৷

  1. tfjs-tflite-node-codelab ডিরেক্টরির অধীনে starter_code ডিরেক্টরিতে যান।
  2. নির্ভরতা ইনস্টল করতে npm install চালান।
  3. প্রকল্প চালু করতে npm start চালান। আপনার কম্পিউটারের ওয়েবক্যাম থেকে একটি ভিডিও ফিড দেখানো একটি অ্যাপ খোলা উচিত।

আমাদের শুরু বিন্দু কি?

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

A basic electron app with a live feed of the device's camera.

স্টার্টার কোড অন্বেষণ করুন

এই স্টার্টার কোডে অনেকগুলি ফাইল রয়েছে, তবে শুধুমাত্র আপনাকে সম্পাদনা করতে হবে renderer.js । এটি ভিডিও ফিড এবং এইচটিএমএল উপাদান সহ পৃষ্ঠায় কী দেখায় তা নিয়ন্ত্রণ করে এবং এখানেই আপনি অ্যাপে আপনার মেশিন লার্নিং মডেল যুক্ত করেন। অন্যান্য ফাইলগুলির মধ্যে একটি index.html ফাইল, তবে এটি যা করে তা হল renderer.js ফাইলটি লোড করা। এছাড়াও একটি main.js ফাইল আছে, যেটি Electron এর প্রবেশ বিন্দু। এটি অ্যাপটির লাইফ সাইকেল নিয়ন্ত্রণ করে, এটি খোলার সময় কী দেখাতে হবে এবং এটি বন্ধ হলে কী করতে হবে তা সহ, তবে আপনাকে এটিতে কোনও পরিবর্তন করতে হবে না।

ডিবাগার খুলুন

আপনি এই কোডল্যাব অনুসরণ করার সাথে সাথে আপনার অ্যাপ ডিবাগ করতে হতে পারে। যেহেতু এই অ্যাপটি ইলেক্ট্রনের উপর ভিত্তি করে তৈরি, তাই এতে ক্রোম ডিবাগার বিল্ট ইন রয়েছে৷ বেশিরভাগ প্ল্যাটফর্মে, আপনি এটি Ctrl + Shift + i দিয়ে খুলতে পারেন৷ অ্যাপ থেকে লগ এবং ত্রুটি বার্তা দেখতে কনসোল ট্যাবে ক্লিক করুন।

এখানে অন্বেষণ করার মতো আর অনেক কিছুই নেই, তাই আসুন সরাসরি ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ দেওয়া যাক!

3. একটি ইমেজ ক্লাসিফায়ারকে প্রশিক্ষণ দিন

এই বিভাগে, আপনি একটি কাস্টম ইমেজ শ্রেণীবিভাগ মডেলের TFLite এবং কোরাল সংস্করণ প্রশিক্ষণ দেন।

ক্লাসিফায়ারকে প্রশিক্ষণ দিন

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

এখন আপনি একটি মডেল প্রশিক্ষণের জন্য প্রস্তুত. আপনি যদি নিশ্চিত না হন যে কোন ধরণের মডেলকে প্রশিক্ষণ দিতে হবে, প্রশিক্ষণের জন্য একটি সহজ মডেল হল একজন ব্যক্তি আবিষ্কারক, যা কেবলমাত্র সনাক্ত করে যে একজন ব্যক্তি ফ্রেমে আছে কিনা।

  1. একটি নতুন ট্যাবে শিক্ষনীয় মেশিন প্রশিক্ষণ পৃষ্ঠা খুলুন।
  2. ইমেজ প্রজেক্ট এবং তারপর স্ট্যান্ডার্ড ইমেজ মডেল নির্বাচন করুন।
  3. প্রতিটি ক্লাসের জন্য ছবির নমুনা যোগ করুন। ওয়েবক্যাম ইনপুট ব্যবহার করা এটি করার সবচেয়ে সহজ উপায়। এছাড়াও আপনি ক্লাসের নাম পরিবর্তন করতে পারেন।
  4. যখন আপনি প্রতিটি ক্লাসের জন্য পর্যাপ্ত ডেটা সংগ্রহ করেন (50টি নমুনা সাধারণত যথেষ্ট), ট্রেন মডেল টিপুন।

মডেল প্রশিক্ষণ শেষ হলে, আপনি মডেলের আউটপুট একটি পূর্বরূপ দেখতে হবে.

A model is trained on images from two classes,

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

  1. আপনি মডেলের নির্ভুলতার সাথে সন্তুষ্ট হলে, এক্সপোর্ট মডেল ক্লিক করুন। আপনাকে মডেলটির দুটি পৃথক সংস্করণ ডাউনলোড করতে হবে।
  2. টেনসরফ্লো লাইট ফ্লোটিং পয়েন্ট মডেল হিসাবে আপনার মডেল রপ্তানি করুন। এটি converted_tflite.zip নামে একটি ফাইল ডাউনলোড করে। যা CPU-তে চলে।
  3. আপনার মডেলটি টেনসরফ্লো লাইট এজটিপিইউ মডেল হিসাবে রপ্তানি করুন। এটি converted_edgetpu.zip নামে একটি ফাইল ডাউনলোড করে যা কোরাল এজ TPU-তে চলে।

4. আপনার অ্যাপে CPU মডেল চালান

এখন আপনি একটি মডেল প্রশিক্ষিত করেছেন, এটি আপনার অ্যাপে যোগ করার সময়। এই বিভাগের শেষে, অ্যাপটি ডিভাইসের CPU ব্যবহার করে আপনার মডেল চালাতে সক্ষম হবে।

অ্যাপে মডেল ফাইল যোগ করুন

আপনি যখন ক্লাসিফায়ারকে প্রশিক্ষণ দিয়েছিলেন তখন আপনার ডাউনলোড করা converted_tflite.zip মডেল ফাইলটি আনজিপ করুন। আর্কাইভে দুটি ফাইল আছে। model_uquant.tflite হল সংরক্ষিত TFLite মডেল, মডেল গ্রাফ এবং ওজন সহ। labels.txt এ মডেলটি ভবিষ্যদ্বাণী করা ক্লাসের জন্য মানব-পাঠযোগ্য লেবেল রয়েছে। মডেল ডিরেক্টরিতে উভয় ফাইল রাখুন।

নির্ভরতা ইনস্টল করুন

একটি মডেল লোড করা এবং ইনপুট প্রিপ্রসেস করার জন্য TensorFlow.js থেকে কিছু নির্ভরতা প্রয়োজন:

  • tfjs-tflite-node : Node.js এ TFLite মডেল চালানোর জন্য TensorFlow.js এর প্যাকেজ।
  • @tensorflow/tfjs : TensorFlow.js এর প্রধান প্যাকেজ।

@tensorflow/tfjs ইতিমধ্যে ইনস্টল করা আছে, কিন্তু আপনাকে এই কমান্ডের সাথে tfjs-tflite-নোড ইনস্টল করতে হবে:

npm install --save tfjs-tflite-node

এটি ইনস্টল হয়ে গেলে, এটিকে renderer.js- এর শীর্ষে থাকা অ্যাপে যোগ করুন :

CODELAB অংশ 1: ​​tfjs-tflite-নোড আমদানি করুন।

const {loadTFLiteModel} = require('tfjs-tflite-node');

মডেল লোড করুন

এখন আপনি মডেল লোড করতে প্রস্তুত. tfjs-tflite-node এটি করার জন্য loadTFLiteModel ফাংশন প্রদান করে। এটি একটি ফাইল পাথ, একটি ArrayBuffer, বা একটি TFHub URL থেকে মডেল লোড করতে পারে। আপনার মডেল এবং এর ওজন লোড করতে, এটি main ফাংশনে যোগ করুন:

CODELAB অংশ 1: ​​মডেলটি এখানে লোড করুন।

const modelPath = './model/model_unquant.tflite';
const model = await loadTFLiteModel(modelPath);
const labels = fs.readFileSync('./model/labels.txt', 'utf8')
      .split('\n');

মডেল চালান

আপনার মডেল চালানোর জন্য তিনটি ধাপ লাগে। প্রথমে, আপনি ওয়েবক্যাম থেকে একটি ইনপুট ফ্রেম টানুন এবং প্রিপ্রসেস করুন। তারপর, আপনি সেই ফ্রেমে মডেলটি চালান এবং একটি ভবিষ্যদ্বাণী পান। এর পরে, আপনি পৃষ্ঠায় ভবিষ্যদ্বাণী প্রদর্শন করবেন।

ওয়েবক্যাম ইনপুট প্রিপ্রসেস করুন

এই মুহুর্তে, ওয়েবক্যামটি শুধুমাত্র একটি HTML উপাদান, এবং এটি যে ফ্রেমগুলি প্রদর্শন করে তা JavaScript renderer.js ফাইলে উপলব্ধ নয়৷ ওয়েবক্যাম থেকে ফ্রেম টানতে, TensorFlow.js tf.data.webcam প্রদান করে, যা ক্যামেরা থেকে ফ্রেম ক্যাপচার করার জন্য সহজে ব্যবহারযোগ্য capture() পদ্ধতি প্রদান করে।

এটি ব্যবহার করতে, এই সেটআপ কোডটি main() এ যোগ করুন :

CODELAB অংশ 1: ​​এখানে tf.data.webcam সেট আপ করুন।

const tensorCam = await tf.data.webcam(webcam);

তারপর, প্রতিটি ফ্রেমে একটি ইমেজ ক্যাপচার করতে, run() এ নিম্নলিখিত যোগ করুন:

CODELAB অংশ 1: ​​এখানে ওয়েবক্যাম ফ্রেম ক্যাপচার করুন।

const image = await tensorCam.capture();

মডেলের সাথে সামঞ্জস্যপূর্ণ হতে আপনাকে প্রতিটি ফ্রেমকে প্রিপ্রসেস করতে হবে। এই কোডল্যাব যে মডেলটি ব্যবহার করে তার ইনপুট আকৃতি রয়েছে [1, 224, 224, 3], তাই এটি একটি 224 বাই 224 পিক্সেল RGB ইমেজ আশা করে। tensorCam.capture() একটি আকৃতি দেয় [224, 224, 3], তাই আপনাকে tf.expandDims এর সাথে টেনসরের সামনে একটি অতিরিক্ত মাত্রা যোগ করতে হবে। অতিরিক্তভাবে, CPU মডেলটি -1 এবং 1 এর মধ্যে একটি Float32 ইনপুট আশা করে , কিন্তু ওয়েবক্যামটি 0 থেকে 255 পর্যন্ত মান ক্যাপচার করে। আপনি ইনপুট টেনসরকে 127 দ্বারা ভাগ করতে পারেন এর পরিসর [0, 255] থেকে [0, ~2] এ পরিবর্তন করতে। এবং তারপর পছন্দসই পরিসীমা পেতে 1 বিয়োগ করুন [-1, ~1]। এটি করার জন্য run() ফাংশনে tf.tidy() এ এই লাইনগুলি যোগ করুন:

কোডেল্যাব পার্ট 1: এখানে ওয়েবক্যাম ফ্রেম প্রিপ্রসেস করুন।

const expanded = tf.expandDims(image, 0);
const divided = tf.div(expanded, tf.scalar(127));
const normalized = tf.sub(divided, tf.scalar(1));

টেনসর ব্যবহার করার পরে তাদের নিষ্পত্তি করা গুরুত্বপূর্ণ। tf.tidy() এটির কলব্যাকের মধ্যে থাকা কোডের জন্য স্বয়ংক্রিয়ভাবে এটি করে, কিন্তু এটি অ্যাসিঙ্ক ফাংশন সমর্থন করে না। আপনার আগে তৈরি করা ইমেজ টেনসরটিকে dispose() মেথড কল করে ম্যানুয়ালি ডিসপোজ করতে হবে।

কোডেল্যাব পার্ট 1: এখানে ওয়েবক্যাম ফ্রেম নিষ্পত্তি করুন।

image.dispose();

মডেল চালান এবং ফলাফল প্রদর্শন

প্রি-প্রসেসড ইনপুটে মডেলটি চালানোর জন্য, নর্মালাইজড টেনসরে model.predict() কল করুন। এটি প্রতিটি লেবেলের পূর্বাভাসিত সম্ভাব্যতা ধারণকারী এক-মাত্রিক টেনসর প্রদান করে। প্রতিটি লেবেলের শতাংশের সুযোগ পেতে এই সম্ভাবনাকে 100 দ্বারা গুণ করুন এবং স্ক্রিনে মডেলের পূর্বাভাস দেখানোর জন্য স্টার্টার কোডের সাথে অন্তর্ভুক্ত showPrediction ফাংশন ব্যবহার করুন।

model.predict আশেপাশে stats.begin এবং stats.end এ কল করার মাধ্যমে ভবিষ্যদ্বাণী কতক্ষণ লাগবে তাও এই কোডটি stats.js ব্যবহার করে।

কোডেল্যাব পার্ট 1: মডেলটি চালান এবং ফলাফল এখানে প্রদর্শন করুন।

stats.begin();
const prediction = model.predict(normalized);
stats.end();
const percentage = tf.mul(prediction, tf.scalar(100));
showPrediction(percentage.dataSync(), labels);

yarn start দিয়ে অ্যাপটি আবার চালান এবং আপনার মডেল থেকে শ্রেণীবিভাগ দেখতে হবে।

The TFLite CPU model runs in the Electron app. It classifies images from the webcam and displays confidence values for each class below.

কর্মক্ষমতা

যেহেতু এটি বর্তমানে সেট আপ করা হয়েছে, মডেলটি CPU-তে চলে। এটি ডেস্কটপ কম্পিউটার এবং বেশিরভাগ ল্যাপটপের জন্য ঠিক আছে, তবে আপনি যদি এটি রাস্পবেরি পাই বা অন্য কম পাওয়ার ডিভাইসে চালান তবে এটি পছন্দসই নাও হতে পারে। একটি রাস্পবেরি পাই 4 এ, আপনি সম্ভবত প্রায় 10 FPS দেখতে পাবেন, যা কিছু অ্যাপ্লিকেশনের জন্য যথেষ্ট দ্রুত নাও হতে পারে। একটি দ্রুত মেশিন ব্যবহার না করেই ভালো পারফরম্যান্স পেতে আপনি একটি কোরাল এজ TPU আকারে অ্যাপ্লিকেশন-নির্দিষ্ট সিলিকন ব্যবহার করতে পারেন।

5. আপনার অ্যাপে কোরাল মডেল চালান

আপনার যদি কোরাল ডিভাইস না থাকে তবে আপনি এই বিভাগটি এড়িয়ে যেতে পারেন।

কোডল্যাবের এই ধাপটি আপনি শেষ বিভাগে যে কোডটি লিখেছেন তার থেকে তৈরি, তবে আপনি যদি একটি পরিষ্কার স্লেট দিয়ে শুরু করতে চান তবে আপনি পরিবর্তে cpu_inference_working চেকপয়েন্ট ব্যবহার করতে পারেন।

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

অ্যাপে কোরাল মডেল ফাইল যোগ করুন

আপনি যখন ক্লাসিফায়ারকে প্রশিক্ষণ দিয়েছিলেন তখন আপনার ডাউনলোড করা converted_edgetpu.zip মডেল ফাইলটি আনজিপ করুন। আর্কাইভে অন্তর্ভুক্ত দুটি ফাইল আছে. model_edgetpu.tflite হল সংরক্ষিত TFLite মডেল, মডেল গ্রাফ এবং ওজন সহ। labels.txt এ মডেলটি ভবিষ্যদ্বাণী করা ক্লাসের জন্য মানব-পাঠযোগ্য লেবেল রয়েছে। coral_model ডিরেক্টরিতে মডেল ফাইলটি রাখুন।

নির্ভরতা ইনস্টল করুন

কোরাল মডেল চালানোর জন্য এজ TPU রানটাইম লাইব্রেরি প্রয়োজন। চালিয়ে যাওয়ার আগে সেটআপ নির্দেশাবলী অনুসরণ করে আপনি এটি ইনস্টল করেছেন তা নিশ্চিত করুন।

প্রবাল ডিভাইসগুলি টিএফলাইট প্রতিনিধি হিসাবে অ্যাক্সেস করা হয়। জাভাস্ক্রিপ্ট থেকে তাদের অ্যাক্সেস করতে, coral-tflite-delegate প্যাকেজ ইনস্টল করুন:

npm install --save coral-tflite-delegate

তারপর, renderer.js ফাইলের উপরে এই লাইনটি যোগ করে প্রতিনিধি আমদানি করুন:

CODELAB অংশ 2: এখানে প্রতিনিধি আমদানি করুন।

const {CoralDelegate} = require('coral-tflite-delegate');

মডেল লোড করুন

এখন আপনি কোরাল মডেল লোড করার জন্য প্রস্তুত। আপনি সিপিইউ মডেলের মতো একইভাবে এটি করেন, এখন আপনি কোরাল প্রতিনিধি লোড করার জন্য loadTFLiteModel ফাংশনে বিকল্পগুলি পাস করেন।

CODELAB অংশ 2: এখানে প্রতিনিধি মডেল লোড করুন।

const coralModelPath = './coral_model/model_edgetpu.tflite';
const options = {delegates: [new CoralDelegate()]};
const coralModel = await loadTFLiteModel(coralModelPath, options);

আপনাকে লেবেলগুলি লোড করার দরকার নেই কারণ সেগুলি CPU মডেলের মতোই৷

CPU এবং কোরালের মধ্যে স্যুইচ করতে একটি বোতাম যোগ করুন

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

এই কোডের সাথে বোতাম যোগ করুন:

CODELAB পার্ট 2: এখানে ডেলিগেট বোতাম তৈরি করুন।

let useCoralDelegate = false;
const toggleCoralButton = document.createElement('button');
function toggleCoral() {
  useCoralDelegate = !useCoralDelegate;
  toggleCoralButton.innerText = useCoralDelegate
      ? 'Using Coral. Press to switch to CPU.'
      : 'Using CPU. Press to switch to Coral.';
}
toggleCoralButton.addEventListener('click', toggleCoral);
toggleCoral();
document.body.appendChild(toggleCoralButton);

run() ফাংশনে এই কন্ডিশনটি হুক করা যাক। যখন useCoralDelegate মিথ্যা হয়, এটি CPU সংস্করণ চালানো উচিত। অন্যথায়, এটি কোরাল সংস্করণ চালায় (তবে আপাতত, এটি কিছুই করবে না)। একটি if স্টেটমেন্টে CPU মডেল চালানো থেকে কোডটি মোড়ানো । উল্লেখ্য যে expanded টেনসর if স্টেটমেন্টের বাইরে থাকে কারণ কোরাল মডেল এটি ব্যবহার করে।

কোডেল্যাব পার্ট 2: এখানে ডেলিগেট ব্যবহার করবেন কিনা তা পরীক্ষা করুন।

// NOTE: Don't just copy-paste this code into the app.
// You'll need to edit the code from the CPU section.
const expanded = tf.expandDims(image, 0);
if (useCoralDelegate) {
  // CODELAB part 2: Run Coral prediction here.
} else {
  const divided = tf.div(expanded, tf.scalar(127));
  const normalized = tf.sub(divided, tf.scalar(1));
  stats.begin();
  const prediction = model.predict(normalized);
  stats.end();
  const percentage = tf.mul(prediction, tf.scalar(100));
  showPrediction(percentage.dataSync(), labels);
}

মডেল চালান

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

CODELAB পার্ট 2: এখানে প্রবাল পূর্বাভাস চালান। (এটি উপরের কোড স্নিপেটের অংশ)

stats.begin();
const prediction = coralModel.predict(expanded);
stats.end();
const percentage = tf.div(tf.mul(prediction, tf.scalar(100)), tf.scalar(255));
showPrediction(percentage.dataSync(), labels);

yarn start দিয়ে অ্যাপটি আবার চালান, এবং এটি কোরাল এক্সিলারেটরের শ্রেণীবিভাগ দেখাতে হবে।

The CPU and Coral models run in the app one at a time, and a button switches between them. The CPU model gets around 20 FPS and the Coral model gets around 45.

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

কর্মক্ষমতা একটি নোট

আপনি যে ফ্রেম রেটটি দেখছেন তাতে প্রিপ্রসেসিং এবং পোস্টপ্রসেসিং অন্তর্ভুক্ত রয়েছে, তাই এটি কোরাল হার্ডওয়্যার কী করতে সক্ষম তার প্রতিনিধি নয়। আপনি এফপিএস মিটারে ক্লিক করে পারফরম্যান্স সম্পর্কে আরও ভাল ধারণা পেতে পারেন যতক্ষণ না এটি লেটেন্সি (মিলিসেকেন্ডে) দেখায়, যা model.predict কলের পরিমাপ করে। যাইহোক, এটি এখনও টেনসরগুলিকে TFLite নেটিভ সি বাইন্ডিংয়ে এবং তারপরে কোরাল ডিভাইসে সরাতে যে সময় নেয় তা অন্তর্ভুক্ত করে, তাই এটি একটি নিখুঁত পরিমাপ নয়। C++ এ লেখা আরও সঠিক কর্মক্ষমতা বেঞ্চমার্কের জন্য, EdgeTPU বেঞ্চমার্ক পৃষ্ঠাটি দেখুন।

এছাড়াও লক্ষণীয় যে ভিডিওটি একটি রাস্পবেরি পাই এর পরিবর্তে একটি ল্যাপটপে রেকর্ড করা হয়েছিল, তাই আপনি একটি ভিন্ন FPS দেখতে পারেন।

কোরাল প্রিপ্রসেসিংকে ত্বরান্বিত করা

কিছু ক্ষেত্রে, আপনি TFJS ব্যাকএন্ড স্যুইচ করে প্রি-প্রসেসিংয়ের গতি বাড়াতে পারেন। ডিফল্ট ব্যাকএন্ড হল WebGL, যা বৃহৎ, সমান্তরাল ক্রিয়াকলাপের জন্য ভাল, কিন্তু এই অ্যাপটি প্রিপ্রসেসিং পর্বে এর বেশি কিছু করে না (এটি শুধুমাত্র expandDims ব্যবহার করে, যা সমান্তরাল নয়)। ফাইলের শীর্ষে আমদানির পরে এই লাইনটি যোগ করে আপনি GPU-তে এবং থেকে টেনসর সরানোর অতিরিক্ত লেটেন্সি এড়াতে CPU ব্যাকএন্ডে স্যুইচ করতে পারেন।

tf.setBackend(‘cpu');

এটি TFLite CPU মডেলের জন্য প্রিপ্রসেসিংকেও প্রভাবিত করে, যা সমান্তরাল , তাই এই পরিবর্তনের সাথে মডেলটি অনেক ধীর গতিতে চলে।

6. WebNN দিয়ে CPU মডেলকে ত্বরান্বিত করুন

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

OpenVINO টুলকিট ইনস্টল করুন

OpenVINO টুলকিট মডেলকে ত্বরান্বিত করতে ইন্টেল প্রসেসরের মধ্যে তৈরি মেশিন লার্নিং হার্ডওয়্যার ব্যবহার করে। আপনি Intel থেকে একটি precompiled সংস্করণ ডাউনলোড করতে পারেন বা উত্স থেকে এটি তৈরি করতে পারেন । OpenVINO ইনস্টল করার বিভিন্ন উপায় আছে, কিন্তু এই কোডল্যাবের উদ্দেশ্যে, আমরা আপনাকে Windows বা Linux-এর জন্য ইনস্টলার স্ক্রিপ্ট ব্যবহার করার পরামর্শ দিই। 2021.4.2 LTS রানটাইম সংস্করণ ইনস্টল করতে ভুলবেন না, কারণ অন্যান্য সংস্করণগুলি সামঞ্জস্যপূর্ণ নাও হতে পারে ৷ আপনি ইনস্টলারটি চালানোর পরে, নিশ্চিত করুন যে আপনি Linux বা Windows ( স্থায়ী সমাধান ) এর ইনস্টলেশন নির্দেশাবলীতে বর্ণিত হিসাবে আপনার শেলের পরিবেশের ভেরিয়েবলগুলি কনফিগার করেছেন, অথবা setupvars.sh (Linux) বা setupvars.bat (Windows) কমান্ডটি চালিয়ে webnn-tflite-delegate ডিরেক্টরিতে।

WebNN প্রতিনিধি কাজ করছে যাচাই করুন

WebNN প্রতিনিধি সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে, সংগ্রহস্থলের রুট ডিরেক্টরিতে পাওয়া webnn-tflite-delegate প্যাকেজের জন্য ইন্টিগ্রেশন পরীক্ষা চালান। ইন্টিগ্রেশন পরীক্ষা চালানোর জন্য, প্যাকেজের ডিরেক্টরিতে এই কমান্ডগুলি চালান:

# In webnn-tflite-delegate/
npx yarn
npx yarn test-integration

আপনি এই মত একটি আউটপুট দেখতে হবে:

WebNN delegate: WebNN device set to 0.
INFO: Created TensorFlow Lite WebNN delegate for device Default and power Default.

============================
Hi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.
============================
label: wine bottle
score:  0.934505045413971
.


1 spec, 0 failures
Finished in 0.446 seconds
Randomized with seed 58441 (jasmine --random=true --seed=58441)
Done in 8.07s.

আপনি যদি এই মত একটি আউটপুট দেখতে, এটি একটি কনফিগারেশন ত্রুটি নির্দেশ করে:

Platform node has already been set. Overwriting the platform with node.
Randomized with seed 05938
Started
error Command failed with exit code 3221225477.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

এই আউটপুট সম্ভবত মানে আপনি OpenVINO এর পরিবেশ ভেরিয়েবল সেট করেননি। আপাতত, আপনি setupvars.sh (Linux) বা setupvars.bat (Windows) কমান্ড চালিয়ে সেগুলি সেট করতে পারেন, তবে আপনি Linux বা Windows ( স্থায়ী সমাধান ) নির্দেশাবলী অনুসরণ করে স্থায়ীভাবে সেট করতে চাইতে পারেন। আপনি যদি উইন্ডোজ ব্যবহার করেন, তাহলে

setupvars.bat

কমান্ড Git bash সমর্থন করে না , তাই নিশ্চিত করুন যে আপনি উইন্ডোজ কমান্ড প্রম্পট থেকে এই কোডল্যাব থেকে এটি এবং অন্যান্য কমান্ডগুলি চালাচ্ছেন।

WebNN প্রতিনিধি ইনস্টল করুন

OpenVINO ইনস্টল করার সাথে, আপনি এখন WebNN এর সাথে CPU মডেলকে ত্বরান্বিত করতে প্রস্তুত৷ কোডল্যাবের এই বিভাগটি "আপনার অ্যাপে CPU মডেল চালান" বিভাগে আপনি যে কোডটি লিখেছেন তা তৈরি করে। আপনি এই ধাপে যে কোডটি লিখেছেন সেটি ব্যবহার করতে পারেন, কিন্তু আপনি যদি ইতিমধ্যেই কোরাল বিভাগটি সম্পন্ন করে থাকেন, তাহলে পরিবর্তে cpu_inference_working checkpoint ব্যবহার করুন যাতে আপনি একটি পরিষ্কার স্লেট দিয়ে শুরু করতে পারেন।

WebNN প্রতিনিধির Node.js অংশটি npmjs-এ বিতরণ করা হয়। এটি ইনস্টল করতে, এই কমান্ডটি চালান:

npm install --save webnn-tflite-delegate

তারপর, renderer.js ফাইলের উপরে এই লাইনটি যোগ করে প্রতিনিধি আমদানি করুন:

CODELAB অংশ 2: এখানে প্রতিনিধি আমদানি করুন।

const {WebNNDelegate, WebNNDevice} = require('webnn-tflite-delegate');

WebNN প্রতিনিধি CPU বা GPU তে চলা সমর্থন করে; WebNNDevice আপনাকে কোনটি ব্যবহার করতে হবে তা বেছে নিতে দেয়।

মডেল লোড করুন

এখন আপনি WebNN প্রতিনিধি সক্ষম করে মডেলটি লোড করতে প্রস্তুত৷ কোরালের জন্য, আপনাকে একটি ভিন্ন মডেল ফাইল লোড করতে হয়েছিল, কিন্তু WebNN টিএফলাইটের মতো একই মডেল বিন্যাস সমর্থন করে। এটি সক্ষম করতে মডেলটিতে পাস করা প্রতিনিধিদের তালিকায় WebNNDelegate যোগ করুন:

CODELAB অংশ 2: এখানে প্রতিনিধি মডেল লোড করুন।

let webnnModel = await loadTFLiteModel(modelPath, {
  delegates: [new WebNNDelegate({webnnDevice: WebNNDevice.DEFAULT})],
});

আপনাকে আবার লেবেল লোড করতে হবে না কারণ এটি একই মডেল।

TfLite CPU এবং WebNN এর মধ্যে স্যুইচ করতে একটি বোতাম যোগ করুন

এখন মডেলের WebNN সংস্করণ প্রস্তুত, WebNN এবং TfLite CPU অনুমানের মধ্যে স্যুইচ করতে একটি বোতাম যোগ করুন। উভয়কে একই সময়ে চালানোর ফলে পারফরম্যান্সের পার্থক্য দেখা কঠিন হয়।

এই কোডের সাথে বোতামটি যোগ করুন (মনে রাখবেন যে এটি আসলে এখনও মডেলগুলি স্যুইচ করবে না):

CODELAB পার্ট 2: এখানে ডেলিগেট বোতাম তৈরি করুন।

let useWebNNDelegate = false;
const divElem = document.createElement('div');
const toggleWebNNButton = document.createElement('button');
function toggleWebNN() {
  useWebNNDelegate = !useWebNNDelegate;
  toggleWebNNButton.innerHTML = useWebNNDelegate
      ? 'Using WebNN. Press to switch to TFLite CPU.'
      : 'Using TFLite CPU. Press to switch to WebNN.';
  divElem.hidden = useWebNNDelegate ? false : true;
}

toggleWebNNButton.addEventListener('click', toggleWebNN);
toggleWebNN();
document.body.appendChild(toggleWebNNButton);
document.body.appendChild(divElem);

এই কোডটি একটি div উপাদানও যোগ করে যা আপনি পরবর্তী বিভাগে WebNN সেটিংস কনফিগার করতে ব্যবহার করেন।

WebNN ডিভাইসগুলির মধ্যে স্যুইচ করতে একটি ড্রপডাউন যোগ করুন

WebNN CPU এবং GPU-তে চলমান সমর্থন করে, তাই তাদের মধ্যে স্যুইচ করতে একটি ড্রপডাউন যোগ করুন। বোতামটি তৈরি করে এমন কোডের পরে এই কোডটি যোগ করুন:

// Create elements for WebNN device selection
divElem.innerHTML = '<br/>WebNN Device: ';
const selectElem = document.createElement('select');
divElem.appendChild(selectElem);

const webnnDevices = ['Default', 'GPU', 'CPU'];
// append the options
for (let i = 0; i < webnnDevices.length; i++) {
  var optionElem = document.createElement('option');
  optionElem.value = i;
  optionElem.text = webnnDevices[i];
  selectElem.appendChild(optionElem);
}

এখন, আপনি যদি অ্যাপটি চালান, আপনি একটি ড্রপডাউন তালিকা দেখতে পাবেন ডিফল্ট, GPU এবং CPU। তাদের মধ্যে একটি বেছে নেওয়া এখনই কিছু করবে না যেহেতু ড্রপডাউনটি এখনও হুক আপ করা হয়নি৷ The app shows a dropdown where the WebNN device can be selected from Default, GPU, or CPU.

ড্রপডাউন ডিভাইস পরিবর্তন করুন

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

ড্রপডাউন যোগ করা কোডের পরে নিম্নলিখিত কোড যোগ করুন:

selectElem.addEventListener('change', async () => {
  let webnnDevice;
  switch(selectElem.value) {
    case '1':
      webnnDevice = WebNNDevice.GPU;
      break;
    case '2':
      webnnDevice = WebNNDevice.CPU;
      break;
    default:
      webnnDevice = WebNNDevice.DEFAULT;
      break;
  }
  webnnModel = await loadTFLiteModel(modelPath, {
    delegates: [new WebNNDelegate({webnnDevice})],
  });
});

এই পরিবর্তনের সাথে, ড্রপডাউনটি প্রতিবার পরিবর্তন করার সময় সঠিক সেটিংস সহ একটি নতুন মডেল তৈরি করে। এখন WebNN মডেলটি হুক আপ করার এবং অনুমানের জন্য এটি ব্যবহার করার সময়।

WebNN মডেল চালান

WebNN মডেলটি ব্যবহার করার জন্য প্রস্তুত, কিন্তু WebNN এবং TfLite CPU-এর মধ্যে স্যুইচ করার বোতামটি আসলে এখনও মডেলটিকে স্যুইচ করেনি৷ মডেলটি স্যুইচ করতে, আপনাকে প্রথমে কোডল্যাবের প্রথম বিভাগে TfLite CPU মডেলটি লোড করার সময় থেকে model ভেরিয়েবলের নাম পরিবর্তন করতে হবে।

নিম্নলিখিত লাইন পরিবর্তন করুন...

const model = await loadTFLiteModel(modelPath);

...তাই এই লাইনের সাথে মিলে যায়।

const cpuModel = await loadTFLiteModel(modelPath);

model ভেরিয়েবলের নাম পরিবর্তন করে cpuModel , বোতামের অবস্থার উপর ভিত্তি করে সঠিক মডেল বেছে নিতে run ফাংশনে এটি যোগ করুন:

কোডেল্যাব পার্ট 2: এখানে ডেলিগেট ব্যবহার করবেন কিনা তা পরীক্ষা করুন।

let model;
if (useWebNNDelegate) {
  model = webnnModel;
} else {
  model = cpuModel;
}

এখন, আপনি যখন অ্যাপটি চালান, তখন বোতামটি TfLite CPU এবং WebNN-এর মধ্যে স্যুইচ করে। The TFLite CPU model and the WebNN CPU and GPU models run in the app. When one of the WebNN models is active, a dropdown menu switches between them. The CPU model gets approximately 15 FPS and the WebNN CPU model gets approximately 40.

আপনি যদি একটি সমন্বিত ইন্টেল GPU থাকে তবে আপনি WebNN CPU এবং GPU অনুমানের মধ্যে স্যুইচ করতে পারেন।

কর্মক্ষমতা একটি নোট

আপনি যে ফ্রেম রেটটি দেখছেন তাতে প্রি-প্রসেসিং এবং পোস্টপ্রসেসিং অন্তর্ভুক্ত রয়েছে, তাই এটি WebNN কী করতে সক্ষম তার প্রতিনিধি নয়। আপনি এফপিএস মিটারে ক্লিক করে পারফরম্যান্স সম্পর্কে আরও ভাল ধারণা পেতে পারেন যতক্ষণ না এটি লেটেন্সি (মিলিসেকেন্ডে) দেখায়, যা model.predict কলের পরিমাপ করে। যাইহোক, এটি এখনও TFLite নেটিভ সি বাইন্ডিংয়ে টেনসরগুলি সরাতে যে সময় নেয় তা অন্তর্ভুক্ত করে, তাই এটি একটি নিখুঁত পরিমাপ নয়।

7. অভিনন্দন

অভিনন্দন! আপনি ইলেক্ট্রনে tfjs-tflite-নোড ব্যবহার করে আপনার প্রথম কোরাল/WebNN প্রকল্প সম্পূর্ণ করেছেন।

এটি চেষ্টা করে দেখুন, এবং বিভিন্ন ইমেজে এটি পরীক্ষা করুন। আপনি সম্পূর্ণ ভিন্ন কিছু শ্রেণীবদ্ধ করার জন্য TeachableMachine-এ একটি নতুন মডেলকে প্রশিক্ষণ দিতে পারেন।

রিক্যাপ

এই কোডল্যাবে, আপনি শিখেছেন:

  • Node.js-এ TFLite মডেল চালানোর জন্য tfjs-tflite-node npm প্যাকেজ কিভাবে ইনস্টল ও সেট আপ করবেন।
  • কোরাল ডিভাইসে মডেল চালানোর জন্য এজ টিপিইউ রানটাইম লাইব্রেরি কীভাবে ইনস্টল করবেন।
  • কোরাল এজ টিপিইউ ব্যবহার করে মডেল ইনফারেন্সকে কীভাবে ত্বরান্বিত করবেন।
  • কিভাবে WebNN এর সাথে মডেল অনুমানকে ত্বরান্বিত করবেন।

এরপর কি?

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

আরও যেতে এবং আপনার ব্যবহৃত মডেলটিকে TeachableMachine কীভাবে প্রশিক্ষণ দিয়েছে সে সম্পর্কে আরও জানতে, ট্রান্সফার লার্নিং -এ আমাদের কোডল্যাব দেখুন। আপনি যদি কোরালের সাথে কাজ করে এমন অন্যান্য মডেলগুলি খুঁজছেন, যেমন স্পিচ রিকগনিশন এবং পোজ অনুমান, তাহলে coral.ai/models দেখুন। আপনি TensorFlow Hub- এ সেই মডেলগুলির CPU সংস্করণ এবং আরও অনেকগুলি খুঁজে পেতে পারেন।

আপনি কি আমাদের সাথে শেয়ার করুন

অন্যান্য সৃজনশীল ব্যবহারের ক্ষেত্রেও আপনি আজ যা করেছেন তা আপনি সহজেই প্রসারিত করতে পারেন এবং আমরা আপনাকে বাক্সের বাইরে চিন্তা করতে এবং হ্যাকিং চালিয়ে যেতে উত্সাহিত করি।

আমাদের TensorFlow ব্লগে বা এমনকি ভবিষ্যতের ইভেন্টগুলিতে আপনার প্রকল্পটি দেখানোর সুযোগের জন্য #MadeWithTFJS হ্যাশট্যাগ ব্যবহার করে সোশ্যাল মিডিয়াতে আমাদের ট্যাগ করতে ভুলবেন না। আপনি কি বানাবেন তা আমরা দেখতে চাই।

চেক আউট ওয়েবসাইট