Pre-trained models হল মডেলগুলি যা একটি বড় ডেটাসেটে প্রশিক্ষিত হয় এবং তারপর সেই মডেলগুলি নতুন ডেটাতে পুনরায় প্রশিক্ষণ বা fine-tuning করতে ব্যবহৃত হয়। ResNet, VGG, এবং Inception হল জনপ্রিয় প্রি-ট্রেইনড মডেল যা কম্পিউটার ভিশন টাস্ক যেমন ইমেজ ক্লাসিফিকেশন, অবজেক্ট ডিটেকশন, এবং ফিচার এক্সট্রাকশন এর জন্য ব্যবহৃত হয়।
এই মডেলগুলির সুবিধা হল যে এগুলি ImageNet ডেটাসেটে প্রশিক্ষিত, যা প্রায় 14 মিলিয়ন ইমেজ এবং 1000 ক্লাসের অন্তর্ভুক্ত। সুতরাং, এই মডেলগুলি বিভিন্ন ধরনের সাধারণ বৈশিষ্ট্য শিখে নেয় এবং দ্রুত transfer learning বা fine-tuning করতে সহায়তা করে।
এখানে ResNet, VGG, এবং Inception মডেলগুলি ব্যবহার করার ধাপ ব্যাখ্যা করা হলো, বিশেষ করে MXNet বা Gluon ব্যবহার করে।
১. ResNet
ResNet (Residual Networks) একটি গভীর কনভোলিউশনাল নিউরাল নেটওয়ার্ক আর্কিটেকচার যা skip connections (residual connections) ব্যবহার করে এবং এটি খুব গভীর নেটওয়ার্কে প্রশিক্ষণের সুবিধা প্রদান করে। এটি ImageNet ডেটাসেটে প্রশিক্ষিত এবং ইমেজ ক্লাসিফিকেশনের জন্য জনপ্রিয়।
1.1 ResNet ব্যবহার (MXNet / Gluon)
import mxnet as mx
from mxnet.gluon import model_zoo, nn
# Pre-trained ResNet18 মডেল লোড করা
resnet = model_zoo.vision.resnet18_v2(pretrained=True)
# মডেল পরীক্ষা করা
print(resnet)
# ফিচার এক্সট্রাকশন জন্য প্রথম 4 লেয়ার ব্যবহার করা
feature_extractor = nn.Sequential()
feature_extractor.add(*resnet.features)
# ইনপুট ইমেজ তৈরি
input_image = mx.nd.random.uniform(0, 255, shape=(1, 3, 224, 224))
# ফিচার এক্সট্রাকশন
features = feature_extractor(input_image)
print(features.shape)
এখানে:
resnet18_v2(pretrained=True)দ্বারা pre-trained ResNet18 মডেলটি লোড করা হচ্ছে।- আপনি চাইলে অন্যান্য সংস্করণ যেমন ResNet34, ResNet50, বা ResNet101 ব্যবহার করতে পারেন।
২. VGG (Visual Geometry Group)
VGG একটি গভীর নিউরাল নেটওয়ার্ক আর্কিটেকচার যা VGG-16 এবং VGG-19 নামে দুটি জনপ্রিয় মডেল সরবরাহ করে। এগুলি ইমেজ ক্লাসিফিকেশন টাস্কে ব্যাপকভাবে ব্যবহৃত হয় এবং ImageNet ডেটাসেটে প্রশিক্ষিত।
2.1 VGG ব্যবহার (MXNet / Gluon)
from mxnet.gluon import model_zoo, nn
# Pre-trained VGG16 মডেল লোড করা
vgg = model_zoo.vision.vgg16(pretrained=True)
# মডেল পরীক্ষা করা
print(vgg)
# ইনপুট ইমেজ তৈরি
input_image = mx.nd.random.uniform(0, 255, shape=(1, 3, 224, 224))
# মডেল আউটপুট
output = vgg(input_image)
print(output.shape)
এখানে:
vgg16(pretrained=True)দ্বারা pre-trained VGG16 মডেলটি লোড করা হচ্ছে।- আপনি চাইলে VGG19 মডেলও ব্যবহার করতে পারেন।
৩. Inception
Inception একটি আর্কিটেকচার যা GoogleNet নামে পরিচিত। এটি বিভিন্ন সাইজের কনভোলিউশনাল ফিল্টার ব্যবহার করে এবং এটি Inception-v3 সংস্করণে উন্নত করা হয়েছে। এটি বিভিন্ন আর্কিটেকচারাল ইনোভেশনের মাধ্যমে ক্লাসিফিকেশন এবং ডিটেকশন টাস্কে সেরা পারফরম্যান্স প্রদান করে।
3.1 Inception ব্যবহার (MXNet / Gluon)
from mxnet.gluon import model_zoo, nn
# Pre-trained Inception-v3 মডেল লোড করা
inception = model_zoo.vision.inception_v3(pretrained=True)
# মডেল পরীক্ষা করা
print(inception)
# ইনপুট ইমেজ তৈরি
input_image = mx.nd.random.uniform(0, 255, shape=(1, 3, 299, 299))
# মডেল আউটপুট
output = inception(input_image)
print(output.shape)
এখানে:
inception_v3(pretrained=True)দ্বারা pre-trained Inception-v3 মডেলটি লোড করা হচ্ছে।- Inception-v3 মডেলটি 299x299 পিক্সেলের ইনপুট ইমেজের জন্য উপযুক্ত।
Pre-trained মডেল ব্যবহার করার উপকারিতা:
- ফাস্ট ট্রেনিং: Pre-trained মডেলগুলি ImageNet বা অন্যান্য বিশাল ডেটাসেটে প্রশিক্ষিত থাকে, ফলে আপনার ডেটাসেটের ওপর পুনরায় প্রশিক্ষণ দেওয়ার জন্য কম সময় লাগে। আপনি fine-tuning করে কেবল শেষের লেয়ারগুলো প্রশিক্ষণ দিতে পারেন।
- ছোট ডেটাসেটের জন্য উপযুক্ত: যদি আপনার কাছে একটি ছোট ডেটাসেট থাকে, তবে transfer learning (প্রি-ট্রেইনড মডেলের পুনরায় প্রশিক্ষণ) খুবই উপকারী হতে পারে। এটি মডেলটি সাধারণ ফিচার যেমন edges, textures, এবং shapes শিখে নেয়।
- কম্পিউটেশনাল সুবিধা: Pre-trained মডেলগুলি উচ্চ কোয়ালিটির ফিচার এক্সট্রাকশন করতে সক্ষম, যা কম্পিউটেশনালভাবে লাভজনক। আপনি মডেলটি ক্লাসিফিকেশন, ফিচার এক্সট্রাকশন, বা অন্যান্য টাস্কে পুনঃব্যবহার করতে পারেন।
- বিষয়ভিত্তিক অ্যাপ্লিকেশন: VGG, ResNet, এবং Inception মডেলগুলি কম্পিউটার ভিশন এর বিভিন্ন সমস্যার জন্য দক্ষ এবং তারা অনেক রকমের সিম্পল এবং কমপ্লেক্স টাস্কে ভালো পারফরম্যান্স দেয়, যেমন ইমেজ ক্লাসিফিকেশন, অবজেক্ট ডিটেকশন, সেগমেন্টেশন ইত্যাদি।
Transfer Learning (Fine-tuning) প্রক্রিয়া
আপনি যখন pre-trained মডেল ব্যবহার করবেন, তখন আপনি মডেলটি fine-tune করতে পারেন, অর্থাৎ কিছু ফিচার লেয়ার রেখে বাকী অংশ পুনরায় প্রশিক্ষণ দিবেন যাতে মডেলটি আপনার ডেটাসেটের জন্য উপযুক্ত হয়।
Fine-tuning উদাহরণ (ResNet)
from mxnet.gluon import model_zoo, nn
# Pre-trained ResNet মডেল লোড করা
resnet = model_zoo.vision.resnet18_v2(pretrained=True)
# মডেলটি শুধুমাত্র শেষ লেয়ার ফাইন-টিউন করার জন্য
for param in resnet.features.params():
param.grad_req = 'null' # ফিচার লেয়ার আপডেট হবে না
# নতুন লেয়ার যোগ করা
resnet.output = nn.Dense(10) # 10 ক্লাসের জন্য
# ইনপুট ইমেজ
input_image = mx.nd.random.uniform(0, 255, shape=(1, 3, 224, 224))
# মডেল আউটপুট
output = resnet(input_image)
print(output.shape)
এখানে:
- ফিচার এক্সট্রাকশন অংশ পরিবর্তন করা হয়নি, তবে আউটপুট লেয়ারটি নতুন ক্লাসগুলির জন্য fine-tune করা হয়েছে।
সারাংশ:
- ResNet, VGG, এবং Inception হল pre-trained মডেল যা ImageNet ডেটাসেটে প্রশিক্ষিত এবং transfer learning বা fine-tuning এর জন্য ব্যবহৃত হয়।
- MXNet / Gluon ব্যবহার করে এগুলিকে খুব সহজেই লোড এবং ব্যবহার করা যায়।
- Pre-trained models দ্রুত প্রশিক্ষণ এবং ছোট ডেটাসেটের জন্য উপকারী এবং তারা সাধারণ ফিচার শিখে নেয় যা অন্য ডেটাসেটেও কার্যকরী হয়।
Read more