Giter Site home page Giter Site logo

facenet-pytorch's Introduction

Facenet:人脸识别模型在Pytorch当中的实现


目录

  1. 仓库更新 Top News
  2. 相关仓库 Related code
  3. 性能情况 Performance
  4. 所需环境 Environment
  5. 注意事项 Attention
  6. 文件下载 Download
  7. 预测步骤 How2predict
  8. 训练步骤 How2train
  9. 参考资料 Reference

Top News

2022-03:进行了大幅度的更新,支持step、cos学习率下降法、支持adam、sgd优化器选择、支持学习率根据batch_size自适应调整。
BiliBili视频中的原仓库地址为:https://github.com/bubbliiiing/facenet-pytorch/tree/bilibili

2021-02:创建仓库,支持模型训练,大量的注释,多个可调整参数,lfw数据集评估等。

相关仓库

模型 路径
facenet https://github.com/bubbliiiing/facenet-pytorch
arcface https://github.com/bubbliiiing/arcface-pytorch
retinaface https://github.com/bubbliiiing/retinaface-pytorch
facenet + retinaface https://github.com/bubbliiiing/facenet-retinaface-pytorch

性能情况

训练数据集 权值文件名称 测试数据集 输入图片大小 accuracy
CASIA-WebFace facenet_mobilenet.pth LFW 160x160 98.23%
CASIA-WebFace facenet_inception_resnetv1.pth LFW 160x160 98.78%

所需环境

pytorch==1.2.0

文件下载

已经训练好的facenet_mobilenet.pth和facenet_inception_resnetv1.pth可以在百度网盘下载。
链接: https://pan.baidu.com/s/1K20hyxU_UgSej1eZWih0Ag 提取码:anv6

训练用的CASIA-WebFaces数据集以及评估用的LFW数据集可以在百度网盘下载。
链接: https://pan.baidu.com/s/1qMxFR8H_ih0xmY-rKgRejw 提取码: bcrq

预测步骤

a、使用预训练权重

  1. 下载完库后解压,在model_data文件夹里已经有了facenet_mobilenet.pth,可直接运行predict.py输入:
img\1_001.jpg
img\1_002.jpg
  1. 也可以在百度网盘下载facenet_inception_resnetv1.pth,放入model_data,修改facenet.py文件的model_path后,输入:
img\1_001.jpg
img\1_002.jpg

b、使用自己训练的权重

  1. 按照训练步骤训练。
  2. 在facenet.py文件里面,在如下部分修改model_path和backbone使其对应训练好的文件;model_path对应logs文件夹下面的权值文件,backbone对应主干特征提取网络
_defaults = {
    "model_path"    : "model_data/facenet_mobilenet.pth",
    "input_shape"   : (160, 160, 3),
    "backbone"      : "mobilenet",
    "cuda"          : True,
}
  1. 运行predict.py,输入
img\1_001.jpg
img\1_002.jpg

训练步骤

  1. 本文使用如下格式进行训练。
|-datasets
    |-people0
        |-123.jpg
        |-234.jpg
    |-people1
        |-345.jpg
        |-456.jpg
    |-...
  1. 下载好数据集,将训练用的CASIA-WebFaces数据集以及评估用的LFW数据集,解压后放在根目录。
  2. 在训练前利用txt_annotation.py文件生成对应的cls_train.txt。
  3. 利用train.py训练facenet模型,训练前,根据自己的需要选择backbone,model_path和backbone一定要对应。
  4. 运行train.py即可开始训练。

评估步骤

  1. 下载好评估数据集,将评估用的LFW数据集,解压后放在根目录
  2. 在eval_LFW.py设置使用的主干特征提取网络和网络权值。
  3. 运行eval_LFW.py来进行模型准确率评估。

Reference

https://github.com/davidsandberg/facenet
https://github.com/timesler/facenet-pytorch

facenet-pytorch's People

Contributors

bubbliiiing avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

facenet-pytorch's Issues

ValueError:

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (6000,) + inhomogeneous part.
请问大佬这个如何解决呀,翻b站评论区也有10位同学左右遇到这个问题 但似乎都没有解决方法

训练过程经常遇到BrokenPipeError: [Errno 32] Broken pipe

