0

0

ConvNeXt飞桨版本预训练权重

P粉084495128

P粉084495128

发布时间:2025-07-28 10:01:29

|

912人浏览过

|

来源于php中文网

原创

本项目提供了ConvNeXt的飞桨版本的预训练权重以及模型文件。权重由PyTorch转换而来。并且通过在ImageNet 1K测试集进行精度校验。模型文件请见ConvNeXt.py。本项目旨在提供飞桨版本的模型权重、模型文件和验证精度,对于模型的理解并没有描述,如果想深入了解模型,请见: ConvNeXt:探索CNN网络的极限潜力

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

convnext飞桨版本预训练权重 - php中文网

项目简介

本项目提供了ConvNeXt的飞桨版本的预训练权重以及模型文件。权重由PyTorch转换而来。并且通过在ImageNet 1K测试集进行精度校验。模型文件请见ConvNeXt.py。本项目旨在提供飞桨版本的模型权重、模型文件和验证精度,对于模型的理解并没有描述,如果想深入了解模型,请见: ConvNeXt:探索CNN网络的极限潜力

ConvNeXt

模型文件请见ConvNeXt.py, 下面说一下PyTorch模型转换PaddlePaddle模型的注意事项。

  • 线性层PyTorch与PaddlePaddle的权重转换需要转置一下
  • DropPath层需要自定义。我是参考了这篇文章 PiT:结合池化层的视觉 Transformer 网络
  • PaddlePaddle在涉及维度的参数时,多用axis,PyTorch则是dim
  • 有时需要自定义参数,PaddlePaddle的API在这里
  • PaddlePaddle无permute,而是采用了transpose
  • 其他简单的API映射请见这里

在这个py文件的第134和135行,给weight和bias乘了一个1,也就是没有做什么处理,这个是PyTorch的写法,PaddlePaddle的写法我还不会,麻烦知道的大佬回复一下。

权重

这里介绍一下本次精度验证的权重文件,总共有5个,分别代表了不同大小和版本的ConvNeXt。 首先来总览一下。

name resolution acc@1 #params FLOPs
ConvNeXt-T 224x224 82.1 28M 4.5G
ConvNeXt-S 224x224 83.1 50M 8.7G
ConvNeXt-B 224x224 83.8 89M 15.4G
ConvNeXt-L 224x224 84.3 198M 34.4G
ConvNeXt-XL 384x384 87.8 350M 179.0G

由于文件数量限制,这里只展示这5个不同版本,以及做精度验证。22K上的权重将放在其他数据集里在这里。这个项目用的数据集在ConvNeXt预训练模型PaddlePaddle版本里,欢迎大家下载使用。下面来做精度验证8!

Elser AI Comics
Elser AI Comics

一个免费且强大的AI漫画生成工具,助力你三步创作自己的一出好戏

下载

精度验证

以下精度验证代码参考寂寞你快进去大佬的写法。

In [1]
# 解压ImageNet 1K数据集!mkdir data/ILSVRC2012
!tar -xf ~/data/data68594/ILSVRC2012_img_val.tar -C ~/data/ILSVRC2012
   
In [2]
import osimport cv2import numpy as npimport warningsimport paddleimport paddle.vision.transforms as Tfrom PIL import Image
warnings.filterwarnings('ignore')# 构建数据集class ILSVRC2012(paddle.io.Dataset):
    def __init__(self, root, label_list, transform, backend='pil'):
        self.transform = transform
        self.root = root
        self.label_list = label_list
        self.backend = backend
        self.load_datas()    def load_datas(self):
        self.imgs = []
        self.labels = []        with open(self.label_list, 'r') as f:            for line in f:
                img, label = line[:-1].split(' ')
                self.imgs.append(os.path.join(self.root, img))
                self.labels.append(int(label))    def __getitem__(self, idx):
        label = self.labels[idx]
        image = self.imgs[idx]        if self.backend=='cv2':
            image = cv2.imread(image)        else:
            image = Image.open(image).convert('RGB')
        image = self.transform(image)        return image.astype('float32'), np.array(label).astype('int64')    def __len__(self):
        return len(self.imgs)


