优化加载模型慢,首次推理慢
This commit is contained in:
parent
7a88b08500
commit
c2dd067a56
|
@ -130,7 +130,6 @@ public class VideoInferenceApp extends JFrame {
|
||||||
modelManager.loadModel(this);
|
modelManager.loadModel(this);
|
||||||
DefaultListModel<ModelInfo> modelList = modelManager.getModelList();
|
DefaultListModel<ModelInfo> modelList = modelManager.getModelList();
|
||||||
ArrayList<ModelInfo> models = Collections.list(modelList.elements());
|
ArrayList<ModelInfo> models = Collections.list(modelList.elements());
|
||||||
|
|
||||||
for (ModelInfo modelInfo : models) {
|
for (ModelInfo modelInfo : models) {
|
||||||
if (modelInfo != null) {
|
if (modelInfo != null) {
|
||||||
boolean alreadyAdded = videoPlayer.getInferenceEngines().stream()
|
boolean alreadyAdded = videoPlayer.getInferenceEngines().stream()
|
||||||
|
|
|
@ -12,6 +12,9 @@ import org.opencv.imgproc.Imgproc;
|
||||||
|
|
||||||
import java.nio.FloatBuffer;
|
import java.nio.FloatBuffer;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class InferenceEngine {
|
public class InferenceEngine {
|
||||||
|
@ -36,7 +39,30 @@ public class InferenceEngine {
|
||||||
public InferenceEngine(String modelPath, List<String> labels) {
|
public InferenceEngine(String modelPath, List<String> labels) {
|
||||||
this.modelPath = modelPath;
|
this.modelPath = modelPath;
|
||||||
this.labels = labels;
|
this.labels = labels;
|
||||||
|
initAsync();
|
||||||
|
}
|
||||||
|
// 异步执行模型初始化
|
||||||
|
public void initAsync() {
|
||||||
|
ExecutorService executor = Executors.newSingleThreadExecutor();
|
||||||
|
executor.execute(()->{
|
||||||
init();
|
init();
|
||||||
|
warmUp();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void warmUp() {
|
||||||
|
// 提前执行一次空推理,用于初始化模型、CUDA上下文等
|
||||||
|
try {
|
||||||
|
float[] dummyInput = new float[(int) inputShape[0] * (int) inputShape[1] * (int) inputShape[2] * (int) inputShape[3]];
|
||||||
|
OnnxTensor inputTensor = OnnxTensor.createTensor(environment, FloatBuffer.wrap(dummyInput), inputShape);
|
||||||
|
String inputName = session.getInputInfo().keySet().iterator().next();
|
||||||
|
// 执行空推理
|
||||||
|
session.run(Collections.singletonMap(inputName, inputTensor));
|
||||||
|
inputTensor.close();
|
||||||
|
System.out.println("预热推理完成,首次推理性能已优化。");
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("模型预热失败", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
|
|
Loading…
Reference in New Issue