Судя по :
https://www.cs.toronto.edu/~frossard/post/vgg16/vg...
Я бы сделал следующее :
Хранил бы :
- изображение (возможно - уменьшенные копии)
- 4096-компонентный вектор
- выходной вектор (который из 1000 компонентов)
Возможно бы снизил размерность ещё слоем, но это уже потребует дообучения сети.
Тогда :
- сперва извлекаем из изображения векторы (на 1000/4096 компонентов)
- считаем косинусное расстояние по меньшему вектору.
- отбрасываем варианты, у которых косинусное расстояние больше определенной границы
- считаем расстояние по большему вектору
- отбрасываем варианты с большим расстоянием
- среди оставшихся - сравниваем изображения (возможно - уменьшенные копии)
По идее отброс тех изображений у которых сильно отличается результат классификации должен снизить количество вычислений. Но по хорошему или экспериментировать нужно, или считать.
p.s. ну и конечно - готовиться параллелить задачу :-)