??? Новости : Расширенная журнальная версия UniRepLKNet выпущена на arxiv.
ConvNet объединяет несколько модальностей и превосходит модели, специфичные для модальностей . В этой статье обобщаются архитектурные рекомендации по созданию CNN с большим ядром, которая удивительно хорошо работает с изображениями и другими модальностями. Это последний вклад в обе две влиятельные области — Structural Re-param (начиная с RepVGG, Ding и др., 2021 г.) и ConvNet с очень большим ядром (начиная с RepLKNet, Ding и др., 2022 г.). Точность ImageNet 88,0%, COCO AP 56,4, ADE20K mIoU 55,6 только с предварительным обучением ImageNet-22K . Фактическая скорость и производительность выше, чем у последних моделей, таких как ConvNeXt v2 и InternImage. Благодаря унифицированной архитектуре и чрезвычайно простой предварительной обработке с учетом модальности он достигает самых современных показателей в распознавании звука и, что самое удивительное, в прогнозировании глобальной температуры и скорости ветра (сложная крупномасштабная задача прогнозирования временных рядов), превосходя по производительности существующая глобальная система прогнозирования.
В частности, мы вносим свой вклад в двух аспектах:
UniRepLKNet не только означает «возвращение» ConvNet в ее первоначальную область, но также демонстрирует потенциал ConvNet с большим ядром для «завоевания» новых территорий, подчеркивая дальнейшую адаптивность и широкую полезность для различных модальностей и задач.
Контрольные точки ImageNet, COCO и ADE20K были выпущены (см. репозиторий Huggingface, показанный ниже), за исключением предварительно обученных UniRepLKNet-S ImageNet-22K и UperNet с UniRepLKNet-XL, которые были потеряны, и мы их воспроизводим.
Последние новости: исправлена ошибка, возникшая в результате этого коммита от 1 декабря 2023 года. Теперь она исправлена. Если вы использовали unireplknet.py после 1 декабря 2023 г., проверьте свой код.
unireplknet.py
есть некоторый код, связанный с MMDetection и MMSegmentation, так что вы можете напрямую скопировать и вставить его в свой MMDetection или MMSegmentation, например, здесь и здесь. Если вы не хотите использовать его с MMDetection или MMSegmentation, вы можете безопасно удалить эти строки кода.timm.create_model
для построения моделей. Например, model = timm.create_model('unireplknet_l', num_classes=num_classes_of_your_task, in_22k_pretrained=True)
вызовет определенную здесь функцию unireplknet_l
, которая построит UniRepLKNet-L, автоматически загрузит наши контрольные точки и загрузит веса. # The simplest way to use our model in your project is to copy-paste unireplknet.py into your working directory and create models. For example
from unireplknet import *
model = timm.create_model('unireplknet_l', num_classes=num_classes_of_your_task, in_22k_pretrained=True)
reparameterize_unireplknet()
, которая преобразует обученную UniRepLKNet в структуру вывода, которая эквивалентно удаляет параллельные ветви в блоках Dialted Reparam, слоях пакетной нормы и член смещения в GRN. Псевдокод полного конвейера будет выглядеть так: training_model = unireplknet_l (..., deploy = False )
train ( training_model )
trained_results = evaluate ( training_model )
training_model . reparameterize_unireplknet ()
inference_results = evaluate ( training_model )
# you will see inference_results are identical to trained_results
save ( training_model , 'converted_weights.pth' )
# use the converted model
deploy_model = unireplknet_l (..., deploy = True )
load_weights ( deploy_model , 'converted_weights.pth' )
deploy_results = evaluate ( deploy_model )
# you will see deploy_results == inference_results == trained_results
some_unireplknet_model.reparameterize_unireplknet()
эквивалентен вызову timm.utils.reparameterize_model(some_unireplknet_model)
. Поэтому, если вы используете наш код с кодовой базой timm, например, с оценочным кодом timm, просто добавьте --reparam
к своей команде, чтобы вызывалась timm.utils.reparameterize_model
(см. здесь). Мы предоставили пять способов загрузки наших контрольных точек.
pip install huggingface_hub
Затем используйте Huggingface_hub в своем коде Python, например:
from huggingface_hub import hf_hub_download
repo_id = 'DingXiaoH/UniRepLKNet'
cache_file = hf_hub_download ( repo_id = repo_id , filename = FILE_NAME )
checkpoint = torch . load ( cache_file , map_location = 'cpu' )
model . load_state_dict ( checkpoint )
См. наш репозиторий HuggingFace или наш код для FILE_NAME (например, unireplknet_xl_in22k_pretrain.pth
).
Используйте интерфейс командной строки HuggingFace. Проверьте учебник.
Автоматически загружайте наши контрольные точки, передавая in_1k_pretrained=True
, in_22k_pretrained=True
или in_22k_to_1k=True
при вызове предоставленных функций. Смотрите код здесь.
имя | разрешение | акк@1 | #параметры | Флопы | Веса |
---|---|---|---|---|---|
УниРепЛКНет-А | 224x224 | 77,0 | 4,4 млн. | 0,6 г | КПТ |
УниРепЛКНет-Ф | 224x224 | 78,6 | 6,2 млн. | 0,9 г | КПТ |
УниРепЛКНет-П | 224x224 | 80,2 | 10,7 млн. | 1,6 г | КПТ |
УниРепЛКНет-Н | 224x224 | 81,6 | 18,3 млн. | 2,8 г | КПТ |
УниРепЛКНет-Т | 224x224 | 83,2 | 31М | 4,9 г | КПТ |
УниРепЛКНет-С | 224x224 | 83,9 | 56М | 9.1Г | КПТ |
имя | разрешение | #параметры | Флопы | КПТ |
---|---|---|---|---|
УниРепЛКНет-С | 224x224 | 56М | 26,7 г | КПТ |
УниРепЛКНет-Б | 224x224 | 98М | 47,2Г | КПТ |
УниРепЛКНет-Л | 192x192 | 218М | 105,4G | КПТ |
UniRepLKNet-XL | 192x192 | 386М | 187Г | КПТ |
имя | разрешение | акк@1 | #параметры | Флопы | КПТ |
---|---|---|---|---|---|
УниРепЛКНет-С | 384x384 | 86,4 | 56М | 26,7 г | КПТ |
УниРепЛКНет-Б | 384x384 | 87,4 | 98М | 47,2Г | КПТ |
УниРепЛКНет-Л | 384x384 | 87,9 | 218М | 105,4G | КПТ |
UniRepLKNet-XL | 384x384 | 88,0 | 386М | 187Г | КПТ |
Файлы кода, документов и конфигурации были выпущены. См. руководство по обнаружению здесь.
Чекпойнты уже были выпущены на обнимающемся лице. Вы можете скачать их прямо сейчас по адресу https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main.
Или вы можете скачать эти контрольные точки с Google Диска следующим образом:
имя | разрешение | карта коробки | маска карты | #параметры | Флопы | Веса |
---|---|---|---|---|---|---|
УниРепЛКНет-Т | 1280x800 | 51,7 | 44,9 | 89М | 749Г | КПТ |
УниРепЛКНет-С | 1280x800 | 53,0 | 45,9 | 113М | 835Г | КПТ |
UniRepLKNet-S_22K | 1280x800 | 54,3 | 47,1 | 113М | 835Г | КПТ |
UniRepLKNet-B_22K | 1280x800 | 54,8 | 47,4 | 155М | 978Г | КПТ |
UniRepLKNet-L_22K | 1280x800 | 55,8 | 48,4 | 276М | 1385Г | КПТ |
UniRepLKNet-XL_22K | 1280x800 | 56,4 | 49,0 | 443М | 1952Г | КПТ |
Файлы кода, документов и конфигурации были выпущены. См. руководство по сегментации здесь.
Чекпойнты уже были выпущены на обнимающемся лице. Вы можете скачать их прямо сейчас по адресу https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main.
Или вы можете скачать эти контрольные точки с Google Диска следующим образом:
имя | разрешение | млн (сс/мс) | #параметры | Флопы | Веса |
---|---|---|---|---|---|
УниРепЛКНет-Т | 512x512 | 48,6/49,1 | 61М | 946Г | КПТ |
УниРепЛКНет-С | 512x512 | 50,5/51,0 | 86М | 1036Г | КПТ |
UniRepLKNet-S_22K | 512x512 | 51,9/52,7 | 86М | 1036Г | КПТ |
UniRepLKNet-S_22K | 640x640 | 52,3/52,7 | 86М | 1618Г | КПТ |
UniRepLKNet-B_22K | 640x640 | 53,5/53,9 | 130М | 1850 г. | КПТ |
UniRepLKNet-L_22K | 640x640 | 54,5/55,0 | 254М | 2507Г | КПТ |
UniRepLKNet-XL_22K | 640x640 | 55,2/55,6 | 425М | 3420G | КПТ |
Приведем пример команды оценки.
Однографический процессор
python main.py --model unireplknet_b --eval true
--resume unireplknet_b_in22k_to_in1k_384_acc87.40.pth
--input_size 384
--data_path /path/to/imagenet-1k
Мульти-GPU
python -m torch.distributed.launch --nproc_per_node=8 main.py
--model unireplknet_b --eval true
--resume unireplknet_b_in22k_to_in1k_384_acc87.40.pth
--input_size 384
--data_path /path/to/imagenet-1k
Для обучения или точной настройки UniRepLKNets на ImageNet-1K или 22K см. это руководство.
Подробную документацию можно найти в следующих документах:
Мы используем реализацию conv с большим ядром в PyTorch , которая более эффективна, чем собственный torch.nn.Conv2d. Он реализован на основе алгоритма iGEMM и легкого инструмента под названием Cutlass. Установка очень проста и обойдется вам менее чем за одну минуту. Если вы не установите эту реализацию, вы все равно сможете использовать нашу модель где угодно, но это будет немного медленнее.
unzip cutlass.zip
и войдите в каталог. Эта версия Cutlass, представленная в этом репозитории, отлично работает с нашей реализацией большого ядра и несколькими версиями Python. В качестве альтернативы вы можете использовать ветку Cutlass, поддерживаемую командой MegEngine (клон https://github.com/MegEngine/cutlass), но вам, возможно, придется быть более осторожным с вашей версией Python (см. эту проблему).cd examples/19_large_depthwise_conv2d_torch_extension
./setup.py install --user
. Если вы получаете ошибки, проверьте свой CUDA_HOME
.python depthwise_conv2d_implicit_gemm.py
PATH_TO_CUTLASS_DIRECTORY/examples/19_large_depthwise_conv2d_torch_extension
в свой PYTHONPATH
, чтобы вы могли from depthwise_conv2d_implicit_gemm import DepthWiseConv2dImplicitGEMM
куда угодно. Затем вы можете использовать DepthWiseConv2dImplicitGEMM
вместо nn.Conv2d
.Он должен работать с широким спектром графических процессоров и версий PyTorch/CUDA. Мы советуем вам сначала попробовать и проверять среду только в том случае, если вы обнаружите какие-либо ошибки. В наших последних тестах использовались оба
Сообщается (см. здесь), что несоответствие версии Python может привести к ошибке ( forward_fp32.cu(212): error: more than one instance of constructor "cutlass::Tensor4DCoord::Tensor4DCoord" ...
или cutlass/include/cutlass/fast_math.h(741): error: no suitable conversion function from "__half" to "float" exists
. Пожалуйста, обновите или понизьте версию вашего Python. Мы искренне благодарим @sleeplessai и @ewrfcas за то, что поделились своим опытом.
Запросы на включение (например, лучшие или другие реализации или реализации на других платформах) приветствуются.
Если код и статья помогут вашему исследованию, пожалуйста, укажите:
@article{zhang2024scaling,
title={Scaling Up Your Kernels: Large Kernel Design in ConvNets towards Universal Representations},
author={Zhang, Yiyuan and Ding, Xiaohan and Yue, Xiangyu},
journal={arXiv preprint arXiv:2410.08049},
year={2024}
}
@inproceedings{ding2024unireplknet,
title={UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio Video Point Cloud Time-Series and Image Recognition},
author={Ding, Xiaohan and Zhang, Yiyuan and Ge, Yixiao and Zhao, Sijie and Song, Lin and Yue, Xiangyu and Shan, Ying},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={5513--5524},
year={2024}
}
Этот проект выпущен под лицензией Apache 2.0. Дополнительную информацию см. в файле ЛИЦЕНЗИИ.