#c #opencv #deep-learning #caffe
#c #opencv #глубокое обучение #caffe
Вопрос:
При использовании функции переадресации OpenCV ::dnn ::Net возникает исключение нарушения доступа.
std::string m_pathCaffeModel;
std::string m_pathConfig;
m_pathCaffeModel = "model.caffemodel";
m_pathConfig = "model.prototxt";
cv::dnn::Net m_net;
m_net = cv::dnn::readNetFromCaffe(m_pathConfig, m_pathCaffeModel);
cv::Mat blob;
cv::dnn::blobFromImage(resized, blob, 1.0, cv::Size(), cv::Scalar(), false, false, CV_32F);
m_net.setInput(blob);
m_net.forward();
Когда я вызываю net.forward(), я получаю следующую ошибку:
Исключение, вызванное 0x00007FFD2C1B12DE (vcruntime140.dll ) в my_exe.exe : 0xC0000005: Местоположение чтения с нарушением доступа 0x000001C521201000
Я проверил печать входного изображения (называемого «измененным размером» в коде), и это выглядит хорошо. Его размеры и данные также выглядят корректно.
Для меня большой двоичный объект выглядит подозрительно, потому что в нем -1 строка и -1 столбец. Я не знаю, является ли это проблемой.
Модель принимает 3-канальные изображения размером 40×40.
У кого-нибудь есть предложения о том, в чем причина проблемы и как ее исправить?
Комментарии:
1. Все большие двоичные объекты имеют
cv::Mat::cols
значение иcv::Mat::rows
,-1
поскольку входные размеры сети могут быть представлены не в 2D.
Ответ №1:
Используя C и OpenCV ::dnn::Net, необходимо определить некоторые дополнительные настройки:
net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
(приведенное выше для вывода процессора)
с этими двумя строками перед net.forward() ошибка исчезает, и она работает.
Комментарии:
1. у меня не сработало..