Я хочу сделать классификатор изображений, но я не знаю Python. Tensorflow.js работает с JavaScript, с которым я знаком. Могут ли модели обучаться с этим и каковы будут шаги для этого? Честно говоря, я понятия не имею, с чего начать.
Единственное, что я понял, это как загрузить «мобильную сеть», которая, по-видимому, представляет собой набор предварительно обученных моделей, и классифицировать изображения по ним:
const tf = require('@tensorflow/tfjs'),
mobilenet = require('@tensorflow-models/mobilenet'),
tfnode = require('@tensorflow/tfjs-node'),
fs = require('fs-extra');
const imageBuffer = await fs.readFile(......),
tfimage = tfnode.node.decodeImage(imageBuffer),
mobilenetModel = await mobilenet.load();
const results = await mobilenetModel.classify(tfimage);
это работает, но это бесполезно для меня, потому что я хочу тренировать свою собственную модель, используя мои изображения с метками, которые я создаю.
=======================
Скажем, у меня есть куча изображений и ярлыков. Как я могу использовать их для обучения модели?
const myData = JSON.parse(await fs.readFile('files.json'));
for(const data of myData){
const image = await fs.readFile(data.imagePath),
labels = data.labels;
// how to train, where to pass image and labels ?
}
fit
методу или в наборе данныхfitDataset
, как показано в примерах.Ответы:
Прежде всего, изображения должны быть преобразованы в тензоры. Первый подход заключается в создании тензора, содержащего все признаки (соответственно, тензора, содержащего все метки). Это следует сделать, только если набор данных содержит несколько изображений.
Метки были бы массивом, указывающим тип каждого изображения
Теперь нужно создать горячую кодировку меток
Как только появятся тензоры, нужно будет создать модель для обучения. Вот простая модель.
Тогда модель можно обучить
Если набор данных содержит много изображений, вместо этого нужно будет создать набор tfDataset. Этот ответ обсуждает почему.
И использовать
model.fitDataset(ds)
для обучения моделиВыше для обучения в nodejs. Чтобы сделать такую обработку в браузере,
genFeatureTensor
можно написать так:Одно предостережение: тяжелая обработка может блокировать основной поток в браузере. Это где веб-работники вступают в игру.
источник
tf.image.resizeBilinear
Рассмотрим пример https://codelabs.developers.google.com/codelabs/tfjs-training-classfication/#0
Что они делают:
затем тренироваться
Построение набора данных выглядит следующим образом:
Большое изображение делится на n вертикальных кусков. (n это chunkSize)
Рассмотрим размер куска размера 2.
Учитывая матрицу пикселей изображения 1:
Учитывая матрицу пикселей изображения 2
Результирующий массив будет
1 2 3 4 5 6 7 8 9 1 2 3
(конкатенация 1D как-то)Так что в основном в конце обработки у вас есть большой буфер, представляющий
[...Buffer(image1), ...Buffer(image2), ...Buffer(image3)]
Такого рода форматирование сделано для задач классификации. Вместо того, чтобы классифицировать по числу, они принимают логический массив. Для прогнозирования 7 из 10 классов мы рассмотрим
[0,0,0,0,0,0,0,1,0,0] // 1 in 7e position, array 0-indexed
Что вы можете сделать, чтобы начать
Ниже я подкласс
MNistData::load
(остальное можно разрешить как есть (кроме как в script.js, где вместо этого вам нужно создать собственный экземпляр)Я по-прежнему генерирую изображения размером 28x28, пишу на них цифру и получаю идеальную точность, поскольку я не включаю шум или добровольно неправильные надписи.
источник
Я нашел учебное пособие [1], как использовать существующую модель для обучения новых классов. Основные части кода здесь:
index.html head:
index.html body:
index.js:
Основная идея состоит в том, чтобы использовать существующую сеть, чтобы сделать ее прогноз, а затем заменить найденную метку своей.
Полный код в учебнике. Другой многообещающий, более продвинутый в [2]. Она требует строгой предварительной обработки, поэтому я оставляю ее только здесь, я имею в виду, что она намного более продвинутая.
Источники:
[1] https://codelabs.developers.google.com/codelabs/tensorflowjs-teachablemachine-codelab/index.html#6
[2] https://towardsdatascience.com/training-custom-image-classification-model-on-the-browser-with-tensorflow-js-and-angular-f1796ed24934
источник
TL; DR
MNIST - это распознавание изображений Hello World. Выучив это наизусть, эти вопросы легко решить.
Постановка вопроса:
Ваш главный вопрос написан
внутри вашего блока кода. Для тех, кто нашел идеальный ответ из примеров раздела примеров Tensorflow.js: пример MNIST. Мои ссылки ниже содержат только версии javascript и node.js, а также пояснения из Википедии. Я расскажу о них на уровне, необходимом для ответа на главный вопрос в вашем уме, и добавлю также перспективы того, как ваши собственные изображения и метки имеют какое-либо отношение к набору изображений MNIST и примеры, использующие его.
Перво-наперво:
Фрагменты кода.
куда передавать изображения (образец Node.js)
Ноты:
Набор данных MNIST - это огромное изображение, в котором в одном файле есть несколько изображений, таких как мозаика в мозаике, каждое с одинаковым размером, бок о бок, как прямоугольники в координатной таблице x и y. Каждый блок имеет один образец, и соответствующие x и y в массиве меток имеют метку. Из этого примера нет ничего сложного в том, чтобы преобразовать его в формат нескольких файлов, так что фактически для обработки в цикле while дается только один рис за раз.
Метки:
Ноты:
Здесь метки также являются байтовыми данными в файле. В мире Javascript и с подходом, который вы используете в своей начальной точке, метки также могут быть массивом json.
обучаем модель:
Ноты:
Вот
model.fit
фактическая строка кода, которая делает это: тренирует модель.Результаты всего этого:
Замечания:
В Data Science, также и в этот раз, самая важная часть состоит в том, чтобы узнать, насколько хорошо модель выдерживает испытание новыми данными и отсутствием меток, может ли она маркировать их или нет? Поскольку это часть оценки, которая теперь печатает нам некоторые цифры.
Потеря и точность: [4]
..
Больше информации:
На страницах github в файле README.md есть ссылка на учебник, где все в примере с github объясняется более подробно.
[1] https://github.com/tensorflow/tfjs-examples/tree/master/mnist
[2] https://github.com/tensorflow/tfjs-examples/tree/master/mnist-node
[3] https://en.wikipedia.org/wiki/MNIST_database
[4] Как интерпретировать «потери» и «точность» для модели машинного обучения
источник