Перестробление Pytorch Office EffectDet с производительности SOTA в режиме реального времени, оригинальная бумажная ссылка: https://arxiv.org/abs/1911.09070
Если у вас есть проблемы с обучением набора данных, и если вы готовы поделиться своим набором данных с общественностью или он уже открыт, опубликуйте его по вопросам с тегом help wanted , я могу попытаться помочь обучить его для вас, если я свободен, что не гарантируется.
Требования:
Общее количество изображений набора данных не должно быть больше 10 тыс., Вместимость должна быть ниже 5 ГБ, и его следует бесплатно загрузить, то есть Baiduyun.
Набор данных должен быть в формате этого репо.
Если вы публикуете свой набор данных в этом репо, он открыт для мира. Поэтому, пожалуйста, не загружайте свои конфиденциальные наборы данных!
Если наборы данных противоречат закону или вторгайтесь на конфиденциальность, не стесняйтесь обращаться ко мне, чтобы удалить его.
Самое главное, вы не можете потребовать меня тренироваться, если я не хочу.
Я выложу обученные веса в этом репо вместе с результатом оценки.
Надеюсь, это поможет тому, кто хочет попробовать эффективность в Pytorch.
Примеры обучения можно найти здесь. Учебные пособия. Обученные веса можно найти здесь. вес
Производительность очень близко к бумаге, это все еще SOTA.
Тест Speed/FPS включает в себя время постобработки без трюка с точностью JIT/данных.
| коэффициент | pth_download | Графический процессор MEM (MB) | Кадр | Extreme FPS (пакетный 32) | Карта 0,5: 0,95 (это репо) | Карта 0,5: 0,95 (официальное) |
|---|---|---|---|---|---|---|
| D0 | EffactDet-D0.pth | 1049 | 36.20 | 163.14 | 33.1 | 33,8 |
| D1 | EffactDet-d1.pth | 1159 | 29,69 | 63,08 | 38.8 | 39,6 |
| D2 | EffactDet-D2.pth | 1321 | 26.50 | 40,99 | 42.1 | 43,0 |
| D3 | EffactDet-D3.pth | 1647 | 22.73 | - | 45,6 | 45,8 |
| D4 | EffactDet-D4.pth | 1903 | 14.75 | - | 48.8 | 49,4 |
| D5 | EffactDet-D5.pth | 2255 | 7.11 | - | 50.2 | 50,7 |
| D6 | EffactDet-d6.pth | 2985 | 5.30 | - | 50,7 | 51.7 |
| D7 | EffactDet-D7.pth | 3819 | 3.73 | - | 52,7 | 53,7 |
| D7X | EffactDet-D8.pth | 3983 | 2.39 | - | 53,9 | 55,1 |
[2020-07-23] поддерживает EffactDETDET-D7X, MAP 53.9, используя EfficeNet-B7 в качестве основы и более глубокий уровень пирамиды BIFPN. Ради простоты, давайте назовем это эффективным.
[2020-07-15] Обновление эффективных весов, карта 52,7
[2020-05-11] Добавьте логическое преобразование строки, чтобы убедиться, что Head_only Works
[2020-05-10] Замените NMS на пакетный_NMS для дальнейшего улучшения карты на 0,5 ~ 0,7, спасибо Laughing-Q.
[2020-05-04] Исправьте ошибку идентификатора категории Coco, но она не должна влиять на обучение на пользовательском наборе данных.
[2020-04-14] Ошибка функции фиксированной потери. Пожалуйста, вытащите последний код.
[2020-04-14] Для тех, кто нуждается в помощи или не может получить хороший результат после нескольких эпох, ознакомьтесь с этим учебником. Вы можете запустить его на Colab с поддержкой GPU.
[2020-04-10] деформируйте функцию потерь в учебной модели, так что использование памяти будет сбалансировано при тренировке с несколькими графическими процессорами, что обеспечивает обучение с большим количеством партии.
[2020-04-10] Добавить D7 (D6 с большим размером входа и большей шкалой якоря) Поддержка и проверьте его карту
[2020-04-09] Разрешить пользовательские якорные масштабы и соотношения
[2020-04-08] Добавьте поддержку D6 и проверьте его карту
[2020-04-08] Добавьте сценарий обучения и его DOC; Обновление сценария Eval и простой сценарий вывода.
[2020-04-07] Протестированная карта D0-D5, результат кажется хорошим, детали можно найти здесь
[2020-04-07] Исправьте стратегии якорей.
[2020-04-06] адаптировать стратегии привязки.
[2020-04-05] Создайте этот репозиторий.
# install requirements
pip install pycocotools numpy opencv-python tqdm tensorboard tensorboardX pyyaml webcolors
pip install torch==1.4.0
pip install torchvision==0.5.0
# run the simple inference script
python efficientdet_test.py
Обучение EffactDet-это болезненная и трудоемкая задача. Вы не должны ожидать получить хороший результат в течение дня или двух. Пожалуйста, будьте терпеливы.
Проверьте это руководство, если вы новичок в этом. Вы можете запустить его на Colab с поддержкой GPU.
# your dataset structure should be like this
datasets/
-your_project_name/
-train_set_name/
-*.jpg
-val_set_name/
-*.jpg
-annotations
-instances_{train_set_name}.json
-instances_{val_set_name}.json
# for example, coco2017
datasets/
-coco2017/
-train2017/
-000000000001.jpg
-000000000002.jpg
-000000000003.jpg
-val2017/
-000000000004.jpg
-000000000005.jpg
-000000000006.jpg
-annotations
-instances_train2017.json
-instances_val2017.json
# create a yml file {your_project_name}.yml under 'projects'folder
# modify it following 'coco.yml'
# for example
project_name: coco
train_set: train2017
val_set: val2017
num_gpus: 4 # 0 means using cpu, 1-N means using gpus
# mean and std in RGB order, actually this part should remain unchanged as long as your dataset is similar to coco.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
# this is coco anchors, change it if necessary
anchors_scales: '[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]'
anchors_ratios: '[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]'
# objects from all labels from your dataset with the order from your annotations.
# its index must match your dataset's category_id.
# category_id is one_indexed,
# for example, index of 'car' here is 2, while category_id of is 3
obj_list: ['person', 'bicycle', 'car', ...]
# train efficientdet-d0 on coco from scratch
# with batchsize 12
# This takes time and requires change
# of hyperparameters every few hours.
# If you have months to kill, do it.
# It's not like someone going to achieve
# better score than the one in the paper.
# The first few epoches will be rather unstable,
# it's quite normal when you train from scratch.
python train.py -c 0 --batch_size 64 --optim sgd --lr 8e-2
# train efficientdet-d1 on a custom dataset
# with batchsize 8 and learning rate 1e-5
python train.py -c 1 -p your_project_name --batch_size 8 --lr 1e-5
# train efficientdet-d2 on a custom dataset with pretrained weights
# with batchsize 8 and learning rate 1e-3 for 10 epoches
python train.py -c 2 -p your_project_name --batch_size 8 --lr 1e-3 --num_epochs 10
--load_weights /path/to/your/weights/efficientdet-d2.pth
# with a coco-pretrained, you can even freeze the backbone and train heads only
# to speed up training and help convergence.
python train.py -c 2 -p your_project_name --batch_size 8 --lr 1e-3 --num_epochs 10
--load_weights /path/to/your/weights/efficientdet-d2.pth
--head_only True
# while training, press Ctrl+c, the program will catch KeyboardInterrupt
# and stop training, save current checkpoint.
# let says you started a training session like this.
python train.py -c 2 -p your_project_name --batch_size 8 --lr 1e-3
--load_weights /path/to/your/weights/efficientdet-d2.pth
--head_only True
# then you stopped it with a Ctrl+c, it exited with a checkpoint
# now you want to resume training from the last checkpoint
# simply set load_weights to 'last'
python train.py -c 2 -p your_project_name --batch_size 8 --lr 1e-3
--load_weights last
--head_only True
# eval on your_project, efficientdet-d5
python coco_eval.py -p your_project_name -c 5
-w /path/to/your/weights
# when you get bad result, you need to debug the training result.
python train.py -c 2 -p your_project_name --batch_size 8 --lr 1e-3 --debug True
# then checkout test/ folder, there you can visualize the predicted boxes during training
# don't panic if you see countless of error boxes, it happens when the training is at early stage.
# But if you still can't see a normal box after several epoches, not even one in all image,
# then it's possible that either the anchors config is inappropriate or the ground truth is corrupted.
Q1 Зачем реализовать это, в то время как есть несколько проектов PytorCh Projects.
A1: Поскольку AFAIK, ни один из них полностью не восстанавливает истинный алгоритм официального эффективного момента, именно поэтому их общины не могли достичь или испытывать трудности для достижения того же балла, что и официальный эффект, тренируясь с нуля.
Q2: В чем именно разница между этим хранилищем и другими?
A2: Например, эти два являются наиболее популярным эффективным питателем,
https://github.com/toandaominh1997/effiathdet.pytorch
https://github.com/signatrix/effictdet
Вот проблемы и почему их трудно достичь того же балла, что и официальный:
Первый:
Второй:
Бэттермализация Pytorch немного отличается от Tensorflow, Momentum_pytorch = 1 - Momentum_tensorflow. Что ж, я не осознавал эту ловушку, если бы уделял меньше внимания. Signatrix/EffactDet сменил параметр от TensorFlow, поэтому BN будет работать плохо, потому что работа в среднем и работающую дисперсию преобладает новый вход.
Неверное внедрение глубины, неравственное Conv2d. Debulwise-Farable conv2d представляет собой глубину-conv2d и pointwise-conv2d и biaSADD, после двух конвертов, в то время как Signatrix/EffactDet имеет дополнительный BiaSADD на глубине Conv2D.
Неправильно понимать первый параметр maxpooling2d, первый параметр - kernel_size вместо шага.
Отсутствует BN после нисходящего канала функции эффективного выхода.
Использование неправильной функции выходного сигнала AffifiveNet. Это большой. Он требует любой вывод, который имеет конвейс 2, но это неправильно. Это должен быть тот, чей следующий конвей.
Не применяет такую же прокладку на Conv2D и объединение.
Отсутствует активация SWISH после нескольких операций.
Отсутствие операций Conv/BN в BIFPN, регрессоре и классификаторе. Это очень сложно, если вы не копаете глубже в официальном орудию, есть и те же операции с различными весами.
illustration of a minimal bifpn unit
P7_0 -------------------------> P7_2 -------->
|-------------| ↑
↓ |
P6_0 ---------> P6_1 ---------> P6_2 -------->
|-------------|--------------↑ ↑
↓ |
P5_0 ---------> P5_1 ---------> P5_2 -------->
|-------------|--------------↑ ↑
↓ |
P4_0 ---------> P4_1 ---------> P4_2 -------->
|-------------|--------------↑ ↑
|--------------↓ |
P3_0 -------------------------> P3_2 -------->
Например, P4 будет пониженным до P4_0, тогда он идет P4_1, кто -нибудь может принять как должное, что P4_0 переходит к P4_2 напрямую, верно?
Вот почему они не правы, P4 должен снова понижать вниз с другими весами до P4_0_Another, тогда он переходит к P4_2.
И, наконец, некоторые общие проблемы, их якорный декодер и энкодер отличаются от оригинального, но это не главная причина, по которой он работает плохо.
Кроме того, Conv2dstaticsAmepadding от AffifiveNet-Pytorch не работает как TensorFlow, стратегия накладки отличается. Таким образом, я внедряю настоящий конврег в стиле Tensorflow и Maxpool2dstaticsamePadding.
Несмотря на вышеупомянутые проблемы, это отличные репозитории, которые просвещают меня, поэтому есть этот репозиторий.
Этот репозиторий в основном основан на EfficeDET, с изменением, которые гарантируют, что он работает как можно более ближе, как и бумага.
Кстати, отладка статического графа Tensorflow v1 действительно болезненна. Не пытайтесь экспортировать его с помощью инструментов автоматизации, такими как TF-Onnx или MMDNN, они будут вызывать больше проблем из-за его пользовательских/сложных операций.
И даже если вам удастся, как я это сделал, вам придется иметь дело с безумным испорченным кодом, сгенерированного машиной под тем же классом, который требует больше времени, чем рефактор, чем его перевод с нуля.
Q3: Что мне делать, когда найду ошибку?
A3: Проверьте журнал обновления, если оно было исправлено, затем потяните последний код, чтобы попробовать еще раз. Если это не поможет, создайте новую проблему и опишите ее подробно.
Вывод: они обеспечивают почти одинаковую точность. Советы: SET force_input_size=1920 . Официальный репо использует исходный размер изображения, в то время как в этом репо используется размер сетевого ввода по умолчанию. Если вы попытаетесь сравнить эти два репо, вы должны убедиться, что размер входа является согласованным.
Цените отличную работу из следующих репозиториев:
Если вам нравится этот репозиторий, или если вы хотите поддержать автора по любой причине, вы можете пожертвовать автору. Не стесняйтесь присылать мне свое имя или представить страницы, я позабочусь о том, чтобы ваше имя (ы) в списке спонсоров.
Искренне спасибо за вашу щедрость.
CNDYLAN CLAIRE-S11