Giter VIP home page Giter VIP logo

retinaface's Introduction

RetinaFace C++ Reimplement

source

Reference resources RetinaFace in insightface with python code.

model transformation tool

MXNet2Caffe

you need to add some layers yourself, and in caffe there is not upsample,you can replace with deconvolution,and maybe slight accuracy loss.

the origin model reference from mobilenet25,and I have retrain it.

Demo

$ mkdir build
$ cd build/
$ cmake ../
$ make

you need to modify dependency path in CmakeList file.

Speed

test hardware:1080Ti

test1:

model speed input size preprocess time inference postprocess time
mxnet 44.8ms 1280x896 19.0ms 8.0ms 16.0ms
caffe 46.9ms 1280x896 5.8ms 24.1ms 16.0ms
tensorrt 29.3ms 1280x896 6.9ms 5.4ms 15.0ms

test2:

model speed inputsize preprocess time inference postprocess time
mxnet 6.4ms 320x416 1.3ms 0.1ms 4.2ms
caffe 30.8ms 320x416 1.2ms 27ms 2.3ms
tensorrt 4.7ms 320x416 0.7ms 1.9ms 1.8ms

tensorrt batch test:

batchsize inputsize maxbatchsize preprocess time inference postprocess time all GPU
1 448x448 8 1.0ms 2.3ms 2.6ms 6.7ms 35%
2 448x448 8 2.5ms 3.3ms 5.2ms 11.8ms 33%
4 448x448 8 4.1ms 4.6ms 10.0ms 21.8ms 28%
8 448x448 8 8.7ms 7.0ms 20.3ms 40.7ms 23%
16 448x448 32 28.1 14.7 38.7ms 92.0ms -
32 448x448 32 36.2ms 26.3 75.7ms 163.5ms -

note: batch size have some advantage in inference but can't speed up preprocess and postprocess.

optimize post process:

batchsize inputsize maxbatchsize preprocess time inference postprocess time all GPU
1 448x448 8 1.0ms 2.3ms 0.09ms 3.5ms 70%
2 448x448 8 2.2ms 2.8ms 0.2ms 5.3ms 60%
4 448x448 8 3.7ms 5.0ms 0.3ms 8.4ms 55%
8 448x448 8 7.5ms 6.5ms 0.67ms 14.9ms 50%
16 448x448 32 26ms 13ms 1.3ms 41ms 40%
32 448x448 32 32ms 22ms 2.7ms 56.6ms 50%

use nvidia npp library to speed up preprocess:

batchsize inputsize maxbatchsize preprocess time inference postprocess time all GPU
1 448x448 8 0.2ms 2.3ms 0.1ms 2.6ms 91%
2 448x448 8 0.3ms 3.0ms 0.2ms 3.5ms 85%
4 448x448 8 0.5ms 4.1ms 0.32ms 5.0ms 82%
8 448x448 8 1.2ms 6.3ms 0.77ms 8.3ms 79%
16 448x448 32 2.2ms 14ms 1.3ms 16.7ms 80%
32 448x448 32 5.0ms 22ms 2.8ms 29.3ms 77%

INT8 inference

INT8 calibration table can generate by INT8-Calibration-Tool.

Accuracy

https://raw.githubusercontent.com/clancylian/retinaface/master/data/retinaface-widerface%E6%B5%8B%E8%AF%95.png

retinaface's People

Contributors

clancylian 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  avatar  avatar  avatar  avatar  avatar  avatar

retinaface's Issues

Build instructions

Please provide some build instructions on Ubuntu 18.04.

  1. pre-requirements.
  2. Additional setup instructions to successfully run on NVIDIA GPU Ubuntu 18.04 machine

Build Error

Can you please guide me through this error, Thanks.

CMake Error: Files to be generated by multiple different commands: "path to dir_/build/CMakeFiles/retinaface.dir/retinaface/retinaface_generated_resizeconvertion.cu.o.cmake"

怎样才能把caffe模型修改成可以tensorRT的格式?

我用我自己训练的mxnet模型转换为caffe模型,结构和您提供的mnet-deconv-0517.prototxt有一些不一样。
用我自己的caffe模型转换的时候会报错:
Caffe Parser: Invalid axis in crop layer - only spatial cropping is supported

I got some poor result using default model

image
image


These pictures can not detect faces, also some tiny faces can not recognized either when test on videos.

Does any mistake on image preprocessing? or model not good enough? this shouldn't be retinaface performance.

Make Problem

$ mkdir build
$ cd build/
$ cmake ../
cmake的输出:
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Project: retinaFaceReImp
-- Project Directory: /data/yyh/RetinaFace_c++
-- Build Option: -std=c++11 -O2 -fomit-frame-pointer -g -Wall
-- Found OpenCV: /usr/local (found version "4.1.2")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found CUDA: /usr/local/cuda-10.1 (found version "10.1")
-- Build Option: -DUSE_TENSORRT
-- Build Option: -DUSE_NPP
-- Configuring done
-- Generating done
-- Build files have been written to: /data/yyh/RetinaFace_c++/build

这三步是成功了,但是make的时候出错了,错误如下:

[ 16%] Building NVCC (Device) object CMakeFiles/retinaface.dir/retinaface/retinaface_generated_resizeconvertion.cu.o
/data/yyh/RetinaFace_c++/./retinaface/resizeconvertion.cu(39): error: identifier "printf" is undefined

