??? 뉴스 : UniRepLKNet의 확장 저널 버전이 arxiv에서 출시되었습니다.
ConvNet은 여러 양식을 통합하고 양식별 모델보다 성능이 뛰어납니다 . 이 문서에서는 이미지 및 기타 양식과 놀라울 정도로 잘 작동하는 대규모 커널 CNN을 구축하기 위한 아키텍처 지침을 요약합니다. 이는 두 가지 영향력 있는 영역인 Structural Re-param (RepVGG, Ding et al. 2021 이후)과 매우 큰 커널 ConvNet (RepLKNet, Ding et al. 2022 이후)에 대한 최신 기여입니다. ImageNet 정확도 88.0%, COCO AP 56.4, ADE20K mIoU 55.6(ImageNet-22K 사전 훈련만 사용 시) . ConvNeXt v2 및 InternImage와 같은 최신 모델보다 실제 속도와 성능이 더 높습니다. 통합 아키텍처와 매우 간단한 양식별 전처리를 통해 오디오 인식 및 가장 놀랍게도 글로벌 온도 및 풍속 예측 (도전적인 대규모 시계열 예측 작업)에서 최첨단 성능을 달성합니다. 기존 글로벌 예측 시스템.
보다 구체적으로 우리는 두 가지 측면에서 기여합니다.
UniRepLKNet은 원래 도메인에서 ConvNet의 "복귀"를 의미할 뿐만 아니라 새로운 영역을 "정복"할 수 있는 대규모 커널 ConvNet의 잠재력을 보여줌으로써 다양한 양식과 작업 전반에 걸쳐 추가적인 적응성과 광범위한 유용성을 강조합니다.
ImageNet, COCO 및 ADE20K 체크포인트가 출시되었습니다(아래 허깅페이스 저장소 참조). 단, 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()
함수를 제공합니다. 이는 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의 평가 코드)와 함께 우리 코드를 사용하는 경우 timm.utils.reparameterize_model
호출되도록 명령에 --reparam
추가하기만 하면 됩니다(여기 참조). 우리는 체크포인트를 다운로드하는 5가지 방법을 제공했습니다.
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 )
허깅페이스 저장소나 FILE_NAME 코드(예: unireplknet_xl_in22k_pretrain.pth
)를 참조하세요.
허깅페이스 CLI를 사용하세요. 튜토리얼을 확인하세요.
제공된 함수를 호출하는 동안 in_1k_pretrained=True
, in_22k_pretrained=True
또는 in_22k_to_1k=True
전달하여 체크포인트를 자동으로 다운로드합니다. 여기에서 코드를 참조하세요.
이름 | 해결 | acc@1 | #params | FLOP | 가중치 |
---|---|---|---|---|---|
UniRepLKNet-A | 224x224 | 77.0 | 440만 | 0.6G | ckpt |
UniRepLKNet-F | 224x224 | 78.6 | 6.2M | 0.9G | ckpt |
UniRepLKNet-P | 224x224 | 80.2 | 10.7M | 1.6G | ckpt |
UniRepLKNet-N | 224x224 | 81.6 | 18.3M | 2.8G | ckpt |
UniRepLKNet-T | 224x224 | 83.2 | 31M | 4.9G | ckpt |
UniRepLKNet-S | 224x224 | 83.9 | 56M | 9.1G | ckpt |
이름 | 해결 | #params | FLOP | ckpt |
---|---|---|---|---|
UniRepLKNet-S | 224x224 | 56M | 26.7G | ckpt |
UniRepLKNet-B | 224x224 | 98M | 47.2G | ckpt |
UniRepLKNet-L | 192x192 | 218M | 105.4G | ckpt |
UniRepLKNet-XL | 192x192 | 386M | 187G | ckpt |
이름 | 해결 | acc@1 | #params | FLOP | ckpt |
---|---|---|---|---|---|
UniRepLKNet-S | 384x384 | 86.4 | 56M | 26.7G | ckpt |
UniRepLKNet-B | 384x384 | 87.4 | 98M | 47.2G | ckpt |
UniRepLKNet-L | 384x384 | 87.9 | 218M | 105.4G | ckpt |
UniRepLKNet-XL | 384x384 | 88.0 | 386M | 187G | ckpt |
코드, 문서 및 구성 파일이 출시되었습니다. 여기에서 감지 가이드를 참조하세요.
포옹하는 얼굴에는 이미 체크포인트가 공개되었습니다. 지금 바로 https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main에서 다운로드할 수 있습니다.
또는 다음과 같이 Google 드라이브에서 이러한 체크포인트를 다운로드할 수 있습니다.
이름 | 해결 | 상자 지도 | 마스크 맵 | #params | FLOP | 가중치 |
---|---|---|---|---|---|---|
UniRepLKNet-T | 1280x800 | 51.7 | 44.9 | 89M | 749G | ckpt |
UniRepLKNet-S | 1280x800 | 53.0 | 45.9 | 113M | 835G | ckpt |
UniRepLKNet-S_22K | 1280x800 | 54.3 | 47.1 | 113M | 835G | ckpt |
UniRepLKNet-B_22K | 1280x800 | 54.8 | 47.4 | 1억5천5백만 | 978G | ckpt |
UniRepLKNet-L_22K | 1280x800 | 55.8 | 48.4 | 276M | 1385G | ckpt |
UniRepLKNet-XL_22K | 1280x800 | 56.4 | 49.0 | 443M | 1952G | ckpt |
코드, 문서 및 구성 파일이 출시되었습니다. 여기에서 세분화 가이드를 참조하세요.
포옹하는 얼굴에는 이미 체크포인트가 공개되었습니다. 지금 바로 https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main에서 다운로드할 수 있습니다.
또는 다음과 같이 Google 드라이브에서 이러한 체크포인트를 다운로드할 수 있습니다.
이름 | 해결 | mIoU(ss/ms) | #params | FLOP | 가중치 |
---|---|---|---|---|---|
UniRepLKNet-T | 512x512 | 48.6/49.1 | 61M | 946G | ckpt |
UniRepLKNet-S | 512x512 | 50.5/51.0 | 86M | 1036G | ckpt |
UniRepLKNet-S_22K | 512x512 | 51.9/52.7 | 86M | 1036G | ckpt |
UniRepLKNet-S_22K | 640x640 | 52.3/52.7 | 86M | 1618G | ckpt |
UniRepLKNet-B_22K | 640x640 | 53.5/53.9 | 1억 3천만 | 1850G | ckpt |
UniRepLKNet-L_22K | 640x640 | 54.5/55.0 | 254M | 2507G | ckpt |
UniRepLKNet-XL_22K | 640x640 | 55.2/55.6 | 425M | 3420G | ckpt |
예제 평가 명령을 제공합니다.
단일 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라는 경량 도구를 기반으로 구현됩니다. 설치는 매우 간단하며 비용은 1분도 채 걸리지 않습니다. 이 구현을 설치하지 않으면 원하는 곳 어디에서나 우리 모델을 사용할 수 있지만 속도가 약간 느려집니다.
unzip cutlass.zip
해당 디렉터리로 들어갑니다. 이 저장소에 제공된 이 버전의 커틀라스는 대규모 커널 구현 및 여러 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
수 있습니다. 그런 다음 nn.Conv2d
대신 DepthWiseConv2dImplicitGEMM
사용할 수 있습니다.다양한 GPU 및 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 라이센스에 따라 릴리스됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.