??? Berita : UniRepLKNet versi jurnal diperpanjang dirilis di arxiv.
ConvNet menyatukan beberapa modalitas dan mengungguli model khusus modalitas . Makalah ini merangkum pedoman arsitektur untuk membangun CNN kernel besar, yang bekerja sangat baik dengan gambar dan modalitas lainnya. Ini adalah kontribusi terbaru untuk dua bidang yang berpengaruh - Re-param Struktural (sejak RepVGG, Ding et al. 2021) dan ConvNet kernel yang sangat besar (sejak RepLKNet, Ding et al. 2022). Akurasi ImageNet 88,0%, COCO AP 56,4, ADE20K mIoU 55,6 hanya dengan pra-pelatihan ImageNet-22K . Kecepatan dan kinerja sebenarnya lebih tinggi dibandingkan model terbaru seperti ConvNeXt v2 dan InternImage. Dengan arsitektur terpadu dan prapemrosesan khusus modalitas yang sangat sederhana, mencapai kinerja canggih pada pengenalan audio dan, yang paling menakjubkan, Perkiraan Suhu & Kecepatan Angin Global (tugas perkiraan rangkaian waktu berskala besar yang menantang), mengungguli sistem peramalan global yang ada.
Lebih khusus lagi, kami berkontribusi dari dua aspek:
UniRepLKNet tidak hanya menandakan "kembalinya" ConvNet ke domain aslinya tetapi juga menunjukkan potensi kernel besar ConvNet untuk "menaklukkan" wilayah baru, menyoroti kemampuan beradaptasi lebih lanjut dan kegunaan luas di berbagai modalitas dan tugas.
Pos pemeriksaan ImageNet, COCO, dan ADE20K telah dirilis (lihat repo pelukan yang ditunjukkan di bawah), kecuali UniRepLKNet-S yang telah dilatih ImageNet-22K, dan UperNet dengan UniRepLKNet-XL, yang hilang, dan kami mereproduksinya.
Berita terbaru: memperbaiki bug yang dihasilkan dari penerapan ini pada 1 Desember 2023. Sekarang sudah diperbaiki. Jika Anda menggunakan unireplknet.py setelah 1 Desember 2023, harap periksa kode Anda.
unireplknet.py
sehingga Anda bisa langsung copy-paste ke MMDetection atau MMSegmentation Anda, misal di sini dan di sini. Jika Anda tidak ingin menggunakannya dengan MMDetection atau MMSegmentation, Anda dapat menghapus baris kode tersebut dengan aman.timm.create_model
untuk membuat model. Misalnya, model = timm.create_model('unireplknet_l', num_classes=num_classes_of_your_task, in_22k_pretrained=True)
akan memanggil fungsi unireplknet_l
yang ditentukan di sini, yang akan membuat UniRepLKNet-L dan secara otomatis mengunduh pos pemeriksaan kami dan memuat bobotnya. # 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()
yang mengubah UniRepLKNet terlatih menjadi struktur inferensi, yang secara setara menghilangkan cabang paralel di Blok Reparam Dialted, lapisan Norma Batch, dan istilah bias di GRN. Kode semu dari pipeline lengkap akan seperti ini 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()
sama dengan memanggil timm.utils.reparameterize_model(some_unireplknet_model)
. Jadi jika Anda menggunakan kode kami dengan basis kode timm, misalnya kode evaluasi timm, tambahkan saja --reparam
ke perintah Anda sehingga timm.utils.reparameterize_model
akan dipanggil (lihat di sini). Kami telah menyediakan lima cara untuk mengunduh pos pemeriksaan kami.
pip install huggingface_hub
Kemudian gunakan huggingface_hub seperti ini di kode python Anda, misalnya,
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 )
Lihat repo pelukan kami atau kode kami untuk FILE_NAME (misalnya, unireplknet_xl_in22k_pretrain.pth
).
Gunakan CLI pelukan. Periksa tutorialnya.
Unduh pos pemeriksaan kami secara otomatis dengan meneruskan in_1k_pretrained=True
, in_22k_pretrained=True
, atau in_22k_to_1k=True
sambil memanggil fungsi yang kami sediakan. Lihat kodenya di sini.
nama | resolusi | akun@1 | #params | FLOP | beban |
---|---|---|---|---|---|
UniRepLKNet-A | 224x224 | 77.0 | 4,4 juta | 0,6G | ckpt |
UniRepLKNet-F | 224x224 | 78.6 | 6,2 juta | 0,9G | ckpt |
UniRepLKNet-P | 224x224 | 80.2 | 10,7 juta | 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 |
nama | resolusi | #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 |
nama | resolusi | akun@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 |
File kode, dokumen, dan konfigurasi telah dirilis. Lihat panduan deteksi di sini.
Pos pemeriksaan telah dilepaskan dengan wajah berpelukan. Anda dapat mengunduhnya sekarang dari https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main.
Atau Anda dapat mendownload pos pemeriksaan ini dari Google Drive sebagai berikut:
nama | resolusi | peta kotak | peta topeng | #params | FLOP | beban |
---|---|---|---|---|---|---|
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 | 155M | 978G | ckpt |
UniRepLKNet-L_22K | 1280x800 | 55.8 | 48.4 | 276M | 1385G | ckpt |
UniRepLKNet-XL_22K | 1280x800 | 56.4 | 49.0 | 443M | 1952G | ckpt |
File kode, dokumen, dan konfigurasi telah dirilis. Lihat panduan segmentasi di sini.
Pos pemeriksaan telah dilepaskan dengan wajah berpelukan. Anda dapat mengunduhnya sekarang dari https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main.
Atau Anda dapat mendownload pos pemeriksaan ini dari Google Drive sebagai berikut:
nama | resolusi | mIoU (ss/ms) | #params | FLOP | beban |
---|---|---|---|---|---|
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 | 130M | 1850G | ckpt |
UniRepLKNet-L_22K | 640x640 | 54.5/55.0 | 254M | 2507G | ckpt |
UniRepLKNet-XL_22K | 640x640 | 55.2/55.6 | 425M | 3420G | ckpt |
Kami memberikan contoh perintah evaluasi.
GPU tunggal
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
Multi-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
Untuk pelatihan atau menyempurnakan UniRepLKNets di ImageNet-1K atau 22K, lihat panduan ini
Untuk dokumentasi selengkapnya, silakan merujuk ke dokumen-dokumen berikut:
Kami menggunakan implementasi konv kernel besar di PyTorch yang lebih efisien daripada torch.nn.Conv2d asli. Ini diimplementasikan berdasarkan algoritma iGEMM dan alat ringan bernama cutlass. Pemasangannya sangat sederhana dan biayanya kurang dari satu menit. Jika Anda tidak menginstal implementasi ini, Anda masih dapat menggunakan model kami di mana pun Anda inginkan namun akan sedikit lebih lambat.
unzip cutlass.zip
, masuk ke direktori. Versi cutlass yang disediakan dalam repositori ini berfungsi baik dengan implementasi kernel besar kami dan beberapa versi python. Sebagai alternatif, Anda dapat menggunakan cabang cutlass yang dikelola oleh tim MegEngine (klon https://github.com/MegEngine/cutlass), tetapi Anda mungkin harus lebih berhati-hati dengan versi python Anda (lihat masalah ini).cd examples/19_large_depthwise_conv2d_torch_extension
./setup.py install --user
. Jika Anda mendapatkan kesalahan, periksa CUDA_HOME
Anda.python depthwise_conv2d_implicit_gemm.py
PATH_TO_CUTLASS_DIRECTORY/examples/19_large_depthwise_conv2d_torch_extension
ke dalam PYTHONPATH
Anda sehingga Anda dapat from depthwise_conv2d_implicit_gemm import DepthWiseConv2dImplicitGEMM
di mana saja. Kemudian Anda dapat menggunakan DepthWiseConv2dImplicitGEMM
sebagai pengganti nn.Conv2d
.Ini harus bekerja dengan berbagai GPU dan versi PyTorch/CUDA. Kami menyarankan Anda mencoba terlebih dahulu dan memeriksa lingkungan hanya jika Anda mendapatkan kesalahan. Testis terbaru kami menggunakan keduanya
Dilaporkan (lihat di sini) bahwa ketidakcocokan versi python dapat mengakibatkan kesalahan ( forward_fp32.cu(212): error: more than one instance of constructor "cutlass::Tensor4DCoord::Tensor4DCoord" ...
atau cutlass/include/cutlass/fast_math.h(741): error: no suitable conversion function from "__half" to "float" exists
). Silakan tingkatkan atau turunkan versi python Anda. Kami dengan tulus berterima kasih kepada @sleeplessai dan @ewrfcas karena telah berbagi pengalaman mereka.
Permintaan tarik (misalnya, implementasi yang lebih baik atau implementasi lain atau implementasi pada kerangka kerja lain) disambut baik.
Jika kode dan makalah membantu penelitian Anda, silakan mengutip:
@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}
}
Proyek ini dirilis di bawah lisensi Apache 2.0. Silakan lihat file LISENSI untuk informasi lebih lanjut.