Пытаясь найти варианты относительно того, какие сетевые архитектуры и методы обучения мы могли бы использовать, мы столкнулись с NVIDIA Transfer Learning Toolkit. Трансферное обучение — это процесс, в котором функции извлекаются из сети, которая ранее была обучена выполнению какой-либо задачи, чтобы передать их в новую сеть, способную решать аналогичную задачу с новыми данными. Этот метод в настоящее время очень популярен в области глубокого обучения, поскольку он позволяет обучать глубокие сети с помощью небольшого набора данных, что очень удобно в реальных задачах, когда нет миллионов изображений с тегами, которые можно использовать для обучения модели. .

Но как это делается? Что ж, сначала нам нужно поговорить о сверточных нейронных сетях, и мы сделаем это, рассмотрев упрощенную схему одной из этих сетей.

Изображение взято из: https://docs.ecognition.com/v9.5.0/eCognition_documentation/Reference%20Book/23%20Convolutional%20Neural%20Network%20Algorithms/Convolutional%20Neural%20Network%20Algorithms.html

В сверточных нейронных сетях (известных как CNN) можно увидеть три отдельных типа слоев: сверточные слои, объединяющие слои и слои классификатора. Слои свертки и объединения составляют первый и средний этапы CNN, как видно выше, и благодаря нескольким математическим операциям способны распознавать ребра, в основном связанные со сверточными слоями, и формы, в основном связанные со слоями объединения, в входные изображения. Наконец, эти данные передаются на один или несколько слоев классификатора, которые классифицируют объекты на изображениях в соответствии с предварительно заданными классами.

При переносном обучении слои объединения и свертки используются редко, и только последние слои классификатора переобучаются, чтобы сеть могла распознавать новые классы, которые могли быть добавлены в наш набор данных для данной проблемы.

Зачем использовать трансферное обучение? Ну, во-первых, мы никак не можем сгенерировать и пометить миллионы изображений, необходимых для обучения нейронной сети с нуля. Сама по себе пометка занимает очень много времени, и даже если бы мы могли хранить миллионы необходимых изображений, сама пометка заняла бы много времени. Трансферное обучение значительно уменьшает размер необходимого набора данных для обучения, учитывая, что сеть уже ранее обучалась с использованием обширного набора данных. Кроме того, в TLT уже есть несколько моделей, обученных распознавать пешеходов и другие классы, похожие на те, которые мы пытаемся обнаружить, поэтому переобучение должно быть довольно простым процессом.