Transformer trong Computer Vision Trong lĩnh vực thị giác máy tính (computer vision), “transformer” là một kiến trúc mạng thần kinh (neural network) ban đầu được phát triển cho xử lý ngôn ngữ tự nhiên (NLP) nhưng sau đó đã được áp dụng thành công trong các tác vụ liên quan đến hình ảnh.
Transformers trong thị giác máy tính chủ yếu được sử dụng trong các mô hình như Vision Transformer (ViT). Cơ bản, một transformer trong bối cảnh này sử dụng cơ chế tự chú ý (self-attention mechanism) để xử lý và học các mối quan hệ không gian giữa các phần khác nhau của một bức ảnh.
Tóm lại, transformers đang trở thành một công cụ mạnh mẽ trong thị giác máy tính, mở ra nhiều khả năng mới trong việc xử lý và phân tích hình ảnh.
Dưới đây là một ví dụ đơn giản về cách sử dụng Vision Transformer (ViT) để phân loại hình ảnh trên bộ dữ liệu CIFAR-10 bằng Python với thư viện PyTorch. Mục đích của đoạn mã này là giúp bạn hình dung cách hoạt động của Vision Transformer trong thị giác máy tính.
import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from vit_pytorch import ViT # Khởi tạo thiết bị (CPU hoặc GPU) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # Tải và tiền xử lý dữ liệu CIFAR-10 transform = transforms.Compose([ transforms.Resize((224, 224)), # Thay đổi kích thước ảnh để phù hợp với ViT transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ]) trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True) testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform) testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False) # Khởi tạo mô hình Vision Transformer (ViT) model = ViT( image_size = 224, patch_size = 32, num_classes = 10, dim = 512, depth = 6, heads = 8, mlp_dim = 1024, dropout = 0.1, emb_dropout = 0.1 ).to(device) # Định nghĩa hàm mất mát và tối ưu hóa criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # Vòng lặp huấn luyện for epoch in range(10): # Huấn luyện trong 10 epochs running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data inputs, labels = inputs.to(device), labels.to(device) # Đặt lại gradient về 0 optimizer.zero_grad() # Tiến hành dự đoán và tính toán mất mát outputs = model(inputs) loss = criterion(outputs, labels) # Lan truyền ngược và cập nhật trọng số loss.backward() optimizer.step() # In ra thông tin running_loss += loss.item() if i % 100 == 99: # In mỗi 100 batch print(f'Epoch {epoch + 1}, Batch {i + 1}: Loss {running_loss / 100:.3f}') running_loss = 0.0 print('Huấn luyện hoàn tất') # Kiểm tra trên tập dữ liệu test correct = 0 total = 0 with torch.no_grad(): for data in testloader: images, labels = data images, labels = images.to(device), labels.to(device) outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Accuracy trên tập test: {100 * correct / total:.2f}%')
Bạn cần cài đặt thư viện vit-pytorch và torchvision nếu chưa có. Bạn có thể cài bằng pip:
pip install vit-pytorch torchvision
Đây là một ví dụ cơ bản, giúp bạn hiểu cách sử dụng Vision Transformer cho bài toán phân loại hình ảnh.
Leave A Comment