Можно взять предварительно обученную сеть классификации изображений, которая уже научилась извлекать мощные и информативные функции из природных изображений и использовать ее как начальная точка для изучения новой задачи. Большинство предварительно обученных сетей обучаются на подмножестве базы данных ImageNet [1], которое используется в ILSVRC [2]. Эти сети были обучены на более чем миллионе изображений и могут классифицировать изображения в 1000 категорий объектов, таких как клавиатура, кофейная кружка, карандаш и многие животные. Использование предварительно обученной сети с передачей обучения обычно намного быстрее и проще, чем обучение сети с нуля.
Можно использовать предварительно обученные сети для следующих задач:
Цель | Описание |
---|---|
Классификация | Примените предварительно обученные сети непосредственно к задачам классификации. Чтобы классифицировать новое изображение, используйте |
Редукция данных | Используйте предварительно обученную сеть в качестве экстрактора функций, используя активацию слоев в качестве функций. Можно использовать эти активации как функции для обучения другой модели машинного обучения, такой как машина опорных векторов (SVM). Для получения дополнительной информации см. раздел « Редукцию данных». Для получения примера смотрите Извлечение изображения Функций с использованием предварительно обученной сети. |
Передача обучения | Возьмите слои из сети, обученной на большом наборе данных, и подстройте на новом наборе данных. Для получения дополнительной информации смотрите Передача Обучения. Для простого примера смотрите Запуск с Передача Обучения. Чтобы попробовать больше предварительно обученных сетей, смотрите Train Нейронной сети для глубокого обучения для классификации новых изображений. |
Предварительно обученные сети имеют различные характеристики, которые имеют значение при выборе сети, чтобы применить к вашей задаче. Наиболее важными характеристиками являются точность сети, скорость и размер. Выбор сети, как правило, является компромиссом между этими характеристиками. Используйте график ниже, чтобы сравнить точность валидации ImageNet со временем, необходимым для выполнения предсказания с помощью сети.
Совет
Чтобы начать с передачи обучения, попробуйте выбрать одну из более быстрых сетей, таких как SqueezeNet или GoogLeNet. Затем можно быстро выполнить итерацию и опробовать различные настройки, такие как шаги предварительной обработки данных и опции обучения. Когда у вас появится ощущение того, какие настройки работают хорошо, попробуйте более точную сеть, такую как Inception-v3 или ResNet, и посмотрите, улучшает ли это ваши результаты.
Примечание
График выше показывает только индикацию относительных скоростей различных сетей. Точное время предсказания и итерации обучения зависит от используемого оборудования и мини-пакета.
Хорошая сеть имеет высокую точность и быстро. График отображает точность классификации от времени предсказания при использовании современного графического процессора (NVIDIA® Tesla® P100) и мини-пакет размером 128. Время предсказания измеряется относительно самой быстрой сети. Площадь каждого маркера пропорциональна размеру сети на диске.
Точность классификации на наборе валидации ImageNet является наиболее распространенным способом измерения точности сетей, обученных в ImageNet. Сети, которые точны в ImageNet, также часто точны, когда вы применяете их к другим естественным наборам данных об изображениях с помощью передачи обучения или редукции данных. Это обобщение возможно, потому что сети научились извлекать мощные и информативные функции из природных изображений, которые обобщаются для других аналогичных наборов данных. Однако высокая точность в ImageNet не всегда переходит непосредственно к другим задачам, поэтому рекомендуется попробовать несколько сетей.
Если вы хотите выполнить предсказание с помощью ограниченного оборудования или распределить сети через Интернет, то также примите во внимание размер сети на диске и в памяти.
Существует несколько способов вычислить точность классификации на наборе валидации ImageNet, и различные источники используют различные методы. Иногда используется ансамбль из нескольких моделей, а иногда каждое изображение оценивается несколько раз с использованием нескольких культур. Иногда цитируется точность топ-5 вместо стандартной (топ-1). Из-за этих различий часто невозможно непосредственно сравнить точности из различных источников. Точности предварительно обученных сетей в Deep Learning Toolbox™ являются стандартными (top-1) точностями с помощью одной модели и одного центрального кадра изображений.
Чтобы загрузить сеть SqueezeNet, введите squeezenet
в командной строке.
net = squeezenet;
Для других сетей используйте такие функции, как googlenet
чтобы получить ссылки для загрузки предварительно обученных сетей из Add-On Explorer.
В следующей таблице перечислены доступные предварительно обученные сети, обученные в ImageNet, и некоторые из их свойств. Глубина сети определяется как наибольшее количество последовательных сверточных или полносвязных слоев на пути от входа слоя до выхода слоя. Входами для всех сетей являются изображения RGB.
Сеть | Глубина | Размер | Параметры (миллионы) | Размер входа изображения |
---|---|---|---|---|
squeezenet | 18 | 5,2 МБ | 1.24 | 227 на 227 |
googlenet | 22 | 27 МБ | 7.0 | 224 на 224 |
inceptionv3 | 48 | 89 МБ | 23.9 | 299 на 299 |
densenet201 | 201 | 77 МБ | 20.0 | 224 на 224 |
mobilenetv2 | 53 | 13 МБ | 3.5 | 224 на 224 |
resnet18 | 18 | 44 МБ | 11.7 | 224 на 224 |
resnet50 | 50 | 96 МБ | 25.6 | 224 на 224 |
resnet101 | 101 | 167 МБ | 44.6 | 224 на 224 |
xception | 71 | 85 МБ | 22.9 | 299 на 299 |
inceptionresnetv2 | 164 | 209 МБ | 55.9 | 299 на 299 |
shufflenet | 50 | 5,4 МБ | 1.4 | 224 на 224 |
nasnetmobile | * | 20 МБ | 5.3 | 224 на 224 |
nasnetlarge | * | 332 МБ | 88.9 | 331 на 331 |
darknet19 | 19 | 78 МБ | 20.8 | 256 на 256 |
darknet53 | 53 | 155 МБ | 41.6 | 256 на 256 |
efficientnetb0 | 82 | 20 МБ | 5.3 | 224 на 224 |
alexnet | 8 | 227 МБ | 61.0 | 227 на 227 |
vgg16 | 16 | 515 МБ | 138 | 224 на 224 |
vgg19 | 19 | 535 МБ | 144 | 224 на 224 |
* Сети NASNet-Mobile и NASNet-Large не состоят из линейной последовательности модулей.
Стандартная сеть GoogLeNet обучается на наборе данных ImageNet, но можно также загрузить сеть, обученную на Places365 наборе данных [3]
. [4]Обученная на Places365 сеть классифицирует изображения в 365 различных категориях мест, таких как поле, парк, взлетно-посадочная полоса и лобби. Чтобы загрузить предварительно обученную сеть GoogLeNet, обученную на Places365 наборе данных, используйте googlenet('Weights','places365')
. При выполнении передачи обучения для выполнения новой задачи наиболее распространенным подходом является использование сетей, предварительно обученных в ImageNet. Если новая задача похожа на классификацию сцен, то использование обученной на Places365 сети может дать более высокие точности.
Загружать и визуализировать предварительно обученные сети можно с помощью Deep Network Designer.
deepNetworkDesigner(squeezenet)
Чтобы просмотреть и отредактировать свойства слоя, выберите слой. Щелкните значок справки рядом с именем слоя для получения информации о свойствах слоя.
Исследуйте другие предварительно обученные сети в Deep Network Designer, нажав New.
Если необходимо загрузить сеть, нажмите кнопку Install, чтобы открыть Add-On Explorer.
Редукция данных - это простой и быстрый способ использовать степень глубокого обучения, не вкладывая время и усилия в обучение полной сети. Поскольку для этого требуется только один проход по обучающим изображениям, он особенно полезен, если у вас нет графический процессор. Вы извлекаете признаки выученного изображения с помощью предварительно обученной сети, а затем используете эти функции для обучения классификатора, такого как машина опорных векторов, используя fitcsvm
(Statistics and Machine Learning Toolbox).
Попробуйте извлечь признаки, когда ваш новый набор данных очень мал. Поскольку вы обучаете только простой классификатор по извлеченным функциям, обучение происходит быстро. Также маловероятно, что подстройка более глубоких слоев сети повышает точность, поскольку мало данных, из которых можно узнать.
Если ваши данные очень похожи на исходные данные, то более конкретные функции, извлеченные глубже в сети, вероятно, будут полезны для новой задачи.
Если ваши данные сильно отличаются от исходных данных, то функции, извлеченные глубже в сети, могут быть менее полезны для вашей задачи. Попробуйте обучить итоговый классификатор для более общих функций, извлеченных с предыдущего слоя сети. Если новый набор данных велик, то можно попробовать и обучить сеть с нуля.
ResNets часто являются хорошими экстракторами функций. Пример, показывающий использование предварительно обученной сети для редукции данных, см. в разделе «Извлечение изображений» Функций «Использование предварительно обученной сети».
Можно настроить более глубокие слои в сети путем настройки сети на новом наборе данных с предварительно обученной сетью в качестве начальной точки. Подстройка сети с передачей обучения часто быстрее и проще, чем построение и обучение новой сети. Сеть уже выучила богатый набор функций изображений, но когда вы тонко настраиваете сеть, она может узнать функции, характерные для вашего нового набора данных. Если у вас очень большой набор данных, то передача обучения может быть не быстрее, чем обучение с нуля.
Совет
Подстройка сети часто дает самую высокую точность. Для очень небольших наборов данных (менее чем около 20 изображений на класс) попробуйте вместо этого извлечь признаки.
Настройка сети происходит медленнее и требует больших усилий, чем простые редукции данных, но поскольку сеть может научиться извлекать другой набор функций, конечная сеть часто является более точной. Подстройка обычно работает лучше, чем редукция данных, пока новый набор данных не очень мал, потому что тогда у сети есть данные, из которых нужно узнать новые возможности. Для примеров, показывающих, как выполнить передачу обучения, смотрите Передача Обучения with Deep Network Designer и Обучите нейронную сеть для глубокого обучения для классификации новых изображений.
Можно импортировать сети и сетевые архитектуры из TensorFlow®-Keras, Caffe и ONNX™ (Open Neural Network Exchange) формат модели. Можно также экспортировать обученные сети в формат модели ONNX.
Импорт предварительно обученных сетей из TensorFlow-Keras при помощи importKerasNetwork
. Можно импортировать сеть и веса как из того же HDF5 файла (.h5), так и из отдельных файлов HDF5 и JSON (.json). Для получения дополнительной информации см. importKerasNetwork
.
Импортируйте сетевые архитектуры из TensorFlow-Keras при помощи importKerasLayers
. Можно импортировать сетевую архитектуру с весами или без. Можно импортировать сетевую архитектуру и веса либо из того же HDF5 файла (.h5), либо из отдельных файлов HDF5 и JSON (.json). Для получения дополнительной информации см. importKerasLayers
.
Импорт предварительно обученных сетей из Caffe с помощью importCaffeNetwork
функция. Существует много предварительно обученных сетей, доступных в Caffe Model Zoo [5]. Загрузите нужную .prototxt
и .caffemodel
файлы и использование importCaffeNetwork
для импорта предварительно обученной сети в MATLAB®. Для получения дополнительной информации см. importCaffeNetwork
.
Можно импортировать сетевые архитектуры сетей Caffe. Загрузите нужную .prototxt
файл и использование importCaffeLayers
для импорта слоев сети в MATLAB. Для получения дополнительной информации см. importCaffeLayers
.
Используя ONNX в качестве промежуточного формата, можно взаимодействовать с другими средами глубокого обучения, поддерживающими экспорт или импорт модели ONNX, такими как TensorFlow, PyTorch, Caffe2, Microsoft® Cognitive Toolkit (CNTK), Core 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).
Чтобы найти последние предварительно обученные модели и примеры, смотрите MATLAB Deep Learning (GitHub).
Для примера:
Для моделей трансформаторов, таких как GPT-2, BERT и FinBERT, смотрите Модели Трансформатора для MATLAB GitHub® репозиторий.
Для предварительно обученных моделей обнаружения YOLO-v4 объектов, таких как YOLOv4-coco и YOLOv4-tiny-coco, смотрите репозиторий Pretrained YOLO-v4 Network for Обнаружение Объектов GitHub.
[1] ImageNet. http://www.image-net.org
[2] Russakovsky, O., Deng, J., Su, H., et al. «Большой масштабный вызов визуального распознавания ImageNet». Международный журнал компьютерного зрения (IJCV). Том 115, Выпуск 3, 2015, стр. 211-252
[3] Чжоу, Болей, Адитья Хосла, Агата Лапедриза, Антонио Торральба, и Од Олива. «Места: База изображений для глубокого понимания сцены». arXiv preprint arXiv:1610.02055 (2016).
[4] Места. http://places2.csail.mit.edu/
[5] Caffe Model Zoo. http://caffe.berkeleyvision.org/model_zoo.html
alexnet
| darknet19
| darknet53
| Deep Network Designer | densenet201
| exportONNXNetwork
| googlenet
| importCaffeLayers
| importCaffeNetwork
| importKerasLayers
| importKerasNetwork
| importONNXLayers
| importONNXNetwork
| inceptionresnetv2
| inceptionv3
| mobilenetv2
| nasnetlarge
| nasnetmobile
| resnet101
| resnet18
| resnet50
| shufflenet
| squeezenet
| vgg16
| vgg19
| xception