【问题标题】:Memory leak while using posenet in tensorflow JavaScript在 tensorflow JavaScript 中使用posenet时内存泄漏
【发布时间】:2019-04-14 12:20:33
【问题描述】:

我正在尝试使用 javascript 来试验 tensorflow。我想在一个图像文件夹上运行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 result;
      // 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 result;
      }
    }
    test().then(console.log('done'));

   </script>
  </body>
  </html>

这也是我第一次尝试 js。如果您也对代码有想法,请告诉我。

【问题讨论】:

    标签: javascript memory-leaks tensorflow.js


    【解决方案1】:

    我遇到了完全相同的问题,但 .dispose 对我不起作用。

    不知道你是否已经修复了它,但为了将来的参考,这可行:

    tf.engine().startScope()
    
    // do the Tensorflow / Posenet stuff
    
    tf.engine().endScope()
    

    一旦完成,这将破坏张量

    【讨论】:

      【解决方案2】:

      我没有看到任何用于处理张量的空间。请记住,如果您没有在已完成的张量上调用 .dispose,它仍然会留在内存中。

      处理逻辑: https://js.tensorflow.org/api/latest/#dispose

      要调试内存问题,请查看使用 tf.memory 以查看问题可能出现在哪里:https://js.tensorflow.org/api/latest/#memory

      【讨论】:

        猜你喜欢
        • 2020-10-23
        • 2017-11-03
        • 2021-09-02
        • 1970-01-01
        • 2016-06-12
        • 2011-02-28
        • 1970-01-01
        • 2019-12-10
        相关资源
        最近更新 更多