إتقان تقنيات TorchVision v2 المتقدمة في رؤية الحاسوب

يقدم هذا المقال شرحًا تفصيليًا لتقنيات رؤية الحاسوب المتقدمة باستخدام تحويلات TorchVision الإصدار الثاني (v2)، واستراتيجيات التوسيع الحديثة، وتحسينات التدريب القوية. سنتناول خطوات بناء خط أنابيب التوسيع، وتطبيق تقنيات MixUp و CutMix، وتصميم شبكة عصبية تلافيفية حديثة مع آلية الانتباه، وتنفيذ حلقة تدريب قوية. سيتم توضيح كل ذلك بشكل واضح وفعال من خلال بيئة Google Colab.

1. إعداد بيئة العمل وتثبيت المكتبات

نبدأ بتثبيت المكتبات واستيراد الوحدات الأساسية اللازمة لسير العمل. نقوم بإعداد PyTorch، وتحويلات TorchVision v2، بالإضافة إلى أدوات داعمة مثل NumPy و PIL و Matplotlib، لنكون مستعدين لبناء واختبار خطوط أنابيب رؤية الحاسوب المتقدمة.

pip install torch torchvision torchaudio --quiet
!pip install matplotlib pillow numpy --quiet
import torch
import torchvision
from torchvision import transforms as T
from torchvision.transforms import v2
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import requests
from io import BytesIO

print(f"PyTorch version: {torch.__version__}")
print(f"TorchVision version: {torchvision.__version__}")

2. خط أنابيب التوسيع المتقدم

نعرف خط أنابيب توسيع متقدم يتكيف مع أوضاع التدريب والتحقق. نطبق تحويلات TorchVision v2 القوية، مثل القص، والانعكاس، وتغيير الألوان، والتشويش، والمنظور، والتحويلات الإفينية أثناء التدريب، مع الحفاظ على معالجة التحقق بسيطة من خلال تغيير الحجم والقياس. بهذه الطريقة، نضمن إثراء بيانات التدريب لتحقيق تعميم أفضل مع الحفاظ على تقييم ثابت ومتسق.

class AdvancedAugmentationPipeline:
    def __init__(self, image_size=224, training=True):
        self.image_size = image_size
        self.training = training
        base_transforms = [
            v2.ToImage(),
            v2.ToDtype(torch.uint8, scale=True),
        ]
        if training:
            self.transform = v2.Compose([
                *base_transforms,
                v2.Resize((image_size + 32, image_size + 32)),
                v2.RandomResizedCrop(image_size, scale=(0.8, 1.0), ratio=(0.9, 1.1)),
                v2.RandomHorizontalFlip(p=0.5),
                v2.RandomRotation(degrees=15),
                v2.ColorJitter(brightness=0.4, contrast=0.4, saturation=0.4, hue=0.1),
                v2.RandomGrayscale(p=0.1),
                v2.GaussianBlur(kernel_size=3, sigma=(0.1, 2.0)),
                v2.RandomPerspective(distortion_scale=0.1, p=0.3),
                v2.RandomAffine(degrees=10, translate=(0.1, 0.1), scale=(0.9, 1.1)),
                v2.ToDtype(torch.float32, scale=True),
                v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
            ])
        else:
            self.transform = v2.Compose([
                *base_transforms,
                v2.Resize((image_size, image_size)),
                v2.ToDtype(torch.float32, scale=True),
                v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
            ])

    def __call__(self, image):
        return self.transform(image)

3. تقنيات MixUp و CutMix

نقوي عملية التدريب باستخدام وحدة MixUp/CutMix الموحدة، حيث نقوم بمزج الصور أو تبديل أجزاء من الصور بشكل عشوائي، وحساب الاستيفاء للعلامات بنسبة البكسل الدقيقة.

class AdvancedMixupCutmix:
    # ... (code for AdvancedMixupCutmix class remains the same)

4. هندسة الشبكة العصبية التلافيفية الحديثة (Modern CNN)

نقوم بتصميم شبكة عصبية تلافيفية حديثة تتكون من كتل تلافيفية متتالية، مع تطبيق تجميع متوسط عالمي، واستخدام بوابة انتباه مُتعلمة قبل مُصنف مُنظم باستخدام تقنية الانقطاع (Dropout)، لتحسين التعميم مع الحفاظ على الاستنتاج بسيطًا.

class ModernCNN(nn.Module):
    # ... (code for ModernCNN class remains the same)

5. حلقة التدريب المتقدمة

ندير عملية التدريب باستخدام خوارزمية AdamW، و OneCycleLR، وتقنيات MixUp/CutMix الديناميكية لتحقيق استقرار في عملية التحسين وزيادة التعميم. نحسب الخسارة المُستخلصة عند المزج، ونقيد التدرجات لأسباب الأمان، ونقوم بتحديث المُخطط في كل دفعة، ونقوم بتتبع الخسارة/الدقة لكل عصر في حلقة مُدمجة.

class AdvancedTrainer:
    # ... (code for AdvancedTrainer class remains the same)

6. عرض توضيحي للتقنيات المتقدمة

نقوم بتشغيل عرض توضيحي شامل من البداية إلى النهاية، حيث نقوم بعرض خط أنابيب التوسيع، وتطبيق MixUp/CutMix، والتحقق من ModernCNN باستخدام تمريرة أمامية. ثم نقوم بمحاكاة عصر تدريب واحد على بيانات وهمية للتحقق من الخسارة، والدقة، وجدولة معدل التعلم، للتأكد من عمل المكدس الكامل قبل توسيعه إلى مجموعة بيانات حقيقية.

def demo_advanced_techniques():
    # ... (code for demo_advanced_techniques function remains the same)

الخلاصة

لقد قمنا بنجاح بتطوير واختبار سير عمل شامل يدمج توسيعات متقدمة، وتصميم CNN مبتكر، واستراتيجيات تدريب حديثة. من خلال التجربة مع TorchVision v2، وMixUp، وCutMix، وآليات الانتباه، و OneCycleLR، لا نقوي أداء النموذج فحسب، بل نُعمّق فهمنا للتقنيات المتطورة.

المصدر: MarkTechPost