ZQCNN-v0.0是ZuoQing参照mini-caffe写的forward库,随便用用
我用的编程环境VS2015 with Update 3
2018-11-06日更新
(1)去掉layers里所有omp多线程的代码,计算量太小,速度比单线程更慢
(2)cblas_gemm可以选择MKL,不过3rdparty带的mkl在我机器上很慢,dll比较大,我没放在3rdparty\bin里,请从此处下载。
2018-10-30日更新2:MTCNN大图找小脸建议先用高斯滤波
2018-10-30日更新:BatchNorm的eps问题
(1)BatchNorm、BatchNormScale的默认eps都是0
(2)如果是用mxnet2zqcnn从mxnet转过来模型,转的过程中会把eps加到var上面当做新的var
(3)如果是从其他平台转过来模型,要么手工把eps加到var上面,要么在BatchNorm、BatchNormScale后面加上eps=?(?为该平台这个层的eps值)
注意:为了防止除0错,在除var的时候是这么计算的sqrt(__max(var+eps,1e-32)),也就是说如果var+eps小于1e-32,会与理论值略有不同。 不过今天修改之后下面几个人脸模型的LFW的精度反而与minicaffe的结果一模一样了。
2018-10-26日更新
MTCNN支持多线程,大图找小脸而且脸多的情况下,8线程可以取得单线程4倍以上效果,请用data\test2.jpg来测试
2018-10-15日更新
改进MTCNN的nms策略:1.每个scale的Pnet的nms的局部极大必须覆盖一定数量的非极大,数量在参数中设置; 2.当Pnet的分辨率太大时,nms进行分块处理。
2018-09-25日更新
支持insightface的GNAP,自动转模型使用mxnet2zqcnn,查看mxnet2zqcnn。可以试用MobileFaceNet-GNAP
2018-09-20日更新
(1)更新人脸识别模型tar-far精度的测试方法,可以按照步骤How-to-evaluate-TAR-FAR-on-your-dataset自行构造测试集测试模型精度。
(2)按照(1)我清洗CASIA-Webface构造了两个测试集webface1000X50、webface5000X20,并测试了我开源的几个主要人脸识别模型的精度。
2018-09-13日更新
(1)支持从内存加载模型
(2)增加编译配置ZQ_CNN_CompileConfig.h,可以选择是否使用_mm_fmadd_ps, _mm256_fmadd_ps (可以测一下速度看看到底快了还是慢了)。
2018-09-12日更新 利用insightface训练112*96(即sphereface的尺寸)步骤: InsightFace: how to train 112*96
2018-08-15日更新
(1)添加自然场景文本检测,模型从TextBoxes转过来的。我个人觉得速度太慢,而且准确度不高。
注意这个项目里用的PriorBoxLayer与SSD里的PriorBoxLayer是不同的,为了导出ZQCNN格式的权重我修改了deploy.prototxt保存为deploy_tmp.prototxt。 从此处下载模型。
(2)添加图片鉴黄,模型从open_nsfw转过来的,准确度高不高我也没测过。
从此处下载模型。
2018-08-10日更新
成功转了mxnet上的GenderAge-r50模型 以及Arcface-LResNet100E-IR,与转MobileFaceNet模型步骤一样。 查看mxnet2zqcnn
下面Model Zoo 有我转好的模型,比自动转出来的应该略快。
打开ZQCNN.sln运行SampleGenderAge查看效果。我E5-1650V4的CPU,单线程时间波动很大,均值约1900-2000ms,四线程400多ms。
2018-08-09日更新
添加mxnet2zqcnn,成功将mxnet上的MobileFaceNet转成ZQCNN格式(不能保证其他模型也能转成功,ZQCNN还不支持很多Layer)。查看mxnet2zqcnn
2018-08-07日更新
BUG修复:之前Convolution, DepthwiseConvolution, InnerProduct, BatchNormScale/Scale默认with_bias=true, 现在改成默认with_bias=false。也就是之前的代码无法加载不带bias的这几个Layer。
示例,如下这样一个Layer,以前会默认为有bias_term,现在默认没有bias_term
Convolution name=conv1 bottom=data top=conv1 num_output=10 kernel_size=3 stride=1
2018-08-06日更新
增加人脸识别在LFW数据库的精度测试。打开ZQlibFaceID.sln可以看到相关Project。
由于C++代码的计算精度与matlab略有差距,统计出的精度也有一些差别,但是相差在0.1%以内。
2018-08-03日更新
支持多线程(通过openmp加速)。请注意,目前多线程反而比单线程慢
2018-07-26日更新
支持MobileNet-SSD。caffemodel转我用的模型参考export_mobilenet_SSD_caffemodel_to_nchw_binary.m。需要编译出matcaffe才行。 你可以试试这个版本caffe-ZQ
2018-06-05日更新
跟上时代潮流、发布源码。 忘了说需要依赖openblas,我是直接用的mini-caffe里面的那个版本,自己编译出来的很慢。
人脸检测
MTCNN-author-version 从MTCNN转的格式
人脸识别(如无说明,模型都是ms1m-refine-v2训练的)
模型 | LFW精度(ZQCNN) | LFW精度(OpenCV3.4.2) | LFW精度(minicaffe) | 耗时 (ZQCNN) | 备注 |
---|---|---|---|---|---|
MobileFaceNet-res2-6-10-2-dim128 | 99.67%-99.55%(matlab crop), 99.72-99.60%(C++ crop) | 99.63%-99.65%(matlab crop), 99.68-99.70%(C++ crop) | 99.62%-99.65%(matlab crop), 99.68-99.60%(C++ crop) | 时间与dim256接近 | 网络结构与dim256一样,只不过输出维数不同 |
MobileFaceNet-res2-6-10-2-dim256 | 99.60%-99.60%(matlab crop), 99.62-99.62%(C++ crop) | 99.73%-99.68%(matlab crop), 99.78-99.68%(C++ crop) | 99.55%-99.63%(matlab crop), 99.60-99.62%(C++ crop) | 单线程约85ms,四线程约30ms, 3.6GHz | 网络结构在下载链接里,用faces_emore训练的 |
MobileFaceNet-res2-6-10-2-dim512 | 99.52%-99.60%(matlab crop), 99.63-99.72%(C++ crop) | 99.70%-99.67%(matlab crop), 99.77-99.77%(C++ crop) | 99.55%-99.62%(matlab crop), 99.62-99.68%(C++ crop) | 时间与dim256接近 | 网络结构与dim256一样,只不过输出维数不同。感谢moli训练此模型 |
模型 | LFW精度(ZQCNN) | LFW精度(OpenCV3.4.2) | LFW精度(minicaffe) | 耗时 (ZQCNN) | 备注 |
---|---|---|---|---|---|
MobileFaceNet-res4-8-16-4-dim128 | 99.72%-99.72%(matlab crop), 99.72-99.68%(C++ crop) | 99.82%-99.83%(matlab crop), 99.80-99.78%(C++ crop) | 99.72%-99.72%(matlab crop), 99.72-99.68%(C++ crop) | 时间与dim256接近 | 网络结构与dim256一样,只不过输出维数不同 |
MobileFaceNet-res4-8-16-4-dim256 | 99.78%-99.78%(matlab crop), 99.75-99.75%(C++ crop) | 99.82%-99.82%(matlab crop), 99.80-99.82%(C++ crop) | 99.78%-99.78%(matlab crop), 99.73-99.73%(C++ crop) | 单线程约135ms,四线程约42ms, 3.6GHz | 网络结构在下载链接里,用faces_emore训练的 |
MobileFaceNet-res4-8-16-4-dim512 | 99.80%-99.73%(matlab crop), 99.85-99.83%(C++ crop) | 99.83%-99.82%(matlab crop), 99.87-99.83%(C++ crop) | 99.80%-99.73%(matlab crop), 99.85-99.82%(C++ crop) | 时间与dim256接近 | 网络结构与dim256一样,只不过输出维数不同。感谢moli训练此模型 |
模型\测试集webface1000X50 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 | thresh@ FAR=1e-5 | TAR@ FAR=1e-5 |
---|---|---|---|---|---|---|
MobileFaceNet-res2-6-10-2-dim128 | 0.78785 | 9.274% | 0.66616 | 40.459% | 0.45855 | 92.716% |
MobileFaceNet-res2-6-10-2-dim256 | 0.77708 | 7.839% | 0.63872 | 40.934% | 0.43182 | 92.605% |
MobileFaceNet-res2-6-10-2-dim512 | 0.76699 | 8.197% | 0.63452 | 38.774% | 0.41572 | 93.000% |
MobileFaceNet-res4-8-16-4-dim128 | 0.79268 | 9.626% | 0.65770 | 48.252% | 0.45431 | 95.576% |
MobileFaceNet-res4-8-16-4-dim256 | 0.76858 | 9.220% | 0.62852 | 46.195% | 0.40010 | 96.929% |
MobileFaceNet-res4-8-16-4-dim512 | 0.76287 | 9.296% | 0.62555 | 44.775% | 0.39047 | 97.347% |
模型\测试集webface5000X20 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 | thresh@ FAR=1e-5 | TAR@ FAR=1e-5 |
---|---|---|---|---|---|---|
MobileFaceNet-res2-6-10-2-dim128 | 0.70933 | 29.558% | 0.51732 | 85.160% | 0.45108 | 94.313% |
MobileFaceNet-res2-6-10-2-dim256 | 0.68897 | 28.376% | 0.48820 | 85.278% | 0.42386 | 94.244% |
MobileFaceNet-res2-6-10-2-dim512 | 0.68126 | 27.708% | 0.47260 | 85.840% | 0.40727 | 94.632% |
MobileFaceNet-res4-8-16-4-dim128 | 0.71238 | 32.153% | 0.51391 | 89.525% | 0.44667 | 96.583% |
MobileFaceNet-res4-8-16-4-dim256 | 0.68490 | 30.639% | 0.46092 | 91.900% | 0.39198 | 97.696% |
MobileFaceNet-res4-8-16-4-dim512 | 0.67303 | 32.404% | 0.45216 | 92.453% | 0.38344 | 98.003% |
模型\测试集TAO ids:6606,ims:87210 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 | thresh@ FAR=1e-5 | TAR@ FAR=1e-5 |
---|---|---|---|---|---|---|
MobileFaceNet-res2-6-10-2-dim128 | 0.92204 | 01.282% | 0.88107 | 06.837% | 0.78302 | 41.740% |
MobileFaceNet-res2-6-10-2-dim256 | 0.91361 | 01.275% | 0.86750 | 07.081% | 0.76099 | 42.188% |
MobileFaceNet-res2-6-10-2-dim512 | 0.90657 | 01.448% | 0.86061 | 07.299% | 0.75488 | 41.956% |
MobileFaceNet-res4-8-16-4-dim128 | 0.92098 | 01.347% | 0.88233 | 06.795% | 0.78711 | 41.856% |
MobileFaceNet-res4-8-16-4-dim256 | 0.90862 | 01.376% | 0.86397 | 07.083% | 0.75975 | 42.430% |
MobileFaceNet-res4-8-16-4-dim512 | 0.90710 | 01.353% | 0.86190 | 06.948% | 0.75518 | 42.241% |
模型\测试集ZQCNN-Face_5000_X_20 | thresh@ FAR=1e-8 | TAR@ FAR=1e-8 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 |
---|---|---|---|---|---|---|
MobileFaceNet-GNAP | 0.73537 | 11.722% | 0.69903 | 20.110% | 0.65734 | 33.189% |
MobileFaceNet-res2-6-10-2-dim128 | 0.64772 | 40.527% | 0.60485 | 55.345% | 0.55571 | 70.986% |
MobileFaceNet-res2-6-10-2-dim256 | 0.61647 | 42.046% | 0.57561 | 55.801% | 0.52852 | 70.622% |
MobileFaceNet-res2-6-10-2-dim512 | 0.59725 | 44.651% | 0.55690 | 58.220% | 0.51134 | 72.294% |
MobileFaceNet-res4-8-16-4-dim128 | 0.64519 | 47.735% | 0.60247 | 62.882% | 0.55342 | 77.777% |
MobileFaceNet-res4-8-16-4-dim256 | 0.58229 | 56.977% | 0.54582 | 69.118% | 0.49763 | 82.161% |
MobileFaceNet-res4-8-16-4-dim512 | 0.58296 | 54.731% | 0.54219 | 68.613% | 0.49174 | 82.812% |
MobileFaceNet-res8-16-32-8-dim512 | 0.58058 | 61.826% | 0.53841 | 75.281% | 0.49098 | 86.554% |
模型\测试集ZQCNN-Face_5000_X_20 | thresh@ FAR=1e-8 | TAR@ FAR=1e-8 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 |
---|---|---|---|---|---|---|
ArcFace-r34-v2(非本人训练) | 0.61953 | 47.103% | 0.57375 | 62.207% | 0.52226 | 76.758% |
ArcFace-r50 (ms1m-refine-v1非本人训练) | 0.61299 | 50.594% | 0.56658 | 65.757% | 0.51637 | 79.207% |
ArcFace-r100 (非本人训练) | 0.57350 | 67.434% | 0.53136 | 79.944% | 0.48164 | 90.147% |
模型\测试集ZQCNN-Face_12000_X_10-40 | thresh@ FAR=1e-8 | TAR@ FAR=1e-8 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 |
---|---|---|---|---|---|---|
MobileFaceNet-res2-6-10-2-dim128 | 0.64507 | 39.100% | 0.60347 | 53.638% | 0.55492 | 69.516% |
MobileFaceNet-res2-6-10-2-dim256 | 0.61589 | 39.864% | 0.57402 | 54.179% | 0.52596 | 69.658% |
MobileFaceNet-res2-6-10-2-dim512 | 0.60030 | 41.309% | 0.55806 | 55.676% | 0.50984 | 70.979% |
MobileFaceNet-res4-8-16-4-dim128 | 0.64443 | 45.764% | 0.60060 | 61.564% | 0.55168 | 76.776% |
MobileFaceNet-res4-8-16-4-dim256 | 0.58879 | 52.542% | 0.54497 | 67.597% | 0.49547 | 81.495% |
MobileFaceNet-res4-8-16-4-dim512 | 0.58492 | 51.752% | 0.54085 | 67.104% | 0.49010 | 81.836% |
MobileFaceNet-res8-16-32-8-dim512 | 0.58119 | 61.412% | 0.53700 | 75.520% | 0.48997 | 86.647% |
模型\测试集ZQCNN-Face_12000_X_10-40 | thresh@ FAR=1e-8 | TAR@ FAR=1e-8 | thresh@ FAR=1e-7 | TAR@ FAR=1e-7 | thresh@ FAR=1e-6 | TAR@ FAR=1e-6 |
---|---|---|---|---|---|---|
ArcFace-r34-v2 (非本人训练) | 0.61904 | 45.072% | 0.57173 | 60.964% | 0.52062 | 75.789% |
ArcFace-r50(ms1m-refine-v1非本人训练) | 0.61412 | 48.155% | 0.56749 | 63.676% | 0.51537 | 78.138% |
ArcFace-r100 (非本人训练) | 0.57891 | 63.854% | 0.53337 | 78.129% | 0.48079 | 89.579% |
更多人脸模型请查看Model-Zoo-for-Face-Recognition
表情识别
FacialEmotion 七类表情用Fer2013训练
性别年龄识别
GenderAge-ZQ 使用train-GenderAge训练出来的模型
目标检测
MobileNetSSD 从MobileNet-SSD转的格式
MobileNetSSD-Mouth 用于SampleDetectMouth
文字检测
图片鉴黄
(4)向量点积的精度问题
(5)ZQCNN支持Depthwise Convolution并用mobilenet改了一把SphereFaceNet-10