I applied transformation during training phase in pytorch then I convert my model to run in tensorflow.js. It is working fine but got wrong predictions as I didn't apply same transformation.
test_transform = torchvision.transforms.Compose([
torchvision.transforms.Resize(size=(224, 224)),
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
I am able to resize image but not able to normalize. how can I do that?
Update:-
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js" type="text/javascript"></script>
<script>
{% load static %}
async function load_model(){
const model = await tf.loadGraphModel("{% static 'disease_detection/tfjs_model_2/model.json' %}");
console.log(model);
return model;
}
function loadImage(src){
return new Promise((resolve, reject) => {
const img = new Image();
img.src = src;
img.onload = () => resolve(tf.browser.fromPixels(img, 3));
img.onerror = (err) => reject(err);
});
}
function resizeImage(image) {
return tf.image.resizeBilinear(image, [224, 224]).sub([0.485, 0.456, 0.406]).div([0.229, 0.224, 0.225]);
}
function batchImage(image) {
const batchedImage = image.expandDims(0);
//const batchedImage = image;
return batchedImage.toFloat();
}
function loadAndProcessImage(image) {
//const croppedImage = cropImage(image);
const resizedImage = resizeImage(image);
const batchedImage = batchImage(resizedImage);
return batchedImage;
}
let model = load_model();
model.then(function (model_param){
loadImage('{% static 'disease_detection/COVID-19 (97).png' %}').then(img=>{
let imge = loadAndProcessImage(img);
const t4d = tf.tensor4d(Array.from(imge.dataSync()),[1,3,224,224])
console.log(t4d.dataSync());
let prediction = model_param.predict(t4d);
let v = prediction.argMax().dataSync()[0]
console.log(v)
})
})
I tried this code but it is not normalizing image properly.