# 复现算法实现 [](https://gitee.com/mindspore/docs/blob/r2.3.q1/docs/mindspore/source_zh_cn/migration_guide/reproducing_algorithm.md) ## 获取参考代码 我们拿到一篇论文,需要在MindSpore上进行迁移实现时,优先需要找到在其他框架已经实现好的参考代码,原则上这个参考代码需要符合以下要求中的至少一项: 1. 论文原作者开源的实现; 2. 大众普遍认可的实现(star数,fork数较多); 3. 比较新的代码,有开发者对代码进行维护; 4. 优先考虑PyTorch的参考代码。 如果参考项目中结果无法复现或者缺乏版本信息,可查看项目issue获取信息; 如果是全新的论文,无可参考实现,请参考[网络搭建对比](https://www.mindspore.cn/docs/zh-CN/r2.3.0rc1/migration_guide/model_development/model_development.html)进行开发。 ## 分析算法及网络结构 在阅读论文及参考代码时,首先需要分析网络结构,用以组织代码编写。比如下面是YOLOX的大致网络结构: | 模块 | 实现 | | ---- | ---- | | backbone | CSPDarknet(s,m,l,x等) | | neck | FPN | | head | Decoupled Head | 其次需要分析迁移算法的创新点,记录在训练过程中使用了哪些trick,如数据处理加了哪些数据增强,是否有shuffle,使用了什么优化器,学习率衰减策略,参数初始化方式等。可以整理一个checklist,在分析过程中可以填写相应项来记录。 比如这里记录了YOLOX网络在训练时使用的一些trick:
trick | 记录 |
---|---|
数据增强 | mosaic,包含随机缩放,随机剪裁,随机排布 |
MixUp | |
学习率衰减策略 | 多种衰减方式供选择,默认使用cos学习率衰减 |
优化器参数 | 带动量SGD momentum=0.9,nesterov=True,无weight decay |
训练参数 | epoch:300;batchsize:8 |
网络结构优化点 | Decoupled Head;Anchor Free;SimOTA |
训练流程优化点 | EMA;后15epoch不做数据增强;混合精度 |