皮皮网

皮皮网

【南京桶装水溯源码有什么用】【领涨股源码】【新闻云app源码】mmcv源码

时间:2024-11-30 03:20:13 分类:休闲

1.mmcvԴ?源码?
2.利用python embed打包--facechain windows安装包制作过程
3.使用mmdeploy部署rtmdet ins做实例分割

mmcv源码

mmcvԴ??

       Single Path One Shot(SPOS)算法是一种高效、低成本的源码神经网络结构搜索方法,相较于传统的源码基于强化学习、进化算法等方法,源码SPOS算法显著降低了搜索成本。源码MMRazor是源码南京桶装水溯源码有什么用一个深度学习模型压缩算法库,支持包括网络结构搜索、源码剪枝、源码蒸馏在内的源码主流技术方向,为OpenMMLab其他算法库提供即插即用、源码可自由组合的源码模型压缩算法,使得模型轻量化更为简便快捷。源码本文将对SPOS算法原理、源码搜索空间、源码MMRazor以及在MMRazor中的源码实现进行详细的解读,内容干货满满。

       1. SPOS算法介绍

       1.1 原理介绍

       SPOS算法在ECCV年提出,针对传统NAS算法中网络权重耦合度过高的问题,SPOS提出将网络权重的训练与网络结构的搜索进行解耦。首先训练超网络的权重,然后从超网络中搜索最优的子网络架构,最后对最优子网进行从头开始的领涨股源码训练。整个运行过程分为三个步骤:

       超网权重训练:使用单路径候选网络构成的超网络,通过优化每层的选择会构建一条单路径子网络。通过优化整个超网的权重完成整个优化过程。

       网络结构搜索:从训练好的超网中通过进化算法找到最优的子网络。

       重训练子网:在找到最优子网络后,从头开始训练。

       1.2 搜索空间介绍

       SPOS论文中提到的搜索空间丰富,包括choiceblock搜索、通道搜索和混合精度量化搜索。当前官方源码中仅提供了choiceblock搜索部分。SPOS的搜索空间结构如下表所示,CB代表choiceblock,共包含个CB。CB内部操作主要受ShuffleNetv2启发,提供了四种操作。

       2. MMRazor简介

       MMRazor是一个深度学习模型压缩算法库,支持网络结构搜索、剪枝、蒸馏等主流技术方向,为OpenMMLab其他算法库提供即插即用、可自由组合的新闻云app源码模型压缩算法,实现模型轻量化更为简便快捷。MMRazor的整体设计思想与OpenMMLab保持一致,支持多种算法库。其组织架构分为组件层、算法层和应用层。

       3. MMRazor中超网的构建方式

       神经网络结构搜索算法中,超网的实现至关重要。算法框架至少需要具备以下功能:搜索对象是可变化的,如SPOS中的不同候选操作;搜索算法能够指定选择某个候选操作的功能。MMRazor通过引入Mutable和Mutator对象实现上述功能:通过PlaceHolder提供占位符功能,用户定义的可变位置,在调用Mutator中的convert方法后转化为Mutable对象。通过这种方式使超网变成可搜索对象Mutable,后续与Mutator进一步完成NAS任务。

       4. SPOS在MMRazor中的实现

       4.1 环境安装

       安装教程请参考:[MMRazor文档链接]。以cuda.1、pytorch1.9为例,首先安装cuda、torch、mmcv包,其中mmcv-full表示采用预编译包的免费程序源码网安装方式,还需注意对应cuda以及torch的版本。mmcv安装详细方式以及cuda、torch、mmcv版本对应关系可见:[mmcv文档链接]。以torch1.9为例进行环境安装。

       安装MMRazor推荐使用MIM安装或直接使用pip安装:pip install MMRazor。也可以通过源码安装。

       4.2 Config介绍

       由于训练SPOS分为三个阶段,对应三个config:

       以spos_supernet_shufflenetv2_8xb_in1k.py为例,config中主要有model、algorithm、mutator三个对象,其中algorithm中包含architecture对象,architecture对象中则包含model。在初始化algorithm的过程中,algorithm会初始化architecture,并根据是否传入mutator、pruner、distiller来决定是否初始化这三个对象。

       4.3 超网权重训练(Pre-training)

       完成以上准备工作后,进行第一个阶段训练:超网权重训练。脚本精灵dnf源码这个过程需要不断地从超网中采样子网,迭代优化子网参数,最终得到优化后的超网。训练命令如下所示,SPOS中超网训练通过随机采样的方式优化网络,每次前向训练一个batch的过程中会随机采样一个子网络。

       4.4 网络结构搜索(Evolution search)

       此过程初始化候选池,从预训练好的SuperNet中得到Subnet在测试集上的结果,根据得分更新候选池的Topk并执行Mutation和CrossOver操作,得到最优子网的网络结构。训练命令如下所示,这里需要用到上一步超网权重的路径$STEP1_CKPT。具体Searcher选择的是EvolutionSearcher。

       4.5 重训练子网(Retrain)

       在上一步通过进化算法得到最优子网结构后,将其对应的子网络从头进行训练,得到最终的可用网络模型。训练命令如下所示,需要将algorithm.mutable_cfg参数传入,该参数为上一步得到的yaml文件位置。训练过程与训练普通分类网络完全一致。

       5. 总结

       本文详细解读了经典的网络结构搜索算法SPOS及其在MMRazor中的实现流程。SPOS算法能够与各类代码库搭配使用,如与MMDetection库的配合,实现便捷的DetNAS算法。MMRazor不仅包含NAS相关算法,还有蒸馏和剪枝等功能。欢迎体验,如对您有帮助,欢迎点个star。更多内容可查看[相关链接]。

