Keras.Net - 当模型是全局变量时,模型预测不会 return
Keras.Net - Model predict doesn't return when model is global variable
我正在尝试 运行 相机源上的模型。
因此我想加载模型并将其存储为全局变量并在帧进入时使用它。
当我为每个帧(在过程函数中)加载模型时它起作用但是当我将模型存储为全局变量时,预测线无限期挂起所以感觉资源在不应该的时候被释放了。
我怎样才能让它发挥作用?
private BaseModel model;
public void Initialize()
{
model = BaseModel.LoadModel(networkPath);
}
public dynamic Process(Mat frame)
{
var mat = new Mat();
Cv2.Resize(frame, mat, inputSize);
var image_in = mat.Convert(np.uint8);
image_in = np.asfarray(image_in, np.float32);
image_in /= 256;
image_in = np.expand_dims(image_in, 0);
var output = model.Predict(image_in);
output = output[0];
return (Input: image_in, Output: output);
}
我们遇到的问题与在多线程中使用 PythonEngine 有关。
现在我们初始化使用
if (!PythonEngine.IsInitialized) { PythonEngine.Initialize(); }
model = BaseModel.LoadModel(networkPath);
PythonEngine.BeginAllowThreads();
在我们的工作线程中我们有
using (Py.GIL()) {}
环绕我们的代码。
我正在尝试 运行 相机源上的模型。 因此我想加载模型并将其存储为全局变量并在帧进入时使用它。 当我为每个帧(在过程函数中)加载模型时它起作用但是当我将模型存储为全局变量时,预测线无限期挂起所以感觉资源在不应该的时候被释放了。
我怎样才能让它发挥作用?
private BaseModel model;
public void Initialize()
{
model = BaseModel.LoadModel(networkPath);
}
public dynamic Process(Mat frame)
{
var mat = new Mat();
Cv2.Resize(frame, mat, inputSize);
var image_in = mat.Convert(np.uint8);
image_in = np.asfarray(image_in, np.float32);
image_in /= 256;
image_in = np.expand_dims(image_in, 0);
var output = model.Predict(image_in);
output = output[0];
return (Input: image_in, Output: output);
}
我们遇到的问题与在多线程中使用 PythonEngine 有关。 现在我们初始化使用
if (!PythonEngine.IsInitialized) { PythonEngine.Initialize(); }
model = BaseModel.LoadModel(networkPath);
PythonEngine.BeginAllowThreads();
在我们的工作线程中我们有
using (Py.GIL()) {}
环绕我们的代码。