#javascript #memory-leaks #tensorflow.js
#javascript #утечки памяти #tensorflow.js
Вопрос:
Я пытаюсь поэкспериментировать с тензорным потоком, используя javascript. Я хочу запустить модель posenet над папкой изображений. Немного погуглив, я написал приведенный ниже HTML-код. Когда я запускаю HTML-код, показанный ниже, системе скоро не хватает памяти, действительно, происходит утечка памяти. Я не знаю, где и как происходит утечка памяти. Может ли сообщество, пожалуйста, объяснить, как происходит утечка памяти и как ее обойти
<html>
<head>
<script src="https://unpkg.com/@tensorflow/tfjs"></script>
<script src="https://unpkg.com/@tensorflow-models/posenet"</script>
</head>
<body>
<img id='faceImg' src='1.0.jpg'/>
<script>
var i = 1;
async function makeTensors(){
var psData;
var imageScaleFactor = 0.5;
var outputStride = 16;
var flipHorizontal = false;
var iterator;
var imageElements = document.getElementById('faceImg');
console.log(imageElements);
let result = await posenet.load().then(function(net){
return net.estimateSinglePose(imageElements, imageScaleFactor, flipHorizontal, outputStride)
}).then(function(pose){
console.log(pose);
psData = pose;
})
var im_tensor_pos = []
for (iter = 0; iter < 17; iter ) {
im_tensor_pos.push(psData.keypoints[iter].position.x);
im_tensor_pos.push(psData.keypoints[iter].position.y);
}
for (iter = 0; iter < 17; iter ) {
im_tensor_pos.push(psData.keypoints[iter].score);
}
im_tensor_pos.push(psData.score);
// tensor_vals.push(im_tensor_pos);
psData = null;
delete resu<
// console.log(tensor_vals);
}
async function test(){
for (i = 1; i < 270; i ) {
var ImageSrc = 'results/' i ".0.jpg";
console.log(ImageSrc)
var imageElements = document.getElementById('faceImg');
imageElements.src = ImageSrc;
result = await makeTensors();
delete resu<
}
}
test().then(console.log('done'));
</script>
</body>
</html>
Это тоже моя первая попытка в js. Пожалуйста, дайте мне знать, если у вас тоже есть свои мысли по поводу кода.
Ответ №1:
У меня была точно такая же проблема, но .dispose
у меня это не сработало.
Не знаю, исправили ли вы это уже, но для будущих ссылок это сработало:
tf.engine().startScope()
// do the Tensorflow / Posenet stuff
tf.engine().endScope()
Это уничтожит тензор после завершения
Ответ №2:
Я не вижу места, где вы размещаете свои тензоры. Помните, что если вы не вызываете .dispose
тензор, с которым покончили, он все равно останется в памяти.
Логика удаления: https://js.tensorflow.org/api/latest/#dispose
Для отладки проблемы memmory, пожалуйста, ознакомьтесь с using tf.memory
, чтобы увидеть, где может возникнуть проблема: https://js.tensorflow.org/api/latest/#memory