/data/yyh/RetinaFace_c++/./retinaface/resizeconvertion.cu(97): error: identifier "printf" is undefined

/data/yyh/RetinaFace_c++/./retinaface/resizeconvertion.cu(133): error: identifier "printf" is undefined

3 errors detected in the compilation of "/tmp/tmpxft_0002ba00_00000000-4_resizeconvertion.cpp4.ii".
CMake Error at retinaface_generated_resizeconvertion.cu.o.cmake:266 (message):
Error generating file
/data/yyh/RetinaFace_c++/build/CMakeFiles/retinaface.dir/retinaface/./retinaface_generated_resizeconvertion.cu.o

CMakeFiles/retinaface.dir/build.make:63: recipe for target 'CMakeFiles/retinaface.dir/retinaface/retinaface_generated_resizeconvertion.cu.o' failed
make[2]: *** [CMakeFiles/retinaface.dir/retinaface/retinaface_generated_resizeconvertion.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/retinaface.dir/all' failed
make[1]: *** [CMakeFiles/retinaface.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

resizeconvertion.cu

getting this error when make
.build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:640: recipe for target '.build_release/examples/mnist/convert_mnist_data.bin' failed make: *** [.build_release/examples/mnist/convert_mnist_data.bin] Error 1 make: *** Waiting for unfinished jobs.... .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:635: recipe for target '.build_release/tools/upgrade_net_proto_text.bin' failed make: *** [.build_release/tools/upgrade_net_proto_text.bin] Error 1 Makefile:635: recipe for target '.build_release/tools/upgrade_solver_proto_text.bin' failed make: *** [.build_release/tools/upgrade_solver_proto_text.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:635: recipe for target '.build_release/tools/upgrade_net_proto_binary.bin' failed make: *** [.build_release/tools/upgrade_net_proto_binary.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:635: recipe for target '.build_release/tools/compute_image_mean.bin' failed make: *** [.build_release/tools/compute_image_mean.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:635: recipe for target '.build_release/tools/convert_imageset.bin' failed make: *** [.build_release/tools/convert_imageset.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:640: recipe for target '.build_release/examples/siamese/convert_mnist_siamese_data.bin' failed make: *** [.build_release/examples/siamese/convert_mnist_siamese_data.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:635: recipe for target '.build_release/tools/extract_features.bin' failed make: *** [.build_release/tools/extract_features.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:635: recipe for target '.build_release/tools/caffe.bin' failed make: *** [.build_release/tools/caffe.bin] Error 1 .build_release/lib/libcaffe.so: undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' .build_release/lib/libcaffe.so: undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:640: recipe for target '.build_release/examples/cifar10/convert_cifar_data.bin' failed make: *** [.build_release/examples/cifar10/convert_cifar_data.bin] Error 1 .build_release/examples/cpp_classification/classification.o: In function `Classifier::Preprocess(cv::Mat const&, std::vector<cv::Mat, std::allocator<cv::Mat> >*)': classification.cpp:(.text+0x23d): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0x24d): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' classification.cpp:(.text+0x39d): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0x3ad): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' classification.cpp:(.text+0x49c): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0x4ad): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' classification.cpp:(.text+0x58e): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0x66b): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0x67c): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' classification.cpp:(.text+0x691): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' classification.cpp:(.text+0x6bc): undefined reference to `cv::split(cv::Mat const&, std::vector<cv::Mat, std::allocator<cv::Mat> >&)' classification.cpp:(.text+0xa61): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0xab3): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0xac3): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' classification.cpp:(.text+0xb3d): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0xb4d): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/examples/cpp_classification/classification.o: In function `Classifier::SetMean(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': classification.cpp:(.text+0x2ce8): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)' classification.cpp:(.text+0x2d00): undefined reference to `cv::merge(std::vector<cv::Mat, std::allocator<cv::Mat> > const&, cv::_OutputArray const&)' classification.cpp:(.text+0x2d15): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)' .build_release/lib/libcaffe.so: undefined reference to `vtable for cv::_InputArray' collect2: error: ld returned 1 exit status Makefile:640: recipe for target '.build_release/examples/cpp_classification/classification.bin' failed make: *** [.build_release/examples/cpp_classification/classification.bin] Error 1

如何换成896*1280的分辨率

您好,我测试了320320的输入,感觉还是比较准确。但是当我将prototxt里输入改成1280896之后,没有出来任何检测结果。请问如何将输入改到1280*896呢?谢谢整理和开源!

[OSX] make problems

Hi,
just wondering does this project support MacOS system? thank you. BTW, this is a great work!

retinaface res50 have alittle question

@clancylian
mobilenet is OK feature have a little not same

res50 model ,the Deconclution shape error
I should know modify the two layer?,
the crop param only inter.

layer {
bottom: "rf_c2_aggr_relu"
top: "rf_c2_upsampling"
name: "rf_c2_upsampling"
type: "Deconvolution"
convolution_param {
num_output: 64
kernel_size: 4
stride: 2
pad: 1
group: 64
bias_term: false
weight_filler: {
type: "bilinear"
}
}
}

layer {
bottom: "rf_c2_upsampling"
bottom: "rf_c1_red_conv_relu"
top: "crop1"
name: "crop1"
type: "Crop"
crop_param {
axis: 1
offset: 0
offset: 0
offset: 0
}
}

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.