Fix empty detection bug (#135)
Closes: #134 Fixes regression in post-processing from #129. Signed-off-by: Justin Georgi <justin.georgi@gmail.com> Reviewed-on: #135
This commit is contained in:
@@ -43,48 +43,50 @@ export default {
|
|||||||
rawBoxes.push(boxCalc)
|
rawBoxes.push(boxCalc)
|
||||||
rawScores.push(getScores)
|
rawScores.push(getScores)
|
||||||
}
|
}
|
||||||
const tBoxes = tf.tensor2d(rawBoxes)
|
|
||||||
let tScores = null
|
if (rawBoxes.length > 0) {
|
||||||
let structureScores = null
|
const tBoxes = tf.tensor2d(rawBoxes)
|
||||||
let boxes_data = []
|
let tScores = null
|
||||||
let scores_data = []
|
let structureScores = null
|
||||||
let classes_data = []
|
let boxes_data = []
|
||||||
for (var c = 0; c < outputSize - 4; c++) {
|
let scores_data = []
|
||||||
structureScores = rawScores.map(x => x[c])
|
let classes_data = []
|
||||||
tScores = tf.tensor1d(structureScores)
|
for (var c = 0; c < outputSize - 4; c++) {
|
||||||
var validBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05)
|
structureScores = rawScores.map(x => x[c])
|
||||||
validBoxes = validBoxes.dataSync()
|
tScores = tf.tensor1d(structureScores)
|
||||||
if (validBoxes) {
|
var validBoxes = await tf.image.nonMaxSuppressionAsync(tBoxes,tScores,10,0.5,.05)
|
||||||
boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx)))
|
validBoxes = validBoxes.dataSync()
|
||||||
var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx))
|
if (validBoxes) {
|
||||||
scores_data.push(...outputScores)
|
boxes_data.push(...rawBoxes.filter( (_, idx) => validBoxes.includes(idx)))
|
||||||
classes_data.push(...outputScores.fill(c))
|
var outputScores = structureScores.filter( (_, idx) => validBoxes.includes(idx))
|
||||||
|
scores_data.push(...outputScores)
|
||||||
|
classes_data.push(...outputScores.fill(c))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tf.dispose(tBoxes)
|
||||||
|
tf.dispose(tScores)
|
||||||
|
const valid_detections_data = classes_data.length
|
||||||
|
var output = {
|
||||||
|
detections: []
|
||||||
|
}
|
||||||
|
for (var i =0; i < valid_detections_data; i++) {
|
||||||
|
var [dLeft, dTop, dRight, dBottom] = boxes_data[i]
|
||||||
|
output.detections.push({
|
||||||
|
"top": dTop,
|
||||||
|
"left": dLeft,
|
||||||
|
"bottom": dBottom,
|
||||||
|
"right": dRight,
|
||||||
|
"label": this.detectorLabels[classes_data[i]].name,
|
||||||
|
"confidence": scores_data[i] * 100
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const valid_detections_data = classes_data.length
|
|
||||||
var output = {
|
|
||||||
detections: []
|
|
||||||
}
|
|
||||||
for (var i =0; i < valid_detections_data; i++) {
|
|
||||||
var [dLeft, dTop, dRight, dBottom] = boxes_data[i]
|
|
||||||
output.detections.push({
|
|
||||||
"top": dTop,
|
|
||||||
"left": dLeft,
|
|
||||||
"bottom": dBottom,
|
|
||||||
"right": dRight,
|
|
||||||
"label": this.detectorLabels[classes_data[i]].name,
|
|
||||||
"confidence": scores_data[i] * 100
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
tf.dispose(res)
|
tf.dispose(res)
|
||||||
tf.dispose(tBoxes)
|
|
||||||
tf.dispose(tScores)
|
|
||||||
tf.dispose(input)
|
tf.dispose(input)
|
||||||
console.timeEnd('post-process')
|
console.timeEnd('post-process')
|
||||||
|
|
||||||
return output
|
return output || { detections: [] }
|
||||||
},
|
},
|
||||||
getRemoteLabels() {
|
getRemoteLabels() {
|
||||||
var self = this
|
var self = this
|
||||||
|
|||||||
Reference in New Issue
Block a user