利用python embed打包--facechain windows安装包制作过程

       在学习过程中受到启发,了解到Python可以通过embed方式部署和安装,决定在facechain上实践这一过程。以下是详细的操作记录。

       从python.org官网下载对应版本的Python-embed,并在本地解压缩。

       安装pip,首先下载,然后运行安装。

       安装完成后,可能会出现一个warning,是否加入D:\python-3..-embed-amd\Scripts到path环境变量,实际操作中可选。

       修改路径下python._pth文件,具体命名与版本相关。需删除#import site注释,并增加embed路径。

       运行pip安装所需的包,将requirements.txt文件拷贝过来,指定安装路径以避免影响系统已安装的版本。

       尝试安装mmcv-full,遇到问题时发现关联到pycharm下的mmcv,选择手动指定路径安装。

       安装完成后,遇到依赖冲突,优先处理这些问题。

       程序拷贝,可以使用pycharm程序或通过git操作,甚至git clone。

       在Embed环境下运行程序,遇到Module找不到的问题,通过在python._pth中增加一行解决。

       依赖包中遇到包找不到的问题,特别是在modelscope中的venv,通过安装virtualvenv并修改源代码中的导入语句解决。

       调试过程中,上传及开始训练后报错,确认是使用accelerate时报错。直接在cmd窗口中运行程序,无误后修改源代码,去除accelerate部分。

       发现dataprocess包无法识别,再次在python._pth中加入解决。

       训练及推理过程正常,所有文件打包,文件体积庞大。

       上传至云盘,供爱好者测试。

使用mmdeploy部署rtmdet ins做实例分割

       在尝试使用mmdeploy部署rtmdet ins进行实例分割时,发现网上资源较少,github的问题也有不少未解决,只得自己动手,留作档案。

       构建时需严格遵循源代码构建流程,从下载到构建,避免第三方库问题。

       ppl.cv不支持cuda,构建时需在cuda.cmake中设置与自己显卡对应的flag。

       使用了最新版的tensorrt和cudnn,版本对运行结果影响不大,但确保环境变量已正确设置。

       安装mmcv时需注意版本,应使用大于2.0.0、小于2.2.0的版本,直接按照教程安装易导致版本2.3.0,mmdet会报错,我选择安装2.1.0版本。

       在使用中需注意cuda版本,选择.x版本最为合适。

       因为mmdeploy需要nvcc进行编译,所以本地的cuda toolkit也应安装。我忽视了这一点,nvcc编译可以正常通过,但在运行时在trt nms处出现错误。

       在修改permuteData.cu文件后,发现问题是由于sm_不兼容(我的显卡是,查看主机cuda版本是否支持)。吐槽的是,即使卸载过cuda导致nvcc版本为.1,编译也能通过!

       如果你的cuda版本高于.x,请修改zsh/bash指定版本,先执行,再添加到环境变量。

       在模型转换时,需要将mmdetection的_base_文件夹导入到mmdeploy的_base_中,将mmdetection的/config/rtmdet导入到mmdeploy的/config中,否则会找不到type。