import torch
import torchvision
import VIT.models.pvt_modelv2 as KEVIN_pvtv2
from collections import OrderedDict
num1 = torch.rand(32,3,224,224)
num2 = torch.rand(32,3,224,224)
print(num1, num2)
checkpoint = torch.load("C:\\Users\\vvenkata\\Desktop\\coding\\KEVIN\\model\\VIT\\checkpoints\\224_finetune\\Training\\pvt_v2_b3_lr_0.05_wd_0.0013_bs_16_epochs_200_dim_192_cutmix_0.7_path_Training\\pretrained_pvt_v2_b3_lr_0.054_w\\model_best.pth.tar", map_location='cuda:0')
pvt = KEVIN_pvtv2.pvt_v2_b3(num_classes=3)
new_state_dict = OrderedDict()
for k, v in checkpoint.items():
name = k[7:] if k.startswith("module.") else k
new_state_dict[name] = v
pvt.load_state_dict(new_state_dict)
pvt.eval()
output1 = pvt(num1)
output2 = pvt(num2)
print(f"Output1 {output1}, output2 {output2}")
Набор данных состоит из 3 классов, в общей сложности около 2800 изображений. Я ожидал, что точность будет около 80-90%, поскольку я обучал модель в течение 500 эпох. Однако я получил точность 34%. При дальнейшей проверке это произошло из-за того, что выходные данные модели всегда были тензорными ([[ 0,1031, 0,0980, -0,2104]] независимо от того, какое входное изображение (я проверял это, вводя по одному изображению за раз. Благодаря этому примеру вывод кода приведен ниже:
Как это исправить? Я определенно могу исключить, что это какая-то проблема с загрузкой данных, поскольку этот базовый пример также воспроизводит проблему.
Я обучил PVT (код здесь: https://github.com/CupidJay/Training-Vision-Transformers-with-only-2040-images), используя алгоритм IDMM (алгоритм, который используется для предварительного обучения ИИ). Вот фиктивная функция с ИИ: [code]import torch import torchvision import VIT.models.pvt_modelv2 as KEVIN_pvtv2 from collections import OrderedDict
checkpoint = torch.load("C:\\Users\\vvenkata\\Desktop\\coding\\KEVIN\\model\\VIT\\checkpoints\\224_finetune\\Training\\pvt_v2_b3_lr_0.05_wd_0.0013_bs_16_epochs_200_dim_192_cutmix_0.7_path_Training\\pretrained_pvt_v2_b3_lr_0.054_w\\model_best.pth.tar", map_location='cuda:0') pvt = KEVIN_pvtv2.pvt_v2_b3(num_classes=3) new_state_dict = OrderedDict() for k, v in checkpoint.items(): name = k[7:] if k.startswith("module.") else k new_state_dict[name] = v pvt.load_state_dict(new_state_dict) pvt.eval()
output1 = pvt(num1) output2 = pvt(num2) print(f"Output1 {output1}, output2 {output2}") [/code] Набор данных состоит из 3 классов, в общей сложности около 2800 изображений. Я ожидал, что точность будет около 80-90%, поскольку я обучал модель в течение 500 эпох. Однако я получил точность 34%. При дальнейшей проверке это произошло из-за того, что выходные данные модели всегда были тензорными ([[ 0,1031, 0,0980, -0,2104]] независимо от того, какое входное изображение (я проверял это, вводя по одному изображению за раз. Благодаря этому примеру вывод кода приведен ниже: [code]input: [[[0.6883, 0.8841, 0.8812, ..., 0.2528, 0.6816, 0.1573], [0.4715, 0.0426, 0.7539, ..., 0.3806, 0.3291, 0.4134], [0.1406, 0.2837, 0.1914, ..., 0.6967, 0.9686, 0.9358], ..., [0.9271, 0.6876, 0.2966, ..., 0.8610, 0.3527, 0.9421], [0.8541, 0.4442, 0.5698, ..., 0.4103, 0.9373, 0.9191], [0.5845, 0.6987, 0.1419, ..., 0.3499, 0.8706, 0.8108]],
output: [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], [ 0.1031, 0.0980, -0.2104], ... [/code] Как это исправить? Я определенно могу исключить, что это какая-то проблема с загрузкой данных, поскольку этот базовый пример также воспроизводит проблему.