Giter Site home page Giter Site logo

arcface-mindspore's Introduction

Arcface-mindspore

此项目为**科学技术大学图像测量技术课程的课程作业——使用mindspore框架复现论文。论文复现过程中参考了如下两个项目:

arcface Pytoch

arcface-mindspore

第一个是个人作者使用pytorch复现的论文,第二个是mindspore官方进行的复现。本想挑一篇没人用mindspore复现过的论文,可惜读论文前没有好好查找,复现debug时才发现了第二个连接,沉没成本过高,只好继续复现。

上面两个复现都非常精彩,尤其mindspore官方的复现,代码非常的工整,优雅。本人的复现就略显粗糙,这个项目的复现目的是尽可能的简单——如果有库,那么就用库,不行就重载,尽量少写自己的代码,尽可能追求一眼就能看出程序与论文对应关系、程序每个模块功能。在这样的思路指导下,项目的介绍展开如下。

Introdution

本项目实现了arcface的mindspore复现,在CASIA-maxpy-clean数据集上进行训练,在lfw数据集上进行验证。运行环境和平台为Ubuntu 20.04.5 LTS+Python3.9+mindspore1.9+CUDA11.1+3090。

复现思路

首先明确,Arcface的主要贡献在于设计了一种新的softmax函数——A-softmax。在pytorch中的交叉熵损失函数会自动对输入进行softmax,在mindspore中也有对应的模型。于是继承SoftmaxCrossEntropyWithLogits并重载construct,在使用softmax前按照论文方法对输入处理。于是Arcface的核心部分就完成了。

接下来是前面的特征提取网络和线性层。原文使用的是resnet,很明显,按照指导思路,这一块直接使用库函数就好。这一块直接复制官方复现中的resnet.py文件,稍作修改即可使用。(后来发现其实完全可以使用mindvision.classification.models模型库中的模型,但为了代码的可见性,还是保留原有方案。)

随后,写个类,在resnet后添加一个线性层,把resnet和线性层打包为一个网络。(记得归一化参数)

训练脚本中添加一些超参数、保存和加载路径。测试脚本直接使用了arcface Pytoch中的测试脚本,稍作修改,论文就复现完成了。

使用说明

文件目录如下:

.
├── data
│   ├── CASIA-maxpy-clean
|		├── 0000045
|       └── .... 
│   └── lfw
|       ├── lfw-align-128
|			├── Aaron_Eckhart
|           └── ....
|		└── lfw_test_pair.txt
├── ArcModel.py
├── A_softmax.py
├── Config.py
├── MyDataset.py
├── resnet.py
├── train.py
├── val.py
└── README.md

请下载CASIA-maxpy-clean并且解压到文件夹CASIA-maxpy-clean中。下载lfw数据集,并按照上面所示组织文件夹嵌套顺序。

  • train.py训练脚本,运行即可开始训练
  • val.py 测试脚本,运行即可测试
  • MyDataset.py数据集建立脚本
  • A_softmax.py 损失函数脚本
  • Config.py纯粹为了欺骗resnet.py,不过如果你使用resnet152或优化器Thor,记得进去把名字改了
  • resnet.py官方resnet复现

自测结果

使用3090对以resnet18和resnet50为backbone的模型,使用CASIA-maxpy-clean分别训练了75轮。使用参数为s=64,m=0.5,在lfw数据集上的测试结果如下:

backbone resnet18 resnet50
准确度 92.3% 87.7%

限于实验室计算资源,没有进一步调参与训练,模型理应当有更好效果。

loss 变化图

以resnet18为backbone的loss曲线图

以resnet50为backbone的loss曲线图

Dataset Download

CASIA-maxpy-cleanorCASIA-maxpy-clean

lfw,passward:b2ec

Reference

arcface Pytoch

arcface-mindspore

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.