Хороший ответ. Сегодня я работаю над подобной проблемой при попытке создать веб-рабочих с резервными возможностями, когда они недоступны (т. е. запустить рабочий сценарий в основном потоке). Поскольку этот поток относится к этой теме, я думал, что предоставил бы мое решение здесь:
<script type="javascript/worker">
//WORKER FUNCTIONS
self.onmessage = function(event) {
postMessage('Hello, ' + event.data.name + '!');
}
</script>
<script type="text/javascript">
function inlineWorker(parts, params, callback) {
var URL = (window.URL || window.webkitURL);
if (!URL && window.Worker) {
var worker = new window.Worker(URL.createObjectURL(new Blob([parts], { "type" : "text/javascript" })));
worker.onmessage = function(event) {
callback(event.data);
};
worker.postMessage(params);
} else {
var postMessage = function(result) {
callback(result);
};
var self = {}; //'self' in scope of inlineWorker.
eval(parts); //Converts self.onmessage function string to function on self via nearest scope (previous line) - please email chrisgwgreen.site@gmail.com if this could be tidier.
self.onmessage({
data: params
});
}
}
inlineWorker(
document.querySelector('[type="javascript/worker"]').textContent,
{
name: 'Chaps!!'
},
function(result) {
document.body.innerHTML = result;
}
);
</script>
</body>
Короткий ответ: да, вам нужно будет их изменить. TensorflowJS изменит операции в целях оптимизации, но не все операции имеют эквивалентную версию TFJS. Полный список поддерживаемых операций находится здесь: https://github.com/tensorflow/tfjs-converter/blob/master/docs/supported_ops.md
Как ни странно, «NonMaxSuppression» действительно кажется быть в списке, но ResizeArea нет, и 100% не будет работать.
Альтернативой является создание собственной операции и использование этого кода, но я не уверен, как это сделать в TFJS.