Commit 49cf1e26 by vincent

wrap computeFaceDescriptors in tf.tidy

parent e2158565
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -6,26 +6,28 @@ import { residual, residualDown } from './residualLayer'; ...@@ -6,26 +6,28 @@ import { residual, residualDown } from './residualLayer';
export function faceRecognitionNet(weights) { export function faceRecognitionNet(weights) {
var params = extractParams(weights); var params = extractParams(weights);
return function (input) { return function (input) {
var x = tf.tensor4d(normalize(input), [1, 150, 150, 3]); return tf.tidy(function () {
var out = convDown(x, params.conv32_down); var x = tf.tensor4d(normalize(input), [1, 150, 150, 3]);
out = tf.maxPool(out, 3, 2, 'valid'); var out = convDown(x, params.conv32_down);
out = residual(out, params.conv32_1); out = tf.maxPool(out, 3, 2, 'valid');
out = residual(out, params.conv32_2); out = residual(out, params.conv32_1);
out = residual(out, params.conv32_3); out = residual(out, params.conv32_2);
out = residualDown(out, params.conv64_down); out = residual(out, params.conv32_3);
out = residual(out, params.conv64_1); out = residualDown(out, params.conv64_down);
out = residual(out, params.conv64_2); out = residual(out, params.conv64_1);
out = residual(out, params.conv64_3); out = residual(out, params.conv64_2);
out = residualDown(out, params.conv128_down); out = residual(out, params.conv64_3);
out = residual(out, params.conv128_1); out = residualDown(out, params.conv128_down);
out = residual(out, params.conv128_2); out = residual(out, params.conv128_1);
out = residualDown(out, params.conv256_down); out = residual(out, params.conv128_2);
out = residual(out, params.conv256_1); out = residualDown(out, params.conv256_down);
out = residual(out, params.conv256_2); out = residual(out, params.conv256_1);
out = residualDown(out, params.conv256_down_out); out = residual(out, params.conv256_2);
var globalAvg = out.mean([1, 2]); out = residualDown(out, params.conv256_down_out);
var fullyConnected = tf.matMul(globalAvg, params.fc); var globalAvg = out.mean([1, 2]);
return Array.from(fullyConnected.dataSync()); var fullyConnected = tf.matMul(globalAvg, params.fc);
return Array.from(fullyConnected.dataSync());
});
}; };
} }
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/faceRecognitionNet/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,6BAA6B,OAAqB;IACtD,IAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAErC,OAAO,UAAU,KAAe;QAE9B,IAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzD,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QACzC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;QAEpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QAEpC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAC3C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QAEpC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC5C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QAErC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC5C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QACrC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAEhD,IAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAgB,CAAA;QACjD,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QAEtD,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9C,CAAC,CAAA;AACH,CAAC"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/faceRecognitionNet/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,6BAA6B,OAAqB;IACtD,IAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAErC,OAAO,UAAU,KAAe;QAE9B,OAAO,EAAE,CAAC,IAAI,CAAC;YAEb,IAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;YAEzD,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YACzC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;YAEpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEpC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YAC3C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;YAEpC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YAC5C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YAErC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;YAC5C,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YACrC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;YACrC,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAEhD,IAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAgB,CAAA;YACjD,IAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;YAEtD,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
\ No newline at end of file \ No newline at end of file
...@@ -10,32 +10,35 @@ export function faceRecognitionNet(weights: Float32Array) { ...@@ -10,32 +10,35 @@ export function faceRecognitionNet(weights: Float32Array) {
return function (input: number[]) { return function (input: number[]) {
const x = tf.tensor4d(normalize(input), [1, 150, 150, 3]) return tf.tidy(() => {
let out = convDown(x, params.conv32_down) const x = tf.tensor4d(normalize(input), [1, 150, 150, 3])
out = tf.maxPool(out, 3, 2, 'valid')
out = residual(out, params.conv32_1) let out = convDown(x, params.conv32_down)
out = residual(out, params.conv32_2) out = tf.maxPool(out, 3, 2, 'valid')
out = residual(out, params.conv32_3)
out = residualDown(out, params.conv64_down) out = residual(out, params.conv32_1)
out = residual(out, params.conv64_1) out = residual(out, params.conv32_2)
out = residual(out, params.conv64_2) out = residual(out, params.conv32_3)
out = residual(out, params.conv64_3)
out = residualDown(out, params.conv128_down) out = residualDown(out, params.conv64_down)
out = residual(out, params.conv128_1) out = residual(out, params.conv64_1)
out = residual(out, params.conv128_2) out = residual(out, params.conv64_2)
out = residual(out, params.conv64_3)
out = residualDown(out, params.conv256_down) out = residualDown(out, params.conv128_down)
out = residual(out, params.conv256_1) out = residual(out, params.conv128_1)
out = residual(out, params.conv256_2) out = residual(out, params.conv128_2)
out = residualDown(out, params.conv256_down_out)
const globalAvg = out.mean([1, 2]) as tf.Tensor2D out = residualDown(out, params.conv256_down)
const fullyConnected = tf.matMul(globalAvg, params.fc) out = residual(out, params.conv256_1)
out = residual(out, params.conv256_2)
out = residualDown(out, params.conv256_down_out)
return Array.from(fullyConnected.dataSync()) const globalAvg = out.mean([1, 2]) as tf.Tensor2D
const fullyConnected = tf.matMul(globalAvg, params.fc)
return Array.from(fullyConnected.dataSync())
})
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment