Глава 4. Распознавание изображений и звуковых сигналов
169
Этот код генерирует тензор формы
[height,
width,
3]
, где три канала отвечают
за кодирование цветов RGB. Вызов
asType
в конце необходим, поскольку метод
tf.browser.fromPixels()
возвращает тензор типа int32, а сверточная сеть ожидает
в качестве входных данных тензоры типа float32. Высота и ширина определяются
размерами элемента
img
. Если они не соответствуют высоте и ширине, ожидае
мым моделью, можно либо поменять атрибуты высоты и ширины элемента
img
(конечно, если это не ухудшает внешний вид UI), либо изменить размер тензора
с помощью одного из двух предоставляемых TensorFlow.js соответствующих ме
тодов —
tf.image.resizeBilinear()
или
tf.image.resizeNearestNeigbor()
:
x = tf.image.resizeBilinear(x, [newHeight, newWidth]);
У методов
tf.image.resizeBilinear()
и
tf.image.resizeNearestNeigbor()
оди
наковый синтаксис, но они меняют размеры изображений с помощью двух разных
алгоритмов. В первом из них значения пикселов нового тензора формируются на
основе билинейной интерполяции, а второй выполняет дискретизацию методом бли
жайших соседей и обычно требует меньше вычислительных ресурсов, чем первый.
Учтите, что тензор, созданный методом
tf.browser.fromPixels()
, не включает
измерения батчей. Так что для подачи тензора на вход модели TensorFlow.js его не
обходимо сначала расширить, добавив измерение батчей, например:
x = x.expandDims();
Метод
expandDims()
принимает аргумент, определяющий измерение. Но в данном
случае его можно опустить, поскольку мы расширяем первое измерение — значение
по умолчанию данного аргумента.
Помимо элементов
img
, метод
tf.browser.fromPixels()
работает аналогичным
образом и с элементами
canvas
и
video
. Применять метод
tf.browser.fromPixels()
для элементов
canvas
удобно в случаях, когда пользователь может интерактивно
менять содержимое холста перед его использованием моделью TensorFlow.js. Напри
мер, представьте себе онлайнприложение для распознавания рукописных цифр или
нарисованных от руки фигур. Помимо статических изображений, применяя метод
tf.browser.fromPixels()
к элементам
video
, можно получить покадровые данные
изображений с вебкамеры. Именно это происходит в игре PacMan, продемонстри
рованной Нихилем Торатом и Дэниелом Смилковым во время первой презентации
TensorFlow.js (см.
http://mng.bz/xl0e
), в PoseNet
1
и многих других основанных на
TensorFlow.js вебприложениях, использующих вебкамеры. Исходный код PacMan
вы можете найти на GitHub по адресу
http://mng.bz/ANYK
.
Как вы видели в предыдущих главах, нужно стараться избегать
асимметрии
(skew) обучающих данных и данных, используемых для вывода. В данном случае
наша сверточная сеть MNIST обучается на тензорах изображений, нормализованных
к диапазону от 0 до 1. Следовательно, если данные в тензоре
x
входят в другой диа
пазон, скажем 0–255, необходимо их нормализовать:
x = x.div(255);
1
Oved D.
Realtime Human Pose Estimation in the Browser with TensorFlow.js // Medium,
7 May 2018. http://mng.bz/ZeOO.
170
Do'stlaringiz bilan baham: |