Neural Network, python

معماری VGG-Net

معماری VGG-Net

VGG-Net (Visual Geometry Group) یک معماری شبکه عصبی کانولوشنی (CNN) عمیق است که توسط Visual Geometry Group در دانشگاه آکسفورد توسعه یافته است. این شبکه در مقاله‌ی سال ۲۰۱۴ با عنوان “شبکه‌های کانولوشنی بسیار عمیق برای شناسایی تصاویر در مقیاس بزرگ” توسط سیمونیان و زیسرمن معرفی شد. معماری VGG-Net به دلیل سادگی، طراحی یکنواخت و عملکرد عالی در وظایف طبقه‌بندی تصویر شناخته شده است. این مدل نقش مهمی در پیشرفت یادگیری عمیق ایفا کرده و به طور گسترده برای یادگیری انتقالی (Transfer Learning) استفاده می‌شود.

ویژگی‌های کلیدی VGG-Net

معماری عمیق اما ساده: از فیلترهای کانولوشنی کوچک ۳×۳ به صورت یکنواخت در کل شبکه استفاده می‌کند.
طراحی یکنواخت: همه‌ی لایه‌های کانولوشنی از تابع فعال‌ساز ReLU استفاده کرده و پس از آن‌ها یک لایه Max Pooling قرار می‌گیرد.
افزایش عمق: در نسخه‌های مختلفی مانند VGG-11، VGG-13، VGG-16 و VGG-19 ارائه شده است (عدد نشان‌دهنده‌ی تعداد لایه‌های دارای پارامتر قابل train است).
لایه‌های کاملاً متصل: شامل سه لایه‌ی Fully Connected در انتها است که این مدل را برای طبقه‌بندی مناسب می‌سازد.
وزن‌های از پیش آموزش‌دیده شده: مدل‌های VGG با وزن‌های از پیش آموزش‌دیده شده (pretrained model) روی مجموعه داده ImageNet در دسترس هستند و برای یادگیری انتقالی بسیار مفید می‌باشند.

مروری بر معماری VGG-Net

VGG دارای چندین نسخه است که معروف‌ترین آن‌ها VGG-16 و VGG-19 هستند. در ادامه، معماری VGG-16 به‌طور دقیق بررسی شده است:

ساختار لایه‌های VGG-16

لایهنوعتعداد فیلترهااندازه کرنلاسترایدفعال‌سازی
1کانولوشن643×31ReLU
2کانولوشن643×31ReLU
3Max Pooling2×22
4کانولوشن1283×31ReLU
5کانولوشن1283×31ReLU
6Max Pooling2×22
7کانولوشن2563×31ReLU
8کانولوشن2563×31ReLU
9کانولوشن2563×31ReLU
10Max Pooling2×22
11کانولوشن5123×31ReLU
12کانولوشن5123×31ReLU
13کانولوشن5123×31ReLU
14Max Pooling2×22
15کانولوشن5123×31ReLU
16کانولوشن5123×31ReLU
17کانولوشن5123×31ReLU
18Max Pooling2×22
19Fully Connected4096ReLU
20Fully Connected4096ReLU
21Fully Connected1000 (برای ImageNet)Softmax

VGG-19 نیز الگوی مشابهی دارد اما دارای تعداد بیشتری لایه‌ی کانولوشنی است.

پیاده‌سازی VGG-Net در پایتون (با استفاده از PyTorch)

وارد کردن کتابخانه‌های مورد نیاز

pythonCopyEditimport torch
import torch.nn as nn
import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets
from torch.utils.data import DataLoader

بارگذاری مدل از پیش آموزش‌دیده‌ی VGG-16

pythonCopyEditmodel = models.vgg16(pretrained=True)
print(model)

تغییر مدل برای یک وظیفه‌ی طبقه‌بندی سفارشی

pythonCopyEditnum_classes = 10  # مثال برای مجموعه داده CIFAR-10
model.classifier[6] = nn.Linear(model.classifier[6].in_features, num_classes)

بارگذاری و پیش‌پردازش داده‌ها

pythonCopyEdittransform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

dataset = datasets.CIFAR10(root='./data', train=True, transform=transform, download=True)
dataloader = DataLoader(dataset, batch_size=64, shuffle=True)

آموزش مدل

pythonCopyEditcriterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

def train(model, dataloader, criterion, optimizer, epochs=5):
    model.train()
    for epoch in range(epochs):
        running_loss = 0.0
        for images, labels in dataloader:
            optimizer.zero_grad()
            outputs = model(images)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
        print(f'Epoch {epoch+1}, Loss: {running_loss/len(dataloader)}')

train(model, dataloader, criterion, optimizer)

چرا VGG-Net مهم است؟

افزایش عمق شبکه باعث بهبود دقت در طبقه‌بندی تصاویر می‌شود.
یکی از اولین معماری‌های عمیق اما ساده در شبکه‌های CNN بود.

چرا از کرنل‌های ۳×۳ استفاده شده است؟

🔹 کاهش تعداد پارامترها در مقایسه با فیلترهای ۵×۵ یا ۷×۷، در حالی که میدان دید حفظ می‌شود.
🔹 افزایش غیرخطیت در مدل با تعداد لایه‌های بیشتر.
🔹 کاهش هزینه‌ی محاسباتی در مقایسه با کرنل‌های بزرگ‌تر.

انواع VGG

VGG-16: دارای ۱۶ لایه‌ی دارای پارامترهای قابل یادگیری
VGG-19: دارای ۱۹ لایه، مشابه VGG-16 اما با لایه‌های کانولوشنی بیشتر

چرا VGG-Net از نظر محاسباتی پرهزینه است؟

❌ استفاده از لایه‌های کاملاً متصل در انتها که تعداد زیادی پارامتر دارند.
❌ اندازه‌ی بزرگ مدل، که باعث کندی آن نسبت به معماری‌های مدرن‌تر مانند ResNet و MobileNet می‌شود.

نتیجه‌گیری

معماری VGG-Net یک معماری ساده اما عمیق بود که تأثیر زیادی بر پیشرفت یادگیری عمیق گذاشت. با اینکه معماری‌های مدرن‌تر مانند ResNet و EfficientNet امروزه عملکرد بهتری دارند، اما VGG هنوز هم برای یادگیری انتقالی، تشخیص اشیا و استخراج ویژگی‌ها پرکاربرد است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *