Fix tensor cleanup and orphan event listener (#171)

Closes: #166

Signed-off-by: Justin Georgi <justin.georgi@gmail.com>

Reviewed-on: #171
This commit is contained in:
2024-04-11 19:25:02 -07:00
parent e1464df3f0
commit b732d001dc
3 changed files with 18 additions and 12 deletions

View File

@@ -1,7 +1,7 @@
import * as tf from '@tensorflow/tfjs'
import { f7 } from 'framework7-vue'
var model = null
let model = null
export default {
methods: {
@@ -9,7 +9,7 @@ export default {
if (model && model.modelURL == weights) {
return model
} else if (model) {
model.dispose()
tf.dispose(model)
}
model = await tf.loadGraphModel(weights)
const [modelWidth, modelHeight] = model.inputs[0].shape.slice(1, 3)
@@ -34,7 +34,8 @@ export default {
console.time('run prediction')
const res = model.predict(input)
const rawRes = tf.transpose(res,[0,2,1]).arraySync()[0]
const tRes = tf.transpose(res,[0,2,1])
const rawRes = tRes.arraySync()[0]
console.timeEnd('run prediction')
console.time('post-process')
@@ -59,6 +60,8 @@ export default {
if (rawBoxes.length > 0) {
const tBoxes = tf.tensor2d(rawBoxes)
let tScores = null
let resBoxes = null
let validBoxes = []
let structureScores = null
let boxes_data = []
let scores_data = []
@@ -66,8 +69,9 @@ export default {
for (var c = 0; c < outputSize - 4; c++) {
structureScores = rawScores.map(x => x[c])
tScores = tf.tensor1d(structureScores)
var validBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05)
validBoxes = validBoxes.dataSync()
resBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05)
validBoxes = resBoxes.dataSync()
tf.dispose(resBoxes)
if (validBoxes) {
boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx)))
var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx))
@@ -76,8 +80,10 @@ export default {
}
}
validBoxes = []
tf.dispose(tBoxes)
tf.dispose(tScores)
tf.dispose(tRes)
const valid_detections_data = classes_data.length
var output = {
detections: []