Commit fb7b4c85 by vincent

clean up dist folder

parent a6723ed0
import * as tf from '@tensorflow/tfjs-core';
export declare type ConvLayerParams = {
filters: tf.Tensor4D;
biases: tf.Tensor1D;
};
export declare type ScaleLayerParams = {
weights: tf.Tensor1D;
biases: tf.Tensor1D;
};
export declare type ConvBlockParams = {
conv: ConvLayerParams;
scale: ScaleLayerParams;
};
export declare type ResBlockParams = {
conv1: ConvBlockParams;
conv2: ConvBlockParams;
};
export declare type ParamMap = {
conv32_in: ConvBlockParams;
conv32_1: ResBlockParams;
conv32_2: ResBlockParams;
conv32_3: ResBlockParams;
conv64_in: ResBlockParams;
conv64_1: ResBlockParams;
conv64_2: ResBlockParams;
conv64_3: ResBlockParams;
conv128_in: ResBlockParams;
conv128_1: ResBlockParams;
conv128_2: ResBlockParams;
conv256_in: ResBlockParams;
conv256_1: ResBlockParams;
conv256_2: ResBlockParams;
conv256_3: ResBlockParams;
fc: tf.Tensor2D;
};
export declare function faceRecognitionNet(weights: Float32Array): (input: number[]) => number[];
import * as tf from '@tensorflow/tfjs-core';
function scale(x, params) {
return tf.add(tf.mul(x, params.weights), params.biases);
}
function convLayer(x, params, stride, withRelu, padding) {
if (padding === void 0) { padding = 'same'; }
var _a = params.conv, filters = _a.filters, biases = _a.biases;
var out = tf.conv2d(x, filters, [stride, stride], padding);
out = tf.add(out, biases);
out = scale(out, params.scale);
return withRelu ? tf.relu(out) : out;
}
function conv(x, params) {
return convLayer(x, params, 1, true);
}
function convNoRelu(x, params) {
return convLayer(x, params, 1, false);
}
function convDown(x, params) {
return convLayer(x, params, 2, true, 'valid');
}
function res(x, params) {
var out = conv(x, params.conv1);
out = convNoRelu(out, params.conv2);
out = tf.add(out, x);
out = tf.relu(out);
return out;
}
function resDown(x, params) {
var out = convDown(x, params.conv1);
out = convNoRelu(out, params.conv2);
var pooled = tf.avgPool(x, 2, 2, 'valid');
var zeros = tf.zeros(pooled.shape);
var isPad = pooled.shape[3] !== out.shape[3];
var isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];
if (isAdjustShape) {
var padShapeX = out.shape.slice();
padShapeX[1] = 1;
var zerosW = tf.zeros(padShapeX);
out = tf.concat([out, zerosW], 1);
var padShapeY = out.shape.slice();
padShapeY[2] = 1;
var zerosH = tf.zeros(padShapeY);
out = tf.concat([out, zerosH], 2);
}
pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;
out = tf.add(pooled, out);
out = tf.relu(out);
return out;
}
function normalize(arr) {
var avg_r = 122.782;
var avg_g = 117.001;
var avg_b = 104.298;
var avgs = [avg_r, avg_g, avg_b];
return arr.map(function (val, i) {
var avg = avgs[i % 3];
return (val - avg) / 256;
});
}
function computeFaceDescriptor(input, params) {
var x = tf.tensor4d(normalize(input), [1, 150, 150, 3]);
var out = convDown(x, params.conv32_in);
out = tf.maxPool(out, 3, 2, 'valid');
out = res(out, params.conv32_1);
out = res(out, params.conv32_2);
out = res(out, params.conv32_3);
out = resDown(out, params.conv64_in);
out = res(out, params.conv64_1);
out = res(out, params.conv64_2);
out = res(out, params.conv64_3);
out = resDown(out, params.conv128_in);
out = res(out, params.conv128_1);
out = res(out, params.conv128_2);
out = resDown(out, params.conv256_in);
out = res(out, params.conv256_1);
out = res(out, params.conv256_2);
out = resDown(out, params.conv256_3);
// global average pooling of each of the 256 filters -> retrieve 256 entry vector
var global_avg = out.mean([1, 2]);
// fully connected
// TODO: kind of slow here
return Array.from(tf.matMul(global_avg, params.fc).dataSync());
}
function isFloat(num) {
return num % 1 !== 0;
}
function extractorsFactory(extractWeights) {
function extractFilterValues(numFilterValues, numFilters, filterSize) {
var weights = extractWeights(numFilterValues);
var depth = weights.length / (numFilters * filterSize * filterSize);
if (isFloat(depth)) {
throw new Error("depth has to be an integer: " + depth + ", weights.length: " + weights.length + ", numFilters: " + numFilters + ", filterSize: " + filterSize);
}
return tf.transpose(tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]), [2, 3, 1, 0]);
}
function extractScaleLayerParams(numWeights) {
var weights = tf.tensor1d(extractWeights(numWeights));
var biases = tf.tensor1d(extractWeights(numWeights));
return {
weights: weights,
biases: biases
};
}
function extractConvBlockParams(numFilterValues, numFilters, filterSize) {
var conv_filters = extractFilterValues(numFilterValues, numFilters, filterSize);
var conv_biases = tf.tensor1d(extractWeights(numFilters));
var scale = extractScaleLayerParams(numFilters);
return {
conv: {
filters: conv_filters,
biases: conv_biases
},
scale: scale
};
}
function extractResBlockParams(numFilterValues, numFilters, filterSize, isInBlock) {
if (isInBlock === void 0) { isInBlock = false; }
var conv1 = extractConvBlockParams((isInBlock ? 0.5 : 1) * numFilterValues, numFilters, filterSize);
var conv2 = extractConvBlockParams(numFilterValues, numFilters, filterSize);
return {
conv1: conv1,
conv2: conv2
};
}
return {
extractConvBlockParams: extractConvBlockParams,
extractResBlockParams: extractResBlockParams
};
}
function extractParams(weights) {
var extractWeights = function (numWeights) {
var ret = weights.slice(0, numWeights);
weights = weights.slice(numWeights);
return ret;
};
var _a = extractorsFactory(extractWeights), extractConvBlockParams = _a.extractConvBlockParams, extractResBlockParams = _a.extractResBlockParams;
var conv32_in = extractConvBlockParams(4704, 32, 7);
var conv32_1 = extractResBlockParams(9216, 32, 3);
var conv32_2 = extractResBlockParams(9216, 32, 3);
var conv32_3 = extractResBlockParams(9216, 32, 3);
var conv64_in = extractResBlockParams(36864, 64, 3, true);
var conv64_1 = extractResBlockParams(36864, 64, 3);
var conv64_2 = extractResBlockParams(36864, 64, 3);
var conv64_3 = extractResBlockParams(36864, 64, 3);
var conv128_in = extractResBlockParams(147456, 128, 3, true);
var conv128_1 = extractResBlockParams(147456, 128, 3);
var conv128_2 = extractResBlockParams(147456, 128, 3);
var conv256_in = extractResBlockParams(589824, 256, 3, true);
var conv256_1 = extractResBlockParams(589824, 256, 3);
var conv256_2 = extractResBlockParams(589824, 256, 3);
var conv256_3 = extractResBlockParams(589824, 256, 3);
var fc = tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]);
if (weights.length !== 0) {
throw new Error("weights remaing after extract: " + weights.length);
}
return {
conv32_in: conv32_in,
conv32_1: conv32_1,
conv32_2: conv32_2,
conv32_3: conv32_3,
conv64_in: conv64_in,
conv64_1: conv64_1,
conv64_2: conv64_2,
conv64_3: conv64_3,
conv128_in: conv128_in,
conv128_1: conv128_1,
conv128_2: conv128_2,
conv256_in: conv256_in,
conv256_1: conv256_1,
conv256_2: conv256_2,
conv256_3: conv256_3,
fc: fc
};
}
export function faceRecognitionNet(weights) {
var params = extractParams(weights);
return function (input) {
return computeFaceDescriptor(input, params);
};
}
//# sourceMappingURL=faceRecognitionNet.js.map
\ No newline at end of file
{"version":3,"file":"faceRecognitionNet.js","sourceRoot":"","sources":["../src/faceRecognitionNet.ts"],"names":[],"mappings":"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"}
\ 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