Предварительно обученные глубокие нейронные сети

Можно взять предварительно обученную сеть классификации изображений, которая уже училась извлекать мощные и информативные функции из естественных изображений и использовать его в качестве начальной точки, чтобы изучить новую задачу. Большинство предварительно обученных сетей обучено на подмножестве базы данных ImageNet [1], который используется в ImageNet крупномасштабной визуальной проблеме распознавания (ILSVRC) [2]. Эти сети были обучены больше чем на миллионе изображений и могут классифицировать изображения в 1 000 категорий объектов, таких как клавиатура, кофейная кружка, карандаш и многие животные. Используя предварительно обученную сеть с передачей обучения обычно намного быстрее и легче, чем обучение сети с нуля.

Можно использовать, ранее обучил нейронные сети для следующих задач:

ЦельОписание
Классификация

Примените предварительно обученные сети непосредственно к проблемам классификации. Чтобы классифицировать новое изображение, использовать classify. Для примера, показывающего, как использовать предварительно обученную сеть для классификации, смотрите, Классифицируют Изображение Используя GoogLeNet.

Извлечение признаков

Используйте предварительно обученную сеть в качестве экстрактора функции при помощи активаций слоя как функции. Можно использовать эти активации в качестве функций, чтобы обучить другую модель машинного обучения, такую как машина опорных векторов (SVM). Для получения дополнительной информации смотрите Извлечение признаков. Для примера смотрите, что Функции Извлечения Изображений Используют Предварительно обученную сеть.

Передача обучения

Возьмите слои из сети, обученной на большом наборе данных и подстройке на новом наборе данных. Для получения дополнительной информации смотрите Передачу обучения. Для простого примера смотрите Начало работы с Передачей обучения. Чтобы попробовать больше предварительно обученных сетей, смотрите, Обучают Нейронную сеть для глубокого обучения Классифицировать Новые Изображения.

Сравните предварительно обученные сети

Предварительно обученные сети имеют различные характеристики, которые имеют значение при выборе сети, чтобы примениться проблеме. Самые важные характеристики являются сетевой точностью, скоростью и размером. Выбор сети обычно является компромиссом между этими характеристиками. Используйте график ниже, чтобы сравнить точность валидации ImageNet со временем, требуемым сделать предсказание с помощью сети.

Совет

Чтобы начать с передачей обучения, попытайтесь выбрать одну из более быстрых сетей, таких как SqueezeNet или GoogLeNet. Можно затем выполнить итерации быстро и испытать различные настройки, такие как шаги предварительной обработки данных и опции обучения. Если у вас есть чувство, которого настройки работают хорошо, пробуют более точную сеть, такую как Inception-v3 или ResNet и видят, улучшает ли это ваши результаты.

Comparison of the accuracy and relative prediction time of the pretrained networks. As the accuracy of the pretrained networks increases, so does the relative prediction time.

Примечание

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

Хорошая сеть имеет высокую точность и быстра. График отображает точность классификации по сравнению со временем предсказания при использовании современного графического процессора (NVIDIA® Tesla® P100) и мини-пакетный размер 128. Время предсказания измеряется относительно самой быстрой сети. Область каждого маркера пропорциональна размеру сети на диске.

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

Если вы хотите выполнить предсказание с помощью ограниченного оборудования или распределить сети по Интернету, то также рассматривают размер сети на диске и в памяти.

Сетевая точность

Существует несколько способов вычислить точность классификации на набор валидации ImageNet, и другие источники используют различные методы. Иногда ансамбль многоуровневых моделей используется, и иногда каждое изображение оценено многократно с помощью нескольких обрезок. Иногда лучшие 5 точности вместо стандарта (лучший 1) точность заключается в кавычки. Из-за этих различий часто не возможно непосредственно сравнить точность из других источников. Точность предварительно обученных сетей в Deep Learning Toolbox™ является стандартной (лучший 1) точность с помощью одной модели и одной центральной обрезки изображений.

Загрузите предварительно обученные сети

Чтобы загрузить сеть SqueezeNet, ввести squeezenet в командной строке.

net = squeezenet;

Для других сетей используйте функции такой как googlenet заставить ссылки загружать предварительно обученные сети с Add-On Explorer.

В следующей таблице перечислены доступные предварительно обученные сети, обученные на ImageNet и некоторые их свойства. Сетевая глубина задана как наибольшее число сверточных последовательных или полносвязные слоя на пути от входного слоя до выходного слоя. Входные параметры ко всем сетям являются изображениями RGB.

