کیراس/ٹینسر فلو پلیٹو بلاکچین ڈیٹا انٹیلی جنس کے ساتھ تصویری درجہ بندی کے لیے رینڈآگمنٹ۔ عمودی تلاش۔ عی

Keras/TensorFlow کے ساتھ تصویری درجہ بندی کے لیے RandAugment

ڈیٹا میں اضافہ، ایک طویل عرصے سے، ایک "جامد" ڈیٹاسیٹ کو تبدیل شدہ مختلف حالتوں کے ساتھ تبدیل کرنے کے ایک ذریعہ کے طور پر کام کر رہا ہے، جس سے Convolutional Neural Networks (CNNs)، اور عام طور پر ان پٹ کی مضبوطی کا باعث بنتا ہے۔

نوٹ: فیصلے کرتے وقت ماڈلز کو بعض اضطرابات سے اندھا بنانے کے لیے انویرینس ابلتا ہے۔ بلی کی تصویر اب بھی بلی کی تصویر ہے اگر آپ اسے آئینہ دیتے ہیں یا گھماتے ہیں۔

جبکہ ڈیٹا میں اضافہ اس فارم میں جسے ہم استعمال کر رہے ہیں وہ انکوڈ کرتا ہے۔ فقدان ترجمہی تغیر کے بارے میں علم، جو آبجیکٹ کا پتہ لگانے، سیمنٹک اور مثال کی تقسیم وغیرہ کے لیے اہم ہے۔ invariance یہ فراہم کرتا ہے کہ درجہ بندی کے ماڈلز کے لیے اکثر سازگار ہوتا ہے، اور اس طرح، درجہ بندی کے ماڈلز پر اضافہ عام طور پر اور زیادہ جارحانہ طور پر لاگو ہوتا ہے۔

افزائش کی اقسام

اضافہ بہت آسان ہونا شروع ہوا - چھوٹی گردشیں، افقی اور عمودی پلٹائیں، کنٹراسٹ یا چمک کے اتار چڑھاؤ وغیرہ۔ حالیہ برسوں میں، مزید وسیع طریقے وضع کیے گئے ہیں، بشمول کاٹ (مقامی ڈراپ آؤٹ ان پٹ امیجز میں تصادفی طور پر سیاہ چوکوں کو متعارف کروا رہا ہے) اور مکس اپ (تصاویر کے حصوں کو ملانا اور لیبل کے تناسب کو اپ ڈیٹ کرنا)، اور ان کا مجموعہ – کٹ مکس. اضافے کے نئے طریقے دراصل لیبلز کے لیے اکاؤنٹ بناتے ہیں، اور کٹ مکس جیسے طریقے لیبل کے تناسب کو تبدیل کرتے ہیں جو ہر کلاس کے کچھ حصوں کے اختلاط کے ذریعے لی گئی تصویر کے تناسب کے برابر ہوتے ہیں۔

ممکنہ اضافے کی بڑھتی ہوئی فہرست کے ساتھ، کچھ نے ان کا اطلاق تصادفی طور پر کرنا شروع کر دیا ہے (یا کم از کم ان میں سے کچھ ذیلی سیٹ)، اس خیال کے ساتھ کہ اضافہ کا ایک بے ترتیب سیٹ ماڈلز کی مضبوطی کو تقویت بخشے گا، اور اصل سیٹ کو ایک بہت بڑے سیٹ سے بدل دے گا۔ ان پٹ امیجز کی جگہ۔ یہ کہاں ہے RandAugment میں لات مارتا ہے!

KerasCV اور RandAugment

