You may want to check out the face detection approach described in this paper: Joint Cascade Face Detection and Alignment. ECCV 2014(http://www.jiansun.org/papers/ECCV14_JointCascade.pdf)
I'd also encourage you to try out the Face API from Microsoft (full disclosure, I work on it). One of the focuses is on improving detection when challenging lighting and occlusions are present: https://www.microsoft.com/cognitive-services/en-us/face-api