СетьГлубинаРазмерПараметры (Миллионы)Отобразите входной размер
squeezenet18

5.2 МБАЙТ

1.24

227 227

googlenet22

27 Мбайт

7.0

224 224

inceptionv348

89 Мбайт

23.9

299 299

densenet201201

77 Мбайт

20.0

224 224

mobilenetv253

13 Мбайт

3.5

224 224

resnet1818

44 Мбайта

11.7

224 224

resnet5050

96 Мбайт

25.6

224 224

resnet101101

167 Мбайт

44.6

224 224

xception71

85 Мбайт

22.9299 299
inceptionresnetv2164

209 Мбайт

55.9

299 299

shufflenet505.4 МБАЙТ1.4224 224
nasnetmobile*20 Мбайт 5.3224 224
nasnetlarge*332 Мбайта88.9331 331
darknet191978 Мбайт20.8256 256
darknet5353155 Мбайт41.6256 256
efficientnetb08220 Мбайт5.3

224 224

alexnet8

227 Мбайт

61.0

227 227

vgg1616

515 Мбайт

138

224 224

vgg1919

535 Мбайт

144

224 224

*Сети NASNet-Mobile и NASNet-Large не состоят из линейной последовательности модулей.

GoogLeNet, обученный на Places365

Стандартная сеть GoogLeNet обучена на наборе данных ImageNet, но можно также загрузить сеть, обученную на [3] [4] набора данных Places365. Сеть, обученная на Places365, классифицирует изображения в 365 различных категорий места, таких как поле, парк, взлетно-посадочная полоса и лобби. Чтобы загрузить предварительно обученную сеть GoogLeNet, обученную на наборе данных Places365, используйте googlenet('Weights','places365'). При использовании обучение с переносом, чтобы выполнить новую задачу, наиболее распространенный подход должен использовать сети, предварительно обученные на ImageNet. Если новая задача похожа на классификацию сцен, то использование сети, обученной на Places365, могло дать более высокую точность.

Визуализируйте предварительно обученные сети

Можно загрузить и визуализировать предварительно обученные сети с помощью Deep Network Designer.

deepNetworkDesigner(squeezenet)

Deep Network Designer displaying a pretrained SqueezeNet network

Чтобы просмотреть и отредактировать свойства слоя, выберите слой. Кликните по значку справки рядом с именем слоя для получения информации о свойствах слоя.

Cross channel normalization layer selected in Deep Network Designer. The PROPERTIES pane shows the properties of the layer.

Исследуйте другие предварительно обученные сети в Deep Network Designer путем нажатия на New.

Deep Network Designer start page showing available pretrained networks

Если необходимо загрузить сеть, сделать паузу в желаемой сети и нажать Install, чтобы открыть Add-On Explorer.

Извлечение признаков

Извлечение признаков является легким и быстрым способом использовать степень глубокого обучения, не инвестируя время и усилие в обучение полной сети. Поскольку это только требует одной передачи по учебным изображениям, особенно полезно, если у вас нет графического процессора. Вы извлекаете изученные функции изображений с помощью предварительно обученной сети, и затем используете те функции, чтобы обучить классификатор, такой как использование машины опорных векторов fitcsvm (Statistics and Machine Learning Toolbox).

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

  • Если ваши данные будут очень похожи на исходные данные, то более определенные функции, извлеченные глубже в сети, вероятно, будут полезны для новой задачи.

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

ResNets часто являются хорошими экстракторами функции. Для примера, показывающего, как использовать предварительно обученную сеть для извлечения признаков, смотрите, что Функции Извлечения Изображений Используют Предварительно обученную сеть.

Передача обучения

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

Совет

Подстройка сети часто дает самую высокую точность. Для очень небольших наборов данных (меньше, чем приблизительно 20 изображений в классе), попробуйте извлечение признаков вместо этого.

Подстройка сети медленнее и требует большего усилия, чем простое извлечение признаков, но поскольку сеть может учиться извлекать различный набор функций, итоговая сеть часто более точна. Подстройка обычно работает лучше, чем извлечение признаков, пока новый набор данных очень не мал, потому что затем сеть имеет данные, чтобы узнать о новых возможностях из. Для примеров, показывающих, как использовать обучение с переносом, смотрите Передачу обучения с Deep Network Designer и Обучите Нейронную сеть для глубокого обучения Классифицировать Новые Изображения.

Transfer learning workflow

Импортируйте и экспортируйте сети

