- ข่าว : UniRepLKNet เวอร์ชันวารสารเพิ่มเติมเผยแพร่ที่ arxiv
ConvNet รวมรูปแบบต่างๆ ไว้ด้วยกันและมีประสิทธิภาพเหนือกว่าโมเดลเฉพาะรูปแบบ บทความนี้สรุปหลักเกณฑ์ทางสถาปัตยกรรมในการสร้าง CNN ที่มีเคอร์เนลขนาดใหญ่ ซึ่งทำงานได้ดีอย่างน่าอัศจรรย์กับรูปภาพและรูปแบบอื่นๆ นี่เป็นการสนับสนุนล่าสุดสำหรับทั้งสองส่วนที่มีอิทธิพล - Structural Re-param (ตั้งแต่ RepVGG, Ding และคณะ 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 ได้รับการเผยแพร่แล้ว (ดู repo ของ Huggingface ที่แสดงด้านล่าง) ยกเว้น UniRepLKNet-S ที่ได้รับการฝึกล่วงหน้าของ ImageNet-22K และ UperNet ที่มี UniRepLKNet-XL ซึ่งสูญหายไป และเรากำลังสร้างใหม่
ข่าวล่าสุด: แก้ไขข้อบกพร่อง ซึ่งเป็นผลมาจากการคอมมิตนี้ในวันที่ 1 ธันวาคม 2023 ขณะนี้ได้รับการแก้ไขแล้ว หากคุณใช้ unireplknet.py หลังจากวันที่ 1 ธันวาคม 2023 โปรดตรวจสอบโค้ดของคุณ
unireplknet.py
เพื่อให้คุณสามารถคัดลอกและวางลงใน 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 Normlayer และคำว่า bias ใน 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 )
ดู repo ของ Huggingface หรือโค้ดของเราสำหรับ FILE_NAME (เช่น unireplknet_xl_in22k_pretrain.pth
)
ใช้ 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.2ล้าน | 0.9G | ซีเคพีที |
UniRepLKNet-P | 224x224 | 80.2 | 10.7ล้าน | 1.6G | ซีเคพีที |
UniRepLKNet-N | 224x224 | 81.6 | 18.3M | 2.8G | ซีเคพีที |
UniRepLKNet-T | 224x224 | 83.2 | 31ม | 4.9G | ซีเคพีที |
UniRepLKNet-S | 224x224 | 83.9 | 56ม | 9.1G | ซีเคพีที |
ชื่อ | ปณิธาน | #พารามิเตอร์ | ฟลอป | ซีเคพีที |
---|---|---|---|---|
UniRepLKNet-S | 224x224 | 56ม | 26.7G | ซีเคพีที |
UniRepLKNet-B | 224x224 | 98ม | 47.2G | ซีเคพีที |
UniRepLKNet-L | 192x192 | 218ม | 105.4G | ซีเคพีที |
UniRepLKNet-XL | 192x192 | 386ม | 187ก | ซีเคพีที |
ชื่อ | ปณิธาน | บัญชี@1 | #พารามิเตอร์ | ฟลอป | ซีเคพีที |
---|---|---|---|---|---|
UniRepLKNet-S | 384x384 | 86.4 | 56ม | 26.7G | ซีเคพีที |
UniRepLKNet-B | 384x384 | 87.4 | 98ม | 47.2G | ซีเคพีที |
UniRepLKNet-L | 384x384 | 87.9 | 218ม | 105.4G | ซีเคพีที |
UniRepLKNet-XL | 384x384 | 88.0 | 386ม | 187ก | ซีเคพีที |
รหัส เอกสาร และไฟล์กำหนดค่าได้รับการเผยแพร่แล้ว ดูคำแนะนำในการตรวจจับได้ที่นี่
ได้มีการปล่อยจุดตรวจบนหน้ากอดแล้ว คุณสามารถดาวน์โหลดได้ทันทีจาก https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main
หรือสามารถดาวน์โหลดจุดตรวจเหล่านี้ได้จาก Google Drive ดังนี้
ชื่อ | ปณิธาน | กล่องเอ็มเอพี | หน้ากากแมป | #พารามิเตอร์ | ฟลอป | ตุ้มน้ำหนัก |
---|---|---|---|---|---|---|
UniRepLKNet-T | 1280x800 | 51.7 | 44.9 | 89ม | 749ก | ซีเคพีที |
UniRepLKNet-S | 1280x800 | 53.0 | 45.9 | 113ม | 835G | ซีเคพีที |
UniRepLKNet-S_22K | 1280x800 | 54.3 | 47.1 | 113ม | 835G | ซีเคพีที |
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 Drive ดังนี้
ชื่อ | ปณิธาน | mIoU (เอสเอส/มิลลิวินาที) | #พารามิเตอร์ | ฟลอป | ตุ้มน้ำหนัก |
---|---|---|---|---|---|
UniRepLKNet-T | 512x512 | 48.6/49.1 | 61ม | 946ก | ซีเคพีที |
UniRepLKNet-S | 512x512 | 50.5/51.0 | 86ม | 1,036G | ซีเคพีที |
UniRepLKNet-S_22K | 512x512 | 51.9/52.7 | 86ม | 1,036G | ซีเคพีที |
UniRepLKNet-S_22K | 640x640 | 52.3/52.7 | 86ม | 1618G | ซีเคพีที |
UniRepLKNet-B_22K | 640x640 | 53.5/53.9 | 130ม | 1850G | ซีเคพีที |
UniRepLKNet-L_22K | 640x640 | 54.5/55.0 | 254ม | 2507G | ซีเคพีที |
UniRepLKNet-XL_22K | 640x640 | 55.2/55.6 | 425ม | 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
สำหรับการฝึกอบรมหรือการปรับแต่ง UniRepLKNets บน ImageNet-1K หรือ 22K โปรดดูคู่มือนี้
สำหรับเอกสารโดยละเอียด โปรดดูเอกสารเหล่านี้ดังต่อไปนี้:
เราใช้การดำเนินการ Conv แบบเคอร์เนลขนาดใหญ่ใน PyTorch ซึ่งมีประสิทธิภาพมากกว่า torch.nn.Conv2d แบบเนทิฟ มีการใช้งานตามอัลกอริธึม iGEMM และเครื่องมือน้ำหนักเบาชื่อมีด การติดตั้งนั้นง่ายมากและคุณจะเสียค่าใช้จ่ายน้อยกว่าหนึ่งนาที หากคุณไม่ได้ติดตั้งการใช้งานนี้ คุณยังคงสามารถใช้โมเดลของเราได้ทุกที่ที่คุณต้องการ แต่จะช้าลงเล็กน้อย
unzip cutlass.zip
ป้อนไดเร็กทอรี Cutlass เวอร์ชันนี้ที่มีให้ในพื้นที่เก็บข้อมูลนี้ทำงานได้ดีกับการใช้งานเคอร์เนลขนาดใหญ่และเวอร์ชันหลามหลายเวอร์ชัน คุณอาจใช้สาขา 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
ได้ควรทำงานร่วมกับ GPU และเวอร์ชัน PyTorch/CUDA ได้หลากหลาย เราขอแนะนำให้คุณลองก่อนและตรวจสอบสภาพแวดล้อมเฉพาะในกรณีที่คุณได้รับข้อผิดพลาดเท่านั้น อัณฑะล่าสุดของเราใช้ทั้งสองอย่าง
มีรายงาน (ดูที่นี่) ว่าเวอร์ชันหลามไม่ตรงกันอาจทำให้เกิดข้อผิดพลาด ( 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
) กรุณาอัพเกรดหรือดาวน์เกรดหลามของคุณ เราขอขอบคุณ @sleeplesssai และ @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 โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม