成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于 Faster ViT 進行圖像分類

開發 人工智能
Faster Vision Transformer(FVT)是Vision Transformer(ViT)架構的一個變體,這是一種為計算機視覺任務設計的神經網絡。

Faster Vision Transformer(FVT)是Vision Transformer(ViT)架構的一個變體,這是一種為計算機視覺任務設計的神經網絡。FVT 是原始 ViT 模型的更快、更高效版本,原始模型由 Dosovitskiy 等人在 2020 年的論文 “一幅圖像值 16x16 個詞:用于大規模圖像識別的轉換器” 中引入。

FVT 的關鍵特性

  • 高效架構:FVT 旨在比原始 ViT 模型更快、更高效。它通過減少參數數量和計算復雜性,同時保持類似的性能來實現這一點。
  • 多尺度視覺轉換器:FVT 使用多尺度視覺轉換器架構,允許它以多種尺度和分辨率處理圖像。這是通過使用層次結構實現的,其中較小的轉換器用于處理圖像的較小區域。
  • 自注意力機制:FVT 使用自注意力機制,允許它對圖像的不同部分之間的復雜關系進行建模。這是通過使用在訓練過程中學習到的注意力權重來實現的。
  • 位置編碼:FVT 使用位置編碼來保留圖像的空間信息。這是通過使用學習到的位置嵌入來實現的,它們被添加到輸入令牌中。

首先,讓我們開始實現在自定義數據集上訓練視覺轉換器。為此,我們需要通過 pip 安裝 fastervit。

pip install fastervit

讓我們導入我們剛剛通過 pip 安裝的 pytorch 庫以及更快視覺轉換器庫。

import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import os

在這個實現中,我從 Kaggle 下載了損壞道路數據集。在這里檢查。然后將它們分割為訓練和驗證數據集。之后加載數據集并應用數據轉換。

data_dir = 'sih_road_dataset'

# Define data transformations
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

# Load datasets
image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'val']}
dataloaders = {x: DataLoader(image_datasets[x], batch_size=32, shuffle=True, num_workers=4) for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}
class_names = image_datasets['train'].classes
接下來我們將加載更快視覺轉換器模型。
# Load the FasterViT model and modify it for your number of classes.

from fastervit import create_model

# Load FasterViT model
model = create_model('faster_vit_0_224', 
                     pretrained=True,
                     model_path="faster_vit_0.pth.tar")

# Print the model architecture
print(model)

接下來我們將加載更快視覺轉換器模型。

# Load the FasterViT model and modify it for your number of classes.

from fastervit import create_model

# Load FasterViT model
model = create_model('faster_vit_0_224', 
                     pretrained=True,
                     model_path="faster_vit_0.pth.tar")

# Print the model architecture
print(model)

當我們打印模型時,我們可以看到末尾的頭部層,這是需要修改以進行微調的部分。

為了針對您的自定義分類任務修改這一層,您應該用一個具有適當數量輸出類別的新線性層替換頭部層。

# Modify the final layer for custom classification
num_ftrs = model.head.in_features
model.head = torch.nn.Linear(num_ftrs, len(class_names))

# Move the model to GPU if available
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = model.to(device)

接下來指定優化器和學習率,

import torch.optim as optim
from torch.optim import lr_scheduler

# Define loss function
criterion = torch.nn.CrossEntropyLoss()

# Define optimizer
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# Learning rate scheduler
exp_lr_scheduler = lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)

好的,現在一切都已定義,我們現在指定將用于訓練我們模型的自定義數據集的訓練函數。


import time
import copy

def train_model(model, criterion, optimizer, scheduler, num_epochs=5):
    since = time.time()

    best_model_wts = copy.deepcopy(model.state_dict())
    best_acc = 0.0

    for epoch in range(num_epochs):
        print(f'Epoch {epoch}/{num_epochs - 1}')
        print('-' * 10)

        # Each epoch has a training and validation phase
        for phase in ['train', 'val']:
            if phase == 'train':
                model.train()  # Set model to training mode
            else:
                model.eval()   # Set model to evaluate mode

            running_loss = 0.0
            running_corrects = 0

            # Iterate over data.
            for inputs, labels in dataloaders[phase]:
                inputs = inputs.to(device)
                labels = labels.to(device)

                # Zero the parameter gradients
                optimizer.zero_grad()

                # Forward
                with torch.set_grad_enabled(phase == 'train'):
                    outputs = model(inputs)
                    _, preds = torch.max(outputs, 1)
                    loss = criterion(outputs, labels)

                    # Backward + optimize only if in training phase
                    if phase == 'train':
                        loss.backward()
                        optimizer.step()

                # Statistics
                running_loss += loss.item() * inputs.size(0)
                running_corrects += torch.sum(preds == labels.data)

            if phase == 'train':
                scheduler.step()

            epoch_loss = running_loss / dataset_sizes[phase]
            epoch_acc = running_corrects.double() / dataset_sizes[phase]

            print(f'{phase} Loss: {epoch_loss:.4f} Acc: {epoch_acc:.4f}')

            # Deep copy the model
            if phase == 'val' and epoch_acc > best_acc:
                best_acc = epoch_acc
                best_model_wts = copy.deepcopy(model.state_dict())

        print()

    time_elapsed = time.time() - since
    print(f'Training complete in {time_elapsed // 60:.0f}m {time_elapsed % 60:.0f}s')
    print(f'Best val Acc: {best_acc:.4f}')

    # Load best model weights
    model.load_state_dict(best_model_wts)
    return model

下一步是啟動訓練過程!

# Train the model
model = train_model(model, criterion, optimizer, exp_lr_scheduler, num_epochs=5)

# Save the model
torch.save(model.state_dict(), 'faster_vit_custom_model.pth')

請注意,這不是最好的模型,因為我們可以看到模型在訓練數據集上過擬合了。本文的主要目的是演示如何實現 Faster Vision Transformer 并在自定義數據集上訓練它們。還有其他方法可以解決過擬合問題。

讓我們對下面的圖像進行訓練過的模型的快速測試:

import torch
from torchvision import transforms
from PIL import Image
from fastervit import create_model

# Define the number of classes in your custom dataset
num_classes = 4  # Replace with your actual number of classes

# Create the model architecture
model = create_model('faster_vit_0_224', pretrained=False)

# Modify the final classification layer to match the number of classes in your custom dataset
model.head = torch.nn.Linear(model.head.in_features, num_classes)

# Move the model to GPU if available
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = model.to(device)

# Load the trained model weights
model.load_state_dict(torch.load('faster_vit_custom_model.pth'))
model.eval()  # Set the model to evaluation mode

# Define data transformations for the input image
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

# Function to load and preprocess the image
def load_image(image_path):
    image = Image.open(image_path).convert('RGB')
    image = preprocess(image)
    image = image.unsqueeze(0)  # Add batch dimension
    return image.to(device)

# Function to make predictions
def predict(image_path, model, class_names):
    image = load_image(image_path)
    with torch.no_grad():
        outputs = model(image)
        _, preds = torch.max(outputs, 1)
        predicted_class = class_names[preds.item()]
    return predicted_class

# List of class names (ensure this matches your custom dataset's classes)
class_names = ['good', 'poor', 'satisfactory', 'very_poor']  # Replace with your actual class names

# Example usage
image_path = 'test_img.jpg'
predicted_class = predict(image_path, model, class_names)
print(predicted_class)

預測的類別是,

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2024-11-21 16:06:02

2023-01-05 16:51:04

機器學習人工智能

2022-09-29 23:53:06

機器學習遷移學習神經網絡

2022-10-30 15:00:40

小樣本學習數據集機器學習

2022-06-29 09:00:00

前端圖像分類模型SQL

2023-11-30 09:55:27

鴻蒙鄰分類器

2022-06-16 10:29:33

神經網絡圖像分類算法

2018-04-09 10:20:32

深度學習

2024-08-23 08:57:13

PyTorch視覺轉換器ViT

2017-11-23 14:35:36

2022-11-11 15:07:50

深度學習函數鑒別器

2024-06-03 07:55:00

2022-01-12 17:53:52

Transformer數據人工智能

2018-03-26 20:49:08

圖像分類

2023-01-06 19:02:23

應用技術

2020-10-10 12:53:57

邏輯回歸機器學習分析

2022-06-05 21:16:08

機器學習Python

2025-01-17 10:30:00

2023-01-11 07:28:49

TensorFlow分類模型

2025-02-24 09:50:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频在线免费观看 | 91视视频在线观看入口直接观看 | 国产精品亚洲二区 | 久久精品亚洲精品国产欧美 | av黄色在线观看 | 精品视频在线播放 | 天天躁日日躁狠狠的躁天龙影院 | 日韩在线国产精品 | 日韩精品在线视频免费观看 | 欧美日韩毛片 | 成人免费看黄网站在线观看 | 成人超碰 | 色综合国产 | аⅴ资源新版在线天堂 | 天天操夜夜爽 | 欧美精品网 | 久久久成人网 | 懂色av蜜桃av | 日韩高清在线观看 | 久久极品| 国产精品久久久久久久免费大片 | 日韩视频在线免费观看 | 日韩成人免费视频 | www.日韩系列 | 中国毛片免费 | 亚洲激情综合 | 97精品国产手机 | 很很干很很日 | 一级毛片视频在线观看 | www国产亚洲精品久久网站 | 国产伦精品一区二区三区高清 | 日韩无| 午夜精品一区二区三区在线观看 | 天天玩夜夜操 | 亚洲精品一区二区三区 | 国产精品夜间视频香蕉 | 成人av片在线观看 | 欧美精品乱码99久久影院 | 久久精品国产一区二区三区不卡 | 一区福利视频 | 成人在线免费观看 |