Использование предварительно обученного VGG-16 для получения векторного признака из изображения - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу получить вектор признаков из изображения, передавая изображение через предварительно обученный VGG-16. Я использовал предварительно обученный Resnet50, чтобы получить вектор признаков, и это сработало отлично. Но когда я использую тот же метод для получения вектора характеристик из сети VGG-16, я не получаю вектор 4096-й, который, как я предполагаю, должен получить. Я получил код из различных источников, и он выглядит следующим образом:

vgg16_model=models.vgg16(pretrained=True)
modules=list(vgg16_model.children())[:-1]
vgg16_model=nn.Sequential(*modules)

data=moveaxis(data,2,0)
img_var=Variable(torch.from_numpy(data).unsqueeze(0)).float()
features_var=vgg16_model(img_var)
features=features_var.data
features=features.data.numpy()
print(features.shape)

Переменная “data” представляет собой изображение numpy массив измерений (300, 400, 3) Поэтому я использую ось перемещения, чтобы перемешать ось, чтобы у меня было 3 канала, а не 300. Вывод (features.shape), который я получаю: (1, 512, 7, 7) Я хочу вектор 4096-й, который VGG-16 дает перед слоем softmax. Я даже попробовал подход list(vgg16_model.classifier.children())[:-1], но это тоже не слишком хорошо. Есть много дискуссий по этому поводу, но ни один из них не работал для меня. Дайте мне знать, где я могу пойти не так. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...