Klasifikasi Gambar dengan Transfer Learning: Tutorial Komprehensif
Daftar Isi
Pendahuluan
Transfer learning adalah teknik machine learning di mana model yang telah dilatih pada dataset besar digunakan kembali untuk tugas yang berbeda namun terkait. Dalam computer vision, teknik ini biasanya melibatkan pengambilan model yang telah dilatih sebelumnya pada ImageNet (1,4 juta gambar, 1000 kelas) dan mengadaptasinya untuk masalah klasifikasi spesifik Anda. Pendekatan ini secara dramatis mengurangi kebutuhan data dan komputasi untuk mencapai akurasi tinggi.
Tutorial ini mencakup alur kerja lengkap: memilih model pre-trained, menyiapkan data, fine-tuning dengan PyTorch, mengevaluasi performa, dan melakukan deployment model akhir.
Prasyarat
pip install torch torchvision
pip install timm # PyTorch Image Models - koleksi model yang luas
pip install albumentations # Augmentasi lanjutan
pip install scikit-learn # Metrik evaluasi
pip install matplotlib seaborn # Visualisasi
pip install onnx onnxruntime # Ekspor dan deployment
Persyaratan sistem:
- Python 3.8 atau lebih tinggi
- GPU dengan minimal 6 GB VRAM (untuk pelatihan), CPU cukup untuk inferensi
- Pemahaman dasar tentang jaringan saraf dan PyTorch
import torch
import torchvision
import timm
print(f"PyTorch: {torch.version}")
print(f"Torchvision: {torchvision.version}")
print(f"CUDA: {torch.cuda.isavailable()}")
print(f"Timm: {timm.version}")
print(f"Model timm tersedia: {len(timm.listmodels())}")
Memahami Transfer Learning
Transfer learning berhasil karena layer-layer awal pada CNN mempelajari fitur universal (tepi, tekstur, pola) yang berlaku untuk hampir semua tugas vision. Hanya layer-layer akhir yang menjadi spesifik terhadap tugas tertentu.
Ada dua strategi utama:
# Strategi 1: Ekstraksi fitur
def buatekstraktorfitur(namamodel, jumlahkelas):
"""Bekukan semua layer kecuali classification head."""
model = timm.createmodel(namamodel, pretrained=True, numclasses=jumlahkelas)
# Bekukan semua parameter
for param in model.parameters():
param.requiresgrad = False
# Buka kunci classification head
if hasattr(model, 'classifier'):
for param in model.classifier.parameters():
param.requiresgrad = True
elif hasattr(model, 'fc'):
for param in model.fc.parameters():
param.requiresgrad = True
elif hasattr(model, 'head'):
for param in model.head.parameters():
param.requiresgrad = True
return model
Strategi 2: Fine-tuning penuh dengan learning rate diskriminatif
def buatmodelfinetuning(namamodel, jumlahkelas):
"""Semua layer dapat dilatih, tetapi dengan learning rate berbeda."""
model = timm.createmodel(namamodel, pretrained=True, numclasses=jumlahkelas)
# Semua parameter dapat dilatih secara default
return model