ডেটা অগমেন্টেশন, দীর্ঘকাল ধরে, একটি "স্ট্যাটিক" ডেটাসেটকে রূপান্তরিত ভেরিয়েন্টগুলির সাথে প্রতিস্থাপন করার একটি উপায় হিসাবে কাজ করছে, যা এর পরিবর্তনকে শক্তিশালী করে কনভোল্যুশনাল নিউরাল নেটওয়ার্ক (সিএনএন), এবং সাধারণত ইনপুট দৃঢ়তা নেতৃস্থানীয়.
বিঃদ্রঃ: সিদ্ধান্ত নেওয়ার সময় মডেলগুলিকে নির্দিষ্ট পারটুবেশনের প্রতি অন্ধ করে তোলার জন্য ইনভেরিয়েন্স ফুটে ওঠে। একটি বিড়ালের একটি চিত্র এখনও একটি বিড়ালের একটি চিত্র যদি আপনি এটি আয়না বা এটি ঘোরান.
আমরা যে আকারে ডেটা পরিবর্ধনের সময় এটি ব্যবহার করছি তা একটি এনকোড করে অভাব ট্রান্সলেশনাল ভ্যারিয়েন্স সম্পর্কে জ্ঞান, যা অবজেক্ট ডিটেকশন, সিমেন্টিক এবং ইনস্ট্যান্স সেগমেন্টেশন ইত্যাদির জন্য গুরুত্বপূর্ণ। invariance এটি প্রদান করে শ্রেণীবিভাগ মডেলের জন্য অনেক সময় অনুকূল, এবং এইভাবে, বর্ধন আরও সাধারণভাবে এবং আরও আক্রমনাত্মকভাবে শ্রেণীবিভাগের মডেলগুলিতে প্রয়োগ করা হয়।
পরিবর্ধনের প্রকারভেদ
বর্ধন খুব সহজ হতে শুরু করেছে - ছোট ঘূর্ণন, অনুভূমিক এবং উল্লম্ব ফ্লিপ, বৈসাদৃশ্য বা উজ্জ্বলতা ওঠানামা ইত্যাদি। সাম্প্রতিক বছরগুলিতে, আরও বিস্তৃত পদ্ধতি তৈরি করা হয়েছে, যার মধ্যে রয়েছে কাটআউট (স্থানিক ড্রপআউট ইনপুট চিত্রগুলিতে এলোমেলোভাবে কালো স্কোয়ারের পরিচয় দেয়) এবং মেশানো (ছবির অংশগুলি মিশ্রিত করা এবং লেবেলের অনুপাত আপডেট করা), এবং তাদের সংমিশ্রণ - কাটমিক্স. নতুন পরিবর্ধন পদ্ধতিগুলি আসলে লেবেলগুলির জন্য দায়ী, এবং কাটমিক্সের মতো পদ্ধতিগুলি লেবেলের অনুপাতগুলিকে পরিবর্তন করে যা প্রতিটি শ্রেণীর অংশগুলি মিশ্রিত করে তোলা চিত্রের অনুপাতের সমান হয়৷
সম্ভাব্য পরিবর্ধনের একটি ক্রমবর্ধমান তালিকার সাথে, কেউ কেউ এলোমেলোভাবে (বা অন্ততপক্ষে তাদের কিছু উপসেট) প্রয়োগ করতে শুরু করেছে, এই ধারণার সাথে যে পরিবর্ধনের একটি র্যান্ডম সেট মডেলগুলির দৃঢ়তাকে শক্তিশালী করবে এবং মূল সেটটিকে অনেক বড় দিয়ে প্রতিস্থাপন করবে। ইনপুট ইমেজ স্থান. এইটি যেখানে RandAugment
কিক ইন!
KerasCV এবং RandAugment
কেরাসসিভি এটি একটি পৃথক প্যাকেজ, কিন্তু এখনও কেরাসের একটি অফিসিয়াল সংযোজন, কেরাস টিম দ্বারা তৈরি করা হয়েছে৷ এর মানে হল যে এটি মূল প্যাকেজের সমান পরিমাণে পোলিশ এবং স্বজ্ঞাততা পায়, তবে এটি নিয়মিত কেরাস মডেল এবং তাদের স্তরগুলির সাথে আপাতদৃষ্টিতে একীভূত হয়। শুধুমাত্র পার্থক্য আপনি কখনও লক্ষ্য করবেন কল করা হয় keras_cv.layers...
পরিবর্তে keras.layers...
.
কেরাসসিভি লেখার মতো এখনও বিকাশে রয়েছে এবং ইতিমধ্যে 27টি নতুন প্রিপ্রসেসিং স্তর অন্তর্ভুক্ত করেছে, RandAugment
, CutMix
, এবং MixUp
তাদের কিছু হচ্ছে আসুন দেখে নেওয়া যাক এটি প্রয়োগ করতে কেমন লাগে RandAugment
ইমেজ, এবং কিভাবে আমরা এলোমেলো পরিবর্ধন সহ এবং ছাড়াই একটি শ্রেণীবদ্ধকারীকে প্রশিক্ষণ দিতে পারি।
প্রথমে, ইনস্টল করুন keras_cv
:
$ pip install keras_cv
বিঃদ্রঃ: KerasCV-এর কাজ করার জন্য TensorFlow 2.9 প্রয়োজন। আপনার যদি এটি ইতিমধ্যে না থাকে তবে চালান $ pip install -U tensorflow
প্রথম।
এখন, ইমেজেনেটে সহজে অ্যাক্সেসের জন্য টেনসরফ্লো ডেটাসেটের পাশাপাশি টেনসরফ্লো, কেরাস এবং কেরাসসিভি আমদানি করা যাক:
import tensorflow as tf
from tensorflow import keras
import keras_cv
import tensorflow_datasets as tfds
আসুন একটি ছবিতে লোড করি এবং এটিকে তার আসল আকারে প্রদর্শন করি:
import matplotlib.pyplot as plt
import cv2
cat_img = cv2.cvtColor(cv2.imread('cat.jpg'), cv2.COLOR_BGR2RGB)
cat_img = cv2.resize(cat_img, (224, 224))
plt.imshow(cat_img)
এখন, আবেদন করা যাক RandAugment
এটিতে, বেশ কয়েকবার এবং ফলাফলগুলি একবার দেখুন:
fig = plt.figure(figsize=(10,10))
for i in range(16):
ax = fig.add_subplot(4,4,i+1)
aug_img = keras_cv.layers.RandAugment(value_range=(0, 255))(cat_img)
ax.imshow(aug_img.numpy().astype('int'))
স্তর আছে একটি magnitude
যুক্তি, যা ডিফল্ট 0.5
এবং পরিবর্ধনের প্রভাব বাড়াতে বা কমাতে পরিবর্তন করা যেতে পারে:
fig = plt.figure(figsize=(10,10))
for i in range(16):
ax = fig.add_subplot(4,4,i+1)
aug_img = keras_cv.layers.RandAugment(value_range=(0, 255), magnitude=0.1)(cat_img)
ax.imshow(aug_img.numpy().astype('int'))
যখন একটি কম মান যেমন সেট 0.1
- আপনি অনেক কম আক্রমনাত্মক বৃদ্ধি দেখতে পাবেন:
একটি স্তর হচ্ছে - এটি মডেল বা মধ্যে ব্যবহার করা যেতে পারে tf.data
ডেটাসেট তৈরি করার সময় পাইপলাইন। এটা তৈরি করে RandAugment
বেশ নমনীয়! অতিরিক্ত যুক্তি হল augmentations_per_image
এবং rate
যুক্তি, যা একসাথে কাজ করে।
জন্য 0...augmentations_per_image
, লেয়ারটি একটি ইমেজে প্রয়োগ করার জন্য পাইপলাইনে একটি র্যান্ডম প্রিপ্রসেসিং লেয়ার যোগ করে। ডিফল্টের ক্ষেত্রে 3
- তিনটি ভিন্ন অপারেশন পাইপলাইনে যোগ করা হয়েছে। তারপর, পাইপলাইনে প্রতিটি বৃদ্ধির জন্য একটি এলোমেলো সংখ্যার নমুনা নেওয়া হয় - এবং যদি এটি এর চেয়ে কম হয় rate
(আশেপাশে ডিফল্ট 0.9
) – পরিবর্ধন প্রয়োগ করা হয়।
সারমর্মে - চিত্রটিতে প্রয়োগ করা পাইপলাইনে প্রতিটি (এলোমেলো) বৃদ্ধির 90% সম্ভাবনা রয়েছে।
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
স্বাভাবিকভাবেই এর মানে হল যে সমস্ত বর্ধন প্রয়োগ করতে হবে না, বিশেষ করে যদি আপনি কম করেন rate
. এছাড়াও আপনি কাস্টমাইজ করতে পারেন কোন ক্রিয়াকলাপগুলি a এর মাধ্যমে অনুমোদিত৷ RandomAugmentationPipeline
স্তর, যা RandAugment
বিশেষ ক্ষেত্রে. উপর একটি পৃথক গাইড RandomAugmentationPipeline
শীঘ্রই প্রকাশিত হবে।
RandAugment সহ এবং ছাড়া একটি ক্লাসিফায়ার প্রশিক্ষণ
ডেটা প্রস্তুতি/লোডিং দিকটি সহজ করতে এবং ফোকাস করুন RandAugment
, এর ব্যবহার করা যাক tfds
ইমেজেনেটের একটি অংশে লোড করতে:
(train, valid_set, test_set), info = tfds.load("imagenette",
split=["train[:70%]", "validation", "train[70%:]"],
as_supervised=True, with_info=True)
class_names = info.features["label"].names
n_classes = info.features["label"].num_classes
print(f'Class names: {class_names}')
print('Num of classes:', n_classes)
print("Train set size:", len(train))
print("Test set size:", len(test_set))
print("Valid set size:", len(valid_set))
আমরা প্রশিক্ষণের ডেটার শুধুমাত্র একটি অংশ লোড করেছি, যাতে কম যুগে ডেটাসেটকে ওভারফিট করা সহজ হয় (আমাদের পরীক্ষা দ্রুত চালানো হয়, কার্যকরীভাবে)। যেহেতু ইমেজেনেটের ছবিগুলি বিভিন্ন আকারের, আসুন একটি তৈরি করি preprocess()
ফাংশন যা ডেটাসেট ম্যাপ করতে তাদের আকার পরিবর্তন করে, সেইসাথে একটি augment()
একটি ফাংশন যে ছবি augates tf.data.Dataset
:
def preprocess(images, labels):
return tf.image.resize(images, (224, 224)), tf.one_hot(labels, 10)
def augment(images, labels):
inputs = {"images": images, "labels": labels}
outputs = keras_cv.layers.RandAugment(value_range=(0, 255))(inputs)
return outputs['images'], outputs['labels']
এখন - আমরা লেবেলগুলিকে এক-গরম এনকোড করেছি। আমরা অগত্যা করতে হবে না, কিন্তু মত augmentations জন্য CutMix
যে লেবেল এবং তাদের অনুপাত সঙ্গে টেম্পার, আপনি করতে হবে. যেহেতু আপনি সেই সাথে প্রয়োগ করতে চাইতে পারেন RandAugment
শক্তিশালী ক্লাসিফায়ার তৈরি করতে তাদের সাথে সত্যিই ভাল কাজ করে – আসুন এক-হট এনকোডিং ছেড়ে দেওয়া যাক। অতিরিক্তভাবে, RandAugment
ঠিক এই কারণে ইমেজ এবং লেবেল সহ একটি অভিধানে নিয়ে যায় - কিছু পরিবর্ধন যা আপনি যোগ করতে পারেন তা আসলে লেবেলগুলিকে পরিবর্তন করবে, তাই সেগুলি বাধ্যতামূলক৷ আপনি থেকে বর্ধিত ছবি এবং লেবেল বের করতে পারেন outputs
অভিধান সহজে, তাই এটি একটি অতিরিক্ত, তবুও সহজ, বৃদ্ধির সময় নেওয়ার পদক্ষেপ।
এর থেকে প্রত্যাবর্তিত বিদ্যমান ডেটাসেটগুলি ম্যাপ করি tfds
সাথে preprocess()
ফাংশন, তাদের ব্যাচ এবং শুধুমাত্র প্রশিক্ষণ সেট বৃদ্ধি:
valid_set = valid_set.map(preprocess).batch(32).prefetch(tf.data.AUTOTUNE)
train_set = train.map(preprocess).batch(32).prefetch(tf.data.AUTOTUNE)
train_set_aug = train.map(preprocess).map(augment_data,
num_parallel_calls=tf.data.AUTOTUNE).batch(32).prefetch(tf.data.AUTOTUNE)
এর একটি নেটওয়ার্ক প্রশিক্ষণ দেওয়া যাক! keras_cv.models
কিছু অন্তর্নির্মিত নেটওয়ার্ক আছে, অনুরূপ keras.applications
. যদিও তালিকাটি এখনও সংক্ষিপ্ত - এটি সময়ের সাথে সাথে প্রসারিত হবে এবং দখল করবে keras.applications
. API খুব অনুরূপ, তাই পোর্টিং কোড বেশিরভাগ অনুশীলনকারীদের জন্য মোটামুটি সহজ হবে:
effnet = keras_cv.models.EfficientNetV2B0(include_rescaling=True, include_top=True, classes=10)
effnet.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
history = effnet.fit(train_set, epochs=25, validation_data = valid_set)
বিকল্পভাবে, আপনি বর্তমান ব্যবহার করতে পারেন keras.applications
:
effnet = keras.applications.EfficientNetV2B0(weights=None, classes=10)
effnet.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
history1 = effnet.fit(train_set, epochs=50, validation_data=valid_set)
এর ফলে এমন একটি মডেল দেখা যায় যা সত্যিই খুব ভালো করে না:
Epoch 1/50
208/208 [==============================] - 60s 238ms/step - loss: 2.7742 - accuracy: 0.2313 - val_loss: 3.2200 - val_accuracy: 0.3085
...
Epoch 50/50
208/208 [==============================] - 48s 229ms/step - loss: 0.0272 - accuracy: 0.9925 - val_loss: 2.0638 - val_accuracy: 0.6887
এখন, বর্ধিত ডেটাসেটে একই নেটওয়ার্ক সেটআপের প্রশিক্ষণ দেওয়া যাক। প্রতিটি ব্যাচ স্বতন্ত্রভাবে বর্ধিত করা হয়, তাই যখনই একই ব্যাচের চিত্রগুলি (পরবর্তী যুগে) আসে - তাদের বিভিন্ন বর্ধন থাকবে:
effnet = keras.applications.EfficientNetV2B0(weights=None, classes=10)
effnet.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
history2 = effnet.fit(train_set_aug, epochs=50, validation_data = valid_set)
Epoch 1/50
208/208 [==============================] - 141s 630ms/step - loss: 2.9966 - accuracy: 0.1314 - val_loss: 2.7398 - val_accuracy: 0.2395
...
Epoch 50/50
208/208 [==============================] - 125s 603ms/step - loss: 0.7313 - accuracy: 0.7583 - val_loss: 0.6101 - val_accuracy: 0.8143
অনেক ভাল! আপনি এখনও অন্যান্য বৃদ্ধি প্রয়োগ করতে চান, যেমন CutMix
এবং MixUp
নেটওয়ার্কের নির্ভুলতা বাড়ানোর জন্য অন্যান্য প্রশিক্ষণ কৌশলগুলির পাশাপাশি – শুধু RandAugment
উল্লেখযোগ্যভাবে সাহায্য করেছে এবং একটি দীর্ঘ পরিবর্ধন পাইপলাইনের সাথে তুলনীয় হতে পারে।
যদি আপনি ট্রেনিং সহ ট্রেনিং কার্ভের তুলনা করেন এবং বৈধতা বক্ররেখা - এটা শুধুমাত্র কত স্পষ্ট হয়ে ওঠে RandAugment
সাহায্য করে:
নন-অগমেন্টেড পাইপলাইনে, নেটওয়ার্ক ওভারফিট (প্রশিক্ষণের নির্ভুলতা সিলিংয়ে আঘাত করে) এবং বৈধতা নির্ভুলতা কম থাকে। বর্ধিত পাইপলাইনে, প্রশিক্ষণের নির্ভুলতা শুরু থেকে শেষ পর্যন্ত বৈধতা নির্ভুলতার চেয়ে কম থাকে.
একটি উচ্চতর প্রশিক্ষণের ক্ষতির সাথে, নেটওয়ার্কটি এখনও যে ভুলগুলি করে সে সম্পর্কে অনেক বেশি সচেতন, এবং এটিকে রূপান্তরগুলিকে অপরিবর্তনীয় করে তুলতে আরও আপডেট করা যেতে পারে৷ আগেরটি আপডেট করার কোন প্রয়োজন দেখছে না, যখন পরেরটি করে এবং সম্ভাবনার সিলিং বাড়ায়।
উপসংহার
কেরাসসিভি এটি একটি পৃথক প্যাকেজ, কিন্তু এখনও কেরাসের একটি অফিসিয়াল সংযোজন, কেরাস টিম দ্বারা তৈরি করা হয়েছে, যার লক্ষ্য আপনার কেরাস প্রকল্পগুলিতে শিল্প-শক্তির সিভি আনা। কেরাসসিভি লেখার মতো এখনও বিকাশে রয়েছে এবং ইতিমধ্যে 27টি নতুন প্রিপ্রসেসিং স্তর অন্তর্ভুক্ত করেছে, RandAugment
, CutMix
, এবং MixUp
তাদের কিছু হচ্ছে
এই সংক্ষিপ্ত নির্দেশিকাতে, আপনি কীভাবে ব্যবহার করতে পারেন তা আমরা দেখেছি RandAugment
প্রয়োগকৃত রূপান্তরগুলির একটি প্রদত্ত তালিকা থেকে বেশ কয়েকটি এলোমেলো রূপান্তর প্রয়োগ করতে এবং যেকোন কেরাস প্রশিক্ষণ পাইপলাইনে অন্তর্ভুক্ত করা কতটা সহজ।
আরও এগিয়ে যাওয়া - কম্পিউটার ভিশনের জন্য ব্যবহারিক গভীর শিক্ষা
আপনার অনুসন্ধিৎসু প্রকৃতি আপনাকে আরও যেতে চায়? আমরা আমাদের চেক আউট সুপারিশ পথ: "পাইথনের সাথে কম্পিউটার ভিশনের জন্য ব্যবহারিক গভীর শিক্ষা".
আরেকটি কম্পিউটার ভিশন কোর্স?
আমরা MNIST সংখ্যা বা MNIST ফ্যাশনের শ্রেণিবিন্যাস করব না। তারা অনেক আগে থেকেই তাদের দায়িত্ব পালন করেছে। উন্নত ব্ল্যাক-বক্স আর্কিটেকচারগুলিকে পারফরম্যান্সের ভার বহন করতে দেওয়ার আগে অনেকগুলি শেখার সংস্থান মৌলিক ডেটাসেট এবং মৌলিক আর্কিটেকচারের উপর ফোকাস করছে।
আমরা ফোকাস করতে চাই demystification, বাস্তবতা, বোধশক্তি, স্বজ্ঞা এবং বাস্তব প্রকল্প. শিখতে চাই কিভাবে আপনি একটি পার্থক্য করতে পারেন? স্তন ক্যান্সারের জন্য আমাদের মস্তিষ্ক যেভাবে ছবিগুলিকে প্রক্রিয়াকরণ করে, তার থেকে শুরু করে স্তন ক্যান্সারের জন্য একটি গবেষণা-গ্রেড ডিপ লার্নিং ক্লাসিফায়ার লেখা পর্যন্ত আমরা আপনাকে "হ্যালুসিনেট" করার নেটওয়ার্কগুলিতে নিয়ে যাব, আপনাকে ব্যবহারিক কাজের মাধ্যমে নীতি ও তত্ত্ব শেখাবো, আপনাকে সজ্জিত করব কম্পিউটারের দৃষ্টিভঙ্গি সমাধানের জন্য গভীর শিক্ষা প্রয়োগে বিশেষজ্ঞ হওয়ার উপায় এবং সরঞ্জাম।
ভিতরে কি?
- দৃষ্টির প্রথম নীতি এবং কীভাবে কম্পিউটারকে "দেখতে" শেখানো যায়
- কম্পিউটার ভিশনের বিভিন্ন কাজ এবং অ্যাপ্লিকেশন
- ট্রেডের টুল যা আপনার কাজকে সহজ করে তুলবে
- কম্পিউটার ভিশনের জন্য ডেটাসেট খোঁজা, তৈরি এবং ব্যবহার করা
- কনভোল্যুশনাল নিউরাল নেটওয়ার্কের তত্ত্ব এবং প্রয়োগ
- ডেটাসেটে ডোমেন শিফট, সহ-ঘটনা এবং অন্যান্য পক্ষপাতগুলি পরিচালনা করা
- আপনার সুবিধার জন্য শেখার স্থানান্তর এবং অন্যদের প্রশিক্ষণের সময় এবং গণনামূলক সংস্থানগুলি ব্যবহার করুন
- একটি অত্যাধুনিক স্তন ক্যান্সারের শ্রেণীবিভাগ তৈরি এবং প্রশিক্ষণ
- কীভাবে মূলধারার ধারণাগুলিতে সংশয়বাদের একটি স্বাস্থ্যকর ডোজ প্রয়োগ করা যায় এবং ব্যাপকভাবে গৃহীত কৌশলগুলির প্রভাব বোঝা যায়
- T-SNE এবং PCA ব্যবহার করে একটি ConvNet-এর "ধারণা স্থান" ভিজ্যুয়ালাইজ করা
- কোম্পানিগুলি কীভাবে ভাল ফলাফল অর্জন করতে কম্পিউটার দৃষ্টি কৌশল ব্যবহার করে তার কেস স্টাডি
- সঠিক মডেল মূল্যায়ন, সুপ্ত স্থান ভিজ্যুয়ালাইজেশন এবং মডেলের মনোযোগ সনাক্তকরণ
- ডোমেন গবেষণা সম্পাদন করা, আপনার নিজস্ব ডেটাসেট প্রক্রিয়াকরণ এবং মডেল পরীক্ষা স্থাপন করা
- অত্যাধুনিক স্থাপত্য, ধারণাগুলির অগ্রগতি, কী সেগুলিকে অনন্য করে তোলে এবং কীভাবে সেগুলি বাস্তবায়ন করা যায়
- KerasCV – একটি আধুনিক পাইপলাইন এবং মডেল তৈরি করার জন্য একটি WIP লাইব্রেরি
- কিভাবে পার্স এবং পেপার পড়ুন এবং সেগুলি নিজেই প্রয়োগ করুন
- আপনার আবেদনের উপর নির্ভর করে মডেল নির্বাচন করুন
- এন্ড-টু-এন্ড মেশিন লার্নিং পাইপলাইন তৈরি করা
- দ্রুত আর-সিএনএন, রেটিনানেট, এসএসডি এবং ইওলোর সাহায্যে অবজেক্ট সনাক্তকরণের উপর ল্যান্ডস্কেপ এবং অন্তর্দৃষ্টি
- উদাহরণ এবং শব্দার্থিক বিভাজন
- YOLOv5 এর সাথে রিয়েল-টাইম অবজেক্ট রিকগনিশন
- YOLOv5 অবজেক্ট ডিটেক্টর প্রশিক্ষণ
- KerasNLP ব্যবহার করে ট্রান্সফরমারের সাথে কাজ করা (শিল্প-শক্তি WIP লাইব্রেরি)
- চিত্রের ক্যাপশন তৈরি করতে ConvNets-এর সাথে ট্রান্সফরমার একীভূত করা
- ডিপড্রিম
- কম্পিউটার ভিশনের জন্য ডিপ লার্নিং মডেল অপ্টিমাইজেশান