???新聞:UniRepLKNet 的擴展期刊版本在 arxiv 上發布。
ConvNet 統一了多種模態並且優於特定模態模型。本文總結了建立大核心 CNN 的架構指南,它與圖像和其他模式的配合非常好。這是對兩個有影響力的領域的最新貢獻:結構重參數(自 RepVGG,Ding 等人,2021 年以來)和超大型核心 ConvNet (自 RepLKNet,Ding 等人,2022 年以來)。僅使用 ImageNet-22K 預訓練,ImageNet 準確度為 88.0%,COCO AP 為 56.4,ADE20K mIoU 為 55.6 。比 ConvNeXt v2 和 InternImage 等最新模型更高的實際速度和性能。憑藉統一的架構和極其簡單的特定模態預處理,在音頻識別方面實現了最先進的性能,最令人驚訝的是,在全球溫度和風速預測(一項具有挑戰性的大規模時間序列預測任務)方面,優於現有的全球預測系統。
更具體地說,我們從兩個方面做出貢獻:
UniRepLKNet 不僅標誌著 ConvNet 在其原始領域的“回歸”,而且還展示了大核心 ConvNet “征服”新領域的潛力,強調了跨不同模式和任務的進一步適應性和廣泛實用性。
ImageNet、COCO 和 ADE20K 檢查點已發布(請參閱下面所示的 Huggingface 儲存庫),但 ImageNet-22K 預先訓練的 UniRepLKNet-S 和帶有 UniRepLKNet-XL 的 UperNet 已遺失,我們正在複製它們。
最新消息:修復了 2023 年 12 月 1 日提交的錯誤。如果您在 2023 年 12 月 1 日之後使用了 unireplknet.py,請檢查您的程式碼。
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 Blocks 中的平行分支、Batch Norm 層以及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
然後,在你的Python程式碼中像這樣使用huggingface_hub,例如,
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 CLI。檢查教程。
在呼叫我們提供的函數時傳遞in_1k_pretrained=True
、 in_22k_pretrained=True
或in_22k_to_1k=True
來自動下載我們的檢查點。請參閱此處的代碼。
姓名 | 解決 | 帳戶@1 | #參數 | 失敗次數 | 重量 |
---|---|---|---|---|---|
UniRepLKNet-A | 224x224 | 77.0 | 4.4M | 0.6G | 控制點 |
UniRepLKNet-F | 224x224 | 78.6 | 6.2M | 0.9G | 控制點 |
UniRepLKNet-P | 224x224 | 80.2 | 10.7M | 1.6G | 控制點 |
UniRepLKNet-N | 224x224 | 81.6 | 18.3M | 2.8G | 控制點 |
UniRepLKNet-T | 224x224 | 83.2 | 31M | 4.9G | 控制點 |
UniRepLKNet-S | 224x224 | 83.9 | 56M | 9.1G | 控制點 |
姓名 | 解決 | #參數 | 失敗次數 | 控制點 |
---|---|---|---|---|
UniRepLKNet-S | 224x224 | 56M | 26.7G | 控制點 |
UniRepLKNet-B | 224x224 | 98M | 47.2G | 控制點 |
UniRepLKNet-L | 192x192 | 218M | 105.4G | 控制點 |
UniRepLKNet-XL | 192x192 | 386M | 187G | 控制點 |
姓名 | 解決 | 帳戶@1 | #參數 | 失敗次數 | 控制點 |
---|---|---|---|---|---|
UniRepLKNet-S | 384x384 | 86.4 | 56M | 26.7G | 控制點 |
UniRepLKNet-B | 384x384 | 87.4 | 98M | 47.2G | 控制點 |
UniRepLKNet-L | 384x384 | 87.9 | 218M | 105.4G | 控制點 |
UniRepLKNet-XL | 384x384 | 88.0 | 386M | 187G | 控制點 |
程式碼、文件和設定檔已發布。請參閱此處的檢測指南。
檢查站已經在擁抱的臉上放行了。現在您可以從 https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main 下載它們。
或者您可以從 Google Drive 下載這些檢查點,如下所示:
姓名 | 解決 | 盒圖 | 光罩圖 | #參數 | 失敗次數 | 重量 |
---|---|---|---|---|---|---|
UniRepLKNet-T | 1280x800 | 51.7 | 44.9 | 89M | 749G | 控制點 |
UniRepLKNet-S | 1280x800 | 53.0 | 45.9 | 113M | 835G | 控制點 |
UniRepLKNet-S_22K | 1280x800 | 54.3 | 47.1 | 113M | 835G | 控制點 |
UniRepLKNet-B_22K | 1280x800 | 54.8 | 47.4 | 155M | 978G | 控制點 |
UniRepLKNet-L_22K | 1280x800 | 55.8 | 48.4 | 276M | 1385G | 控制點 |
UniRepLKNet-XL_22K | 1280x800 | 56.4 | 49.0 | 443M | 1952G | 控制點 |
程式碼、文件和設定檔已發布。請參閱此處的分段指南。
檢查站已經在擁抱的臉上放行了。現在您可以從 https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main 下載它們。
或者您可以從 Google Drive 下載這些檢查點,如下所示:
姓名 | 解決 | mIoU (秒/毫秒) | #參數 | 失敗次數 | 重量 |
---|---|---|---|---|---|
UniRepLKNet-T | 512x512 | 48.6/49.1 | 61M | 946G | 控制點 |
UniRepLKNet-S | 512x512 | 50.5/51.0 | 86M | 1036G | 控制點 |
UniRepLKNet-S_22K | 512x512 | 51.9/52.7 | 86M | 1036G | 控制點 |
UniRepLKNet-S_22K | 640x640 | 52.3/52.7 | 86M | 1618G | 控制點 |
UniRepLKNet-B_22K | 640x640 | 53.5/53.9 | 130M | 1850G | 控制點 |
UniRepLKNet-L_22K | 640x640 | 54.5/55.0 | 254M | 2507G | 控制點 |
UniRepLKNet-XL_22K | 640x640 | 55.2/55.6 | 425M | 3420G | 控制點 |
我們給出一個範例評估命令。
單GPU
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
如需在 ImageNet-1K 或 22K 上訓練或微調 UniRepLKNet,請參閱本指南
詳細文件請參考以下文件:
我們在PyTorch中使用大核心轉換實現,它比本機 torch.nn.Conv2d 更有效率。它是基於iGEMM演算法和一個名為cutlass的輕量級工具實現的。安裝非常簡單,花費不到一分鐘。如果您不安裝此實現,您仍然可以在任何您想要的地方使用我們的模型,但速度會慢一些。
unzip cutlass.zip
,進入目錄。此儲存庫中提供的這個版本的 cutlass 與我們的大型核心實作和多個 python 版本配合得很好。您也可以使用 MegEngine 團隊維護的 cutlass 分支(克隆 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
。它應該適用於各種 GPU 和 PyTorch/CUDA 版本。我們建議您先嘗試,僅在出現任何錯誤時檢查環境。我們最新的睪丸同時使用了
據報導(請參見此處),Python 版本不匹配可能會導致錯誤( forward_fp32.cu(212): error: more than one instance of constructor "cutlass::Tensor4DCoord::Tensor4DCoord" ...
or 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 許可證下發布的。請參閱許可證文件以獲取更多資訊。