کیرا سی وی ایک علیحدہ پیکج ہے، لیکن پھر بھی Keras میں ایک سرکاری اضافہ ہے، جسے Keras ٹیم نے تیار کیا ہے۔ اس کا مطلب یہ ہے کہ اسے مرکزی پیکج کی اتنی ہی مقدار میں پالش اور بدیہی حاصل ہوتی ہے، لیکن یہ باقاعدہ Keras ماڈلز اور ان کی تہوں کے ساتھ بھی بظاہر ضم ہوجاتی ہے۔ صرف ایک فرق جو آپ کبھی محسوس کریں گے وہ کال کرنا ہے۔ keras_cv.layers... بجائے keras.layers....

KerasCV تحریری طور پر اب بھی ترقی میں ہے، اور اس میں پہلے سے ہی 27 نئی پری پروسیسنگ پرتیں شامل ہیں، RandAugment, CutMix، اور MixUp ان میں سے کچھ ہونا. آئیے اس پر ایک نظر ڈالتے ہیں کہ اس کا اطلاق کرنا کیسا لگتا ہے۔ RandAugment تصاویر تک، اور ہم بے ترتیب اضافہ کے ساتھ اور بغیر درجہ بندی کرنے والے کو کیسے تربیت دے سکتے ہیں۔

سب سے پہلے، انسٹال کریں keras_cv:

$ pip install keras_cv

نوٹ: KerasCV کو کام کرنے کے لیے TensorFlow 2.9 کی ضرورت ہے۔ اگر آپ کے پاس یہ پہلے سے نہیں ہے تو چلائیں۔ $ pip install -U tensorflow کھولیں

اب، آئیے امیجنیٹ تک آسان رسائی کے لیے TensorFlow ڈیٹاسیٹس کے ساتھ TensorFlow، Keras اور KerasCV درآمد کریں:

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'))

کیراس/ٹینسر فلو پلیٹو بلاکچین ڈیٹا انٹیلی جنس کے ساتھ تصویری درجہ بندی کے لیے رینڈآگمنٹ۔ عمودی تلاش۔ عی

پرت میں a ہے۔ 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٪ امکان ہے۔

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

اس کا قدرتی طور پر مطلب یہ ہے کہ تمام اضافہ کو لاگو کرنے کی ضرورت نہیں ہے، خاص طور پر اگر آپ کم کرتے ہیں۔ rate. آپ یہ بھی اپنی مرضی کے مطابق کر سکتے ہیں کہ کون سے آپریشنز کی اجازت ہے۔ RandomAugmentationPipeline پرت، جو RandAugment کا خاص معاملہ ہے. پر ایک علیحدہ گائیڈ RandomAugmentationPipeline جلد ہی شائع کیا جائے گا.

RandAugment کے ساتھ اور اس کے بغیر کلاسیفائر کو تربیت دینا

ڈیٹا کی تیاری/لوڈنگ کے پہلو کو آسان بنانے اور اس پر توجہ مرکوز کرنے کے لیے RandAugment، آئیے استعمال کرتے ہیں۔ tfds Imagenette کے ایک حصے میں لوڈ کرنے کے لیے:

(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)) 

ہم نے تربیتی ڈیٹا کا صرف ایک حصہ لوڈ کیا ہے، تاکہ ڈیٹاسیٹ کو کم ادوار میں اوور فٹ کرنا آسان بنایا جا سکے (ہمارے تجربے کو تیزی سے چلایا جائے)۔ چونکہ Imagenette میں تصاویر مختلف سائز کی ہیں، آئیے ایک بنائیں preprocess() فنکشن جو ڈیٹاسیٹ کے ساتھ ساتھ ایک کے ساتھ نقشہ بنانے کے لیے ان کا سائز تبدیل کرتا ہے۔ augment() فنکشن جو تصاویر کو a میں بڑھاتا ہے۔ 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']

اب - ہم نے لیبلز کو ایک گرم انکوڈ کیا ہے۔ ہمیں ضروری نہیں تھا، لیکن جیسے بڑھانے کے لیے 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 مدد کرتا ہے:

کیراس/ٹینسر فلو پلیٹو بلاکچین ڈیٹا انٹیلی جنس کے ساتھ تصویری درجہ بندی کے لیے رینڈآگمنٹ۔ عمودی تلاش۔ عی

