Convolution
Evrişim, bir özellik haritası üretmek için küçük bir ağırlık çekirdeğini girdi üzerinde kaydırır ve CNN'lerin temel işlemini oluşturur. Adım boyutunu, dolguyu ve çeşitlerini ele alır.
Evrişim, çekirdek veya filtre adı verilen küçük bir ağırlık ızgarasını girdi üzerinde kaydırıp her konumda ağırlıklı toplam hesaplama işlemidir. Bilgisayarlı görüde (CV) girdi, bir görüntü veya özellik haritaları yığınıdır. Her çekirdek, kendi örüntüsünün göründüğü yerlerde (dikey bir kenar, doku parçası ya da ağın daha derinlerinde bir tekerleğin veya yüzün parçası gibi) yüksek değerli bir çıktı haritası üretir. Elle tasarlanmış çekirdekler, bulanıklaştırma, keskinleştirme ve kenar tespiti için görüntü işlemede uzun süredir kullanılır. Bir evrişimli sinir ağında (CNN) çekirdek değerleri, eğitim sırasında öğrenilen model ağırlıklarıdır; böylece ağ kendi özellik algılayıcılarını keşfeder.
Evrişim Nasıl Çalışır?#
Her konumda çekirdek, girdinin bir parçasının üzerine yerleştirilir; çekirdek ağırlıklarının her biri altındaki girdi değeriyle çarpılır ve çarpımlar bir bias değeriyle birlikte toplanarak tek bir çıktı değeri oluşturur. Çekirdeğin tüm yükseklik ve genişlik boyunca kaydırılması iki boyutlu bir çıktı haritası üretir. Görüntünün kırmızı, yeşil ve mavi kanalları gibi gerçek girdiler birden çok kanala sahiptir; bu nedenle her çekirdek tüm girdi kanallarını kapsar: 64 kanallı bir girdi üzerinde 3×3 çekirdek, 3 × 3 × 64 = 576 ağırlık içerir ve yine de tek bir çıktı kanalı üretir. Bir evrişim katmanı bu tür birçok çekirdek uygular; çekirdek sayısı çıktı kanallarının sayısını belirler. Dolayısıyla 64 kanaldan 128 kanala geçen ve 3×3 çekirdek kullanan bir katmanda 3 × 3 × 64 × 128 = 73,728 ağırlık bulunur.
Aynı çekirdek her konumda yeniden kullanılır; bu nedenle evrişim katmanları tam bağlantılı katmanlardan çok daha az parametre gerektirir ve görüntünün bir köşesinde öğrenilen örüntü başka her yerde tanınır. Girdinin kaydırılması, çıktıyı da aynı miktarda kaydırır; bu özellik öteleme eşdeğişmezliği olarak adlandırılır. Her çıktı değeri girdinin yalnızca küçük bir komşuluğuna bağlıdır ve katmanları üst üste yığmak, derin bir çıktı değerinin özetlediği alıcı alanı birkaç pikselden görüntünün çoğuna kadar genişletir.
Derin öğrenme kütüphaneleri gerçekte çapraz korelasyon hesaplar: matematiksel evrişim, çekirdeği kaydırmadan önce ters çevirir; PyTorch'taki Conv2d ise bunu yapmaz. Çekirdek öğrenildiğinden ağ, ters çevrilmiş ağırlıkları öğrenir ve uygulamada bu iki işlem birbirinin yerine kullanılabilir. cuDNN gibi GPU kütüphaneleri genellikle evrişimi büyük bir matris çarpımı olarak yeniden ifade eder veya aynı sonucu çekirdeği doğrudan kaydırmaktan daha hızlı hesaplayan Winograd ya da FFT tabanlı algoritmalar kullanır.
Adım, Dolgu, Seyreltme ve Gruplar#
Dört hiperparametre, evrişimin çıktısının şeklini ve hesaplama maliyetini belirler:
- Adım: Çekirdek konumları arasındaki mesafe. 2 adım, her iki konumdan birini atlar ve çıktının yüksekliğiyle genişliğini yarıya indirir; birçok modern CNN bu şekilde alt örnekleme yapar.
- Dolgu: Girdi sınırlarının çevresine eklenen, genellikle sıfırlardan oluşan ek değerler. 1 dolgusu, 3×3 evrişimin 1 adımda çıktısını girdisiyle aynı boyutta tutar.
- Seyreltme: Çekirdek elemanları arasına boşluk ekler; böylece 2 seyreltmeli 3×3 çekirdek, aynı dokuz ağırlıkla 5×5 alanı kapsar ve ek maliyet olmadan alıcı alanı genişletir.
- Gruplar: Kanalları bağımsız gruplara ayırır. Kanal başına bir grup olduğunda derinlikli evrişim her kanalı ayrı ayrı filtreler; ardından gelen 1×1 noktasal evrişim kanalları karıştırır. Derinlik ayrılabilir evrişim adı verilen bu ikiliyi, mobil donanımlarda kullanılmak üzere MobileNets yaygınlaştırdı.
n boyutlu girdi, k çekirdek boyutu, p dolgu, s adım ve d seyreltme için çıktı boyutu ⌊(n + 2p − d(k − 1) − 1) / s⌋ + 1 olur. Aşağıdaki kod parçası, 64 kanallı ve 80×80 boyutundaki bir özellik haritasını 128 kanala dönüştüren dört katman uygular:
import torch
from torch import nn
x = torch.randn(1, 64, 80, 80) # a 64-channel, 80x80 feature map
# Four ways to map 64 input channels to 128 output channels
layers = {
"standard 3x3": nn.Conv2d(64, 128, kernel_size=3, padding=1, bias=False),
"stride 2": nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1, bias=False),
"dilation 2": nn.Conv2d(64, 128, kernel_size=3, padding=2, dilation=2, bias=False),
"depthwise separable": nn.Sequential(
nn.Conv2d(64, 64, kernel_size=3, padding=1, groups=64, bias=False), # one 3x3 filter per channel
nn.Conv2d(64, 128, kernel_size=1, bias=False), # 1x1 convolution mixes channels
),
}
for name, layer in layers.items():
params = sum(p.numel() for p in layer.parameters())
print(f"{name}: output {tuple(layer(x).shape)}, {params:,} weights")Standart katman, 73,728 ağırlıkla (1, 128, 80, 80) çıktısı üretir. 2 adım, aynı ağırlıklarla çıktıyı yarıya indirerek (1, 128, 40, 40) üretir; 2 seyreltme ise 80×80 boyutunu ve 73,728 ağırlığı korurken her çıktının 5×5 alanı görmesini sağlar. Derinlik ayrılabilir ikili, yalnızca 8,768 ağırlıkla aynı (1, 128, 80, 80) çıktısını üretir; bu yaklaşık 8,4 kat daha az ağırlık demektir. YOLO26 her iki yöntemi de kullanır: beş adet 2 adımlı 3×3 evrişim, 640×640 görüntüyü en derin omurga özellik haritasının 20×20 ızgarasına küçültür; algılama başlığının sınıflandırma dalı ise hesaplamayı azaltmak için derinlikli 3×3 ve noktasal 1×1 evrişimleri bir arada kullanır.
Diğer Boyutlarda Evrişim#
- 1B evrişim: Ses dalga biçimleri, sensör sinyalleri ve zaman serileri için tek bir eksen boyunca kaydırılır.
- 3B evrişim: Tıbbi görüntü analizinde CT ve MRI gibi hacimsel taramalar ve video klipler için derinlik veya zaman ekseni ekler.
- Transpoze evrişim: Her girdi değerini daha büyük bir çıktıya yayarak, U-Net gibi bölütleme modellerindeki özellik haritalarını üst örnekler. Kendi öğrenilmiş ağırlıklarını kullanarak, adımlı evrişimin küçülttüğü uzamsal boyutu geri kazandırır.
Evrişim ve İlgili İşlemler#
- Tam bağlantılı katman: Her girdiyi, kendine ait bir ağırlıkla her çıktıya bağlar. Evrişim, konumlar arasında paylaşılan ağırlıklarla yerel komşuluklara kısıtlanmış bir tam bağlantılı katmandır.
- Havuzlama: Evrişim gibi bir pencereyi kaydırır, ancak öğrenilmiş ağırlıklar olmadan maksimumu alma gibi sabit bir kural uygular.
- Öz dikkat: Her konum çifti arasındaki, veriye bağlı ağırlıkları hesaplar; böylece görüntünün uzaktaki kısımları tek bir katmanda ilişkilendirir. Evrişim her yerde aynı sabit çekirdeği uygular ve yalnızca yerel bir pencereyi görür; bu da maliyetinin piksel sayısıyla doğrusal olarak artmasını sağlar.
- Görüntü filtreleme: Gauss bulanıklaştırma ve Sobel kenar algılayıcısı gibi klasik filtreler, sabit ve elle tasarlanmış çekirdekler kullanan evrişimlerdir. OpenCV'nin
filter2Dişlemi de derin öğrenme kütüphaneleri gibi korelasyon hesaplar; çekirdeğin ters çevrilmesi bunu gerçek evrişime dönüştürür.