Epoch 1/100: 100%|██████████| 583/583 [07:36<00:00, 1.07it/s, accuracy=0.89, lr=0.01, total_CE_loss=9.02, total_triple_loss=0.101]Traceback (most recent call last):
File "/opt/vitis_ai/conda/envs/vitis-ai-optimizer_pytorch/lib/python3.7/multiprocessing/queues.py", line 242, in _feed
send_bytes(obj)
File "/opt/vitis_ai/conda/envs/vitis-ai-optimizer_pytorch/lib/python3.7/multiprocessing/connection.py", line 200, in send_bytes
self._send_bytes(m[offset:offset + size])
File "/opt/vitis_ai/conda/envs/vitis-ai-optimizer_pytorch/lib/python3.7/multiprocessing/connection.py", line 404, in _send_bytes
self._send(header + buf)
File "/opt/vitis_ai/conda/envs/vitis-ai-optimizer_pytorch/lib/python3.7/multiprocessing/connection.py", line 368, in _send
n = write(self._handle, buf)
BrokenPipeError: [Errno 32] Broken pipe

为什么训练时,在LFW数据集的得分一直是0.500000+-0.0000

开始进行LFW数据集的验证。
Epoch 11/100: 100%|██████████████████████| 15/15 [00:20<00:00, 1.34s/it, lr=0.000982, val_accuracy=0, val_total_CE_loss=9.22, val_total_triple_loss=0]
Finish Validation
LFW_Accuracy: 0.50000+-0.00000
Epoch:11/100
Total Loss: 9.1997

loss绘制和打开

B导大大我在训练时发现utils文件下定义的callback.p中看到定义的loss_history类中有进行plo对损失函数进行绘制即“epoch_loss.png”但在训练完成后的文件夹中没有发现这张图 还有就是模型训练完的loss要通过什么途径打开呢?
loss

训练epoch数

作者您好,请问您提供的几个权重大概都训练了多少个epoch呢,我训练了100个,精度还是91左右

训练特征提取层的问题

请问为什么训练的时候要加上分类的损失?直接用三元组损失训练可以吗?原版的facenet是如何训练的呢?

冻结训练

新修改的代码把冻结训练的提醒放在了注释里,想请问一下在样本量只有2W张的情况下,冻结训练必要吗?不冻结的话对最后的结果有没有影响。还有就是如果要冻结训练,应该怎么修改,看了注释也不是很明白,感谢大神的代码。

lfw数据集处理有什么区别? 精度目前97%

使用facenet_mobilenet.pth 在 LFW 数据集上,调整图片大小为 160x160 ,得到了0.97的精度,没有到| 98.23%,而在百度网盘提供的slfw数据上,精度可以到98%, 但是我看网页上提供的数据图片大小是96*112,请问下,LFW处理上应用什么其他方法吗?

Test Epoch: [5888/6000 (96%)]: : 24it [00:32, 1.34s/it]
Accuracy: 0.97383+-0.00675
Best_thresholds: 1.16000
Validation rate: 0.82100+-0.03127 @ FAR=0.00100

utils中的dataloader.py第十一行调用时报错

报错的代码段:from utils import cvtColor, preprocess_input, resize_image
错误是ImportError: cannot import name 'cvtColor' from 'utils' ,这三个函数是utils中定义的,问题汇总也看过了没有完全和我一样的错误,而且作为代码小白真的不知道怎么改,还请大大赐教

损失函数

你好,我想问一下,可以只使用triplet loss去训练网络吗,如果只使用triplet loss,那么准确率该如何计算呢?

eval_LFW验证精度问题

博主你好,我用的tag2.0的工程使用你提供的训练模型,在执行eval_LFW.py程序的时候,发现精度只有0.78,我看表格里写的是0.98,请问,这是什么原因?
Accuracy: 0.78083+-0.02031
Best_thresholds: 1.20000
Validation rate: 0.10367+-0.01567 @ FAR=0.00100

请教下关于dataloader的代码有一点不明白

我看到__getitem__每次都是随机抽取的,是不是有可能一个epoch里面可能会多次train到同一个人并且某些人可能没被train到,只能靠堆高epoch尽量cover到所有image?

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.