غیر بڑھی ہوئی پائپ لائن میں، نیٹ ورک اوور فٹ ہو جاتا ہے (تربیت کی درستگی زیادہ سے زیادہ حد تک پہنچ جاتی ہے) اور توثیق کی درستگی کم رہتی ہے۔ بڑھا ہوا پائپ لائن میں، تربیت کی درستگی شروع سے آخر تک توثیق کی درستگی سے کم رہتی ہے۔.

زیادہ تربیتی نقصان کے ساتھ، نیٹ ورک ان غلطیوں سے بہت زیادہ واقف ہے جو وہ اب بھی کرتا ہے، اور اسے تبدیلیوں سے متغیر بنانے کے لیے مزید اپ ڈیٹس کیے جا سکتے ہیں۔ پہلے والے کو اپ ڈیٹ کرنے کی کوئی ضرورت نہیں نظر آتی ہے، جبکہ بعد والا کرتا ہے اور صلاحیت کی حد کو بڑھاتا ہے۔

نتیجہ

کیرا سی وی ایک علیحدہ پیکج ہے، لیکن پھر بھی Keras میں ایک باضابطہ اضافہ، Keras ٹیم کے ذریعہ تیار کیا گیا ہے، جس کا مقصد آپ کے Keras پروجیکٹس میں صنعت کی طاقت کا CV لانا ہے۔ KerasCV تحریری طور پر اب بھی ترقی میں ہے، اور اس میں پہلے سے ہی 27 نئی پری پروسیسنگ پرتیں شامل ہیں، RandAugment, CutMix، اور MixUp ان میں سے کچھ ہونا.

اس مختصر گائیڈ میں، ہم نے اس پر ایک نظر ڈالی ہے کہ آپ کس طرح استعمال کر سکتے ہیں۔ RandAugment لاگو تبدیلیوں کی دی گئی فہرست سے متعدد بے ترتیب تبدیلیوں کو لاگو کرنے کے لیے، اور کسی بھی Keras ٹریننگ پائپ لائن میں شامل کرنا کتنا آسان ہے۔

مزید جانا - کمپیوٹر وژن کے لیے عملی گہری تعلیم

آپ کی جستجو کرنے والی فطرت آپ کو مزید آگے بڑھنا چاہتی ہے؟ ہم اپنے کو چیک کرنے کی تجویز کرتے ہیں۔ کورس: "Python کے ساتھ کمپیوٹر وژن کے لیے عملی گہری تعلیم".

کیراس/ٹینسر فلو پلیٹو بلاکچین ڈیٹا انٹیلی جنس کے ساتھ تصویری درجہ بندی کے لیے رینڈآگمنٹ۔ عمودی تلاش۔ عی

ایک اور کمپیوٹر وژن کورس؟

ہم MNIST ہندسوں یا MNIST فیشن کی درجہ بندی نہیں کریں گے۔ انہوں نے بہت پہلے اپنے حصے کی خدمت کی۔ بہت سارے سیکھنے کے وسائل بنیادی ڈیٹاسیٹس اور بنیادی فن تعمیرات پر توجہ مرکوز کر رہے ہیں اس سے پہلے کہ جدید بلیک باکس فن تعمیر کو کارکردگی کا بوجھ اٹھانے دیا جائے۔

ہم توجہ مرکوز کرنا چاہتے ہیں۔ demystification, عملیی, افہام و تفہیم, انترجشتھان اور حقیقی منصوبوں. سیکھنا چاہتے ہیں۔ کس طرح کیا آپ فرق کر سکتے ہیں؟ ہم آپ کو ایک سفر پر لے جائیں گے جس طرح سے ہمارے دماغ چھاتی کے کینسر کے لیے ایک ریسرچ گریڈ ڈیپ لرننگ کلاسیفائر لکھنے سے لے کر گہرے سیکھنے کے نیٹ ورکس تک لے جائیں گے جو کہ "فریب" کرتے ہیں، عملی کام کے ذریعے آپ کو اصول اور تھیوری سکھاتے ہیں، کمپیوٹر وژن کو حل کرنے کے لیے گہری سیکھنے کا اطلاق کرنے میں ماہر بننے کا طریقہ اور اوزار۔

