The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.
Apache License 2.0
47.81k
stars
5.65k
forks
source link
Got invalid dimensions for input: mask_input for the following indices #719
function modelData({ clicks, tensor, modelScale,last_pred_mask }) {
const imageEmbedding = tensor;
let pointCoords;
let pointLabels;
let pointCoordsTensor;
let pointLabelsTensor;
// Check there are input click prompts
if (clicks) {
let n = clicks.length;
// If there is no box input, a single padding point with
// label -1 and coordinates (0.0, 0.0) should be concatenated
// so initialize the array to support (n + 1) points.
pointCoords = new Float32Array(2 * (n + 1));
pointLabels = new Float32Array(n + 1);
// Add clicks and scale to what SAM expects
for (let i = 0; i < n; i++) {
pointCoords[2 * i] = clicks[i].x * modelScale.samScale;
pointCoords[2 * i + 1] = clicks[i].y * modelScale.samScale;
pointLabels[i] = clicks[i].clickType;
}
// Add in the extra point/label when only clicks and no box
// The extra point is at (0, 0) with label -1
pointCoords[2 * n] = 0.0;
pointCoords[2 * n + 1] = 0.0;
pointLabels[n] = -1.0;
// Create the tensor
pointCoordsTensor = new Tensor("float32", pointCoords, [1, n + 1, 2]);
pointLabelsTensor = new Tensor("float32", pointLabels, [1, n + 1]);
}
const imageSizeTensor = new Tensor("float32", [
modelScale.height,
modelScale.width,
]);
if (pointCoordsTensor === undefined || pointLabelsTensor === undefined)
return;
// if there is a previous tensor, use it, otherwise we default to an empty tensor
const maskInput =
last_pred_mask && clicks && !isFirstClick(clicks)
? last_pred_mask
: new Tensor("float32", new Float32Array(256 * 256), [1, 1, 256, 256]);
const hasMaskInput = new Tensor("float32", [
+!!(last_pred_mask && clicks && !isFirstClick(clicks)),
]);
return {
image_embeddings: imageEmbedding,
point_coords: pointCoordsTensor,
point_labels: pointLabelsTensor,
orig_im_size: imageSizeTensor,
mask_input: maskInput,
has_mask_input: hasMaskInput,
};
}
---------------------------------------------------------
const feeds = modelData({
clicks: this.clicks,
tensor: this.tensor,
modelScale: this.modelScale,
last_pred_mask: this.predMask,
});
const results = await this.model.run(feeds);
const pred_mask = results['low_res_masks'];
this.predMask = pred_mask;
If there is a previous tensor,error:Got invalid dimensions for input: mask_input for the following indices,index: 1 Got: 4 Expected: 1.
Can you tell me how to solve it? Thank you very much!
this.predMask={ data: Float32Array(262144), dims: [1,4,256,256], size: 262144, type: "float32", }
model:sam_vit_h_4b8939.onnx
If there is a previous tensor,error:Got invalid dimensions for input: mask_input for the following indices,index: 1 Got: 4 Expected: 1. Can you tell me how to solve it? Thank you very much!