val_transforms = T.Compose([
    T.Resize(int(224 / 0.96), interpolation='bicubic'),
    T.CenterCrop(224),
    T.ToTensor(),
    T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
   
In [3]
# 配置模型from ConvNeXt import convnext_tiny, convnext_small, convnext_base, convnext_large, convnext_xlarge

cvt_t = convnext_tiny()
cvt_s = convnext_small()
cvt_b = convnext_base()
cvt_l = convnext_large()
cvt_x = convnext_xlarge()
       
W0211 21:12:49.976547   686 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0211 21:12:49.982038   686 device_context.cc:465] device: 0, cuDNN Version: 7.6.
       
In [4]
cvt_t.load_dict(paddle.load('data/data127804/convnext_tiny_1k_224_ema.pdparams'))
cvt_t = paddle.Model(cvt_t)
cvt_t.prepare(metrics=paddle.metric.Accuracy(topk=(1, 5)))

cvt_s.load_dict(paddle.load('data/data127804/convnext_small_1k_224_ema.pdparams'))
cvt_s = paddle.Model(cvt_s)
cvt_s.prepare(metrics=paddle.metric.Accuracy(topk=(1, 5)))

cvt_b.load_dict(paddle.load('data/data127804/convnext_base_1k_224_ema.pdparams'))
cvt_b = paddle.Model(cvt_b)
cvt_b.prepare(metrics=paddle.metric.Accuracy(topk=(1, 5)))

cvt_l.load_dict(paddle.load('data/data127804/convnext_large_1k_224_ema.pdparams'))
cvt_l = paddle.Model(cvt_l)
cvt_l.prepare(metrics=paddle.metric.Accuracy(topk=(1, 5)))

cvt_x.load_dict(paddle.load('data/data127804/convnext_xlarge_22k_1k_384_ema.pdparams'))
cvt_x = paddle.Model(cvt_x)
cvt_x.prepare(metrics=paddle.metric.Accuracy(topk=(1, 5)))
   
In [5]
val_dataset = ILSVRC2012('data/ILSVRC2012', transform=val_transforms, label_list='data/data68594/val_list.txt', backend='pil')# 模型验证acc = cvt_t.evaluate(val_dataset, batch_size=128, num_workers=0, verbose=1)print(acc)
       
Eval begin...
step 391/391 [==============================] - acc_top1: 0.8199 - acc_top5: 0.9588 - 1s/step          
Eval samples: 50000
{'acc_top1': 0.81992, 'acc_top5': 0.9588}
       
In [6]
val_dataset = ILSVRC2012('data/ILSVRC2012', transform=val_transforms, label_list='data/data68594/val_list.txt', backend='pil')# 模型验证acc = cvt_s.evaluate(val_dataset, batch_size=128, num_workers=0, verbose=1)print(acc)
       
Eval begin...
step 391/391 [==============================] - acc_top1: 0.8308 - acc_top5: 0.9652 - 1s/step          
Eval samples: 50000
{'acc_top1': 0.83078, 'acc_top5': 0.96516}
       
In [7]
val_dataset = ILSVRC2012('data/ILSVRC2012', transform=val_transforms, label_list='data/data68594/val_list.txt', backend='pil')# 模型验证acc = cvt_b.evaluate(val_dataset, batch_size=128, num_workers=0, verbose=1)print(acc)
       
Eval begin...
step 391/391 [==============================] - acc_top1: 0.8384 - acc_top5: 0.9683 - 2s/step          
Eval samples: 50000
{'acc_top1': 0.8384, 'acc_top5': 0.9683}
       
In [7]
val_dataset = ILSVRC2012('data/ILSVRC2012', transform=val_transforms, label_list='data/data68594/val_list.txt', backend='pil')# 模型验证acc = cvt_l.evaluate(val_dataset, batch_size=128, num_workers=0, verbose=1)print(acc)
       
Eval begin...
step 391/391 [==============================] - acc_top1: 0.8435 - acc_top5: 0.9697 - 2s/step          
Eval samples: 50000
{'acc_top1': 0.84346, 'acc_top5': 0.9697}
       
In [5]
# resize到384val384_transforms = T.Compose([
    T.Resize((384, 384), interpolation='bicubic'),  #  T.CenterCrop(224),
    T.ToTensor(),
    T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
   
In [6]
val_dataset = ILSVRC2012('data/ILSVRC2012', transform=val384_transforms, label_list='data/data68594/val_list.txt', backend='pil')# 模型验证acc = cvt_x.evaluate(val_dataset, batch_size=128, num_workers=0, verbose=1)print(acc)
       
Eval begin...
step 391/391 [==============================] - acc_top1: 0.8775 - acc_top5: 0.9856 - 5s/step          
Eval samples: 50000
{'acc_top1': 0.8775, 'acc_top5': 0.98556}
       

总结

部分模型的准确率有点点不一样是不能避免的,PyTorch转PaddlePaddle的过程或者数据处理的过程都会有一点点不一样。但是总的来说,并没有大的不同,所以模型转换是成功的。

ConvNeXt算是最强的卷积分类网络了。在现有Transformer统治的情况下,ConvNeXt仍然以极强的建模能力为卷积网络扳回一城。不过说实话,卷积比Transformer好的一点且无法代替的一点就是卷积的输入可以是任何尺度,Transformer则较为麻烦。

相关专题

更多
pytorch是干嘛的
pytorch是干嘛的

pytorch是一个基于python的深度学习框架,提供以下主要功能:动态图计算,提供灵活性。强大的张量操作,实现高效处理。自动微分,简化梯度计算。预构建的神经网络模块,简化模型构建。各种优化器,用于性能优化。想了解更多pytorch的相关内容,可以阅读本专题下面的文章。

431

2024.05.29

Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

23

2025.12.22

pytorch是干嘛的
pytorch是干嘛的

pytorch是一个基于python的深度学习框架,提供以下主要功能:动态图计算,提供灵活性。强大的张量操作,实现高效处理。自动微分,简化梯度计算。预构建的神经网络模块,简化模型构建。各种优化器,用于性能优化。想了解更多pytorch的相关内容,可以阅读本专题下面的文章。

431

2024.05.29

Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习
Python AI机器学习PyTorch教程_Python怎么用PyTorch和TensorFlow做机器学习

PyTorch 是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习。 使用Python 编写,因此对于大多数机器学习开发者而言,学习和使用起来相对简单。 PyTorch 的独特之处在于,它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。

23

2025.12.22

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

0

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

13

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

87

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

111

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

155

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号