Кто-нибудь знает, как переобучить обнаружение объектов (coco-ssd) TF JS для объекта 91? - PullRequest
0 голосов
/ 08 мая 2020

До сих пор я видел так много обсуждений этого топи c и использования разных подходов для достижения этой цели (https://github.com/tensorflow/models/issues/1809), но я хочу знать, удалось ли кому-нибудь успешно использовать Tensorflow js для добиться этого. Я знаю, что некоторые также достигли этого с помощью трансферного обучения, но это не то же самое, что возможность добавить мой собственный новый класс.

1 Ответ

1 голос
/ 08 мая 2020

Короткий ответ: Нет, пока нет, хотя технически возможно, я не видел реализации этого в дикой природе.

Более длинный ответ - почему:

Учитывая, что "transfer "обучение" по сути означает повторное использование существующих знаний в обученной модели, чтобы помочь вам затем классифицировать вещи аналогичного характера без необходимости повторять все предыдущее обучение, на самом деле есть 2 способа сделать это:

1) Это более простой путь, но может быть невозможен для некоторых случаев использования: используйте один из высокоуровневых слоев замороженной модели, к которому у вас есть доступ (например, модели, выпущенные TF. js, я считаю, замороженные модели - GitHub). Это позволяет вам повторно использовать некоторые из его нижних слоев (или окончательный результат), которые уже могут быть хороши для выбора определенных функций, которые полезны для нужного вам варианта использования, например, обнаружение объектов в общем смысле, которые вы затем можете использовать в своих собственных размороженные слои, которые располагаются поверх того вывода, из которого вы производите выборку (где и будет происходить новое обучение). Это быстрее, поскольку вы обновляете веса et c только для новых слоев, которые вы добавили, однако, поскольку исходная модель заморожена, это означает, что вам придется реплицировать в TF. js слои, которые вы обходили, чтобы гарантировать, что вы иметь такую ​​же результирующую архитектуру модели для COCO-SSD в этом случае, если вам нужна архитектура. Это может быть нетривиально.

2) Переобучение исходной модели - можно подумать о настройке исходной модели - но это возможно только в том случае, если у вас есть доступ к исходной размороженной модели и данным, используемым для обучения этой модели. . Это займет больше времени, поскольку вы, по сути, переобучаете всю модель на всех данных + ваши новые данные. Если у вас нет исходной размороженной модели, то единственный способ сделать это - реализовать указанную модель в TF. js самостоятельно, используя API-интерфейсы Layers / ops по мере необходимости, а затем использовать это для обучения на своих собственных данных.

Что ?!

Таким образом, проще визуализировать пример этого, если мы рассмотрим Pos eNet - тот, который оценивает, где находятся человеческие суставы / скелеты.

Теперь в этом примере Pos enet представьте себя хотел создать новую модель машинного обучения, которая могла бы определять, когда человек находится в определенной позиции - например, машет рукой.

В этом примере вы можете использовать метод 1, чтобы просто взять выходные данные существующих прогнозов pos enet для всех обнаруженных суставов и передать их на новый слой - что-то простое, например многослойный перцептрон, - который затем можно было бы очень быстро узнать на примерах данных, когда, например, рука находилась в положении махания. В этом случае мы просто добавляем к существующей архитектуре, чтобы получить новый результат - прогнозирование жестов по сравнению с прогнозом исходных точек xy для самих суставов.

Теперь рассмотрим случай 2 для Pos eNet - вы хотите быть способен распознать новую часть тела, которой он в настоящее время не знает. Чтобы это произошло, вам нужно переобучить исходную модель, чтобы она могла научиться предсказывать эту новую часть тела как часть своего вывода.

Это намного сложнее, так как для этого вам нужно будет переобучить базовую модель, а это значит, что для этого вам потребуется доступ к незамороженной модели. Если бы у вас не было доступа к размороженной модели, у вас не было бы выбора, кроме как попытаться полностью воссоздать архитектуру Pos eNet, а затем обучить ее на своих собственных данных. Как видите, этот второй вариант использования намного сложнее и сложнее.

...