一、數據集介紹
TinyImageNet是一個用於視覺分類的挑戰性數據集,由Stanford CS231n課程所提供。數據集包含200個類別,每個類別有500張訓練圖像、50張驗證圖像和50張測試圖像,大小為64×64像素。圖像來自ImageNet數據集,但是通常使用更小的版本,通常可以通過隨機裁剪、水平翻轉等數據增強技術進行處理。
數據集類別非常多樣化,包括常見的動物類別如“狗(Dog)”、“貓(Cat)”,以及不太常見的類別如“蘑菇(Mushroom)”、“校車(School Bus)”等。此外,數據集還包含人工標籤類別,如“裙子(Dress)”、“鋼筆(Pen)”等。
import torch import torchvision data_transforms = { 'train': torchvision.transforms.Compose([ torchvision.transforms.RandomResizedCrop(64), torchvision.transforms.RandomHorizontalFlip(), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]), 'val': torchvision.transforms.Compose([ torchvision.transforms.Resize(64), torchvision.transforms.CenterCrop(64), torchvision.transforms.ToTensor(), torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]), } train_dataset = torchvision.datasets.ImageFolder(root='tiny-imagenet-200/train', transform=data_transforms['train']) val_dataset = torchvision.datasets.ImageFolder(root='tiny-imagenet-200/val', transform=data_transforms['val']) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=2) val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=128, shuffle=False, num_workers=2)
上面的代碼展示了如何使用PyTorch中的torchvision庫加載數據集和進行數據增強。在訓練集上,我們使用了隨機裁剪和水平翻轉,而在驗證集上則使用了中心裁剪。同時使用了標準化技術來使每個像素的值歸一化到0-1之間。使用DataLoader來快速加載數據並自動處理數據的拆分和批處理。
二、經典模型在TinyImageNet上的應用
許多經典的深度學習模型都已經在不同的數據集上進行了預訓練和微調,並在TinyImageNet上取得了較好的表現。下面是幾個在TinyImageNet上表現較好的模型:
VGG
在TinyImageNet上,VGG表現出色。最好的模型使用VGG16,在測試集上獲得了50.88%的準確率。關於VGG的更多信息可以參考K. Simonyan, A. Zisserman. Very Deep Convolutional Networks for Large-Scale Image Recognition, 2014。
import torch.nn as nn import torchvision.models as models model = models.vgg16_bn(pretrained=True) for param in model.parameters(): param.requires_grad = False num_features = model.classifier[-1].in_features features = list(model.classifier.children())[:-1] features.extend([nn.Linear(num_features, 200)]) model.classifier = nn.Sequential(*features)
上面的代碼展示了如何在PyTorch中使用VGG進行微調,這裡選擇了VGG16模型,並使用預訓練的權重進行初始化。通過修改VGG最後一層的輸出數量,使其與TinyImageNet的類別數量相匹配。接下來,我們將凍結前面的層,並只對新添加的層進行訓練。
ResNet
ResNet也是一種流行的深度學習模型,它在TinyImageNet上的表現也很不錯。最好的模型使用ResNet-152,在測試集上獲得了51.05%的準確率。關於ResNet的更多信息可以參考K. He, X. Zhang, S. Ren, J. Sun. Deep Residual Learning for Image Recognition, 2016。
import torch.nn as nn import torchvision.models as models model = models.resnet152(pretrained=True) for param in model.parameters(): param.requires_grad = False num_features = model.fc.in_features model.fc = nn.Linear(num_features, 200)
上面的代碼展示了如何在PyTorch中使用ResNet進行微調,這裡選擇了ResNet-152模型,並使用預訓練的權重進行初始化。通過修改最後一層的輸出數量,使其與TinyImageNet的類別數量相匹配。接下來,我們將凍結前面的層,並只對新添加的層進行訓練。
DenseNet
相對於VGG和ResNet,DenseNet是一種比較新的模型結構,但是在TinyImageNet上也表現很好。最好的模型使用DenseNet-201,在測試集上獲得了51.72%的準確率。關於DenseNet的更多信息可以參考G. Huang, Z. Liu, K. Q. Weinberger, L. van der Maaten. Densely Connected Convolutional Networks, 2016。
import torch.nn as nn import torchvision.models as models model = models.densenet201(pretrained=True) for param in model.parameters(): param.requires_grad = False num_features = model.classifier.in_features model.classifier = nn.Linear(num_features, 200)
上面的代碼展示了如何在PyTorch中使用DenseNet進行微調,這裡選擇了DenseNet-201模型,並使用預訓練的權重進行初始化。通過修改最後一層的輸出數量,使其與TinyImageNet的類別數量相匹配。接下來,我們將凍結前面的層,並只對新添加的層進行訓練。
三、小結
TinyImageNet是一個用於視覺分類的挑戰性數據集,數據集類別多樣化,具有一定的難度。本文介紹了如何在PyTorch中使用常用的經典模型在TinyImageNet上進行微調。希望此文能對使用PyTorch進行深度學習開發的讀者有所幫助。
原創文章,作者:OHEDM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370010.html