اندر کیاہے؟

  • بصارت کے پہلے اصول اور کمپیوٹر کو "دیکھنا" کیسے سکھایا جا سکتا ہے۔
  • کمپیوٹر وژن کے مختلف کام اور ایپلی کیشنز
  • تجارت کے اوزار جو آپ کے کام کو آسان بنائیں گے۔
  • کمپیوٹر وژن کے لیے ڈیٹاسیٹس کی تلاش، تخلیق اور استعمال
  • Convolutional Neural Networks کا نظریہ اور اطلاق
  • ڈیٹا سیٹس میں ڈومین شفٹ، شریک ہونے اور دیگر تعصبات کو ہینڈل کرنا
  • سیکھنے کو منتقل کریں اور دوسروں کے تربیتی وقت اور کمپیوٹیشنل وسائل کو اپنے فائدے کے لیے استعمال کریں۔
  • ایک جدید ترین چھاتی کے کینسر کی درجہ بندی کرنے والے کی تعمیر اور تربیت
  • مرکزی دھارے کے خیالات پر شکوک و شبہات کی صحت مند خوراک کو کیسے لاگو کیا جائے اور وسیع پیمانے پر اختیار کی جانے والی تکنیکوں کے مضمرات کو کیسے سمجھا جائے
  • T-SNE اور PCA کا استعمال کرتے ہوئے ConvNet کی "تصور کی جگہ" کا تصور کرنا
  • کیس اسٹڈیز کہ کمپنیاں بہتر نتائج حاصل کرنے کے لیے کمپیوٹر ویژن تکنیک کا استعمال کیسے کرتی ہیں۔
  • ماڈل کی مناسب تشخیص، اویکت جگہ کا تصور اور ماڈل کی توجہ کی نشاندہی کرنا
  • ڈومین ریسرچ کرنا، آپ کے اپنے ڈیٹا سیٹس پر کارروائی کرنا اور ماڈل ٹیسٹ قائم کرنا
  • جدید فن تعمیر، خیالات کی ترقی، انہیں کیا منفرد بناتا ہے اور انہیں کیسے نافذ کیا جائے
  • KerasCV – جدید ترین پائپ لائنز اور ماڈل بنانے کے لیے ایک WIP لائبریری
  • پیپرز کو کیسے پارس کریں اور پڑھیں اور خود ان پر عمل کریں۔
  • آپ کی درخواست پر منحصر ماڈلز کا انتخاب
  • آخر سے آخر تک مشین لرننگ پائپ لائن بنانا
  • تیز تر R-CNNs، RetinaNets، SSDs اور YOLO کے ساتھ آبجیکٹ کا پتہ لگانے پر زمین کی تزئین اور بصیرت
  • مثال اور سیمنٹک سیگمنٹیشن
  • YOLOv5 کے ساتھ ریئل ٹائم آبجیکٹ کی شناخت
  • YOLOv5 آبجیکٹ ڈیٹیکٹر کی تربیت
  • KerasNLP (صنعت کی طاقت WIP لائبریری) کا استعمال کرتے ہوئے ٹرانسفارمرز کے ساتھ کام کرنا
  • تصاویر کے کیپشن بنانے کے لیے ConvNets کے ساتھ ٹرانسفارمرز کو مربوط کرنا
  • DeepDream
  • کمپیوٹر ویژن کے لیے ڈیپ لرننگ ماڈل کی اصلاح

ٹائم اسٹیمپ:

سے زیادہ Stackabuse