এই কোডল্যাব সম্পর্কে
1. তুমি শুরু করার আগে
পূর্ববর্তী কোডল্যাবে, আপনি অডিও শ্রেণীবিভাগের জন্য একটি মৌলিক অ্যাপ তৈরি করেছেন।
আপনি যদি প্রাক-প্রশিক্ষিত মডেলে উপস্থিত নয় এমন বিভিন্ন শ্রেণীর অডিও সনাক্ত করার জন্য অডিও শ্রেণীবিভাগ মডেলটি কাস্টমাইজ করতে চান? অথবা আপনি যদি নিজের ডেটা ব্যবহার করে মডেলটি কাস্টমাইজ করতে চান?
এই কোডল্যাবে, আপনি পাখির শব্দ সনাক্ত করতে একটি প্রাক-প্রশিক্ষিত অডিও শ্রেণীবিভাগ মডেল কাস্টমাইজ করবেন। একই কৌশল আপনার নিজস্ব ডেটা ব্যবহার করে প্রতিলিপি করা যেতে পারে।
পূর্বশর্ত
এই কোডল্যাবটি অভিজ্ঞ মোবাইল ডেভেলপারদের জন্য ডিজাইন করা হয়েছে যারা মেশিন লার্নিংয়ের অভিজ্ঞতা অর্জন করতে চান। আপনার সাথে পরিচিত হওয়া উচিত:
- কোটলিন এবং অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে অ্যান্ড্রয়েড বিকাশ
- মৌলিক পাইথন সিনট্যাক্স
আপনি কি শিখবেন
- কিভাবে অডিও ডোমেনের জন্য ট্রান্সফার লার্নিং করবেন
- কিভাবে আপনার নিজের ডেটা তৈরি করবেন
- কিভাবে একটি Android অ্যাপে আপনার নিজের মডেল স্থাপন করবেন
আপনি কি প্রয়োজন হবে
- অ্যান্ড্রয়েড স্টুডিওর একটি সাম্প্রতিক সংস্করণ (v4.1.2+)
- API 23 (Android 6.0) এ Android সংস্করণ সহ শারীরিক Android ডিভাইস
- নমুনা কোড
- কোটলিনে অ্যান্ড্রয়েড বিকাশের প্রাথমিক জ্ঞান
2. পাখির ডেটাসেট
আপনি একটি Birdsong ডেটাসেট ব্যবহার করবেন যা ব্যবহার করা সহজ করার জন্য ইতিমধ্যেই প্রস্তুত। সমস্ত অডিও ফাইল Xeno-canto ওয়েবসাইট থেকে আসে।
এই ডেটাসেটে এর থেকে গান রয়েছে:
নাম : হাউস স্প্যারো | কোড : হাউসপা |
নাম : রেড ক্রসবিল | কোড : রেডক্রো |
নাম : হোয়াইট-ব্রেস্টেড উড-ওয়েন | কোড : wbwwre1 |
নাম : চেস্টনাট-মুকুটযুক্ত অ্যান্টপিট্টা | কোড : chcant2 |
নাম : আজরার স্পাইনটেল | কোড : azaspi1 |
এই ডেটাসেটটি একটি জিপ ফাইলে রয়েছে এবং এর বিষয়বস্তু হল:
- একটি
metadata.csv
যাতে প্রতিটি অডিও ফাইল সম্পর্কে সমস্ত তথ্য থাকে, যেমন অডিওটি কে রেকর্ড করেছে, কোথায় রেকর্ড করা হয়েছে, ব্যবহারের লাইসেন্স এবং পাখির নাম। - একটি ট্রেন এবং পরীক্ষার ফোল্ডার।
- ট্রেন/পরীক্ষা ফোল্ডারের ভিতরে, প্রতিটি পাখি কোডের জন্য একটি ফোল্ডার আছে। তাদের প্রতিটির ভিতরে সেই বিভক্ত পাখিটির জন্য সমস্ত .wav ফাইল রয়েছে।
অডিও ফাইল সব wav বিন্যাসে এবং এই স্পেসিফিকেশন অনুসরণ করুন:
এই স্পেসিফিকেশনটি গুরুত্বপূর্ণ কারণ আপনি একটি বেস মডেল ব্যবহার করবেন যা এই ফর্ম্যাটে ডেটা আশা করে। এটি সম্পর্কে আরও জানতে, আপনি এই ব্লগ পোস্টে অতিরিক্ত তথ্য পড়তে পারেন।
পুরো প্রক্রিয়াটিকে সহজ করতে, আপনাকে আপনার মেশিনে ডেটাসেট ডাউনলোড করতে হবে না, আপনি এটি Google Colab-এ ব্যবহার করবেন (পরে এই নির্দেশিকাটিতে)।
আপনি যদি নিজের ডেটা ব্যবহার করতে চান তবে আপনার সমস্ত অডিও ফাইলগুলিও এই নির্দিষ্ট বিন্যাসে হওয়া উচিত।
3. নমুনা কোড পান
কোডটি ডাউনলোড করুন
এই কোডল্যাবের সমস্ত কোড ডাউনলোড করতে নিম্নলিখিত লিঙ্কে ক্লিক করুন:
অথবা আপনি যদি পছন্দ করেন, সংগ্রহস্থল ক্লোন করুন:
git clone https://github.com/googlecodelabs/odml-pathways.git
ডাউনলোড করা জিপ ফাইলটি আনপ্যাক করুন। এটি আপনার প্রয়োজনীয় সমস্ত সংস্থান সহ একটি রুট ফোল্ডার ( odml-pathways
) আনপ্যাক করবে। এই কোডল্যাবের জন্য, আপনার শুধুমাত্র audio_classification/codelab2/android
সাবডিরেক্টরির সূত্রের প্রয়োজন হবে।
audio_classification/codelab2/android
সংগ্রহস্থলের android
সাবডিরেক্টরিতে দুটি ডিরেক্টরি রয়েছে:
starter — এই কোডল্যাবের জন্য আপনি যে স্টার্টিং কোড তৈরি করেন।
চূড়ান্ত — সমাপ্ত নমুনা অ্যাপের জন্য সম্পূর্ণ কোড।
স্টার্টার অ্যাপ আমদানি করুন
অ্যান্ড্রয়েড স্টুডিওতে স্টার্টার অ্যাপ আমদানি করে শুরু করুন:
- অ্যান্ড্রয়েড স্টুডিও খুলুন এবং আমদানি প্রকল্প নির্বাচন করুন (Gradle, Eclipse ADT, ইত্যাদি)
- আপনি আগে ডাউনলোড করা সোর্স কোড থেকে
starter
ফোল্ডার (audio_classification/codelab2/android/starter
) খুলুন।
আপনার অ্যাপে সমস্ত নির্ভরতা উপলব্ধ রয়েছে তা নিশ্চিত করার জন্য, আমদানি প্রক্রিয়া শেষ হয়ে গেলে আপনার গ্রেডল ফাইলগুলির সাথে আপনার প্রকল্প সিঙ্ক করা উচিত।
- গ্রেডল ফাইলের সাথে সিঙ্ক প্রজেক্ট নির্বাচন করুন (
অ্যান্ড্রয়েড স্টুডিও টুলবার থেকে।
4. স্টার্টার অ্যাপটি বুঝুন
এই অ্যাপটি একই যা অডিও শ্রেণীবিভাগের জন্য প্রথম কোডল্যাবে তৈরি করা হয়েছিল: অডিও শ্রেণীবিভাগের জন্য একটি মৌলিক অ্যাপ তৈরি করুন ।
কোডটি বিশদভাবে আরও ভালভাবে বোঝার জন্য, এটি চালিয়ে যাওয়ার আগে আপনাকে সেই কোডল্যাবটি করার পরামর্শ দেওয়া হচ্ছে।
সমস্ত কোড MainActivity
রয়েছে (যতটা সম্ভব সহজ রাখতে)।
সংক্ষেপে, কোডটি এর কাজগুলিকে অতিক্রম করে:
- মডেল লোড হচ্ছে
val classifier = AudioClassifier.createFromFile(this, modelPath)
- অডিও রেকর্ডার তৈরি করা এবং রেকর্ডিং শুরু করা
val tensor = classifier.createInputTensorAudio()
val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
"Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs
val record = classifier.createAudioRecord()
record.startRecording()
- অনুমান চালানোর জন্য একটি টাইমার থ্রেড তৈরি করা হচ্ছে। পদ্ধতি
scheduleAtFixedRate
এর পরামিতি হল এটি কার্যকর করা শুরু করার জন্য কতক্ষণ অপেক্ষা করবে এবং ধারাবাহিক কার্য সম্পাদনের মধ্যে সময়। নীচের কোডে, এটি 1 মিলিসেকেন্ডে শুরু হবে এবং প্রতি 500 মিলিসেকেন্ডে আবার চলবে৷
Timer().scheduleAtFixedRate(1, 500) {
...
}
- ক্যাপচার করা অডিওতে অনুমান চালানো হচ্ছে
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
- কম স্কোর জন্য ফিল্টার শ্রেণীবিভাগ
val filteredModelOutput = output[0].categories.filter {
it.score > probabilityThreshold
}
- স্ক্রীনে ফলাফল দেখান
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
.joinToString(separator = "\n")
runOnUiThread {
textView.text = outputStr
}
আপনি এখন অ্যাপটি চালাতে পারেন এবং এটির সাথে খেলতে পারেন, তবে মনে রাখবেন যে এটি আরও জেনেরিক প্রাক-প্রশিক্ষিত মডেল ব্যবহার করছে।
5. মডেল মেকারের সাথে একটি কাস্টম অডিও ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ দিন
পূর্ববর্তী ধাপে, আপনি একটি অ্যাপ ডাউনলোড করেছেন যা অডিও ইভেন্টগুলিকে শ্রেণীবদ্ধ করতে একটি প্রাক-প্রশিক্ষিত মডেল ব্যবহার করে। কিন্তু কখনও কখনও আপনাকে এই মডেলটিকে অডিও ইভেন্টগুলিতে কাস্টমাইজ করতে হবে যা আপনি আগ্রহী বা এটিকে আরও বিশেষ সংস্করণ করতে হবে৷
যেমন আগে উল্লেখ করা হয়েছে, আপনি পাখির শব্দের মডেলটিকে বিশেষায়িত করবেন। এখানে পাখির অডিও সহ একটি ডেটাসেট রয়েছে , যা Xeno-canto ওয়েবসাইট থেকে তৈরি করা হয়েছে৷
সহযোগিতামূলক
এর পরে, কাস্টম মডেল প্রশিক্ষণের জন্য Google Colab-এ যাওয়া যাক।
কাস্টম মডেলটি প্রশিক্ষণ দিতে প্রায় 30 মিনিট সময় লাগবে।
আপনি যদি এই ধাপটি এড়িয়ে যেতে চান, তাহলে আপনি প্রদত্ত ডেটাসেটের সাহায্যে কোলাবে যে মডেলটি প্রশিক্ষণ নিয়েছেন সেটি ডাউনলোড করে পরবর্তী ধাপে যেতে পারেন
6. অ্যান্ড্রয়েড অ্যাপে কাস্টম TFLite মডেল যোগ করুন
এখন আপনি আপনার নিজের অডিও ক্লাসিফিকেশন মডেলকে প্রশিক্ষিত করেছেন এবং স্থানীয়ভাবে এটি সংরক্ষণ করেছেন, আপনাকে এটিকে Android অ্যাপের সম্পদ ফোল্ডারে রাখতে হবে।
প্রথম ধাপ হল ডাউনলোড করা মডেলটিকে আগের ধাপ থেকে আপনার অ্যাপের সম্পদ ফোল্ডারে নিয়ে যাওয়া।
- অ্যান্ড্রয়েড স্টুডিওতে, অ্যান্ড্রয়েড প্রজেক্ট ভিউ সহ, সম্পদ ফোল্ডারে ডান-ক্লিক করুন।
- আপনি বিকল্পগুলির একটি তালিকা সহ একটি পপআপ দেখতে পাবেন। এর মধ্যে একটি আপনার ফাইল সিস্টেমে ফোল্ডারটি খুলতে হবে। আপনার অপারেটিং সিস্টেমের জন্য উপযুক্ত একটি খুঁজুন এবং এটি নির্বাচন করুন. একটি ম্যাকে এটি ফাইন্ডারে প্রকাশিত হবে, উইন্ডোজে এটি এক্সপ্লোরারে ওপেন হবে এবং উবুন্টুতে এটি ফাইলগুলিতে শো হবে।
- ফোল্ডারে ডাউনলোড করা মডেলটি অনুলিপি করুন।
একবার আপনি এটি সম্পন্ন করার পরে, অ্যান্ড্রয়েড স্টুডিওতে ফিরে যান এবং আপনার সম্পদ ফোল্ডারের মধ্যে আপনার ফাইলটি দেখতে হবে।
7. বেস অ্যাপে নতুন মডেল লোড করুন
বেস অ্যাপটি ইতিমধ্যেই একটি প্রাক-প্রশিক্ষিত মডেল ব্যবহার করে। আপনি এটির সাথে প্রতিস্থাপন করবেন যা আপনি এইমাত্র প্রশিক্ষিত করেছেন।
- TODO 1: সম্পদ ফোল্ডারে যোগ করার পর নতুন মডেল লোড করতে,
modelPath
ভেরিয়েবলের মান পরিবর্তন করুন:
var modelPath = "my_birds_model.tflite"
নতুন মডেলের দুটি আউটপুট (হেড) রয়েছে:
- এই ক্ষেত্রে YAMNet আপনার ব্যবহৃত বেস মডেল থেকে আসল, আরও জেনেরিক আউটপুট।
- সেকেন্ডারি আউটপুট যা আপনি প্রশিক্ষণে ব্যবহার করা পাখিদের জন্য নির্দিষ্ট।
এটি প্রয়োজনীয় কারণ YAMNet সাধারণ একাধিক ক্লাসকে স্বীকৃতি দেওয়ার জন্য একটি দুর্দান্ত কাজ করে, যেমন সাইলেন্স। এটির সাথে আপনাকে অন্য সমস্ত ক্লাস নিয়ে চিন্তা করতে হবে না যেগুলি আপনি আপনার ডেটাসেটে যোগ করেননি।
আপনি এখন যা করবেন তা হল, যদি YAMNet শ্রেণিবিন্যাস পাখি শ্রেণীর জন্য একটি উচ্চ স্কোর দেখায়, তাহলে আপনি অন্য আউটপুটে কোন পাখিটি তা দেখবেন।
- TODO 2: পড়ুন যদি শ্রেণীবিভাগের প্রথম প্রধানের উচ্চ আত্মবিশ্বাস থাকে তবে এটি একটি পাখির শব্দ। এখানে আপনি ফিল্টারিং পরিবর্তন করে এমন কিছু ফিল্টার করতে পারবেন যা বার্ড নয়:
val filteredModelOuput = output[0].categories.filter {
it.label.contains("Bird") && it.score > .3
}
- TODO 3: মডেলের বেস হেড যদি শনাক্ত করে যে অডিওতে একটি ভাল সম্ভাবনার সাথে একটি পাখি ছিল, তাহলে আপনি দ্বিতীয় মাথায় এটি কোনটি তা পাবেন:
if (filteredModelOutput.isNotEmpty()) {
Log.i("Yamnet", "bird sound detected!")
filteredModelOutput = output[1].categories.filter {
it.score > probabilityThreshold
}
}
এবং এটাই. আপনি যেটিকে সবেমাত্র প্রশিক্ষিত করেছেন সেটি ব্যবহার করতে মডেল পরিবর্তন করা সহজ।
পরবর্তী ধাপ এটি পরীক্ষা করা হয়.
8. আপনার নতুন মডেল দিয়ে অ্যাপটি পরীক্ষা করুন
আপনি অ্যাপে আপনার অডিও শ্রেণীবিভাগের মডেল একত্রিত করেছেন, তাই আসুন এটি পরীক্ষা করি।
- আপনার অ্যান্ড্রয়েড ডিভাইস সংযোগ করুন, এবং রান ক্লিক করুন (
) অ্যান্ড্রয়েড স্টুডিও টুলবারে।
অ্যাপটি পাখির অডিও সঠিকভাবে অনুমান করতে সক্ষম হওয়া উচিত। পরীক্ষা করা সহজ করতে, আপনার কম্পিউটার থেকে শুধুমাত্র একটি অডিও চালান (আগের ধাপগুলি থেকে), এবং আপনার ফোন এটি সনাক্ত করতে সক্ষম হওয়া উচিত। এটি হয়ে গেলে, এটি স্ক্রিনে পাখির নাম এবং এটির সঠিক হওয়ার সম্ভাবনা দেখাবে।
9. অভিনন্দন
এই কোডল্যাবে, আপনি Model Maker-এর সাথে আপনার নিজস্ব অডিও শ্রেণীবিভাগ মডেল তৈরি করতে এবং TensorFlow Lite ব্যবহার করে আপনার মোবাইল অ্যাপে এটি স্থাপন করতে শিখেছেন। TFLite সম্পর্কে আরও জানতে, অন্যান্য TFLite নমুনাগুলি দেখুন।
আমরা কভার করেছি কি
- কীভাবে আপনার নিজের ডেটাসেট প্রস্তুত করবেন
- মডেল মেকারের সাথে অডিও শ্রেণীবিভাগের জন্য ট্রান্সফার লার্নিং কীভাবে করবেন
- অ্যান্ড্রয়েড অ্যাপে আপনার মডেল কীভাবে ব্যবহার করবেন
পরবর্তী পদক্ষেপ
- আপনার নিজের ডেটা দিয়ে চেষ্টা করুন
- আপনি কি নির্মাণ আমাদের সাথে শেয়ার করুন
আরও জানুন
- শেখার পথের লিঙ্ক
- টেনসরফ্লো লাইট ডকুমেন্টেশন
- মডেল মেকার ডকুমেন্টেশন
- টেনসরফ্লো হাব ডকুমেন্টেশন
- Google প্রযুক্তির সাহায্যে অন-ডিভাইস মেশিন লার্নিং