Commit 4b49c5a0 by vincent

check in latest build

parent ef3ecfba
...@@ -2,44 +2,46 @@ ...@@ -2,44 +2,46 @@
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib"); var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core"); var tf = require("@tensorflow/tfjs-core");
var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var depthwiseSeparableConv_1 = require("./depthwiseSeparableConv");
var extractParams_1 = require("./extractParams"); var extractParams_1 = require("./extractParams");
var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase"); var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase");
var fullyConnectedLayer_1 = require("./fullyConnectedLayer"); var fullyConnectedLayer_1 = require("./fullyConnectedLayer");
var loadQuantizedParams_1 = require("./loadQuantizedParams"); var loadQuantizedParams_1 = require("./loadQuantizedParams");
function conv(x, params) { function denseBlock(x, denseBlockParams, isFirstLayer) {
return tfjs_tiny_yolov2_1.convLayer(x, params, 'valid', true); if (isFirstLayer === void 0) { isFirstLayer = false; }
} return tf.tidy(function () {
function maxPool(x, strides) { var out1 = tf.relu(isFirstLayer
if (strides === void 0) { strides = [2, 2]; } ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias)
return tf.maxPool(x, [2, 2], strides, 'valid'); : depthwiseSeparableConv_1.depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2]));
var out2 = depthwiseSeparableConv_1.depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);
var in3 = tf.relu(tf.add(out1, out2));
var out3 = depthwiseSeparableConv_1.depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);
var in4 = tf.relu(tf.add(out1, tf.add(out2, out3)));
var out4 = depthwiseSeparableConv_1.depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);
return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4))));
});
} }
var FaceLandmark68Net = /** @class */ (function (_super) { var FaceLandmark68Net = /** @class */ (function (_super) {
tslib_1.__extends(FaceLandmark68Net, _super); tslib_1.__extends(FaceLandmark68Net, _super);
function FaceLandmark68Net() { function FaceLandmark68Net() {
return _super.call(this, 'FaceLandmark68Net') || this; return _super.call(this, 'FaceLandmark68LargeNet') || this;
} }
FaceLandmark68Net.prototype.runNet = function (input) { FaceLandmark68Net.prototype.runNet = function (input) {
var params = this.params; var params = this.params;
if (!params) { if (!params) {
throw new Error('FaceLandmark68Net - load model before inference'); throw new Error('FaceLandmark68LargeNet - load model before inference');
} }
return tf.tidy(function () { return tf.tidy(function () {
var batchTensor = input.toBatchTensor(128, true).toFloat(); var batchTensor = input.toBatchTensor(112, true);
var out = conv(batchTensor, params.conv0); var meanRgb = [122.782, 117.001, 104.298];
out = maxPool(out); var normalized = tfjs_image_recognition_base_1.normalize(batchTensor, meanRgb).div(tf.scalar(255));
out = conv(out, params.conv1); var out = denseBlock(normalized, params.dense0, true);
out = conv(out, params.conv2); out = denseBlock(out, params.dense1);
out = maxPool(out); out = denseBlock(out, params.dense2);
out = conv(out, params.conv3); out = denseBlock(out, params.dense3);
out = conv(out, params.conv4); out = tf.avgPool(out, [7, 7], [2, 2], 'valid');
out = maxPool(out); return fullyConnectedLayer_1.fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc);
out = conv(out, params.conv5);
out = conv(out, params.conv6);
out = maxPool(out, [1, 1]);
out = conv(out, params.conv7);
var fc0 = tf.relu(fullyConnectedLayer_1.fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc0));
return fullyConnectedLayer_1.fullyConnectedLayer(fc0, params.fc1);
}); });
}; };
FaceLandmark68Net.prototype.loadQuantizedParams = function (uri) { FaceLandmark68Net.prototype.loadQuantizedParams = function (uri) {
......
{"version":3,"file":"FaceLandmark68Net.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/FaceLandmark68Net.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAE5C,qDAAyD;AAEzD,iDAAgD;AAChD,iEAAgE;AAChE,6DAA4D;AAC5D,6DAA4D;AAG5D,cAAc,CAAc,EAAE,MAAkB;IAC9C,OAAO,4BAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC;AAED,iBAAiB,CAAc,EAAE,OAAkC;IAAlC,wBAAA,EAAA,WAA6B,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC;AAED;IAAuC,6CAAgC;IAErE;eACE,kBAAM,mBAAmB,CAAC;IAC5B,CAAC;IAEM,kCAAM,GAAb,UAAc,KAAe;QAEnB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;SACnE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,EAAiB,CAAA;YAE3E,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YACzC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,yCAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAEhF,OAAO,yCAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACJ,CAAC;IAES,+CAAmB,GAA7B,UAA8B,GAAuB;QACnD,OAAO,yCAAmB,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAES,yCAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,6BAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IACH,wBAAC;AAAD,CAAC,AA1CD,CAAuC,6CAAqB,GA0C3D;AA1CY,8CAAiB"} {"version":3,"file":"FaceLandmark68Net.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/FaceLandmark68Net.ts"],"names":[],"mappings":"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"}
\ No newline at end of file \ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { NetInput } from 'tfjs-image-recognition-base';
import { FaceLandmark68NetBase } from './FaceLandmark68NetBase';
import { TinyNetParams } from './types';
export declare class FaceLandmark68TinyNet extends FaceLandmark68NetBase<TinyNetParams> {
constructor();
runNet(input: NetInput): tf.Tensor2D;
protected loadQuantizedParams(uri: string | undefined): Promise<{
params: TinyNetParams;
paramMappings: {
originalPath?: string | undefined;
paramPath: string;
}[];
}>;
protected extractParams(weights: Float32Array): {
params: TinyNetParams;
paramMappings: {
originalPath?: string | undefined;
paramPath: string;
}[];
};
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tf = require("@tensorflow/tfjs-core");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var depthwiseSeparableConv_1 = require("./depthwiseSeparableConv");
var extractParamsTiny_1 = require("./extractParamsTiny");
var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase");
var fullyConnectedLayer_1 = require("./fullyConnectedLayer");
var loadQuantizedParamsTiny_1 = require("./loadQuantizedParamsTiny");
function denseBlock(x, denseBlockParams, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
return tf.tidy(function () {
var out1 = tf.relu(isFirstLayer
? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias)
: depthwiseSeparableConv_1.depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2]));
var out2 = depthwiseSeparableConv_1.depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);
var in3 = tf.relu(tf.add(out1, out2));
var out3 = depthwiseSeparableConv_1.depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);
return tf.relu(tf.add(out1, tf.add(out2, out3)));
});
}
var FaceLandmark68TinyNet = /** @class */ (function (_super) {
tslib_1.__extends(FaceLandmark68TinyNet, _super);
function FaceLandmark68TinyNet() {
return _super.call(this, 'FaceLandmark68TinyNet') || this;
}
FaceLandmark68TinyNet.prototype.runNet = function (input) {
var params = this.params;
if (!params) {
throw new Error('FaceLandmark68TinyNet - load model before inference');
}
return tf.tidy(function () {
var batchTensor = input.toBatchTensor(112, true);
var meanRgb = [122.782, 117.001, 104.298];
var normalized = tfjs_image_recognition_base_1.normalize(batchTensor, meanRgb).div(tf.scalar(255));
var out = denseBlock(normalized, params.dense0, true);
out = denseBlock(out, params.dense1);
out = denseBlock(out, params.dense2);
out = tf.avgPool(out, [14, 14], [2, 2], 'valid');
return fullyConnectedLayer_1.fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc);
});
};
FaceLandmark68TinyNet.prototype.loadQuantizedParams = function (uri) {
return loadQuantizedParamsTiny_1.loadQuantizedParamsTiny(uri);
};
FaceLandmark68TinyNet.prototype.extractParams = function (weights) {
return extractParamsTiny_1.extractParamsTiny(weights);
};
return FaceLandmark68TinyNet;
}(FaceLandmark68NetBase_1.FaceLandmark68NetBase));
exports.FaceLandmark68TinyNet = FaceLandmark68TinyNet;
//# sourceMappingURL=FaceLandmark68TinyNet.js.map
\ No newline at end of file
{"version":3,"file":"FaceLandmark68TinyNet.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/FaceLandmark68TinyNet.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { SeparableConvParams } from 'tfjs-tiny-yolov2/build/tinyYolov2/types';
export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams, stride: [number, number]): tf.Tensor4D;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
function depthwiseSeparableConv(x, params, stride) {
return tf.tidy(function () {
var out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');
out = tf.add(out, params.bias);
return out;
});
}
exports.depthwiseSeparableConv = depthwiseSeparableConv;
//# sourceMappingURL=depthwiseSeparableConv.js.map
\ No newline at end of file
{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/depthwiseSeparableConv.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,gCACE,CAAc,EACd,MAA2B,EAC3B,MAAwB;IAExB,OAAO,EAAE,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACjG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC;AAVD,wDAUC"}
\ No newline at end of file
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); var extractorsFactory_1 = require("./extractorsFactory");
function extractParams(weights) { function extractParams(weights) {
var paramMappings = []; var paramMappings = [];
var _a = tfjs_image_recognition_base_1.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; var _a = tfjs_image_recognition_base_1.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var extractConvParams = tfjs_tiny_yolov2_1.extractConvParamsFactory(extractWeights, paramMappings); var _b = extractorsFactory_1.extractorsFactory(extractWeights, paramMappings), extractDenseBlock4Params = _b.extractDenseBlock4Params, extractFCParams = _b.extractFCParams;
var extractFCParams = tfjs_tiny_yolov2_1.extractFCParamsFactory(extractWeights, paramMappings); var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);
var conv0 = extractConvParams(3, 32, 3, 'conv0'); var dense1 = extractDenseBlock4Params(32, 64, 'dense1');
var conv1 = extractConvParams(32, 64, 3, 'conv1'); var dense2 = extractDenseBlock4Params(64, 128, 'dense2');
var conv2 = extractConvParams(64, 64, 3, 'conv2'); var dense3 = extractDenseBlock4Params(128, 256, 'dense3');
var conv3 = extractConvParams(64, 64, 3, 'conv3'); var fc = extractFCParams(256, 136, 'fc');
var conv4 = extractConvParams(64, 64, 3, 'conv4');
var conv5 = extractConvParams(64, 128, 3, 'conv5');
var conv6 = extractConvParams(128, 128, 3, 'conv6');
var conv7 = extractConvParams(128, 256, 3, 'conv7');
var fc0 = extractFCParams(6400, 1024, 'fc0');
var fc1 = extractFCParams(1024, 136, 'fc1');
if (getRemainingWeights().length !== 0) { if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length); throw new Error("weights remaing after extract: " + getRemainingWeights().length);
} }
return { return {
paramMappings: paramMappings, paramMappings: paramMappings,
params: { params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3, fc: fc }
conv0: conv0,
conv1: conv1,
conv2: conv2,
conv3: conv3,
conv4: conv4,
conv5: conv5,
conv6: conv6,
conv7: conv7,
fc0: fc0,
fc1: fc1
}
}; };
} }
exports.extractParams = extractParams; exports.extractParams = extractParams;
......
{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/extractParams.ts"],"names":[],"mappings":";;AAAA,2EAAkF;AAClF,qDAAoF;AAIpF,uBAA8B,OAAqB;IAEjD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,iEAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAElC,IAAM,iBAAiB,GAAG,2CAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IACjF,IAAM,eAAe,GAAG,yCAAsB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAE7E,IAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IAClD,IAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACnD,IAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACnD,IAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACnD,IAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACnD,IAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACpD,IAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACrD,IAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACrD,IAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAC9C,IAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IAE7C,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE;YACN,KAAK,OAAA;YACL,KAAK,OAAA;YACL,KAAK,OAAA;YACL,KAAK,OAAA;YACL,KAAK,OAAA;YACL,KAAK,OAAA;YACL,KAAK,OAAA;YACL,KAAK,OAAA;YACL,GAAG,KAAA;YACH,GAAG,KAAA;SACJ;KACF,CAAA;AACH,CAAC;AA1CD,sCA0CC"} {"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/extractParams.ts"],"names":[],"mappings":";;AAAA,2EAAkF;AAElF,yDAAwD;AAGxD,uBAA8B,OAAqB;IAEjD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,iEAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAE5B,IAAA,yEAG8C,EAFlD,sDAAwB,EACxB,oCAAe,CACmC;IAEpD,IAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3D,IAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAE1C,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,EAAE,IAAA,EAAE;KAC/C,CAAA;AACH,CAAC;AA5BD,sCA4BC"}
\ No newline at end of file \ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { TinyNetParams } from './types';
export declare function extractParamsTiny(weights: Float32Array): {
params: TinyNetParams;
paramMappings: ParamMapping[];
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var extractorsFactory_1 = require("./extractorsFactory");
function extractParamsTiny(weights) {
var paramMappings = [];
var _a = tfjs_image_recognition_base_1.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var _b = extractorsFactory_1.extractorsFactory(extractWeights, paramMappings), extractDenseBlock3Params = _b.extractDenseBlock3Params, extractFCParams = _b.extractFCParams;
var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);
var dense1 = extractDenseBlock3Params(32, 64, 'dense1');
var dense2 = extractDenseBlock3Params(64, 128, 'dense2');
var fc = extractFCParams(128, 136, 'fc');
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
paramMappings: paramMappings,
params: { dense0: dense0, dense1: dense1, dense2: dense2, fc: fc }
};
}
exports.extractParamsTiny = extractParamsTiny;
//# sourceMappingURL=extractParamsTiny.js.map
\ No newline at end of file
{"version":3,"file":"extractParamsTiny.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/extractParamsTiny.ts"],"names":[],"mappings":";;AAAA,2EAAkF;AAElF,yDAAwD;AAGxD,2BAAkC,OAAqB;IAErD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,iEAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAE5B,IAAA,yEAG8C,EAFlD,sDAAwB,EACxB,oCAAe,CACmC;IAEpD,IAAM,MAAM,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9D,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzD,IAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAE1C,IAAI,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,oCAAkC,mBAAmB,EAAE,CAAC,MAAQ,CAAC,CAAA;KAClF;IAED,OAAO;QACL,aAAa,eAAA;QACb,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,EAAE,IAAA,EAAE;KACvC,CAAA;AACH,CAAC;AA3BD,8CA2BC"}
\ No newline at end of file
import { ExtractWeightsFunction, ParamMapping } from 'tfjs-image-recognition-base';
import { FCParams } from 'tfjs-tiny-yolov2';
import { DenseBlock3Params, DenseBlock4Params } from './types';
export declare function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]): {
extractDenseBlock3Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock3Params;
extractDenseBlock4Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock4Params;
extractFCParams: (channelsIn: number, channelsOut: number, mappedPrefix: string) => FCParams;
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tf = require("@tensorflow/tfjs-core");
var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2");
var types_1 = require("tfjs-tiny-yolov2/build/tinyYolov2/types");
function extractorsFactory(extractWeights, paramMappings) {
function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) {
var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);
var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);
var bias = tf.tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" });
return new types_1.SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
function extractFCParams(channelsIn, channelsOut, mappedPrefix) {
var weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);
var bias = tf.tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/bias" });
return {
weights: weights,
bias: bias
};
}
var extractConvParams = tfjs_tiny_yolov2_1.extractConvParamsFactory(extractWeights, paramMappings);
function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv0")
: extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/conv0");
var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv1");
var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv2");
return { conv0: conv0, conv1: conv1, conv2: conv2 };
}
function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2;
var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv3");
return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 };
}
return {
extractDenseBlock3Params: extractDenseBlock3Params,
extractDenseBlock4Params: extractDenseBlock4Params,
extractFCParams: extractFCParams
};
}
exports.extractorsFactory = extractorsFactory;
//# sourceMappingURL=extractorsFactory.js.map
\ No newline at end of file
{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/extractorsFactory.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,qDAAsE;AACtE,iEAA8E;AAI9E,2BAAkC,cAAsC,EAAE,aAA6B;IAErG,oCAAoC,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/F,IAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAC/G,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,sBAAmB,EAAE,EACjD,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO,IAAI,2BAAmB,CAC5B,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,yBAAyB,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QACpF,IAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAChG,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,aAAU,EAAE,EACxC,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO;YACL,OAAO,SAAA;YACP,IAAI,MAAA;SACL,CAAA;IACH,CAAC;IAED,IAAM,iBAAiB,GAAG,2CAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEjF,kCAAkC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAE5H,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAK,YAAY,WAAQ,CAAC;YACxE,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAChF,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAC3F,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,kCAAkC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAK,CAAkF;QAC7G,IAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAK,YAAY,WAAQ,CAAC,CAAA;QAE3F,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;QACxB,eAAe,iBAAA;KAChB,CAAA;AAEH,CAAC;AA9DD,8CA8DC"}
\ No newline at end of file
import { FaceLandmark68Net } from './FaceLandmark68Net'; import { FaceLandmark68Net } from './FaceLandmark68Net';
export * from './FaceLandmark68Net'; export * from './FaceLandmark68Net';
export * from './FaceLandmark68TinyNet';
export declare class FaceLandmarkNet extends FaceLandmark68Net { export declare class FaceLandmarkNet extends FaceLandmark68Net {
} }
export declare function createFaceLandmarkNet(weights: Float32Array): FaceLandmarkNet; export declare function createFaceLandmarkNet(weights: Float32Array): FaceLandmarkNet;
......
...@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); ...@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib"); var tslib_1 = require("tslib");
var FaceLandmark68Net_1 = require("./FaceLandmark68Net"); var FaceLandmark68Net_1 = require("./FaceLandmark68Net");
tslib_1.__exportStar(require("./FaceLandmark68Net"), exports); tslib_1.__exportStar(require("./FaceLandmark68Net"), exports);
tslib_1.__exportStar(require("./FaceLandmark68TinyNet"), exports);
var FaceLandmarkNet = /** @class */ (function (_super) { var FaceLandmarkNet = /** @class */ (function (_super) {
tslib_1.__extends(FaceLandmarkNet, _super); tslib_1.__extends(FaceLandmarkNet, _super);
function FaceLandmarkNet() { function FaceLandmarkNet() {
......
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAExD,8DAAoC;AAEpC;IAAqC,2CAAiB;IAAtD;;IAAwD,CAAC;IAAD,sBAAC;AAAD,CAAC,AAAzD,CAAqC,qCAAiB,GAAG;AAA5C,0CAAe;AAE5B,+BAAsC,OAAqB;IACzD,IAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAA;IACjC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,sDAIC;AAED,yBAAgC,OAAqB;IACnD,OAAO,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAA;IACtH,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAA;AACvC,CAAC;AAHD,0CAGC"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAExD,8DAAoC;AACpC,kEAAwC;AAExC;IAAqC,2CAAiB;IAAtD;;IAAwD,CAAC;IAAD,sBAAC;AAAD,CAAC,AAAzD,CAAqC,qCAAiB,GAAG;AAA5C,0CAAe;AAE5B,+BAAsC,OAAqB;IACzD,IAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAA;IACjC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,sDAIC;AAED,yBAAgC,OAAqB;IACnD,OAAO,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAA;IACtH,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAA;AACvC,CAAC;AAHD,0CAGC"}
\ No newline at end of file \ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { FCParams } from 'tfjs-tiny-yolov2';
import { DenseBlock3Params, DenseBlock4Params } from './types';
export declare function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]): {
extractDenseBlock3Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock3Params;
extractDenseBlock4Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock4Params;
extractFcParams: (prefix: string) => FCParams;
};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var types_1 = require("tfjs-tiny-yolov2/build/tinyYolov2/types");
function loadParamsFactory(weightMap, paramMappings) {
var extractWeightEntry = tfjs_image_recognition_base_1.extractWeightEntryFactory(weightMap, paramMappings);
function extractConvParams(prefix) {
var filters = extractWeightEntry(prefix + "/filters", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { filters: filters, bias: bias };
}
function extractSeparableConvParams(prefix) {
var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4);
var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return new types_1.SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
function extractDenseBlock3Params(prefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
? extractConvParams(prefix + "/conv0")
: extractSeparableConvParams(prefix + "/conv0");
var conv1 = extractSeparableConvParams(prefix + "/conv1");
var conv2 = extractSeparableConvParams(prefix + "/conv2");
return { conv0: conv0, conv1: conv1, conv2: conv2 };
}
function extractDenseBlock4Params(prefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
? extractConvParams(prefix + "/conv0")
: extractSeparableConvParams(prefix + "/conv0");
var conv1 = extractSeparableConvParams(prefix + "/conv1");
var conv2 = extractSeparableConvParams(prefix + "/conv2");
var conv3 = extractSeparableConvParams(prefix + "/conv3");
return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 };
}
function extractFcParams(prefix) {
var weights = extractWeightEntry(prefix + "/weights", 2);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { weights: weights, bias: bias };
}
return {
extractDenseBlock3Params: extractDenseBlock3Params,
extractDenseBlock4Params: extractDenseBlock4Params,
extractFcParams: extractFcParams
};
}
exports.loadParamsFactory = loadParamsFactory;
//# sourceMappingURL=loadParamsFactory.js.map
\ No newline at end of file
{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/loadParamsFactory.ts"],"names":[],"mappings":";;AACA,2EAAsF;AAEtF,iEAA8E;AAI9E,2BAAkC,SAAc,EAAE,aAA6B;IAE7E,IAAM,kBAAkB,GAAG,uDAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE9E,2BAA2B,MAAc;QACvC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,oCAAoC,MAAc;QAChD,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,gBAAgB,GAAG,kBAAkB,CAAiB,MAAM,sBAAmB,EAAE,CAAC,CAAC,CAAA;QACzF,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,IAAI,2BAAmB,CAC5B,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,kCAAkC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IAChC,CAAC;IAED,kCAAkC,MAAc,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAC7E,IAAM,KAAK,GAAG,YAAY;YACxB,CAAC,CAAC,iBAAiB,CAAI,MAAM,WAAQ,CAAC;YACtC,CAAC,CAAC,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QACjD,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAC3D,IAAM,KAAK,GAAG,0BAA0B,CAAI,MAAM,WAAQ,CAAC,CAAA;QAE3D,OAAO,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,KAAK,OAAA,EAAE,CAAA;IACvC,CAAC;IAED,yBAAyB,MAAc;QACrC,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,aAAU,EAAE,CAAC,CAAC,CAAA;QACvE,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,CAAC,CAAA;QAEjE,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;QACxB,eAAe,iBAAA;KAChB,CAAA;AACH,CAAC;AAxDD,8CAwDC"}
\ No newline at end of file
...@@ -2,45 +2,24 @@ ...@@ -2,45 +2,24 @@
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib"); var tslib_1 = require("tslib");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var loadParamsFactory_1 = require("./loadParamsFactory");
var DEFAULT_MODEL_NAME = 'face_landmark_68_model'; var DEFAULT_MODEL_NAME = 'face_landmark_68_model';
function extractorsFactory(weightMap, paramMappings) {
var extractWeightEntry = tfjs_image_recognition_base_1.extractWeightEntryFactory(weightMap, paramMappings);
function extractConvParams(prefix, mappedPrefix) {
var filters = extractWeightEntry(prefix + "/kernel", 4, mappedPrefix + "/filters");
var bias = extractWeightEntry(prefix + "/bias", 1, mappedPrefix + "/bias");
return { filters: filters, bias: bias };
}
function extractFcParams(prefix, mappedPrefix) {
var weights = extractWeightEntry(prefix + "/kernel", 2, mappedPrefix + "/weights");
var bias = extractWeightEntry(prefix + "/bias", 1, mappedPrefix + "/bias");
return { weights: weights, bias: bias };
}
return {
extractConvParams: extractConvParams,
extractFcParams: extractFcParams
};
}
function loadQuantizedParams(uri) { function loadQuantizedParams(uri) {
return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__awaiter(this, void 0, void 0, function () {
var weightMap, paramMappings, _a, extractConvParams, extractFcParams, params; var weightMap, paramMappings, _a, extractDenseBlock4Params, extractFcParams, params;
return tslib_1.__generator(this, function (_b) { return tslib_1.__generator(this, function (_b) {
switch (_b.label) { switch (_b.label) {
case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)]; case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)];
case 1: case 1:
weightMap = _b.sent(); weightMap = _b.sent();
paramMappings = []; paramMappings = [];
_a = extractorsFactory(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractFcParams = _a.extractFcParams; _a = loadParamsFactory_1.loadParamsFactory(weightMap, paramMappings), extractDenseBlock4Params = _a.extractDenseBlock4Params, extractFcParams = _a.extractFcParams;
params = { params = {
conv0: extractConvParams('conv2d_0', 'conv0'), dense0: extractDenseBlock4Params('dense0', true),
conv1: extractConvParams('conv2d_1', 'conv1'), dense1: extractDenseBlock4Params('dense1'),
conv2: extractConvParams('conv2d_2', 'conv2'), dense2: extractDenseBlock4Params('dense2'),
conv3: extractConvParams('conv2d_3', 'conv3'), dense3: extractDenseBlock4Params('dense3'),
conv4: extractConvParams('conv2d_4', 'conv4'), fc: extractFcParams('fc')
conv5: extractConvParams('conv2d_5', 'conv5'),
conv6: extractConvParams('conv2d_6', 'conv6'),
conv7: extractConvParams('conv2d_7', 'conv7'),
fc0: extractFcParams('dense', 'fc0'),
fc1: extractFcParams('logits', 'fc1')
}; };
tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings); tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings);
return [2 /*return*/, { params: params, paramMappings: paramMappings }]; return [2 /*return*/, { params: params, paramMappings: paramMappings }];
......
{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/loadQuantizedParams.ts"],"names":[],"mappings":";;;AACA,2EAKqC;AAKrC,IAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAEnD,2BAA2B,SAAc,EAAE,aAA6B;IAEtE,IAAM,kBAAkB,GAAG,uDAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE9E,2BAA2B,MAAc,EAAE,YAAoB;QAC7D,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,YAAS,EAAE,CAAC,EAAK,YAAY,aAAU,CAAC,CAAA;QACjG,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,EAAK,YAAY,UAAO,CAAC,CAAA;QAEzF,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,yBAAyB,MAAc,EAAE,YAAoB;QAC3D,IAAM,OAAO,GAAG,kBAAkB,CAAiB,MAAM,YAAS,EAAE,CAAC,EAAK,YAAY,aAAU,CAAC,CAAA;QACjG,IAAM,IAAI,GAAG,kBAAkB,CAAiB,MAAM,UAAO,EAAE,CAAC,EAAK,YAAY,UAAO,CAAC,CAAA;QAEzF,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,CAAA;IAC1B,CAAC;IAED,OAAO;QACL,iBAAiB,mBAAA;QACjB,eAAe,iBAAA;KAChB,CAAA;AACH,CAAC;AAED,6BACE,GAAuB;;;;;wBAGL,qBAAM,2CAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,iBAAiB,uBAAA,EACjB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,KAAK,EAAE,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;wBAC7C,GAAG,EAAE,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;wBACpC,GAAG,EAAE,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;qBACtC,CAAA;oBAED,wDAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC;AA5BD,kDA4BC"} {"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/loadQuantizedParams.ts"],"names":[],"mappings":";;;AAAA,2EAAsG;AAEtG,yDAAwD;AAGxD,IAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAEnD,6BACE,GAAuB;;;;;wBAGL,qBAAM,2CAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,qCAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,wBAAwB,8BAAA,EACxB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;qBAC1B,CAAA;oBAED,wDAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC;AAvBD,kDAuBC"}
\ No newline at end of file \ No newline at end of file
import { ParamMapping } from 'tfjs-image-recognition-base';
import { TinyNetParams } from './types';
export declare function loadQuantizedParamsTiny(uri: string | undefined): Promise<{
params: TinyNetParams;
paramMappings: ParamMapping[];
}>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base");
var loadParamsFactory_1 = require("./loadParamsFactory");
var DEFAULT_MODEL_NAME = 'face_landmark_68_tiny_model';
function loadQuantizedParamsTiny(uri) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var weightMap, paramMappings, _a, extractDenseBlock3Params, extractFcParams, params;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)];
case 1:
weightMap = _b.sent();
paramMappings = [];
_a = loadParamsFactory_1.loadParamsFactory(weightMap, paramMappings), extractDenseBlock3Params = _a.extractDenseBlock3Params, extractFcParams = _a.extractFcParams;
params = {
dense0: extractDenseBlock3Params('dense0', true),
dense1: extractDenseBlock3Params('dense1'),
dense2: extractDenseBlock3Params('dense2'),
fc: extractFcParams('fc')
};
tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings);
return [2 /*return*/, { params: params, paramMappings: paramMappings }];
}
});
});
}
exports.loadQuantizedParamsTiny = loadQuantizedParamsTiny;
//# sourceMappingURL=loadQuantizedParamsTiny.js.map
\ No newline at end of file
{"version":3,"file":"loadQuantizedParamsTiny.js","sourceRoot":"","sources":["../../src/faceLandmarkNet/loadQuantizedParamsTiny.ts"],"names":[],"mappings":";;;AAAA,2EAAsG;AAEtG,yDAAwD;AAGxD,IAAM,kBAAkB,GAAG,6BAA6B,CAAA;AAExD,iCACE,GAAuB;;;;;wBAGL,qBAAM,2CAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,qCAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,wBAAwB,8BAAA,EACxB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;qBAC1B,CAAA;oBAED,wDAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC;AAtBD,0DAsBC"}
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core';
import { ConvParams, FCParams } from 'tfjs-tiny-yolov2'; import { ConvParams, FCParams } from 'tfjs-tiny-yolov2';
import { SeparableConvParams } from 'tfjs-tiny-yolov2/build/tinyYolov2/types';
export declare type ConvWithBatchNormParams = BatchNormParams & {
filter: tf.Tensor4D;
};
export declare type BatchNormParams = {
mean: tf.Tensor1D;
variance: tf.Tensor1D;
scale: tf.Tensor1D;
offset: tf.Tensor1D;
};
export declare type SeparableConvWithBatchNormParams = {
depthwise: ConvWithBatchNormParams;
pointwise: ConvWithBatchNormParams;
};
export declare type FCWithBatchNormParams = BatchNormParams & {
weights: tf.Tensor2D;
};
export declare type DenseBlock3Params = {
conv0: SeparableConvParams | ConvParams;
conv1: SeparableConvParams;
conv2: SeparableConvParams;
};
export declare type DenseBlock4Params = DenseBlock3Params & {
conv3: SeparableConvParams;
};
export declare type TinyNetParams = {
dense0: DenseBlock3Params;
dense1: DenseBlock3Params;
dense2: DenseBlock3Params;
fc: FCParams;
};
export declare type NetParams = { export declare type NetParams = {
conv0: ConvParams; dense0: DenseBlock4Params;
conv1: ConvParams; dense1: DenseBlock4Params;
conv2: ConvParams; dense2: DenseBlock4Params;
conv3: ConvParams; dense3: DenseBlock4Params;
conv4: ConvParams; fc: FCParams;
conv5: ConvParams;
conv6: ConvParams;
conv7: ConvParams;
fc0: FCParams;
fc1: FCParams;
}; };
...@@ -6,6 +6,7 @@ import { FaceLandmarks68 } from './classes/FaceLandmarks68'; ...@@ -6,6 +6,7 @@ import { FaceLandmarks68 } from './classes/FaceLandmarks68';
import { FullFaceDescription } from './classes/FullFaceDescription'; import { FullFaceDescription } from './classes/FullFaceDescription';
import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet'; import { FaceDetectionNet } from './faceDetectionNet/FaceDetectionNet';
import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net'; import { FaceLandmark68Net } from './faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from './faceLandmarkNet/FaceLandmark68TinyNet';
import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet'; import { FaceRecognitionNet } from './faceRecognitionNet/FaceRecognitionNet';
import { Mtcnn } from './mtcnn/Mtcnn'; import { Mtcnn } from './mtcnn/Mtcnn';
import { MtcnnForwardParams, MtcnnResult } from './mtcnn/types'; import { MtcnnForwardParams, MtcnnResult } from './mtcnn/types';
...@@ -16,12 +17,14 @@ export declare const recognitionNet: FaceRecognitionNet; ...@@ -16,12 +17,14 @@ export declare const recognitionNet: FaceRecognitionNet;
export declare const nets: { export declare const nets: {
ssdMobilenetv1: FaceDetectionNet; ssdMobilenetv1: FaceDetectionNet;
faceLandmark68Net: FaceLandmark68Net; faceLandmark68Net: FaceLandmark68Net;
faceLandmark68TinyNet: FaceLandmark68TinyNet;
faceRecognitionNet: FaceRecognitionNet; faceRecognitionNet: FaceRecognitionNet;
mtcnn: Mtcnn; mtcnn: Mtcnn;
tinyYolov2: TinyYolov2; tinyYolov2: TinyYolov2;
}; };
export declare function loadSsdMobilenetv1Model(url: string): Promise<void>; export declare function loadSsdMobilenetv1Model(url: string): Promise<void>;
export declare function loadFaceLandmarkModel(url: string): Promise<void>; export declare function loadFaceLandmarkModel(url: string): Promise<void>;
export declare function loadFaceLandmarkTinyModel(url: string): Promise<void>;
export declare function loadFaceRecognitionModel(url: string): Promise<void>; export declare function loadFaceRecognitionModel(url: string): Promise<void>;
export declare function loadMtcnnModel(url: string): Promise<void>; export declare function loadMtcnnModel(url: string): Promise<void>;
export declare function loadTinyYolov2Model(url: string): Promise<void>; export declare function loadTinyYolov2Model(url: string): Promise<void>;
...@@ -30,6 +33,7 @@ export declare function loadModels(url: string): Promise<[void, void, void, void ...@@ -30,6 +33,7 @@ export declare function loadModels(url: string): Promise<[void, void, void, void
export declare function locateFaces(input: TNetInput, minConfidence?: number, maxResults?: number): Promise<FaceDetection[]>; export declare function locateFaces(input: TNetInput, minConfidence?: number, maxResults?: number): Promise<FaceDetection[]>;
export declare const ssdMobilenetv1: typeof locateFaces; export declare const ssdMobilenetv1: typeof locateFaces;
export declare function detectLandmarks(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>; export declare function detectLandmarks(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>;
export declare function detectLandmarksTiny(input: TNetInput): Promise<FaceLandmarks68 | FaceLandmarks68[]>;
export declare function computeFaceDescriptor(input: TNetInput): Promise<Float32Array | Float32Array[]>; export declare function computeFaceDescriptor(input: TNetInput): Promise<Float32Array | Float32Array[]>;
export declare function mtcnn(input: TNetInput, forwardParams: MtcnnForwardParams): Promise<MtcnnResult[]>; export declare function mtcnn(input: TNetInput, forwardParams: MtcnnForwardParams): Promise<MtcnnResult[]>;
export declare function tinyYolov2(input: TNetInput, forwardParams: TinyYolov2Types.TinyYolov2ForwardParams): Promise<FaceDetection[]>; export declare function tinyYolov2(input: TNetInput, forwardParams: TinyYolov2Types.TinyYolov2ForwardParams): Promise<FaceDetection[]>;
......
...@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); ...@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
var allFacesFactory_1 = require("./allFacesFactory"); var allFacesFactory_1 = require("./allFacesFactory");
var FaceDetectionNet_1 = require("./faceDetectionNet/FaceDetectionNet"); var FaceDetectionNet_1 = require("./faceDetectionNet/FaceDetectionNet");
var FaceLandmark68Net_1 = require("./faceLandmarkNet/FaceLandmark68Net"); var FaceLandmark68Net_1 = require("./faceLandmarkNet/FaceLandmark68Net");
var FaceLandmark68TinyNet_1 = require("./faceLandmarkNet/FaceLandmark68TinyNet");
var FaceRecognitionNet_1 = require("./faceRecognitionNet/FaceRecognitionNet"); var FaceRecognitionNet_1 = require("./faceRecognitionNet/FaceRecognitionNet");
var Mtcnn_1 = require("./mtcnn/Mtcnn"); var Mtcnn_1 = require("./mtcnn/Mtcnn");
var TinyYolov2_1 = require("./tinyYolov2/TinyYolov2"); var TinyYolov2_1 = require("./tinyYolov2/TinyYolov2");
...@@ -14,6 +15,7 @@ exports.recognitionNet = new FaceRecognitionNet_1.FaceRecognitionNet(); ...@@ -14,6 +15,7 @@ exports.recognitionNet = new FaceRecognitionNet_1.FaceRecognitionNet();
exports.nets = { exports.nets = {
ssdMobilenetv1: exports.detectionNet, ssdMobilenetv1: exports.detectionNet,
faceLandmark68Net: exports.landmarkNet, faceLandmark68Net: exports.landmarkNet,
faceLandmark68TinyNet: new FaceLandmark68TinyNet_1.FaceLandmark68TinyNet(),
faceRecognitionNet: exports.recognitionNet, faceRecognitionNet: exports.recognitionNet,
mtcnn: new Mtcnn_1.Mtcnn(), mtcnn: new Mtcnn_1.Mtcnn(),
tinyYolov2: new TinyYolov2_1.TinyYolov2() tinyYolov2: new TinyYolov2_1.TinyYolov2()
...@@ -26,6 +28,10 @@ function loadFaceLandmarkModel(url) { ...@@ -26,6 +28,10 @@ function loadFaceLandmarkModel(url) {
return exports.nets.faceLandmark68Net.load(url); return exports.nets.faceLandmark68Net.load(url);
} }
exports.loadFaceLandmarkModel = loadFaceLandmarkModel; exports.loadFaceLandmarkModel = loadFaceLandmarkModel;
function loadFaceLandmarkTinyModel(url) {
return exports.nets.faceLandmark68TinyNet.load(url);
}
exports.loadFaceLandmarkTinyModel = loadFaceLandmarkTinyModel;
function loadFaceRecognitionModel(url) { function loadFaceRecognitionModel(url) {
return exports.nets.faceRecognitionNet.load(url); return exports.nets.faceRecognitionNet.load(url);
} }
...@@ -43,6 +49,7 @@ function loadFaceDetectionModel(url) { ...@@ -43,6 +49,7 @@ function loadFaceDetectionModel(url) {
} }
exports.loadFaceDetectionModel = loadFaceDetectionModel; exports.loadFaceDetectionModel = loadFaceDetectionModel;
function loadModels(url) { function loadModels(url) {
console.warn('loadModels will be deprecated in future');
return Promise.all([ return Promise.all([
loadSsdMobilenetv1Model(url), loadSsdMobilenetv1Model(url),
loadFaceLandmarkModel(url), loadFaceLandmarkModel(url),
...@@ -61,6 +68,10 @@ function detectLandmarks(input) { ...@@ -61,6 +68,10 @@ function detectLandmarks(input) {
return exports.nets.faceLandmark68Net.detectLandmarks(input); return exports.nets.faceLandmark68Net.detectLandmarks(input);
} }
exports.detectLandmarks = detectLandmarks; exports.detectLandmarks = detectLandmarks;
function detectLandmarksTiny(input) {
return exports.nets.faceLandmark68TinyNet.detectLandmarks(input);
}
exports.detectLandmarksTiny = detectLandmarksTiny;
function computeFaceDescriptor(input) { function computeFaceDescriptor(input) {
return exports.nets.faceRecognitionNet.computeFaceDescriptor(input); return exports.nets.faceRecognitionNet.computeFaceDescriptor(input);
} }
......
{"version":3,"file":"globalApi.js","sourceRoot":"","sources":["../src/globalApi.ts"],"names":[],"mappings":"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"} {"version":3,"file":"globalApi.js","sourceRoot":"","sources":["../src/globalApi.ts"],"names":[],"mappings":"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"}
\ No newline at end of file \ No newline at end of file
...@@ -3148,38 +3148,69 @@ ...@@ -3148,38 +3148,69 @@
return createFaceDetectionNet(weights); return createFaceDetectionNet(weights);
} }
function depthwiseSeparableConv(x, params, stride) {
return tidy(function () {
var out = separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');
out = add(out, params.bias);
return out;
});
}
function extractorsFactory$4(extractWeights, paramMappings) {
function extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix) {
var depthwise_filter = tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);
var pointwise_filter = tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);
var bias = tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" });
return new SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
function extractFCParams(channelsIn, channelsOut, mappedPrefix) {
var weights = tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);
var bias = tensor1d(extractWeights(channelsOut));
paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/bias" });
return {
weights: weights,
bias: bias
};
}
var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);
function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv0")
: extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/conv0");
var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv1");
var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv2");
return { conv0: conv0, conv1: conv1, conv2: conv2 };
}
function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2;
var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv3");
return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 };
}
return {
extractDenseBlock3Params: extractDenseBlock3Params,
extractDenseBlock4Params: extractDenseBlock4Params,
extractFCParams: extractFCParams
};
}
function extractParams$2(weights) { function extractParams$2(weights) {
var paramMappings = []; var paramMappings = [];
var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); var _b = extractorsFactory$4(extractWeights, paramMappings), extractDenseBlock4Params = _b.extractDenseBlock4Params, extractFCParams = _b.extractFCParams;
var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings); var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);
var conv0 = extractConvParams(3, 32, 3, 'conv0'); var dense1 = extractDenseBlock4Params(32, 64, 'dense1');
var conv1 = extractConvParams(32, 64, 3, 'conv1'); var dense2 = extractDenseBlock4Params(64, 128, 'dense2');
var conv2 = extractConvParams(64, 64, 3, 'conv2'); var dense3 = extractDenseBlock4Params(128, 256, 'dense3');
var conv3 = extractConvParams(64, 64, 3, 'conv3'); var fc = extractFCParams(256, 136, 'fc');
var conv4 = extractConvParams(64, 64, 3, 'conv4');
var conv5 = extractConvParams(64, 128, 3, 'conv5');
var conv6 = extractConvParams(128, 128, 3, 'conv6');
var conv7 = extractConvParams(128, 256, 3, 'conv7');
var fc0 = extractFCParams(6400, 1024, 'fc0');
var fc1 = extractFCParams(1024, 136, 'fc1');
if (getRemainingWeights().length !== 0) { if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length); throw new Error("weights remaing after extract: " + getRemainingWeights().length);
} }
return { return {
paramMappings: paramMappings, paramMappings: paramMappings,
params: { params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3, fc: fc }
conv0: conv0,
conv1: conv1,
conv2: conv2,
conv3: conv3,
conv4: conv4,
conv5: conv5,
conv6: conv6,
conv7: conv7,
fc0: fc0,
fc1: fc1
}
}; };
} }
...@@ -3297,45 +3328,67 @@ ...@@ -3297,45 +3328,67 @@
}); });
} }
var DEFAULT_MODEL_NAME$1 = 'face_landmark_68_model'; function loadParamsFactory(weightMap, paramMappings) {
function extractorsFactory$4(weightMap, paramMappings) {
var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);
function extractConvParams(prefix, mappedPrefix) { function extractConvParams(prefix) {
var filters = extractWeightEntry(prefix + "/kernel", 4, mappedPrefix + "/filters"); var filters = extractWeightEntry(prefix + "/filters", 4);
var bias = extractWeightEntry(prefix + "/bias", 1, mappedPrefix + "/bias"); var bias = extractWeightEntry(prefix + "/bias", 1);
return { filters: filters, bias: bias }; return { filters: filters, bias: bias };
} }
function extractFcParams(prefix, mappedPrefix) { function extractSeparableConvParams(prefix) {
var weights = extractWeightEntry(prefix + "/kernel", 2, mappedPrefix + "/weights"); var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4);
var bias = extractWeightEntry(prefix + "/bias", 1, mappedPrefix + "/bias"); var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4);
var bias = extractWeightEntry(prefix + "/bias", 1);
return new SeparableConvParams(depthwise_filter, pointwise_filter, bias);
}
function extractDenseBlock3Params(prefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
? extractConvParams(prefix + "/conv0")
: extractSeparableConvParams(prefix + "/conv0");
var conv1 = extractSeparableConvParams(prefix + "/conv1");
var conv2 = extractSeparableConvParams(prefix + "/conv2");
return { conv0: conv0, conv1: conv1, conv2: conv2 };
}
function extractDenseBlock4Params(prefix, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
var conv0 = isFirstLayer
? extractConvParams(prefix + "/conv0")
: extractSeparableConvParams(prefix + "/conv0");
var conv1 = extractSeparableConvParams(prefix + "/conv1");
var conv2 = extractSeparableConvParams(prefix + "/conv2");
var conv3 = extractSeparableConvParams(prefix + "/conv3");
return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 };
}
function extractFcParams(prefix) {
var weights = extractWeightEntry(prefix + "/weights", 2);
var bias = extractWeightEntry(prefix + "/bias", 1);
return { weights: weights, bias: bias }; return { weights: weights, bias: bias };
} }
return { return {
extractConvParams: extractConvParams, extractDenseBlock3Params: extractDenseBlock3Params,
extractDenseBlock4Params: extractDenseBlock4Params,
extractFcParams: extractFcParams extractFcParams: extractFcParams
}; };
} }
var DEFAULT_MODEL_NAME$1 = 'face_landmark_68_model';
function loadQuantizedParams$2(uri) { function loadQuantizedParams$2(uri) {
return __awaiter$1(this, void 0, void 0, function () { return __awaiter$1(this, void 0, void 0, function () {
var weightMap, paramMappings, _a, extractConvParams, extractFcParams, params; var weightMap, paramMappings, _a, extractDenseBlock4Params, extractFcParams, params;
return __generator$1(this, function (_b) { return __generator$1(this, function (_b) {
switch (_b.label) { switch (_b.label) {
case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$1)]; case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$1)];
case 1: case 1:
weightMap = _b.sent(); weightMap = _b.sent();
paramMappings = []; paramMappings = [];
_a = extractorsFactory$4(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractFcParams = _a.extractFcParams; _a = loadParamsFactory(weightMap, paramMappings), extractDenseBlock4Params = _a.extractDenseBlock4Params, extractFcParams = _a.extractFcParams;
params = { params = {
conv0: extractConvParams('conv2d_0', 'conv0'), dense0: extractDenseBlock4Params('dense0', true),
conv1: extractConvParams('conv2d_1', 'conv1'), dense1: extractDenseBlock4Params('dense1'),
conv2: extractConvParams('conv2d_2', 'conv2'), dense2: extractDenseBlock4Params('dense2'),
conv3: extractConvParams('conv2d_3', 'conv3'), dense3: extractDenseBlock4Params('dense3'),
conv4: extractConvParams('conv2d_4', 'conv4'), fc: extractFcParams('fc')
conv5: extractConvParams('conv2d_5', 'conv5'),
conv6: extractConvParams('conv2d_6', 'conv6'),
conv7: extractConvParams('conv2d_7', 'conv7'),
fc0: extractFcParams('dense', 'fc0'),
fc1: extractFcParams('logits', 'fc1')
}; };
disposeUnusedWeightTensors(weightMap, paramMappings); disposeUnusedWeightTensors(weightMap, paramMappings);
return [2 /*return*/, { params: params, paramMappings: paramMappings }]; return [2 /*return*/, { params: params, paramMappings: paramMappings }];
...@@ -3344,39 +3397,40 @@ ...@@ -3344,39 +3397,40 @@
}); });
} }
function conv(x, params) { function denseBlock(x, denseBlockParams, isFirstLayer) {
return convLayer(x, params, 'valid', true); if (isFirstLayer === void 0) { isFirstLayer = false; }
} return tidy(function () {
function maxPool$1(x, strides) { var out1 = relu(isFirstLayer
if (strides === void 0) { strides = [2, 2]; } ? add(conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias)
return maxPool(x, [2, 2], strides, 'valid'); : depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2]));
var out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);
var in3 = relu(add(out1, out2));
var out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);
var in4 = relu(add(out1, add(out2, out3)));
var out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);
return relu(add(out1, add(out2, add(out3, out4))));
});
} }
var FaceLandmark68Net = /** @class */ (function (_super) { var FaceLandmark68Net = /** @class */ (function (_super) {
__extends$1(FaceLandmark68Net, _super); __extends$1(FaceLandmark68Net, _super);
function FaceLandmark68Net() { function FaceLandmark68Net() {
return _super.call(this, 'FaceLandmark68Net') || this; return _super.call(this, 'FaceLandmark68LargeNet') || this;
} }
FaceLandmark68Net.prototype.runNet = function (input) { FaceLandmark68Net.prototype.runNet = function (input) {
var params = this.params; var params = this.params;
if (!params) { if (!params) {
throw new Error('FaceLandmark68Net - load model before inference'); throw new Error('FaceLandmark68LargeNet - load model before inference');
} }
return tidy(function () { return tidy(function () {
var batchTensor = input.toBatchTensor(128, true).toFloat(); var batchTensor = input.toBatchTensor(112, true);
var out = conv(batchTensor, params.conv0); var meanRgb = [122.782, 117.001, 104.298];
out = maxPool$1(out); var normalized = normalize(batchTensor, meanRgb).div(scalar(255));
out = conv(out, params.conv1); var out = denseBlock(normalized, params.dense0, true);
out = conv(out, params.conv2); out = denseBlock(out, params.dense1);
out = maxPool$1(out); out = denseBlock(out, params.dense2);
out = conv(out, params.conv3); out = denseBlock(out, params.dense3);
out = conv(out, params.conv4); out = avgPool(out, [7, 7], [2, 2], 'valid');
out = maxPool$1(out); return fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc);
out = conv(out, params.conv5);
out = conv(out, params.conv6);
out = maxPool$1(out, [1, 1]);
out = conv(out, params.conv7);
var fc0 = relu(fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc0));
return fullyConnectedLayer(fc0, params.fc1);
}); });
}; };
FaceLandmark68Net.prototype.loadQuantizedParams = function (uri) { FaceLandmark68Net.prototype.loadQuantizedParams = function (uri) {
...@@ -3388,6 +3442,89 @@ ...@@ -3388,6 +3442,89 @@
return FaceLandmark68Net; return FaceLandmark68Net;
}(FaceLandmark68NetBase)); }(FaceLandmark68NetBase));
function extractParamsTiny(weights) {
var paramMappings = [];
var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;
var _b = extractorsFactory$4(extractWeights, paramMappings), extractDenseBlock3Params = _b.extractDenseBlock3Params, extractFCParams = _b.extractFCParams;
var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);
var dense1 = extractDenseBlock3Params(32, 64, 'dense1');
var dense2 = extractDenseBlock3Params(64, 128, 'dense2');
var fc = extractFCParams(128, 136, 'fc');
if (getRemainingWeights().length !== 0) {
throw new Error("weights remaing after extract: " + getRemainingWeights().length);
}
return {
paramMappings: paramMappings,
params: { dense0: dense0, dense1: dense1, dense2: dense2, fc: fc }
};
}
var DEFAULT_MODEL_NAME$2 = 'face_landmark_68_tiny_model';
function loadQuantizedParamsTiny(uri) {
return __awaiter$1(this, void 0, void 0, function () {
var weightMap, paramMappings, _a, extractDenseBlock3Params, extractFcParams, params;
return __generator$1(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$2)];
case 1:
weightMap = _b.sent();
paramMappings = [];
_a = loadParamsFactory(weightMap, paramMappings), extractDenseBlock3Params = _a.extractDenseBlock3Params, extractFcParams = _a.extractFcParams;
params = {
dense0: extractDenseBlock3Params('dense0', true),
dense1: extractDenseBlock3Params('dense1'),
dense2: extractDenseBlock3Params('dense2'),
fc: extractFcParams('fc')
};
disposeUnusedWeightTensors(weightMap, paramMappings);
return [2 /*return*/, { params: params, paramMappings: paramMappings }];
}
});
});
}
function denseBlock$1(x, denseBlockParams, isFirstLayer) {
if (isFirstLayer === void 0) { isFirstLayer = false; }
return tidy(function () {
var out1 = relu(isFirstLayer
? add(conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias)
: depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2]));
var out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);
var in3 = relu(add(out1, out2));
var out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);
return relu(add(out1, add(out2, out3)));
});
}
var FaceLandmark68TinyNet = /** @class */ (function (_super) {
__extends$1(FaceLandmark68TinyNet, _super);
function FaceLandmark68TinyNet() {
return _super.call(this, 'FaceLandmark68TinyNet') || this;
}
FaceLandmark68TinyNet.prototype.runNet = function (input) {
var params = this.params;
if (!params) {
throw new Error('FaceLandmark68TinyNet - load model before inference');
}
return tidy(function () {
var batchTensor = input.toBatchTensor(112, true);
var meanRgb = [122.782, 117.001, 104.298];
var normalized = normalize(batchTensor, meanRgb).div(scalar(255));
var out = denseBlock$1(normalized, params.dense0, true);
out = denseBlock$1(out, params.dense1);
out = denseBlock$1(out, params.dense2);
out = avgPool(out, [14, 14], [2, 2], 'valid');
return fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc);
});
};
FaceLandmark68TinyNet.prototype.loadQuantizedParams = function (uri) {
return loadQuantizedParamsTiny(uri);
};
FaceLandmark68TinyNet.prototype.extractParams = function (weights) {
return extractParamsTiny(weights);
};
return FaceLandmark68TinyNet;
}(FaceLandmark68NetBase));
var FaceLandmarkNet = /** @class */ (function (_super) { var FaceLandmarkNet = /** @class */ (function (_super) {
__extends$1(FaceLandmarkNet, _super); __extends$1(FaceLandmarkNet, _super);
function FaceLandmarkNet() { function FaceLandmarkNet() {
...@@ -3417,7 +3554,7 @@ ...@@ -3417,7 +3554,7 @@
out = scale(out, params.scale); out = scale(out, params.scale);
return withRelu ? relu(out) : out; return withRelu ? relu(out) : out;
} }
function conv$1(x, params) { function conv(x, params) {
return convLayer$1(x, params, [1, 1], true); return convLayer$1(x, params, [1, 1], true);
} }
function convNoRelu(x, params) { function convNoRelu(x, params) {
...@@ -3512,7 +3649,7 @@ ...@@ -3512,7 +3649,7 @@
return { params: params, paramMappings: paramMappings }; return { params: params, paramMappings: paramMappings };
} }
var DEFAULT_MODEL_NAME$2 = 'face_recognition_model'; var DEFAULT_MODEL_NAME$3 = 'face_recognition_model';
function extractorsFactory$6(weightMap, paramMappings) { function extractorsFactory$6(weightMap, paramMappings) {
var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);
function extractScaleLayerParams(prefix) { function extractScaleLayerParams(prefix) {
...@@ -3542,7 +3679,7 @@ ...@@ -3542,7 +3679,7 @@
var weightMap, paramMappings, _a, extractConvLayerParams, extractResidualLayerParams, conv32_down, conv32_1, conv32_2, conv32_3, conv64_down, conv64_1, conv64_2, conv64_3, conv128_down, conv128_1, conv128_2, conv256_down, conv256_1, conv256_2, conv256_down_out, fc, params; var weightMap, paramMappings, _a, extractConvLayerParams, extractResidualLayerParams, conv32_down, conv32_1, conv32_2, conv32_3, conv64_down, conv64_1, conv64_2, conv64_3, conv128_down, conv128_1, conv128_2, conv256_down, conv256_1, conv256_2, conv256_down_out, fc, params;
return __generator$1(this, function (_b) { return __generator$1(this, function (_b) {
switch (_b.label) { switch (_b.label) {
case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$2)]; case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$3)];
case 1: case 1:
weightMap = _b.sent(); weightMap = _b.sent();
paramMappings = []; paramMappings = [];
...@@ -3593,7 +3730,7 @@ ...@@ -3593,7 +3730,7 @@
} }
function residual(x, params) { function residual(x, params) {
var out = conv$1(x, params.conv1); var out = conv(x, params.conv1);
out = convNoRelu(out, params.conv2); out = convNoRelu(out, params.conv2);
out = add(out, x); out = add(out, x);
out = relu(out); out = relu(out);
...@@ -3916,7 +4053,7 @@ ...@@ -3916,7 +4053,7 @@
}; };
} }
var DEFAULT_MODEL_NAME$3 = 'mtcnn_model'; var DEFAULT_MODEL_NAME$4 = 'mtcnn_model';
function extractorsFactory$8(weightMap, paramMappings) { function extractorsFactory$8(weightMap, paramMappings) {
var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);
function extractConvParams(prefix) { function extractConvParams(prefix) {
...@@ -3977,7 +4114,7 @@ ...@@ -3977,7 +4114,7 @@
var weightMap, paramMappings, _a, extractPNetParams, extractRNetParams, extractONetParams, pnet, rnet, onet; var weightMap, paramMappings, _a, extractPNetParams, extractRNetParams, extractONetParams, pnet, rnet, onet;
return __generator$1(this, function (_b) { return __generator$1(this, function (_b) {
switch (_b.label) { switch (_b.label) {
case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$3)]; case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME$4)];
case 1: case 1:
weightMap = _b.sent(); weightMap = _b.sent();
paramMappings = []; paramMappings = [];
...@@ -4478,7 +4615,7 @@ ...@@ -4478,7 +4615,7 @@
new Point(9.041765, 10.66308) new Point(9.041765, 10.66308)
]; ];
var MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404]; var MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404];
var DEFAULT_MODEL_NAME$4 = 'tiny_yolov2_model'; var DEFAULT_MODEL_NAME$5 = 'tiny_yolov2_model';
var DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model'; var DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';
var TinyYolov2$1 = /** @class */ (function (_super) { var TinyYolov2$1 = /** @class */ (function (_super) {
...@@ -4530,7 +4667,7 @@ ...@@ -4530,7 +4667,7 @@
}); });
}; };
TinyYolov2$$1.prototype.loadQuantizedParams = function (modelUri) { TinyYolov2$$1.prototype.loadQuantizedParams = function (modelUri) {
var defaultModelName = this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME$4; var defaultModelName = this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME$5;
return _super.prototype.loadQuantizedParams.call(this, modelUri, defaultModelName); return _super.prototype.loadQuantizedParams.call(this, modelUri, defaultModelName);
}; };
return TinyYolov2$$1; return TinyYolov2$$1;
...@@ -4544,6 +4681,7 @@ ...@@ -4544,6 +4681,7 @@
var nets = { var nets = {
ssdMobilenetv1: detectionNet, ssdMobilenetv1: detectionNet,
faceLandmark68Net: landmarkNet, faceLandmark68Net: landmarkNet,
faceLandmark68TinyNet: new FaceLandmark68TinyNet(),
faceRecognitionNet: recognitionNet, faceRecognitionNet: recognitionNet,
mtcnn: new Mtcnn(), mtcnn: new Mtcnn(),
tinyYolov2: new TinyYolov2$1() tinyYolov2: new TinyYolov2$1()
...@@ -4554,6 +4692,9 @@ ...@@ -4554,6 +4692,9 @@
function loadFaceLandmarkModel(url) { function loadFaceLandmarkModel(url) {
return nets.faceLandmark68Net.load(url); return nets.faceLandmark68Net.load(url);
} }
function loadFaceLandmarkTinyModel(url) {
return nets.faceLandmark68TinyNet.load(url);
}
function loadFaceRecognitionModel(url) { function loadFaceRecognitionModel(url) {
return nets.faceRecognitionNet.load(url); return nets.faceRecognitionNet.load(url);
} }
...@@ -4567,6 +4708,7 @@ ...@@ -4567,6 +4708,7 @@
return loadSsdMobilenetv1Model(url); return loadSsdMobilenetv1Model(url);
} }
function loadModels(url) { function loadModels(url) {
console.warn('loadModels will be deprecated in future');
return Promise.all([ return Promise.all([
loadSsdMobilenetv1Model(url), loadSsdMobilenetv1Model(url),
loadFaceLandmarkModel(url), loadFaceLandmarkModel(url),
...@@ -4582,6 +4724,9 @@ ...@@ -4582,6 +4724,9 @@
function detectLandmarks(input) { function detectLandmarks(input) {
return nets.faceLandmark68Net.detectLandmarks(input); return nets.faceLandmark68Net.detectLandmarks(input);
} }
function detectLandmarksTiny(input) {
return nets.faceLandmark68TinyNet.detectLandmarks(input);
}
function computeFaceDescriptor(input) { function computeFaceDescriptor(input) {
return nets.faceRecognitionNet.computeFaceDescriptor(input); return nets.faceRecognitionNet.computeFaceDescriptor(input);
} }
...@@ -4678,6 +4823,7 @@ ...@@ -4678,6 +4823,7 @@
exports.createFaceLandmarkNet = createFaceLandmarkNet; exports.createFaceLandmarkNet = createFaceLandmarkNet;
exports.faceLandmarkNet = faceLandmarkNet; exports.faceLandmarkNet = faceLandmarkNet;
exports.FaceLandmark68Net = FaceLandmark68Net; exports.FaceLandmark68Net = FaceLandmark68Net;
exports.FaceLandmark68TinyNet = FaceLandmark68TinyNet;
exports.createFaceRecognitionNet = createFaceRecognitionNet; exports.createFaceRecognitionNet = createFaceRecognitionNet;
exports.faceRecognitionNet = faceRecognitionNet; exports.faceRecognitionNet = faceRecognitionNet;
exports.FaceRecognitionNet = FaceRecognitionNet; exports.FaceRecognitionNet = FaceRecognitionNet;
...@@ -4687,6 +4833,7 @@ ...@@ -4687,6 +4833,7 @@
exports.nets = nets; exports.nets = nets;
exports.loadSsdMobilenetv1Model = loadSsdMobilenetv1Model; exports.loadSsdMobilenetv1Model = loadSsdMobilenetv1Model;
exports.loadFaceLandmarkModel = loadFaceLandmarkModel; exports.loadFaceLandmarkModel = loadFaceLandmarkModel;
exports.loadFaceLandmarkTinyModel = loadFaceLandmarkTinyModel;
exports.loadFaceRecognitionModel = loadFaceRecognitionModel; exports.loadFaceRecognitionModel = loadFaceRecognitionModel;
exports.loadMtcnnModel = loadMtcnnModel; exports.loadMtcnnModel = loadMtcnnModel;
exports.loadTinyYolov2Model = loadTinyYolov2Model; exports.loadTinyYolov2Model = loadTinyYolov2Model;
...@@ -4695,6 +4842,7 @@ ...@@ -4695,6 +4842,7 @@
exports.locateFaces = locateFaces; exports.locateFaces = locateFaces;
exports.ssdMobilenetv1 = ssdMobilenetv1; exports.ssdMobilenetv1 = ssdMobilenetv1;
exports.detectLandmarks = detectLandmarks; exports.detectLandmarks = detectLandmarks;
exports.detectLandmarksTiny = detectLandmarksTiny;
exports.computeFaceDescriptor = computeFaceDescriptor; exports.computeFaceDescriptor = computeFaceDescriptor;
exports.mtcnn = mtcnn; exports.mtcnn = mtcnn;
exports.tinyYolov2 = tinyYolov2; exports.tinyYolov2 = tinyYolov2;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</div> </div>
<script> <script>
const net = new faceapi.FaceLandmark68LargeNet() const net = new faceapi.FaceLandmark68Net()
const modelCheckpoint = 'tmp/densenet4/checkpoints/landmarks_epoch46_lr00001_12_lr000001_18.weights' const modelCheckpoint = 'tmp/densenet4/checkpoints/landmarks_epoch46_lr00001_12_lr000001_18.weights'
const crops = 4 const crops = 4
...@@ -27,9 +27,9 @@ ...@@ -27,9 +27,9 @@
} }
async function load() { async function load() {
//await net.load('./') await net.load('./')
const weights = await loadNetWeights(modelCheckpoint) //const weights = await loadNetWeights(modelCheckpoint)
await net.load(weights) //await net.load(weights)
console.log('model loaded') console.log('model loaded')
} }
......
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