#python #opencv
#python #opencv
Вопрос:
В OpenCV я загружаю сетевую модель Caffe:
net = cv2.dnn.readNetFromCaffe("proto_file", "model_file")
Далее в моем коде я загружаю модель с изображениями:
blob = cv2.dnn.blobFromImage(image)
net.setInput(blob)
Это работает просто отлично. Тем не менее, я хотел бы кэшировать загруженную сеть с шага 1 и избегать загрузки файлов с диска для каждого отдельного запроса к моему приложению. В идеале у меня было бы что-то вроде этого:
import cv2
net = cv2.dnn.readNetFromCaffe("proto_file", "model_file")
def awesomeFn(image):
blob = cv2.dnn.blobFromImage(image)
net.setInput(blob)
Таким образом, я могу вызывать my awesomeFn
столько раз, сколько захочу, не загружая сеть с диска. На моей машине шаг 1 (загрузка файлов моделей с диска) занимает от 6 мс до 12 мс.
Проблема, которую я вижу, net.setInput(blob)
заключается в том, что у нас уже есть кэшированная и глобально объявленная сеть, которую мы передаем с данными. Если мое приложение обрабатывает пользовательские файлы, скажем, со скоростью 100 запросов в секунду, есть вероятность, что некоторые пользователи будут получать данные другого пользователя в ответе.
Есть ли какой-либо способ кэшировать сеть с шага 1 и загружать в нее только свежие данные каждый раз, когда поступает запрос? Я бы хотел любой ценой избежать загрузки модели с диска для каждого запроса.
Комментарии:
1. Будет ли приложение развернуто в Интернете? Если это так, я бы попытался найти другой, чтобы убедиться, что каждый пользователь получает правильный ответ. Если он выполняется локально, и вы просто имеете в виду, что к нему обращаются разные функции, он все равно будет вычислен в правильном порядке…
2. Да, он будет развернут в Интернете, поэтому мои опасения описаны в вопросе выше
3. Тогда я думаю, что это вопрос вашего (REST) дизайна API.
4. На самом деле, нет. Речь идет о повторном использовании уже загруженного DNN без необходимости загружать файлы с диска для каждого последующего запроса. Дизайн API / REST здесь не имеет значения.
5. ну, я думал, вы боитесь, что, если один пользователь отправляет запрос через 10 мс после другого, но он получает ответ быстрее, он получает неправильную классификацию. это, с моей точки зрения, предотвращается при правильной постановке в очередь?