Что такое InsightFace
InsightFaceЭто набор инструментов, связанных с обнаружением и распознаванием лиц. уже упакованоPython Package, который работает из коробки. Его верхний интерфейс может напрямую выполнять распознавание лиц, определение пола и т. д. Базовая реализация на самом деле представляет собой различные модели, которые были обучены.
OneFlowПредставленная модель является одним из бэкендов проекта InsightFace.
Для отображения эффекта рассуждения InsightFace вы можете обратиться к проекту на облачной платформе OneFlow.Демонстрация системы разрешений распознавания лиц.
Этот проект в основном знакомит с принципами и техническими приемами, относящимися к сверхкрупномасштабному обучению распознаванию лиц.
Как использовать предмет
Во-первых, нужноЗарегистрируйте учетную запись на облачной платформе OneFlow,Входитьэтот проекти "Вилка". Затем нажмите «Выполнить», подключите контейнер и выполните следующую команду.
cd /workspace && bash ./train_graph_distributed.sh
Будет вывод, аналогичный следующему, в том числе:
- Базовая конфигурация для обучения
Training: 2021-12-14 14:49:44,690-rank_id: 0
Training: 2021-12-14 14:49:44,720-: loss cosface
Training: 2021-12-14 14:49:44,720-: network r50
Training: 2021-12-14 14:49:44,720-: resume False
Training: 2021-12-14 14:49:44,720-: output model
Training: 2021-12-14 14:49:44,720-: dataset ms1m-retinaface-t1
Training: 2021-12-14 14:49:44,720-: embedding_size 512
Training: 2021-12-14 14:49:44,721-: fp16 True
Training: 2021-12-14 14:49:44,721-: model_parallel True
Training: 2021-12-14 14:49:44,721-: sample_rate 0.1
Training: 2021-12-14 14:49:44,721-: partial_fc 0
Training: 2021-12-14 14:49:44,721-: graph True
Training: 2021-12-14 14:49:44,721-: synthetic False
Training: 2021-12-14 14:49:44,721-: scale_grad False
Training: 2021-12-14 14:49:44,721-: momentum 0.9
Training: 2021-12-14 14:49:44,721-: weight_decay 0.0005
Training: 2021-12-14 14:49:44,722-: batch_size 128
Training: 2021-12-14 14:49:44,722-: lr 0.1
Training: 2021-12-14 14:49:44,722-: val_image_num {'lfw': 12000, 'cfp_fp': 14000, 'agedb_30': 12000}
Training: 2021-12-14 14:49:44,722-: ofrecord_path /dataset/18fad635/v1/ofrecord
Training: 2021-12-14 14:49:44,722-: num_classes 93432
Training: 2021-12-14 14:49:44,722-: num_image 5179510
Training: 2021-12-14 14:49:44,722-: num_epoch 25
Training: 2021-12-14 14:49:44,722-: warmup_epoch -1
Training: 2021-12-14 14:49:44,722-: decay_epoch [10, 16, 22]
Training: 2021-12-14 14:49:44,723-: val_targets ['lfw', 'cfp_fp', 'agedb_30']
Training: 2021-12-14 14:49:44,723-: ofrecord_part_num 32
- Загрузка журнала данных набора проверки
Training: 2021-12-14 14:49:50,124-loading bin:0
Training: 2021-12-14 14:49:51,372-loading bin:1000
Training: 2021-12-14 14:49:52,649-loading bin:2000
Training: 2021-12-14 14:50:17,039-loading bin:9000
Training: 2021-12-14 14:50:18,300-loading bin:10000
Training: 2021-12-14 14:50:19,576-loading bin:11000
Training: 2021-12-14 14:50:20,839-loading bin:12000
Training: 2021-12-14 14:50:22,099-loading bin:13000
Training: 2021-12-14 14:50:23,353-oneflow.Size([14000, 3, 112, 112])
Training: 2021-12-14 14:50:23,709-loading bin:0
Training: 2021-12-14 14:50:24,991-loading bin:1000
Training: 2021-12-14 14:50:26,292-loading bin:2000
Training: 2021-12-14 14:50:27,590-loading bin:3000
Training: 2021-12-14 14:50:28,886-loading bin:4000
Training: 2021-12-14 14:50:30,174-loading bin:5000
Training: 2021-12-14 14:50:31,463-loading bin:6000
Training: 2021-12-14 14:50:32,744-loading bin:7000
Training: 2021-12-14 14:50:34,029-loading bin:8000
Training: 2021-12-14 14:50:35,315-loading bin:9000
Training: 2021-12-14 14:50:36,593-loading bin:10000
Training: 2021-12-14 14:50:37,867-loading bin:11000
Training: 2021-12-14 14:50:39,144-oneflow.Size([12000, 3, 112, 112])
- Основная информация во время тренировки (скорость, изменение потерь, предполагаемое оставшееся время и т. д.)
Training: 2021-12-14 14:51:02,452-Speed 883.82 samples/sec Loss 52.6974 LearningRate 0.1000 Epoch: 0 Global Step: 100 Required: 202 hours
Training: 2021-12-14 14:51:09,722-Speed 880.33 samples/sec Loss 53.4146 LearningRate 0.1000 Epoch: 0 Global Step: 150 Required: 149 hours
Training: 2021-12-14 14:51:16,968-Speed 883.24 samples/sec Loss 51.8446 LearningRate 0.1000 Epoch: 0 Global Step: 200 Required: 122 hours
Training: 2021-12-14 14:51:24,237-Speed 880.57 samples/sec Loss 50.9537 LearningRate 0.1000 Epoch: 0 Global Step: 250 Required: 106 hours
Training: 2021-12-14 14:51:31,526-Speed 877.99 samples/sec Loss 50.5335 LearningRate 0.1000 Epoch: 0 Global Step: 300 Required: 95 hours
Training: 2021-12-14 14:51:38,831-Speed 876.17 samples/sec Loss 49.6624 LearningRate 0.1000 Epoch: 0 Global Step: 350 Required: 87 hours
Training: 2021-12-14 14:51:46,151-Speed 874.42 samples/sec Loss 48.9462 LearningRate 0.1000 Epoch: 0 Global Step: 400 Required: 82 hours
Training: 2021-12-14 14:51:53,476-Speed 873.76 samples/sec Loss 48.3082 LearningRate 0.1000 Epoch: 0 Global Step: 450 Required: 77 hours
Training: 2021-12-14 14:52:00,810-Speed 872.72 samples/sec Loss 48.0000 LearningRate 0.1000 Epoch: 0 Global Step: 500 Required: 73 hours
В оставшееся время на начальной стадии будут кратковременные колебания, что является нормальным явлением. Когда композиция статического изображения будет завершена, она постепенно станет стабильной и точной. После завершения обучения журнал обучения и модель сохраняются в/workspace/model/
под.
Технологическая эволюция обучения распознаванию лиц
В области глубокого обучения одной из самых обсуждаемых историй является то, что Хитон продержался десятилетиями в холодный период нейронных сетей.Наконец, в 2012 году он привел своих учеников к участию в конкурсе по распознаванию изображений Imagnet с AlexNet, и выиграл чемпионат одним махом, а показатель точности на несколько процентных пунктов выше, чем у его сверстников, что открыло эру глубокого обучения.
Основная особенность глубокого обучения заключается в использовании глубокой нейронной сети в качестве экстрактора признаков для выполнения сквозного извлечения признаков, заменяя традиционный метод машинного обучения, который в значительной степени опирается на ручную разработку правил извлечения признаков.
Распознавание лиц на основе глубокого обучения, также с 2014 г.DeepID(CVPR 2014) Внедрение сверточных нейронных сетей в алгоритмы распознавания лиц к 2019 г.InsightFace, в основном зрелые.
Процесс глубокого обучения интуитивно понимается с использованием функции потерь в качестве цели оптимизации, а затем с использованием итерационных методов оптимизации, таких как хорошо известный метод градиентного спуска, чтобы направлять модель для обнаружения законов из больших данных и накопления полученного опыта. в нейронную сеть над параметрами сети.
В моделях распознавания лиц в основном используются сверточные нейронные сети, особенно ResNet, появившийся в 2015 г., который имеет очень хорошие показатели в области изображений, поэтому в последние годы не так много инноваций в моделях распознавания лиц, которые в основном основаны на том Интегральная нейронная сеть. Инновация технологии распознавания лиц — это, в значительной степени, инновация функции потерь.
из общегоSoftmax Loss
к тому, который используется InsightFaceArcFace Loss
, процесс эволюции показан на следующем рисунке:
В этом проекте в основном реализованы два наиболее часто используемых косфейса и аркфейса.loss
, код выглядит следующим образом, нативный интерфейс oneflow позволяет пользователю удобно устанавливать m1, m2 и m3:
# loss
if cfg.loss == "cosface":
self.margin_softmax = flow.nn.CombinedMarginLoss(1, 0., 0.4).to("cuda")
else:
self.margin_softmax = flow.nn.CombinedMarginLoss(1, 0.5, 0.).to("cuda")
Его соответствующая математическая формула:
Как OneFlow просто и элегантно решает сверхкрупномасштабную задачу обучения распознаванию лиц
В практических приложениях в промышленности масштаб встречаемой идентификации лица может исчисляться десятками миллионов или сотнями миллионов.В настоящее время одна машина и одна карта не могут пройти обучение. Обычно зрелые параллельные решения, поддерживаемые платформой, имеют только параллелизм данных, а простой параллелизм данных не может эффективно поддерживать сверхкрупномасштабное обучение распознаванию лиц.
Для общих стратегий распределенного обучения и связанных с ними базовых знаний вы можете обратиться кРаспространенные распределенные параллельные стратегии
Характеристики обучающей модели для сверхкрупномасштабного распознавания лиц:
- Последний полносвязный слой требует больших вычислительных ресурсов и занимает много памяти.
- Сверточная нейронная сеть как первая половина экстрактора признаков не очень велика.
Такие характеристики делают его не подходящим ни для чистого параллелизма данных, ни для чистого параллелизма моделей, но подходящим для использования гибридного параллелизма: сверточная сеть в качестве экстрактора признаков использует параллелизм данных, а полносвязный слой использует параллелизм моделей, поэтому эффективность самая высокая. oneflow восстанавливает поддержку необработанного интерфейсаPartial FC, что может дополнительно уменьшить объем вычислений полностью подключенного слоя и значительно сократить использование памяти. Параллельный Softmax, реализованный с помощью однопотоковой оптимизации, может еще больше ускорить скорость обучения.Представлен принцип реализации:Как реализовать эффективное ядро Softmax CUDA.
Соответствующие реализации в этом проекте:
#function.py line :118
self.backbone = backbone.to_consistent(placement=placement, sbp=flow.sbp.broadcast)
Приведенный выше код позволяет сверточной сети в качестве средства извлечения признаков проводить параллельное обучение данных.
#function.py line :110~117
if cfg.model_parallel:
input_size = cfg.embedding_size
output_size = int(cfg.num_classes/world_size)
self.fc = FC7(input_size, output_size, cfg, partial_fc=cfg.partial_fc).to_consistent(
placement=placement, sbp=flow.sbp.split(0))
else:
self.fc = FC7(cfg.embedding_size, cfg.num_classes, cfg).to_consistent(
placement=placement, sbp=flow.sbp.broadcast)
Приведенный выше код позволяет полностью подключенному слою выполнять параллельное обучение модели.
Другие коммуникации, планирование, синхронизация и т. д. передаются OneFlow для эффективного выполнения.
Для получения более подробной информации см. наш официальный учебник:InsightFace от бронзы до короля