Можно импортировать сети и сетевые архитектуры из TensorFlow®- Keras, Caffe и формат модели ONNX™ (Open Neural Network Exchange). Можно также экспортировать, обучил нейронные сети к формату модели ONNX.

Импортируйте из Keras

Импортируйте предварительно обученные сети из TensorFlow-Keras при помощи importKerasNetwork. Можно импортировать сеть и веса или от того же HDF5 (.h5) файл или разделить HDF5 и JSON (.json) файлы. Для получения дополнительной информации смотрите importKerasNetwork.

Импортируйте сетевые архитектуры из TensorFlow-Keras при помощи importKerasLayers. Можно импортировать сетевую архитектуру, или с или без весов. Можно импортировать сетевую архитектуру и веса или от того же HDF5 (.h5) файл или разделить HDF5 и JSON (.json) файлы. Для получения дополнительной информации смотрите importKerasLayers.

Импортируйте из Caffe

Импортируйте предварительно обученные сети из Caffe при помощи importCaffeNetwork функция. Существует много предварительно обученных сетей, доступных в Зоопарке Модели Caffe [5]. Загрузите желаемый .prototxt и .caffemodel файлы и использование importCaffeNetwork импортировать предварительно обученную сеть в MATLAB®. Для получения дополнительной информации смотрите importCaffeNetwork.

Можно импортировать сетевые архитектуры сетей Caffe. Загрузите желаемый .prototxt файл и использование importCaffeLayers импортировать слоя сети в MATLAB. Для получения дополнительной информации смотрите importCaffeLayers.

Экспортируйте в и импорт от ONNX

При помощи ONNX как промежуточный формат можно взаимодействовать с другими средами глубокого обучения, которые поддерживают экспорт модели ONNX или импорт, такой как TensorFlow, PyTorch, Caffe2, Microsoft® Познавательный инструментарий (CNTK), базовый ML и Apache MXNet™.

Экспортируйте обученную сеть Deep Learning Toolbox в формат модели ONNX при помощи exportONNXNetwork функция. Можно затем импортировать модель ONNX к другим средам глубокого обучения, которые поддерживают импорт модели ONXX.

Импортируйте предварительно обученные сети из использования ONNX importONNXNetwork и импортируйте сетевые архитектуры с или без использования весов importONNXLayers.

Предварительно обученные сети для аудиоприложений

Используйте предварительно обученные сети для аудио и речевых приложений обработки при помощи Deep Learning Toolbox вместе с Audio Toolbox™.

Audio Toolbox обеспечивает предварительно обученные сети VGGish и YAMNet. Используйте vggish (Audio Toolbox) и yamnet (Audio Toolbox) функционирует, чтобы взаимодействовать непосредственно с предварительно обученными сетями. classifySound Функция (Audio Toolbox) выполняет требуемую предварительную обработку и постобработку для YAMNet так, чтобы можно было определить местоположение и классифицировать звуки в одну из 521 категории. Можно исследовать онтологию YAMNet с помощью yamnetGraph (Audio Toolbox) функция. vggishFeatures Функция (Audio Toolbox) выполняет необходимую предварительную обработку и постобработку для VGGish так, чтобы можно было извлечь вложения функции, чтобы ввести к системам глубокого обучения и машинному обучению. Для получения дополнительной информации об использовании глубокого обучения для аудиоприложений смотрите Введение в Глубокое обучение для Аудиоприложений (Audio Toolbox).

Используйте VGGish и YAMNet, чтобы использовать обучение с переносом и извлечение признаков. Например, смотрите Передачу обучения с Предварительно обученными Аудио Сетями (Audio Toolbox).

Предварительно обученные модели на GitHub

Чтобы найти последние предварительно обученные модели и примеры, смотрите Глубокое обучение MATLAB (GitHub).

Например:

Ссылки

[1] ImageNet. http://www.image-net.org

[2] Russakovsky, O., Дэн, J., Су, H., и др. “Крупный масштаб ImageNet Визуальная проблема Распознавания”. Международный журнал Компьютерного зрения (IJCV). Vol 115, Выпуск 3, 2015, стр 211–252

[3] Чжоу, Bolei, Aditya Khosla, Агата Лапедриса, Антонио Торрэлба и Од Олива. "Места: база данных изображений для глубокого понимания сцены". arXiv предварительно распечатывают arXiv:1610.02055 (2016).

[4] Места. http://places2. csail.mit.edu /

[5] Зоопарк Модели Caffe. http://caffe.berkeleyvision.org/model_zoo.html

Смотрите также

| | | | | | | | | | | | | | | | | | | | | | | | |

Похожие темы