最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

AI

互联网 admin 18浏览 0评论

AI

face

  • 1. 资料
  • 2. insightface
    • 2.1 环境安装
    • 2.2 训练
      • 2.2.1 前处理
      • 2.2.2 打包
      • 2.2.3 训练
    • 2.3 运行
      • 2.3.1 face detect
      • 2.3.1 face detect

1. 资料

  1. MTCNN 检测人脸
  2. insightface人脸识别(mainly based on MXNet)
  3. convert mxnet to caffe

2. insightface

2.1 环境安装

  1. pip3:sudo apt install python3-pip
  2. numpy:pip3 install --user numpy scipy matplotlib
  3. pip install mxnet-cu101
    [1] cuda版本是10.1
  4. pip install opencv-python
  5. insightface下载

2.2 训练

2.2.1 前处理

  1. 基于检测网络检测对齐,如MTCNN
  2. 基于属性网络去除戴墨镜、口罩的
  3. 删除角度大于60度的
  4. 删除id文件数小于5的

2.2.2 打包

  1. mxnet框架中的脚本 im2rec.py
  2. 生成文件夹内的文件列表 (name.lst)
    (1) python im2rec.py --list --recursive name data_dir
  3. 生成二进制文件(name.rec, name.idx)
    (1) python im2rec.py name.lst data_dir

2.2.3 训练

  1. 修改文件配置信息 config.py,最基本的配置,可通过后续设置覆盖
config.bn_mom = 0.9 # 反向传播的momentum
config.workspace = 256 # mxnet需要的缓冲空间
config.emb_size = 512 #  输出特征向量的维度# False 保存fc参数,finetune时需要; True 不保存fc参数,最后阶段训练时可设置true
# False, 模型转换为caffe, 需要删除fc7; True, 不需要删除fc7
config.ckpt_embedding = Falseconfig.net_act = 'prelu'  # 'prelu' 加速时可改成relu,精度比prelu差些
config.val_targets = ['lfw', 'cfp_fp', 'agedb_30'] # 验证集,即.bin为后缀的文件, 开始训的时候添加, 稳定时可不加
config.ce_loss = True # Cross-Entropy loss,一种改进的交叉熵损失函数
config.fc7_lr_mult = 1.0 # 学习率的倍数
config.fc7_wd_mult = 1.0 # 权重刷衰减的倍数# BN融合这里不改, 直接在网络修改. 如果有bn层,加不加bias都一样,因为bn运算会把bias减掉
config.fc7_no_bias = True # False
config.data_rand_mirror = True # 数据随机进行镜像翻转
config.data_cutoff = False # 数据进行随机裁剪
config.data_color = 0 # 估计是数据进行彩色增强
config.count_flops = True # 是否计算一个网络占用的浮点数内存# 当 default.dataset = 'emore' 时使用,使用其他数据集对应设置,默认名字 train.rec, train.idx
dataset.emore.dataset_path = '/home/insightface/recognition/alg_test' # 数据打包生成的文件所在的目录, 分辨率必须匹配
dataset.emore.rec_name = 'data_addlist.rec'   # 打包生成的二进制文件名
dataset.emore.num_classes = 1193              # 数据集的id(类的个数: ls -l | wc -l)
dataset.emore.image_shape = (64,64,3)   # 根据模型输入分辨率修改default.network = 'r100'
default.pretrained = 'models/emore/model'        # model是文件前缀, 例如 model-002.json 
default.pretrained_epoch = 2 # 如果使用预训练模型, 需匹配预训练模型的 model-002.json default.dataset = 'emore' # default dataset
default.loss = 'arcface' # 外边传进来会覆盖
default.frequent = 20 # 每20个批次打印一次准确率等log
default.verbose = 2000 # 跑2000次迭代跑一次验证集
default.kvstore = 'device' #键值存储default.end_epoch = 10000 # 结束的epoch,1个epoch是所有图片训练完一轮,1 epoch 包含的迭代数是:总图片数/batch_size
default.lr = 0.01 # 初始学习率,从大到小测试,有预训练模型就小点,没有预训练模型就大点
default.wd = 0.0005
default.mom = 0.9
default.per_batch_size = 48 # 跑完所有的ID需要的batch次数(8的倍数 过大会报错:oom, 内存不足)
default.ckpt = 0
default.lr_steps = '100000,160000,220000'  # 降低学习率的epoch的地方
default.models_root = './models' # 模型保存的位置
  1. 模型输入尺寸发生修改,则修改文件symbol_utils.py修改
    (1)函数 get_fc1()内 elif fc_type == “GDC”: conv_6_dw = Linear(kernel)
       [1] 需要修改GDC的kernel, 保证最后FC层输出和特征值的维度一致
    (2)input:128 (88);input:64 (44);input:112 (7*7)

  2. 训练命令
    (1)大模型:CUDA_VISIBLE_DEVICES=‘0’ python -u train.py --network r100 --loss arcface --dataset emore
    (2)小模型:softmax + arcface
       [1] CUDA_VISIBLE_DEVICES=‘0’ python3 -u train.py --network y1 --loss softmax --dataset emore
       [2] CUDA_VISIBLE_DEVICES=‘0’ python3 -u train.py --network y1 --loss arcface --dataset emore
       [3] 当【1】loss 降得差不多, acc 较高, 达到收敛时训练【2】阶段,将【1】训出的模型作为【2】的预训练模型
    (3)备注
       [1] 下载开源的预训练模型需注意是否包含fc7层,需判断预训练模型输出的特征维度是否和我们选择的一致,不一致时需不包含fc7层的预训练模型。
    (4)BN融合需使用带bias的模型

步骤一  symbol_utils.py 修改(1) line 26 函数 Linear 将 no_bias=True 改为 false注释: Linear 是没有激活函数, 保持线性输入(2) 函数get_fc1()内GDC  小模型的FC层(mobilefacenet), 如果有no_bias 改为falsefc_type=='E'  大模型的FC层(resnet34), 如果有no_bias 改为false步骤二   fmobilefacenet.py 修改(1) Conv 函数, 卷积+BN+active(relu等)把 no_bias=True 改为 false(2) Linear 函数, 卷积+BN, 因为是线性的, 不需加激活函数把 no_bias=True 改为 false(3) ConvOnly 函数, 卷积把 no_bias=True 改为 false步骤三 执行命令
# 生成 bias 的模型, 产生一个模型文件就可以
CUDA_VISIBLE_DEVICES='0' python3 -u train.py --network y1 --loss softmax --dataset emore
  1. 损失函数
    (1)curricularface 损失函数 与 arcface平级
    (2)小模型:softmax loss + arcface loss/curricularface loss
    (3)大模型:arcface loss/curricularface loss
    (4)前提都需要预训练模型

2.3 运行

2.3.1 face detect

  1. thirdparty 环境安装
    pip install onnxruntime -i /
    pip install onnx -i /
    pip install tqdm
    pip install albumentations
    pip install cython
  1. insightface 安装
    cd ./insightface/python-package/insightface/thirdparty/face3d/mesh/cython
    python setup.py build_ext -i
  1. 执行脚本
import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image# Method-1, use FaceAnalysis
app = FaceAnalysis(allowed_modules=['detection']) # enable detection model only
#app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))# Method-2, load model directly
detector = insightface.model_zoo.get_model('your_detection_model.onnx')
detector.prepare(ctx_id=0, input_size=(640, 640))# t1.jpg,不用加.jpg; 图片path: ./insightface/python-package/insightface/data/images
img = ins_get_image('t1') 
faces = app.get(img)
print("faces info:\t", faces)
rimg = app.draw_on(img, faces)
cv2.imwrite("./ldh_output.jpg", rimg)

2.3.1 face detect

  1. 模型下载
    (1) model_zoo下载路径
    (2) buffalo_s模型下载
  1. sample code
import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_imageapp = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
img = ins_get_image('t1')
faces = app.get(img)handler = insightface.model_zoo.get_model('./models/w600k_mbf.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
handler.prepare(ctx_id=0)
img = ins_get_image('t1')
feature = handler.get(img, faces[0])
print("size of feature:", len(feature))
print("feature:", feature)

AI

face

  • 1. 资料
  • 2. insightface
    • 2.1 环境安装
    • 2.2 训练
      • 2.2.1 前处理
      • 2.2.2 打包
      • 2.2.3 训练
    • 2.3 运行
      • 2.3.1 face detect
      • 2.3.1 face detect

1. 资料

  1. MTCNN 检测人脸
  2. insightface人脸识别(mainly based on MXNet)
  3. convert mxnet to caffe

2. insightface

2.1 环境安装

  1. pip3:sudo apt install python3-pip
  2. numpy:pip3 install --user numpy scipy matplotlib
  3. pip install mxnet-cu101
    [1] cuda版本是10.1
  4. pip install opencv-python
  5. insightface下载

2.2 训练

2.2.1 前处理

  1. 基于检测网络检测对齐,如MTCNN
  2. 基于属性网络去除戴墨镜、口罩的
  3. 删除角度大于60度的
  4. 删除id文件数小于5的

2.2.2 打包

  1. mxnet框架中的脚本 im2rec.py
  2. 生成文件夹内的文件列表 (name.lst)
    (1) python im2rec.py --list --recursive name data_dir
  3. 生成二进制文件(name.rec, name.idx)
    (1) python im2rec.py name.lst data_dir

2.2.3 训练

  1. 修改文件配置信息 config.py,最基本的配置,可通过后续设置覆盖
config.bn_mom = 0.9 # 反向传播的momentum
config.workspace = 256 # mxnet需要的缓冲空间
config.emb_size = 512 #  输出特征向量的维度# False 保存fc参数,finetune时需要; True 不保存fc参数,最后阶段训练时可设置true
# False, 模型转换为caffe, 需要删除fc7; True, 不需要删除fc7
config.ckpt_embedding = Falseconfig.net_act = 'prelu'  # 'prelu' 加速时可改成relu,精度比prelu差些
config.val_targets = ['lfw', 'cfp_fp', 'agedb_30'] # 验证集,即.bin为后缀的文件, 开始训的时候添加, 稳定时可不加
config.ce_loss = True # Cross-Entropy loss,一种改进的交叉熵损失函数
config.fc7_lr_mult = 1.0 # 学习率的倍数
config.fc7_wd_mult = 1.0 # 权重刷衰减的倍数# BN融合这里不改, 直接在网络修改. 如果有bn层,加不加bias都一样,因为bn运算会把bias减掉
config.fc7_no_bias = True # False
config.data_rand_mirror = True # 数据随机进行镜像翻转
config.data_cutoff = False # 数据进行随机裁剪
config.data_color = 0 # 估计是数据进行彩色增强
config.count_flops = True # 是否计算一个网络占用的浮点数内存# 当 default.dataset = 'emore' 时使用,使用其他数据集对应设置,默认名字 train.rec, train.idx
dataset.emore.dataset_path = '/home/insightface/recognition/alg_test' # 数据打包生成的文件所在的目录, 分辨率必须匹配
dataset.emore.rec_name = 'data_addlist.rec'   # 打包生成的二进制文件名
dataset.emore.num_classes = 1193              # 数据集的id(类的个数: ls -l | wc -l)
dataset.emore.image_shape = (64,64,3)   # 根据模型输入分辨率修改default.network = 'r100'
default.pretrained = 'models/emore/model'        # model是文件前缀, 例如 model-002.json 
default.pretrained_epoch = 2 # 如果使用预训练模型, 需匹配预训练模型的 model-002.json default.dataset = 'emore' # default dataset
default.loss = 'arcface' # 外边传进来会覆盖
default.frequent = 20 # 每20个批次打印一次准确率等log
default.verbose = 2000 # 跑2000次迭代跑一次验证集
default.kvstore = 'device' #键值存储default.end_epoch = 10000 # 结束的epoch,1个epoch是所有图片训练完一轮,1 epoch 包含的迭代数是:总图片数/batch_size
default.lr = 0.01 # 初始学习率,从大到小测试,有预训练模型就小点,没有预训练模型就大点
default.wd = 0.0005
default.mom = 0.9
default.per_batch_size = 48 # 跑完所有的ID需要的batch次数(8的倍数 过大会报错:oom, 内存不足)
default.ckpt = 0
default.lr_steps = '100000,160000,220000'  # 降低学习率的epoch的地方
default.models_root = './models' # 模型保存的位置
  1. 模型输入尺寸发生修改,则修改文件symbol_utils.py修改
    (1)函数 get_fc1()内 elif fc_type == “GDC”: conv_6_dw = Linear(kernel)
       [1] 需要修改GDC的kernel, 保证最后FC层输出和特征值的维度一致
    (2)input:128 (88);input:64 (44);input:112 (7*7)

  2. 训练命令
    (1)大模型:CUDA_VISIBLE_DEVICES=‘0’ python -u train.py --network r100 --loss arcface --dataset emore
    (2)小模型:softmax + arcface
       [1] CUDA_VISIBLE_DEVICES=‘0’ python3 -u train.py --network y1 --loss softmax --dataset emore
       [2] CUDA_VISIBLE_DEVICES=‘0’ python3 -u train.py --network y1 --loss arcface --dataset emore
       [3] 当【1】loss 降得差不多, acc 较高, 达到收敛时训练【2】阶段,将【1】训出的模型作为【2】的预训练模型
    (3)备注
       [1] 下载开源的预训练模型需注意是否包含fc7层,需判断预训练模型输出的特征维度是否和我们选择的一致,不一致时需不包含fc7层的预训练模型。
    (4)BN融合需使用带bias的模型

步骤一  symbol_utils.py 修改(1) line 26 函数 Linear 将 no_bias=True 改为 false注释: Linear 是没有激活函数, 保持线性输入(2) 函数get_fc1()内GDC  小模型的FC层(mobilefacenet), 如果有no_bias 改为falsefc_type=='E'  大模型的FC层(resnet34), 如果有no_bias 改为false步骤二   fmobilefacenet.py 修改(1) Conv 函数, 卷积+BN+active(relu等)把 no_bias=True 改为 false(2) Linear 函数, 卷积+BN, 因为是线性的, 不需加激活函数把 no_bias=True 改为 false(3) ConvOnly 函数, 卷积把 no_bias=True 改为 false步骤三 执行命令
# 生成 bias 的模型, 产生一个模型文件就可以
CUDA_VISIBLE_DEVICES='0' python3 -u train.py --network y1 --loss softmax --dataset emore
  1. 损失函数
    (1)curricularface 损失函数 与 arcface平级
    (2)小模型:softmax loss + arcface loss/curricularface loss
    (3)大模型:arcface loss/curricularface loss
    (4)前提都需要预训练模型

2.3 运行

2.3.1 face detect

  1. thirdparty 环境安装
    pip install onnxruntime -i /
    pip install onnx -i /
    pip install tqdm
    pip install albumentations
    pip install cython
  1. insightface 安装
    cd ./insightface/python-package/insightface/thirdparty/face3d/mesh/cython
    python setup.py build_ext -i
  1. 执行脚本
import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image# Method-1, use FaceAnalysis
app = FaceAnalysis(allowed_modules=['detection']) # enable detection model only
#app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))# Method-2, load model directly
detector = insightface.model_zoo.get_model('your_detection_model.onnx')
detector.prepare(ctx_id=0, input_size=(640, 640))# t1.jpg,不用加.jpg; 图片path: ./insightface/python-package/insightface/data/images
img = ins_get_image('t1') 
faces = app.get(img)
print("faces info:\t", faces)
rimg = app.draw_on(img, faces)
cv2.imwrite("./ldh_output.jpg", rimg)

2.3.1 face detect

  1. 模型下载
    (1) model_zoo下载路径
    (2) buffalo_s模型下载
  1. sample code
import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_imageapp = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
img = ins_get_image('t1')
faces = app.get(img)handler = insightface.model_zoo.get_model('./models/w600k_mbf.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
handler.prepare(ctx_id=0)
img = ins_get_image('t1')
feature = handler.get(img, faces[0])
print("size of feature:", len(feature))
print("feature:", feature)
发布评论

评论列表 (0)

  1. 暂无评论