Showing preview only (8,224K chars total). Download the full file or copy to clipboard to get everything.
Repository: taotaonice/FaceShifter
Branch: master
Commit: 376b09e4ecc9
Files: 53
Total size: 7.8 MB
Directory structure:
gitextract_gmaj5ee7/
├── acceleration/
│ ├── CMakeLists.txt
│ ├── cuda_kernels.cu
│ ├── cuda_kernels.hpp
│ └── cuda_postprocess.cpp
├── face_modules/
│ ├── .gitignore
│ ├── ReadMe.txt
│ ├── __init__.py
│ ├── infer_demo.py
│ ├── model.py
│ ├── mtcnn.py
│ ├── mtcnn_pytorch/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── caffe_models/
│ │ │ ├── det1.caffemodel
│ │ │ ├── det1.prototxt
│ │ │ ├── det2.caffemodel
│ │ │ ├── det2.prototxt
│ │ │ ├── det3.caffemodel
│ │ │ ├── det3.prototxt
│ │ │ ├── det4.caffemodel
│ │ │ └── det4.prototxt
│ │ ├── extract_weights_from_caffe_models.py
│ │ ├── get_aligned_face_from_mtcnn.ipynb
│ │ ├── refine_faces.ipynb
│ │ ├── src/
│ │ │ ├── __init__.py
│ │ │ ├── align_trans.py
│ │ │ ├── box_utils.py
│ │ │ ├── detector.py
│ │ │ ├── first_stage.py
│ │ │ ├── get_nets.py
│ │ │ ├── matlab_cp2tform.py
│ │ │ ├── visualization_utils.py
│ │ │ └── weights/
│ │ │ ├── onet.npy
│ │ │ ├── pnet.npy
│ │ │ └── rnet.npy
│ │ ├── test_on_images.ipynb
│ │ └── try_mtcnn_step_by_step.ipynb
│ └── preprocess_images.py
├── inference_demo.py
├── network/
│ ├── AADLayer.py
│ ├── AEI_Net.py
│ ├── HEAR_Net.py
│ ├── MultiscaleDiscriminator.py
│ └── __init__.py
├── online_preview.py
├── tmp_script/
│ ├── __init__.py
│ ├── check_arcface_feature_map.py
│ └── test_structure_AEI.py
├── train_AEI.py
├── train_HEAR.py
└── utils/
├── Dataset.py
├── download_vggface_dataset.py
└── split_hearnet_data.py
================================================
FILE CONTENTS
================================================
================================================
FILE: acceleration/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 2.8)
project(FaceShifter_Accelerations)
set(CMAKE_CXX_COMPILER /usr/bin/g++)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(pybind11 REQUIRED)
find_package(CUDA)
find_package(OpenCV)
include_directories(
/usr/local/cuda-10.1/include/
${OpenCV_INCLUDE_DIRS}
)
link_directories(
/usr/local/cuda-10.1/lib64/
)
cuda_add_library(culib SHARED cuda_kernels.cu)
pybind11_add_module(cuda_postprocess cuda_postprocess.cpp)
target_link_libraries(cuda_postprocess
culib
${OpenCV_LIBS}
)
================================================
FILE: acceleration/cuda_kernels.cu
================================================
#include "cuda_kernels.hpp"
__global__ void restore_kernel(uchar* ret, const float* Yst, const float* mask,
const uchar* Xt, const float* trans,
const int H, const int W, const int h, const int w) {
int tid = threadIdx.x + blockIdx.x*blockDim.x;
int offset = blockDim.x * gridDim.x;
while (tid < h * w) {
int x = tid % w;
int y = tid / w;
float sx = x*trans[0] + y*trans[1] + trans[2];
float sy = x*trans[3] + y*trans[4] + trans[5];
if (sx < 0 || sy < 0 || sx >= W-1 || sy >= H-1){
ret[tid*3+0] = Xt[tid*3+0];
ret[tid*3+1] = Xt[tid*3+1];
ret[tid*3+2] = Xt[tid*3+2];
tid += offset;
continue;
}
float xp = sx - (int)sx;
float yp = sy - (int)sy;
float color[3] = {0};
for(int i=0;i<3;i++){
float v = 0;
float a = Yst[i*H*W + int(sy)*W + (int)(sx)];
float b = Yst[i*H*W + int(sy)*W + (int)(sx+1)];
float c = Yst[i*H*W + int(sy+1)*W + (int)(sx)];
float d = Yst[i*H*W + int(sy+1)*W + (int)(sx+1)];
float x1 = a + (b-a)*xp; float x2 = c + (d-c)*xp;
v = x1 + (x2-x1)*yp;
color[i] = v * 0.5 + 0.5;
}
float alpha = 0;
{
float a = mask[(int)(sy)*W + (int)(sx)];
float b = mask[(int)(sy)*W + (int)(sx+1)];
float c = mask[(int)(sy+1)*W + (int)(sx)];
float d = mask[(int)(sy+1)*W + (int)(sx+1)];
float x1 = a + (b-a)*xp; float x2 = c + (d-c)*xp;
alpha = x1 + (x2-x1)*yp;
}
for(int i=0;i<3;i++){
float c = color[i]*255*alpha + Xt[tid*3+(i)]*(1-alpha);
c = c < 0 ? 0 : c;
c = c > 255 ? 255 : c;
ret[tid*3+i] = c;
}
tid += offset;
}
}
void restore_image(uchar* ret, const float* Yst, const float* mask, const uchar* Xt,
const float* trans, const int H, const int W, const int h, const int w) {
restore_kernel<<<1000, 64>>>(ret, Yst, mask, Xt, trans, H, W, h, w);
cudaThreadSynchronize();
}
================================================
FILE: acceleration/cuda_kernels.hpp
================================================
#ifndef CUDA_KERNELS_H
#define CUDA_KERNELS_H
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
typedef unsigned char uchar;
void restore_image(uchar*, const float*, const float*, const uchar*,
const float*, const int, const int, const int, const int);
#endif /* End of CUDA_KERNELS.H */
================================================
FILE: acceleration/cuda_postprocess.cpp
================================================
#include <iostream>
#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
#include <opencv2/opencv.hpp>
#include "cuda_kernels.hpp"
using std::cout;
using std::endl;
namespace py = pybind11;
using namespace std;
class CudaPostprocess{
public:
CudaPostprocess(int H, int W){
this->H = H;
this->W = W;
cudaMalloc((void**)&Yst_dev, H*W*3*sizeof(float));
cudaMalloc((void**)&mask_dev, H*W*sizeof(float));
cudaMalloc((void**)&trans_dev, 6*sizeof(float));
ret_dev = NULL;
Xt_raw_dev = NULL;
ret_size = 0;
}
py::array_t<uchar> restore(py::array_t<float, py::array::c_style|py::array::forcecast> Yst, py::array_t<float, py::array::c_style|py::array::forcecast> mask,
py::array_t<float, py::array::c_style|py::array::forcecast> trans, py::array_t<uchar, py::array::c_style|py::array::forcecast> Xt_raw, int h, int w) {
py::buffer_info Yst_buf = Yst.request();
float* Yst_ptr = (float*)Yst_buf.ptr;
py::buffer_info mask_buf = mask.request();
float* mask_ptr = (float*)mask_buf.ptr;
py::buffer_info Xt_buf = Xt_raw.request();
uchar* Xt_ptr = (uchar*)Xt_buf.ptr;
float* trans_ptr = (float*)trans.request().ptr;
if (h * w * 3 * sizeof(uchar) > ret_size){
if (ret_dev != NULL){
cudaFree(ret_dev);
cudaFree(Xt_raw_dev);
ret_dev = NULL;
Xt_raw_dev = NULL;
}
cudaMalloc((void**)&ret_dev, h*w*3*sizeof(uchar));
cudaMalloc((void**)&Xt_raw_dev, h*w*3*sizeof(uchar));
ret_size = h * w * 3 * sizeof(uchar);
}
cudaMemcpy(Yst_dev, Yst_ptr, H*W*3*sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(mask_dev, mask_ptr, H*W*sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(trans_dev, trans_ptr, 6*sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(Xt_raw_dev, Xt_ptr, h*w*3*sizeof(uchar), cudaMemcpyHostToDevice);
restore_image(ret_dev, Yst_dev, mask_dev, Xt_raw_dev, trans_dev, H, W, h, w);
auto ret = py::array_t<uchar>({h, w, 3});
py::buffer_info info = ret.request();
cudaMemcpy(info.ptr, ret_dev, h*w*3*sizeof(uchar), cudaMemcpyDeviceToHost);
return ret;
}
~CudaPostprocess(){
cudaFree(Yst_dev);
cudaFree(mask_dev);
cudaFree(trans_dev);
if (ret_dev != NULL)
cudaFree(ret_dev);
}
private:
float *Yst_dev, *mask_dev;
uchar *ret_dev;
uchar *Xt_raw_dev;
int ret_size;
float *trans_dev;
int H, W;
};
PYBIND11_MODULE(cuda_postprocess, m)
{
m.doc() = "FaceShifter postprocess accelerated by cuda";
py::class_<CudaPostprocess>(m, "CudaPostprocess")
.def(py::init<int, int>())
.def("restore", &CudaPostprocess::restore);
}
/* EOF */
================================================
FILE: face_modules/.gitignore
================================================
model_ir_se50.pth
libnvjpeg.cpython-36m-x86_64-linux-gnu.so
================================================
FILE: face_modules/ReadMe.txt
================================================
https://github.com/TreB1eN/InsightFace_Pytorch
================================================
FILE: face_modules/__init__.py
================================================
================================================
FILE: face_modules/infer_demo.py
================================================
import torch
from mtcnn import MTCNN
import cv2
import numpy as np
import PIL.Image as Image
from model import Backbone, Arcface, MobileFaceNet, Am_softmax, l2_norm
from torchvision import transforms as trans
device = torch.device('cuda:0')
mtcnn = MTCNN()
model = Backbone(50, 0.6, 'ir_se').to(device)
model.eval()
model.load_state_dict(torch.load('./model_ir_se50.pth'))
# threshold = 1.54
test_transform = trans.Compose([
trans.ToTensor(),
trans.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])
img = cv2.imread('/home/taotao/Downloads/celeba-512/000014.jpg.jpg')[:, :, ::-1]
bboxes, faces = mtcnn.align_multi(Image.fromarray(img), limit=10, min_face_size=30)
input = test_transform(faces[0]).unsqueeze(0)
embbed = model(input.cuda())
print(embbed.shape)
print(bboxes)
face = np.array(faces[0])[:,:,::-1]
cv2.imshow('', face)
cv2.waitKey(0)
================================================
FILE: face_modules/model.py
================================================
from torch.nn import Linear, Conv2d, BatchNorm1d, BatchNorm2d, PReLU, ReLU, Sigmoid, Dropout2d, Dropout, AvgPool2d, MaxPool2d, AdaptiveAvgPool2d, Sequential, Module, Parameter
import torch.nn.functional as F
import torch
from collections import namedtuple
import math
import pdb
################################## Original Arcface Model #############################################################
class Flatten(Module):
def forward(self, input):
return input.view(input.size(0), -1)
def l2_norm(input,axis=1):
norm = torch.norm(input,2,axis,True)
output = torch.div(input, norm)
return output
class SEModule(Module):
def __init__(self, channels, reduction):
super(SEModule, self).__init__()
self.avg_pool = AdaptiveAvgPool2d(1)
self.fc1 = Conv2d(
channels, channels // reduction, kernel_size=1, padding=0 ,bias=False)
self.relu = ReLU(inplace=True)
self.fc2 = Conv2d(
channels // reduction, channels, kernel_size=1, padding=0 ,bias=False)
self.sigmoid = Sigmoid()
def forward(self, x):
module_input = x
x = self.avg_pool(x)
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
x = self.sigmoid(x)
return module_input * x
class bottleneck_IR(Module):
def __init__(self, in_channel, depth, stride):
super(bottleneck_IR, self).__init__()
if in_channel == depth:
self.shortcut_layer = MaxPool2d(1, stride)
else:
self.shortcut_layer = Sequential(
Conv2d(in_channel, depth, (1, 1), stride ,bias=False), BatchNorm2d(depth))
self.res_layer = Sequential(
BatchNorm2d(in_channel),
Conv2d(in_channel, depth, (3, 3), (1, 1), 1 ,bias=False), PReLU(depth),
Conv2d(depth, depth, (3, 3), stride, 1 ,bias=False), BatchNorm2d(depth))
def forward(self, x):
shortcut = self.shortcut_layer(x)
res = self.res_layer(x)
return res + shortcut
class bottleneck_IR_SE(Module):
def __init__(self, in_channel, depth, stride):
super(bottleneck_IR_SE, self).__init__()
if in_channel == depth:
self.shortcut_layer = MaxPool2d(1, stride)
else:
self.shortcut_layer = Sequential(
Conv2d(in_channel, depth, (1, 1), stride ,bias=False),
BatchNorm2d(depth))
self.res_layer = Sequential(
BatchNorm2d(in_channel),
Conv2d(in_channel, depth, (3,3), (1,1),1 ,bias=False),
PReLU(depth),
Conv2d(depth, depth, (3,3), stride, 1 ,bias=False),
BatchNorm2d(depth),
SEModule(depth,16)
)
def forward(self,x):
shortcut = self.shortcut_layer(x)
res = self.res_layer(x)
return res + shortcut
class Bottleneck(namedtuple('Block', ['in_channel', 'depth', 'stride'])):
'''A named tuple describing a ResNet block.'''
def get_block(in_channel, depth, num_units, stride = 2):
return [Bottleneck(in_channel, depth, stride)] + [Bottleneck(depth, depth, 1) for i in range(num_units-1)]
def get_blocks(num_layers):
if num_layers == 50:
blocks = [
get_block(in_channel=64, depth=64, num_units = 3),
get_block(in_channel=64, depth=128, num_units=4),
get_block(in_channel=128, depth=256, num_units=14),
get_block(in_channel=256, depth=512, num_units=3)
]
elif num_layers == 100:
blocks = [
get_block(in_channel=64, depth=64, num_units=3),
get_block(in_channel=64, depth=128, num_units=13),
get_block(in_channel=128, depth=256, num_units=30),
get_block(in_channel=256, depth=512, num_units=3)
]
elif num_layers == 152:
blocks = [
get_block(in_channel=64, depth=64, num_units=3),
get_block(in_channel=64, depth=128, num_units=8),
get_block(in_channel=128, depth=256, num_units=36),
get_block(in_channel=256, depth=512, num_units=3)
]
return blocks
class Backbone(Module):
def __init__(self, num_layers, drop_ratio, mode='ir'):
super(Backbone, self).__init__()
assert num_layers in [50, 100, 152], 'num_layers should be 50,100, or 152'
assert mode in ['ir', 'ir_se'], 'mode should be ir or ir_se'
blocks = get_blocks(num_layers)
if mode == 'ir':
unit_module = bottleneck_IR
elif mode == 'ir_se':
unit_module = bottleneck_IR_SE
self.input_layer = Sequential(Conv2d(3, 64, (3, 3), 1, 1 ,bias=False),
BatchNorm2d(64),
PReLU(64))
self.output_layer = Sequential(BatchNorm2d(512),
Dropout(drop_ratio),
Flatten(),
Linear(512 * 7 * 7, 512),
BatchNorm1d(512))
# )
modules = []
for block in blocks:
for bottleneck in block:
modules.append(
unit_module(bottleneck.in_channel,
bottleneck.depth,
bottleneck.stride))
self.body = Sequential(*modules)
def forward(self,x):
feats = []
x = self.input_layer(x)
for m in self.body.children():
x = m(x)
feats.append(x)
# x = self.body(x)
x = self.output_layer(x)
return l2_norm(x), feats
# return x
################################## MobileFaceNet #############################################################
class Conv_block(Module):
def __init__(self, in_c, out_c, kernel=(1, 1), stride=(1, 1), padding=(0, 0), groups=1):
super(Conv_block, self).__init__()
self.conv = Conv2d(in_c, out_channels=out_c, kernel_size=kernel, groups=groups, stride=stride, padding=padding, bias=False)
self.bn = BatchNorm2d(out_c)
self.prelu = PReLU(out_c)
def forward(self, x):
x = self.conv(x)
x = self.bn(x)
x = self.prelu(x)
return x
class Linear_block(Module):
def __init__(self, in_c, out_c, kernel=(1, 1), stride=(1, 1), padding=(0, 0), groups=1):
super(Linear_block, self).__init__()
self.conv = Conv2d(in_c, out_channels=out_c, kernel_size=kernel, groups=groups, stride=stride, padding=padding, bias=False)
self.bn = BatchNorm2d(out_c)
def forward(self, x):
x = self.conv(x)
x = self.bn(x)
return x
class Depth_Wise(Module):
def __init__(self, in_c, out_c, residual = False, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=1):
super(Depth_Wise, self).__init__()
self.conv = Conv_block(in_c, out_c=groups, kernel=(1, 1), padding=(0, 0), stride=(1, 1))
self.conv_dw = Conv_block(groups, groups, groups=groups, kernel=kernel, padding=padding, stride=stride)
self.project = Linear_block(groups, out_c, kernel=(1, 1), padding=(0, 0), stride=(1, 1))
self.residual = residual
def forward(self, x):
if self.residual:
short_cut = x
x = self.conv(x)
x = self.conv_dw(x)
x = self.project(x)
if self.residual:
output = short_cut + x
else:
output = x
return output
class Residual(Module):
def __init__(self, c, num_block, groups, kernel=(3, 3), stride=(1, 1), padding=(1, 1)):
super(Residual, self).__init__()
modules = []
for _ in range(num_block):
modules.append(Depth_Wise(c, c, residual=True, kernel=kernel, padding=padding, stride=stride, groups=groups))
self.model = Sequential(*modules)
def forward(self, x):
return self.model(x)
class MobileFaceNet(Module):
def __init__(self, embedding_size):
super(MobileFaceNet, self).__init__()
self.conv1 = Conv_block(3, 64, kernel=(3, 3), stride=(2, 2), padding=(1, 1))
self.conv2_dw = Conv_block(64, 64, kernel=(3, 3), stride=(1, 1), padding=(1, 1), groups=64)
self.conv_23 = Depth_Wise(64, 64, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=128)
self.conv_3 = Residual(64, num_block=4, groups=128, kernel=(3, 3), stride=(1, 1), padding=(1, 1))
self.conv_34 = Depth_Wise(64, 128, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=256)
self.conv_4 = Residual(128, num_block=6, groups=256, kernel=(3, 3), stride=(1, 1), padding=(1, 1))
self.conv_45 = Depth_Wise(128, 128, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=512)
self.conv_5 = Residual(128, num_block=2, groups=256, kernel=(3, 3), stride=(1, 1), padding=(1, 1))
self.conv_6_sep = Conv_block(128, 512, kernel=(1, 1), stride=(1, 1), padding=(0, 0))
self.conv_6_dw = Linear_block(512, 512, groups=512, kernel=(7,7), stride=(1, 1), padding=(0, 0))
self.conv_6_flatten = Flatten()
self.linear = Linear(512, embedding_size, bias=False)
self.bn = BatchNorm1d(embedding_size)
def forward(self, x):
out = self.conv1(x)
out = self.conv2_dw(out)
out = self.conv_23(out)
out = self.conv_3(out)
out = self.conv_34(out)
out = self.conv_4(out)
out = self.conv_45(out)
out = self.conv_5(out)
out = self.conv_6_sep(out)
out = self.conv_6_dw(out)
out = self.conv_6_flatten(out)
out = self.linear(out)
out = self.bn(out)
return l2_norm(out)
################################## Arcface head #############################################################
class Arcface(Module):
# implementation of additive margin softmax loss in https://arxiv.org/abs/1801.05599
def __init__(self, embedding_size=512, classnum=51332, s=64., m=0.5):
super(Arcface, self).__init__()
self.classnum = classnum
self.kernel = Parameter(torch.Tensor(embedding_size,classnum))
# initial kernel
self.kernel.data.uniform_(-1, 1).renorm_(2,1,1e-5).mul_(1e5)
self.m = m # the margin value, default is 0.5
self.s = s # scalar value default is 64, see normface https://arxiv.org/abs/1704.06369
self.cos_m = math.cos(m)
self.sin_m = math.sin(m)
self.mm = self.sin_m * m # issue 1
self.threshold = math.cos(math.pi - m)
def forward(self, embbedings, label):
# weights norm
nB = len(embbedings)
kernel_norm = l2_norm(self.kernel,axis=0)
# cos(theta+m)
cos_theta = torch.mm(embbedings,kernel_norm)
# output = torch.mm(embbedings,kernel_norm)
cos_theta = cos_theta.clamp(-1,1) # for numerical stability
cos_theta_2 = torch.pow(cos_theta, 2)
sin_theta_2 = 1 - cos_theta_2
sin_theta = torch.sqrt(sin_theta_2)
cos_theta_m = (cos_theta * self.cos_m - sin_theta * self.sin_m)
# this condition controls the theta+m should in range [0, pi]
# 0<=theta+m<=pi
# -m<=theta<=pi-m
cond_v = cos_theta - self.threshold
cond_mask = cond_v <= 0
keep_val = (cos_theta - self.mm) # when theta not in [0,pi], use cosface instead
cos_theta_m[cond_mask] = keep_val[cond_mask]
output = cos_theta * 1.0 # a little bit hacky way to prevent in_place operation on cos_theta
idx_ = torch.arange(0, nB, dtype=torch.long)
output[idx_, label] = cos_theta_m[idx_, label]
output *= self.s # scale up in order to make softmax work, first introduced in normface
return output
################################## Cosface head #############################################################
class Am_softmax(Module):
# implementation of additive margin softmax loss in https://arxiv.org/abs/1801.05599
def __init__(self,embedding_size=512,classnum=51332):
super(Am_softmax, self).__init__()
self.classnum = classnum
self.kernel = Parameter(torch.Tensor(embedding_size,classnum))
# initial kernel
self.kernel.data.uniform_(-1, 1).renorm_(2,1,1e-5).mul_(1e5)
self.m = 0.35 # additive margin recommended by the paper
self.s = 30. # see normface https://arxiv.org/abs/1704.06369
def forward(self,embbedings,label):
kernel_norm = l2_norm(self.kernel,axis=0)
cos_theta = torch.mm(embbedings,kernel_norm)
cos_theta = cos_theta.clamp(-1,1) # for numerical stability
phi = cos_theta - self.m
label = label.view(-1,1) #size=(B,1)
index = cos_theta.data * 0.0 #size=(B,Classnum)
index.scatter_(1,label.data.view(-1,1),1)
index = index.byte()
output = cos_theta * 1.0
output[index] = phi[index] #only change the correct predicted output
output *= self.s # scale up in order to make softmax work, first introduced in normface
return output
================================================
FILE: face_modules/mtcnn.py
================================================
import numpy as np
import torch
from PIL import Image
from torch.autograd import Variable
from mtcnn_pytorch.src.get_nets import PNet, RNet, ONet
from mtcnn_pytorch.src.box_utils import nms, calibrate_box, get_image_boxes, convert_to_square
from mtcnn_pytorch.src.first_stage import run_first_stage
from mtcnn_pytorch.src.align_trans import get_reference_facial_points, warp_and_crop_face
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# device = 'cpu'
class MTCNN():
def __init__(self):
self.pnet = PNet().to(device)
self.rnet = RNet().to(device)
self.onet = ONet().to(device)
self.pnet.eval()
self.rnet.eval()
self.onet.eval()
self.refrence = get_reference_facial_points(default_square= True)
def align(self, img, crop_size=(112, 112), return_trans_inv=False):
_, landmarks = self.detect_faces(img)
if len(landmarks) == 0:
return None if not return_trans_inv else (None, None)
facial5points = [[landmarks[0][j],landmarks[0][j+5]] for j in range(5)]
warped_face = warp_and_crop_face(np.array(img), facial5points, self.refrence, crop_size=crop_size,
return_trans_inv=return_trans_inv)
if return_trans_inv:
return Image.fromarray(warped_face[0]), warped_face[1]
else:
return Image.fromarray(warped_face)
def align_fully(self, img, crop_size=(112, 112), return_trans_inv=False, ori=[0, 1, 3], fast_mode=True):
ori_size = img.copy()
h = img.size[1]
w = img.size[0]
sw = 320. if fast_mode else w
scale = sw / w
img = img.resize((int(w*scale), int(h*scale)))
candi = []
for i in ori:
if len(candi) > 0:
break
if i > 0:
rimg = img.transpose(i+1)
else:
rimg = img
box, landmarks = self.detect_faces(rimg, min_face_size=sw/10, thresholds=[0.6, 0.7, 0.7])
landmarks /= scale
if len(landmarks) == 0:
continue
if i == 0:
f5p = [[landmarks[0][j], landmarks[0][j + 5]] for j in range(5)]
elif i == 1:
f5p = [[w-1-landmarks[0][j+5], landmarks[0][j]] for j in range(5)]
elif i == 2:
f5p = [[w-1-landmarks[0][j], h-1-landmarks[0][j+5]] for j in range(5)]
elif i == 3:
f5p = [[landmarks[0][j + 5], h-1-landmarks[0][j]] for j in range(5)]
candi.append((box[0][4], f5p))
if len(candi) == 0:
return None if not return_trans_inv else (None, None)
while len(candi) > 1:
if candi[0][0] > candi[1][0]:
del candi[1]
else:
del candi[0]
facial5points = candi[0][1]
warped_face = warp_and_crop_face(np.array(ori_size), facial5points, self.refrence, crop_size=crop_size,
return_trans_inv=return_trans_inv)
if return_trans_inv:
return Image.fromarray(warped_face[0]), warped_face[1]
else:
return Image.fromarray(warped_face)
def align_multi(self, img, limit=None, min_face_size=64.0, crop_size=(112, 112)):
boxes, landmarks = self.detect_faces(img, min_face_size)
if len(landmarks) == 0:
return None
if limit:
boxes = boxes[:limit]
landmarks = landmarks[:limit]
faces = []
for landmark in landmarks:
facial5points = [[landmark[j],landmark[j+5]] for j in range(5)]
warped_face = warp_and_crop_face(np.array(img), facial5points, self.refrence, crop_size=crop_size)
faces.append(Image.fromarray(warped_face))
# return boxes, faces
return faces
def get_landmarks(self, img, min_face_size=32, crop_size=(256, 256), fast_mode=False, ori=[0,1,3]):
ori_size = img.copy()
h = img.size[1]
w = img.size[0]
sw = 640. if fast_mode else w
scale = sw / w
img = img.resize((int(w*scale), int(h*scale)))
min_face_size = min_face_size if not fast_mode else sw/20
candi = []
boxes = np.zeros([0, 5])
for i in ori:
if i > 0:
rimg = img.transpose(i+1)
else:
rimg = img
box, landmarks = self.detect_faces(rimg, min_face_size=min_face_size, thresholds=[0.6, 0.7, 0.7])
landmarks /= scale
if len(landmarks) == 0:
continue
if i == 0:
f5p = [[landmarks[0][j], landmarks[0][j + 5]] for j in range(5)]
elif i == 1:
f5p = [[w-1-landmarks[0][j+5], landmarks[0][j]] for j in range(5)]
x1 = w-1-box[:, 1]
y1 = box[:, 0]
x2 = w-1-box[:, 3]
y2 = box[:, 2]
box[:, :4] = np.stack((x2, y1, x1, y2), axis=1)
elif i == 2:
f5p = [[w-1-landmarks[0][j], h-1-landmarks[0][j+5]] for j in range(5)]
x1 = w-1-box[:, 0]
y1 = h-1-box[:, 1]
x2 = w-1-box[:, 2]
y2 = h-1-box[:, 3]
box[:, :4] = np.stack((x2, y2, x1, y1), axis=1)
elif i == 3:
f5p = [[landmarks[0][j + 5], h-1-landmarks[0][j]] for j in range(5)]
x1 = box[:, 1]
y1 = h-1-box[:, 0]
x2 = box[:, 3]
y2 = h-1-box[:, 2]
box[:, :4] = np.stack((x1, y2, x2, y1), axis=1)
candi.append(f5p)
boxes = np.concatenate((boxes, box), axis=0)
# pick = nms(boxes)
faces = []
for idx, facial5points in enumerate(candi):
# if idx not in pick:
# continue
warped_face = warp_and_crop_face(np.array(ori_size), facial5points, self.refrence, crop_size=crop_size,
return_trans_inv=False)
faces.append((warped_face, facial5points))
return faces
def detect_faces(self, image, min_face_size=64.0,
thresholds=[0.6, 0.7, 0.8],
nms_thresholds=[0.7, 0.7, 0.7]):
"""
Arguments:
image: an instance of PIL.Image.
min_face_size: a float number.
thresholds: a list of length 3.
nms_thresholds: a list of length 3.
Returns:
two float numpy arrays of shapes [n_boxes, 4] and [n_boxes, 10],
bounding boxes and facial landmarks.
"""
# BUILD AN IMAGE PYRAMID
width, height = image.size
min_length = min(height, width)
min_detection_size = 12
factor = 0.707 # sqrt(0.5)
# scales for scaling the image
scales = []
# scales the image so that
# minimum size that we can detect equals to
# minimum face size that we want to detect
m = min_detection_size/min_face_size
min_length *= m
factor_count = 0
while min_length > min_detection_size:
scales.append(m*factor**factor_count)
min_length *= factor
factor_count += 1
# STAGE 1
# it will be returned
bounding_boxes = []
with torch.no_grad():
# run P-Net on different scales
for s in scales:
boxes = run_first_stage(image, self.pnet, scale=s, threshold=thresholds[0])
bounding_boxes.append(boxes)
# collect boxes (and offsets, and scores) from different scales
bounding_boxes = [i for i in bounding_boxes if i is not None]
if len(bounding_boxes) == 0:
return np.zeros([0]), np.zeros([0])
bounding_boxes = np.vstack(bounding_boxes)
keep = nms(bounding_boxes[:, 0:5], nms_thresholds[0])
bounding_boxes = bounding_boxes[keep]
# use offsets predicted by pnet to transform bounding boxes
bounding_boxes = calibrate_box(bounding_boxes[:, 0:5], bounding_boxes[:, 5:])
# shape [n_boxes, 5]
bounding_boxes = convert_to_square(bounding_boxes)
bounding_boxes[:, 0:4] = np.round(bounding_boxes[:, 0:4])
# STAGE 2
img_boxes = get_image_boxes(bounding_boxes, image, size=24)
img_boxes = torch.FloatTensor(img_boxes).to(device)
output = self.rnet(img_boxes)
offsets = output[0].cpu().data.numpy() # shape [n_boxes, 4]
probs = output[1].cpu().data.numpy() # shape [n_boxes, 2]
keep = np.where(probs[:, 1] > thresholds[1])[0]
bounding_boxes = bounding_boxes[keep]
bounding_boxes[:, 4] = probs[keep, 1].reshape((-1,))
offsets = offsets[keep]
keep = nms(bounding_boxes, nms_thresholds[1])
bounding_boxes = bounding_boxes[keep]
bounding_boxes = calibrate_box(bounding_boxes, offsets[keep])
bounding_boxes = convert_to_square(bounding_boxes)
bounding_boxes[:, 0:4] = np.round(bounding_boxes[:, 0:4])
# STAGE 3
img_boxes = get_image_boxes(bounding_boxes, image, size=48)
if len(img_boxes) == 0:
return np.zeros([0]), np.zeros([0])
img_boxes = torch.FloatTensor(img_boxes).to(device)
output = self.onet(img_boxes)
landmarks = output[0].cpu().data.numpy() # shape [n_boxes, 10]
offsets = output[1].cpu().data.numpy() # shape [n_boxes, 4]
probs = output[2].cpu().data.numpy() # shape [n_boxes, 2]
keep = np.where(probs[:, 1] > thresholds[2])[0]
bounding_boxes = bounding_boxes[keep]
bounding_boxes[:, 4] = probs[keep, 1].reshape((-1,))
offsets = offsets[keep]
landmarks = landmarks[keep]
# compute landmark points
width = bounding_boxes[:, 2] - bounding_boxes[:, 0] + 1.0
height = bounding_boxes[:, 3] - bounding_boxes[:, 1] + 1.0
xmin, ymin = bounding_boxes[:, 0], bounding_boxes[:, 1]
landmarks[:, 0:5] = np.expand_dims(xmin, 1) + np.expand_dims(width, 1)*landmarks[:, 0:5]
landmarks[:, 5:10] = np.expand_dims(ymin, 1) + np.expand_dims(height, 1)*landmarks[:, 5:10]
bounding_boxes = calibrate_box(bounding_boxes, offsets)
keep = nms(bounding_boxes, nms_thresholds[2], mode='min')
bounding_boxes = bounding_boxes[keep]
landmarks = landmarks[keep]
return bounding_boxes, landmarks
================================================
FILE: face_modules/mtcnn_pytorch/.gitignore
================================================
.ipynb_checkpoints
__pycache__
================================================
FILE: face_modules/mtcnn_pytorch/LICENSE
================================================
MIT License
Copyright (c) 2017 Dan Antoshchenko
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: face_modules/mtcnn_pytorch/README.md
================================================
# MTCNN
`pytorch` implementation of **inference stage** of face detection algorithm described in
[Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks](https://arxiv.org/abs/1604.02878).
## Example

## How to use it
Just download the repository and then do this
```python
from src import detect_faces
from PIL import Image
image = Image.open('image.jpg')
bounding_boxes, landmarks = detect_faces(image)
```
For examples see `test_on_images.ipynb`.
## Requirements
* pytorch 0.2
* Pillow, numpy
## Credit
This implementation is heavily inspired by:
* [pangyupo/mxnet_mtcnn_face_detection](https://github.com/pangyupo/mxnet_mtcnn_face_detection)
================================================
FILE: face_modules/mtcnn_pytorch/caffe_models/det1.prototxt
================================================
name: "PNet"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 12
input_dim: 12
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 10
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "PReLU1"
type: "PReLU"
bottom: "conv1"
top: "conv1"
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 16
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "PReLU2"
type: "PReLU"
bottom: "conv2"
top: "conv2"
}
layer {
name: "conv3"
type: "Convolution"
bottom: "conv2"
top: "conv3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 32
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "PReLU3"
type: "PReLU"
bottom: "conv3"
top: "conv3"
}
layer {
name: "conv4-1"
type: "Convolution"
bottom: "conv3"
top: "conv4-1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 2
kernel_size: 1
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "conv4-2"
type: "Convolution"
bottom: "conv3"
top: "conv4-2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 4
kernel_size: 1
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prob1"
type: "Softmax"
bottom: "conv4-1"
top: "prob1"
}
================================================
FILE: face_modules/mtcnn_pytorch/caffe_models/det2.prototxt
================================================
name: "RNet"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 24
input_dim: 24
##########################
######################
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
convolution_param {
num_output: 28
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1"
type: "PReLU"
bottom: "conv1"
top: "conv1"
propagate_down: true
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
convolution_param {
num_output: 48
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2"
type: "PReLU"
bottom: "conv2"
top: "conv2"
propagate_down: true
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
####################################
##################################
layer {
name: "conv3"
type: "Convolution"
bottom: "pool2"
top: "conv3"
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
convolution_param {
num_output: 64
kernel_size: 2
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3"
type: "PReLU"
bottom: "conv3"
top: "conv3"
propagate_down: true
}
###############################
###############################
layer {
name: "conv4"
type: "InnerProduct"
bottom: "conv3"
top: "conv4"
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
inner_product_param {
num_output: 128
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4"
type: "PReLU"
bottom: "conv4"
top: "conv4"
}
layer {
name: "conv5-1"
type: "InnerProduct"
bottom: "conv4"
top: "conv5-1"
param {
lr_mult: 0
decay_mult: 0
}
param {
lr_mult: 0
decay_mult: 0
}
inner_product_param {
num_output: 2
#kernel_size: 1
#stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "conv5-2"
type: "InnerProduct"
bottom: "conv4"
top: "conv5-2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 4
#kernel_size: 1
#stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prob1"
type: "Softmax"
bottom: "conv5-1"
top: "prob1"
}
================================================
FILE: face_modules/mtcnn_pytorch/caffe_models/det3.prototxt
================================================
name: "ONet"
input: "data"
input_dim: 1
input_dim: 3
input_dim: 48
input_dim: 48
##################################
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 32
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1"
type: "PReLU"
bottom: "conv1"
top: "conv1"
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2"
type: "Convolution"
bottom: "pool1"
top: "conv2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2"
type: "PReLU"
bottom: "conv2"
top: "conv2"
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv3"
type: "Convolution"
bottom: "pool2"
top: "conv3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 3
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3"
type: "PReLU"
bottom: "conv3"
top: "conv3"
}
layer {
name: "pool3"
type: "Pooling"
bottom: "conv3"
top: "pool3"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv4"
type: "Convolution"
bottom: "pool3"
top: "conv4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 128
kernel_size: 2
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4"
type: "PReLU"
bottom: "conv4"
top: "conv4"
}
layer {
name: "conv5"
type: "InnerProduct"
bottom: "conv4"
top: "conv5"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
#kernel_size: 3
num_output: 256
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "drop5"
type: "Dropout"
bottom: "conv5"
top: "conv5"
dropout_param {
dropout_ratio: 0.25
}
}
layer {
name: "prelu5"
type: "PReLU"
bottom: "conv5"
top: "conv5"
}
layer {
name: "conv6-1"
type: "InnerProduct"
bottom: "conv5"
top: "conv6-1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
#kernel_size: 1
num_output: 2
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "conv6-2"
type: "InnerProduct"
bottom: "conv5"
top: "conv6-2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
#kernel_size: 1
num_output: 4
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "conv6-3"
type: "InnerProduct"
bottom: "conv5"
top: "conv6-3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
#kernel_size: 1
num_output: 10
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prob1"
type: "Softmax"
bottom: "conv6-1"
top: "prob1"
}
================================================
FILE: face_modules/mtcnn_pytorch/caffe_models/det4.prototxt
================================================
name: "LNet"
input: "data"
input_dim: 1
input_dim: 15
input_dim: 24
input_dim: 24
layer {
name: "slicer_data"
type: "Slice"
bottom: "data"
top: "data241"
top: "data242"
top: "data243"
top: "data244"
top: "data245"
slice_param {
axis: 1
slice_point: 3
slice_point: 6
slice_point: 9
slice_point: 12
}
}
layer {
name: "conv1_1"
type: "Convolution"
bottom: "data241"
top: "conv1_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 28
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1_1"
type: "PReLU"
bottom: "conv1_1"
top: "conv1_1"
}
layer {
name: "pool1_1"
type: "Pooling"
bottom: "conv1_1"
top: "pool1_1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2_1"
type: "Convolution"
bottom: "pool1_1"
top: "conv2_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 48
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2_1"
type: "PReLU"
bottom: "conv2_1"
top: "conv2_1"
}
layer {
name: "pool2_1"
type: "Pooling"
bottom: "conv2_1"
top: "pool2_1"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv3_1"
type: "Convolution"
bottom: "pool2_1"
top: "conv3_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 2
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3_1"
type: "PReLU"
bottom: "conv3_1"
top: "conv3_1"
}
##########################
layer {
name: "conv1_2"
type: "Convolution"
bottom: "data242"
top: "conv1_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 28
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1_2"
type: "PReLU"
bottom: "conv1_2"
top: "conv1_2"
}
layer {
name: "pool1_2"
type: "Pooling"
bottom: "conv1_2"
top: "pool1_2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2_2"
type: "Convolution"
bottom: "pool1_2"
top: "conv2_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 48
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2_2"
type: "PReLU"
bottom: "conv2_2"
top: "conv2_2"
}
layer {
name: "pool2_2"
type: "Pooling"
bottom: "conv2_2"
top: "pool2_2"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv3_2"
type: "Convolution"
bottom: "pool2_2"
top: "conv3_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 2
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3_2"
type: "PReLU"
bottom: "conv3_2"
top: "conv3_2"
}
##########################
##########################
layer {
name: "conv1_3"
type: "Convolution"
bottom: "data243"
top: "conv1_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 28
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1_3"
type: "PReLU"
bottom: "conv1_3"
top: "conv1_3"
}
layer {
name: "pool1_3"
type: "Pooling"
bottom: "conv1_3"
top: "pool1_3"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2_3"
type: "Convolution"
bottom: "pool1_3"
top: "conv2_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 48
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2_3"
type: "PReLU"
bottom: "conv2_3"
top: "conv2_3"
}
layer {
name: "pool2_3"
type: "Pooling"
bottom: "conv2_3"
top: "pool2_3"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv3_3"
type: "Convolution"
bottom: "pool2_3"
top: "conv3_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 2
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3_3"
type: "PReLU"
bottom: "conv3_3"
top: "conv3_3"
}
##########################
##########################
layer {
name: "conv1_4"
type: "Convolution"
bottom: "data244"
top: "conv1_4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 28
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1_4"
type: "PReLU"
bottom: "conv1_4"
top: "conv1_4"
}
layer {
name: "pool1_4"
type: "Pooling"
bottom: "conv1_4"
top: "pool1_4"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2_4"
type: "Convolution"
bottom: "pool1_4"
top: "conv2_4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 48
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2_4"
type: "PReLU"
bottom: "conv2_4"
top: "conv2_4"
}
layer {
name: "pool2_4"
type: "Pooling"
bottom: "conv2_4"
top: "pool2_4"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv3_4"
type: "Convolution"
bottom: "pool2_4"
top: "conv3_4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 2
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3_4"
type: "PReLU"
bottom: "conv3_4"
top: "conv3_4"
}
##########################
##########################
layer {
name: "conv1_5"
type: "Convolution"
bottom: "data245"
top: "conv1_5"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 28
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu1_5"
type: "PReLU"
bottom: "conv1_5"
top: "conv1_5"
}
layer {
name: "pool1_5"
type: "Pooling"
bottom: "conv1_5"
top: "pool1_5"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv2_5"
type: "Convolution"
bottom: "pool1_5"
top: "conv2_5"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 48
kernel_size: 3
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu2_5"
type: "PReLU"
bottom: "conv2_5"
top: "conv2_5"
}
layer {
name: "pool2_5"
type: "Pooling"
bottom: "conv2_5"
top: "pool2_5"
pooling_param {
pool: MAX
kernel_size: 3
stride: 2
}
}
layer {
name: "conv3_5"
type: "Convolution"
bottom: "pool2_5"
top: "conv3_5"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
convolution_param {
num_output: 64
kernel_size: 2
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu3_5"
type: "PReLU"
bottom: "conv3_5"
top: "conv3_5"
}
##########################
layer {
name: "concat"
bottom: "conv3_1"
bottom: "conv3_2"
bottom: "conv3_3"
bottom: "conv3_4"
bottom: "conv3_5"
top: "conv3"
type: "Concat"
concat_param {
axis: 1
}
}
##########################
layer {
name: "fc4"
type: "InnerProduct"
bottom: "conv3"
top: "fc4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 256
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4"
type: "PReLU"
bottom: "fc4"
top: "fc4"
}
############################
layer {
name: "fc4_1"
type: "InnerProduct"
bottom: "fc4"
top: "fc4_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 64
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4_1"
type: "PReLU"
bottom: "fc4_1"
top: "fc4_1"
}
layer {
name: "fc5_1"
type: "InnerProduct"
bottom: "fc4_1"
top: "fc5_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 2
weight_filler {
type: "xavier"
#type: "constant"
#value: 0
}
bias_filler {
type: "constant"
value: 0
}
}
}
#########################
layer {
name: "fc4_2"
type: "InnerProduct"
bottom: "fc4"
top: "fc4_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 64
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4_2"
type: "PReLU"
bottom: "fc4_2"
top: "fc4_2"
}
layer {
name: "fc5_2"
type: "InnerProduct"
bottom: "fc4_2"
top: "fc5_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 2
weight_filler {
type: "xavier"
#type: "constant"
#value: 0
}
bias_filler {
type: "constant"
value: 0
}
}
}
#########################
layer {
name: "fc4_3"
type: "InnerProduct"
bottom: "fc4"
top: "fc4_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 64
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4_3"
type: "PReLU"
bottom: "fc4_3"
top: "fc4_3"
}
layer {
name: "fc5_3"
type: "InnerProduct"
bottom: "fc4_3"
top: "fc5_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 2
weight_filler {
type: "xavier"
#type: "constant"
#value: 0
}
bias_filler {
type: "constant"
value: 0
}
}
}
#########################
layer {
name: "fc4_4"
type: "InnerProduct"
bottom: "fc4"
top: "fc4_4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 64
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4_4"
type: "PReLU"
bottom: "fc4_4"
top: "fc4_4"
}
layer {
name: "fc5_4"
type: "InnerProduct"
bottom: "fc4_4"
top: "fc5_4"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 2
weight_filler {
type: "xavier"
#type: "constant"
#value: 0
}
bias_filler {
type: "constant"
value: 0
}
}
}
#########################
layer {
name: "fc4_5"
type: "InnerProduct"
bottom: "fc4"
top: "fc4_5"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 64
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "prelu4_5"
type: "PReLU"
bottom: "fc4_5"
top: "fc4_5"
}
layer {
name: "fc5_5"
type: "InnerProduct"
bottom: "fc4_5"
top: "fc5_5"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 1
}
inner_product_param {
num_output: 2
weight_filler {
type: "xavier"
#type: "constant"
#value: 0
}
bias_filler {
type: "constant"
value: 0
}
}
}
#########################
================================================
FILE: face_modules/mtcnn_pytorch/extract_weights_from_caffe_models.py
================================================
import caffe
import numpy as np
"""
The purpose of this script is to convert pretrained weights taken from
official implementation here:
https://github.com/kpzhang93/MTCNN_face_detection_alignment/tree/master/code/codes/MTCNNv2
to required format.
In a nutshell, it just renames and transposes some of the weights.
You don't have to use this script because weights are already in `src/weights`.
"""
def get_all_weights(net):
all_weights = {}
for p in net.params:
if 'conv' in p:
name = 'features.' + p
if '-' in p:
s = list(p)
s[-2] = '_'
s = ''.join(s)
all_weights[s + '.weight'] = net.params[p][0].data
all_weights[s + '.bias'] = net.params[p][1].data
elif len(net.params[p][0].data.shape) == 4:
all_weights[name + '.weight'] = net.params[p][0].data.transpose((0, 1, 3, 2))
all_weights[name + '.bias'] = net.params[p][1].data
else:
all_weights[name + '.weight'] = net.params[p][0].data
all_weights[name + '.bias'] = net.params[p][1].data
elif 'prelu' in p.lower():
all_weights['features.' + p.lower() + '.weight'] = net.params[p][0].data
return all_weights
# P-Net
net = caffe.Net('caffe_models/det1.prototxt', 'caffe_models/det1.caffemodel', caffe.TEST)
np.save('src/weights/pnet.npy', get_all_weights(net))
# R-Net
net = caffe.Net('caffe_models/det2.prototxt', 'caffe_models/det2.caffemodel', caffe.TEST)
np.save('src/weights/rnet.npy', get_all_weights(net))
# O-Net
net = caffe.Net('caffe_models/det3.prototxt', 'caffe_models/det3.caffemodel', caffe.TEST)
np.save('src/weights/onet.npy', get_all_weights(net))
================================================
FILE: face_modules/mtcnn_pytorch/get_aligned_face_from_mtcnn.ipynb
================================================
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2018-07-17T15:57:52.964962Z",
"start_time": "2018-07-17T15:57:52.733030Z"
}
},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"from src import detect_faces, show_bboxes\n",
"from PIL import Image\n",
"import cv2\n",
"import numpy as np\n",
"from src.align_trans import get_reference_facial_points, warp_and_crop_face"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"ExecuteTime": {
"end_time": "2018-07-17T16:19:04.738385Z",
"start_time": "2018-07-17T16:19:04.722491Z"
}
},
"outputs": [],
"source": [
"img = Image.open('images/jf.jpg')"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"ExecuteTime": {
"end_time": "2018-07-17T16:19:05.404315Z",
"start_time": "2018-07-17T16:19:05.386648Z"
}
},
"outputs": [],
"source": [
"img_cv2 = np.array(img)[...,::-1]"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"ExecuteTime": {
"end_time": "2018-07-17T16:19:06.526587Z",
"start_time": "2018-07-17T16:19:06.471323Z"
}
},
"outputs": [
{
"data": {
"image/png": "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
gitextract_gmaj5ee7/
├── acceleration/
│ ├── CMakeLists.txt
│ ├── cuda_kernels.cu
│ ├── cuda_kernels.hpp
│ └── cuda_postprocess.cpp
├── face_modules/
│ ├── .gitignore
│ ├── ReadMe.txt
│ ├── __init__.py
│ ├── infer_demo.py
│ ├── model.py
│ ├── mtcnn.py
│ ├── mtcnn_pytorch/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── caffe_models/
│ │ │ ├── det1.caffemodel
│ │ │ ├── det1.prototxt
│ │ │ ├── det2.caffemodel
│ │ │ ├── det2.prototxt
│ │ │ ├── det3.caffemodel
│ │ │ ├── det3.prototxt
│ │ │ ├── det4.caffemodel
│ │ │ └── det4.prototxt
│ │ ├── extract_weights_from_caffe_models.py
│ │ ├── get_aligned_face_from_mtcnn.ipynb
│ │ ├── refine_faces.ipynb
│ │ ├── src/
│ │ │ ├── __init__.py
│ │ │ ├── align_trans.py
│ │ │ ├── box_utils.py
│ │ │ ├── detector.py
│ │ │ ├── first_stage.py
│ │ │ ├── get_nets.py
│ │ │ ├── matlab_cp2tform.py
│ │ │ ├── visualization_utils.py
│ │ │ └── weights/
│ │ │ ├── onet.npy
│ │ │ ├── pnet.npy
│ │ │ └── rnet.npy
│ │ ├── test_on_images.ipynb
│ │ └── try_mtcnn_step_by_step.ipynb
│ └── preprocess_images.py
├── inference_demo.py
├── network/
│ ├── AADLayer.py
│ ├── AEI_Net.py
│ ├── HEAR_Net.py
│ ├── MultiscaleDiscriminator.py
│ └── __init__.py
├── online_preview.py
├── tmp_script/
│ ├── __init__.py
│ ├── check_arcface_feature_map.py
│ └── test_structure_AEI.py
├── train_AEI.py
├── train_HEAR.py
└── utils/
├── Dataset.py
├── download_vggface_dataset.py
└── split_hearnet_data.py
SYMBOL INDEX (146 symbols across 22 files)
FILE: acceleration/cuda_postprocess.cpp
class CudaPostprocess (line 13) | class CudaPostprocess{
method CudaPostprocess (line 15) | CudaPostprocess(int H, int W){
method restore (line 25) | py::array_t<uchar> restore(py::array_t<float, py::array::c_style|py::a...
function PYBIND11_MODULE (line 78) | PYBIND11_MODULE(cuda_postprocess, m)
FILE: face_modules/model.py
class Flatten (line 10) | class Flatten(Module):
method forward (line 11) | def forward(self, input):
function l2_norm (line 14) | def l2_norm(input,axis=1):
class SEModule (line 19) | class SEModule(Module):
method __init__ (line 20) | def __init__(self, channels, reduction):
method forward (line 30) | def forward(self, x):
class bottleneck_IR (line 39) | class bottleneck_IR(Module):
method __init__ (line 40) | def __init__(self, in_channel, depth, stride):
method forward (line 52) | def forward(self, x):
class bottleneck_IR_SE (line 57) | class bottleneck_IR_SE(Module):
method __init__ (line 58) | def __init__(self, in_channel, depth, stride):
method forward (line 74) | def forward(self,x):
class Bottleneck (line 79) | class Bottleneck(namedtuple('Block', ['in_channel', 'depth', 'stride'])):
function get_block (line 82) | def get_block(in_channel, depth, num_units, stride = 2):
function get_blocks (line 85) | def get_blocks(num_layers):
class Backbone (line 109) | class Backbone(Module):
method __init__ (line 110) | def __init__(self, num_layers, drop_ratio, mode='ir'):
method forward (line 137) | def forward(self,x):
class Conv_block (line 150) | class Conv_block(Module):
method __init__ (line 151) | def __init__(self, in_c, out_c, kernel=(1, 1), stride=(1, 1), padding=...
method forward (line 156) | def forward(self, x):
class Linear_block (line 162) | class Linear_block(Module):
method __init__ (line 163) | def __init__(self, in_c, out_c, kernel=(1, 1), stride=(1, 1), padding=...
method forward (line 167) | def forward(self, x):
class Depth_Wise (line 172) | class Depth_Wise(Module):
method __init__ (line 173) | def __init__(self, in_c, out_c, residual = False, kernel=(3, 3), strid...
method forward (line 179) | def forward(self, x):
class Residual (line 191) | class Residual(Module):
method __init__ (line 192) | def __init__(self, c, num_block, groups, kernel=(3, 3), stride=(1, 1),...
method forward (line 198) | def forward(self, x):
class MobileFaceNet (line 201) | class MobileFaceNet(Module):
method __init__ (line 202) | def __init__(self, embedding_size):
method forward (line 218) | def forward(self, x):
class Arcface (line 248) | class Arcface(Module):
method __init__ (line 250) | def __init__(self, embedding_size=512, classnum=51332, s=64., m=0.5):
method forward (line 262) | def forward(self, embbedings, label):
class Am_softmax (line 289) | class Am_softmax(Module):
method __init__ (line 291) | def __init__(self,embedding_size=512,classnum=51332):
method forward (line 299) | def forward(self,embbedings,label):
FILE: face_modules/mtcnn.py
class MTCNN (line 12) | class MTCNN():
method __init__ (line 13) | def __init__(self):
method align (line 22) | def align(self, img, crop_size=(112, 112), return_trans_inv=False):
method align_fully (line 34) | def align_fully(self, img, crop_size=(112, 112), return_trans_inv=Fals...
method align_multi (line 77) | def align_multi(self, img, limit=None, min_face_size=64.0, crop_size=(...
method get_landmarks (line 92) | def get_landmarks(self, img, min_face_size=32, crop_size=(256, 256), f...
method detect_faces (line 146) | def detect_faces(self, image, min_face_size=64.0,
FILE: face_modules/mtcnn_pytorch/extract_weights_from_caffe_models.py
function get_all_weights (line 15) | def get_all_weights(net):
FILE: face_modules/mtcnn_pytorch/src/align_trans.py
class FaceWarpException (line 26) | class FaceWarpException(Exception):
method __str__ (line 27) | def __str__(self):
function get_reference_facial_points (line 32) | def get_reference_facial_points(output_size=None,
function get_affine_transform_matrix (line 163) | def get_affine_transform_matrix(src_pts, dst_pts):
function warp_and_crop_face (line 210) | def warp_and_crop_face(src_img,
FILE: face_modules/mtcnn_pytorch/src/box_utils.py
function nms (line 5) | def nms(boxes, overlap_threshold=0.5, mode='union'):
function convert_to_square (line 71) | def convert_to_square(bboxes):
function calibrate_box (line 94) | def calibrate_box(bboxes, offsets):
function get_image_boxes (line 127) | def get_image_boxes(bounding_boxes, img, size=24):
function correct_bboxes (line 162) | def correct_bboxes(bboxes, width, height):
function _preprocess (line 226) | def _preprocess(img):
FILE: face_modules/mtcnn_pytorch/src/detector.py
function detect_faces (line 9) | def detect_faces(image, min_face_size=20.0,
FILE: face_modules/mtcnn_pytorch/src/first_stage.py
function run_first_stage (line 10) | def run_first_stage(image, net, scale, threshold):
function _generate_bboxes (line 49) | def _generate_bboxes(probs, offsets, scale, threshold):
FILE: face_modules/mtcnn_pytorch/src/get_nets.py
class Flatten (line 8) | class Flatten(nn.Module):
method __init__ (line 10) | def __init__(self):
method forward (line 13) | def forward(self, x):
class PNet (line 27) | class PNet(nn.Module):
method __init__ (line 29) | def __init__(self):
method forward (line 59) | def forward(self, x):
class RNet (line 74) | class RNet(nn.Module):
method __init__ (line 76) | def __init__(self):
method forward (line 104) | def forward(self, x):
class ONet (line 119) | class ONet(nn.Module):
method __init__ (line 121) | def __init__(self):
method forward (line 155) | def forward(self, x):
FILE: face_modules/mtcnn_pytorch/src/matlab_cp2tform.py
class MatlabCp2tormException (line 12) | class MatlabCp2tormException(Exception):
method __str__ (line 13) | def __str__(self):
function tformfwd (line 17) | def tformfwd(trans, uv):
function tforminv (line 43) | def tforminv(trans, uv):
function findNonreflectiveSimilarity (line 66) | def findNonreflectiveSimilarity(uv, xy, options=None):
function findSimilarity (line 118) | def findSimilarity(uv, xy, options=None):
function get_similarity_transform (line 159) | def get_similarity_transform(src_pts, dst_pts, reflective=True):
function cvt_tform_mat_for_cv2 (line 199) | def cvt_tform_mat_for_cv2(trans):
function get_similarity_transform_for_cv2 (line 227) | def get_similarity_transform_for_cv2(src_pts, dst_pts, reflective=True):
FILE: face_modules/mtcnn_pytorch/src/visualization_utils.py
function show_bboxes (line 4) | def show_bboxes(img, bounding_boxes, facial_landmarks=[]):
FILE: network/AADLayer.py
class AADLayer (line 5) | class AADLayer(nn.Module):
method __init__ (line 6) | def __init__(self, c_x, attr_c, c_id=256):
method forward (line 20) | def forward(self, h_in, z_attr, z_id):
class AAD_ResBlk (line 41) | class AAD_ResBlk(nn.Module):
method __init__ (line 42) | def __init__(self, cin, cout, c_attr, c_id=256):
method forward (line 60) | def forward(self, h, z_attr, z_id):
FILE: network/AEI_Net.py
function weight_init (line 7) | def weight_init(m):
function conv4x4 (line 18) | def conv4x4(in_c, out_c, norm=nn.BatchNorm2d):
class deconv4x4 (line 26) | class deconv4x4(nn.Module):
method __init__ (line 27) | def __init__(self, in_c, out_c, norm=nn.BatchNorm2d):
method forward (line 33) | def forward(self, input, skip):
class MLAttrEncoder (line 40) | class MLAttrEncoder(nn.Module):
method __init__ (line 41) | def __init__(self):
method forward (line 60) | def forward(self, Xt):
class AADGenerator (line 86) | class AADGenerator(nn.Module):
method __init__ (line 87) | def __init__(self, c_id=256):
method forward (line 101) | def forward(self, z_attr, z_id):
class AEI_Net (line 114) | class AEI_Net(nn.Module):
method __init__ (line 115) | def __init__(self, c_id=256):
method forward (line 120) | def forward(self, Xt, z_id):
method get_attr (line 125) | def get_attr(self, X):
FILE: network/HEAR_Net.py
function conv4x4 (line 5) | def conv4x4(in_c, out_c):
function deconv4x4 (line 13) | def deconv4x4(in_c, out_c):
class HearNet (line 21) | class HearNet(nn.Module):
method __init__ (line 22) | def __init__(self):
method forward (line 36) | def forward(self, x):
FILE: network/MultiscaleDiscriminator.py
class NLayerDiscriminator (line 5) | class NLayerDiscriminator(nn.Module):
method __init__ (line 6) | def __init__(self, input_nc, ndf=64, n_layers=3, norm_layer=nn.BatchNo...
method forward (line 46) | def forward(self, input):
class MultiscaleDiscriminator (line 57) | class MultiscaleDiscriminator(nn.Module):
method __init__ (line 58) | def __init__(self, input_nc, ndf=64, n_layers=3, norm_layer=nn.BatchNo...
method singleD_forward (line 75) | def singleD_forward(self, model, input):
method forward (line 84) | def forward(self, input):
FILE: online_preview.py
class Screen_Capture (line 22) | class Screen_Capture:
method __init__ (line 23) | def __init__(self, H, W):
method read_frame (line 31) | def read_frame(self):
FILE: tmp_script/check_arcface_feature_map.py
function get_f5p (line 33) | def get_f5p(landmarks):
FILE: train_AEI.py
function hinge_loss (line 65) | def hinge_loss(X, positive=True):
function get_grid_image (line 72) | def get_grid_image(X):
function make_image (line 78) | def make_image(Xs, Xt, Y):
FILE: train_HEAR.py
function get_numpy_image (line 58) | def get_numpy_image(X):
function make_image (line 66) | def make_image(Xs, Xt, Y):
FILE: utils/Dataset.py
class FaceEmbed (line 12) | class FaceEmbed(TensorDataset):
method __init__ (line 13) | def __init__(self, data_path_list, same_prob=0.8):
method __getitem__ (line 33) | def __getitem__(self, item):
method __len__ (line 54) | def __len__(self):
class With_Identity (line 59) | class With_Identity(TensorDataset):
method __init__ (line 60) | def __init__(self, root_path, same_prob=0.8):
method __getitem__ (line 71) | def __getitem__(self, item):
method __len__ (line 94) | def __len__(self):
function compose_occlusion (line 98) | def compose_occlusion(face_img, occlusions):
class AugmentedOcclusions (line 124) | class AugmentedOcclusions(TensorDataset):
method __init__ (line 125) | def __init__(self, face_img_root, hand_sets, obj_sets, same_prob=0.5):
method gen_occlusion (line 145) | def gen_occlusion(self):
method __getitem__ (line 163) | def __getitem__(self, item):
method __len__ (line 179) | def __len__(self):
FILE: utils/download_vggface_dataset.py
function download_and_save (line 15) | def download_and_save(url, savename):
function get_all_iamge (line 26) | def get_all_iamge(filename):
FILE: utils/split_hearnet_data.py
function comp (line 71) | def comp(x):
Condensed preview — 53 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,322K chars).
[
{
"path": "acceleration/CMakeLists.txt",
"chars": 547,
"preview": "cmake_minimum_required(VERSION 2.8)\nproject(FaceShifter_Accelerations)\n\nset(CMAKE_CXX_COMPILER /usr/bin/g++)\nset(CMAKE_C"
},
{
"path": "acceleration/cuda_kernels.cu",
"chars": 2138,
"preview": "#include \"cuda_kernels.hpp\"\n\n__global__ void restore_kernel(uchar* ret, const float* Yst, const float* mask,\n con"
},
{
"path": "acceleration/cuda_kernels.hpp",
"chars": 323,
"preview": "\n#ifndef CUDA_KERNELS_H\n#define CUDA_KERNELS_H\n\n#include <cuda_runtime.h>\n#include <device_launch_parameters.h>\n\ntypedef"
},
{
"path": "acceleration/cuda_postprocess.cpp",
"chars": 2885,
"preview": "#include <iostream>\n#include <pybind11/pybind11.h>\n#include <pybind11/numpy.h>\n#include <opencv2/opencv.hpp>\n#include \"c"
},
{
"path": "face_modules/.gitignore",
"chars": 60,
"preview": "model_ir_se50.pth\nlibnvjpeg.cpython-36m-x86_64-linux-gnu.so\n"
},
{
"path": "face_modules/ReadMe.txt",
"chars": 47,
"preview": "https://github.com/TreB1eN/InsightFace_Pytorch\n"
},
{
"path": "face_modules/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "face_modules/infer_demo.py",
"chars": 857,
"preview": "import torch\nfrom mtcnn import MTCNN\nimport cv2\nimport numpy as np\n\nimport PIL.Image as Image\nfrom model import Backbone"
},
{
"path": "face_modules/model.py",
"chars": 13097,
"preview": "from torch.nn import Linear, Conv2d, BatchNorm1d, BatchNorm2d, PReLU, ReLU, Sigmoid, Dropout2d, Dropout, AvgPool2d, MaxP"
},
{
"path": "face_modules/mtcnn.py",
"chars": 10751,
"preview": "import numpy as np\nimport torch\nfrom PIL import Image\nfrom torch.autograd import Variable\nfrom mtcnn_pytorch.src.get_net"
},
{
"path": "face_modules/mtcnn_pytorch/.gitignore",
"chars": 32,
"preview": ".ipynb_checkpoints\n__pycache__\n\n"
},
{
"path": "face_modules/mtcnn_pytorch/LICENSE",
"chars": 1073,
"preview": "MIT License\n\nCopyright (c) 2017 Dan Antoshchenko\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "face_modules/mtcnn_pytorch/README.md",
"chars": 735,
"preview": "# MTCNN\n\n`pytorch` implementation of **inference stage** of face detection algorithm described in \n[Joint Face Detectio"
},
{
"path": "face_modules/mtcnn_pytorch/caffe_models/det1.prototxt",
"chars": 2530,
"preview": "name: \"PNet\"\r\ninput: \"data\"\r\ninput_dim: 1\r\ninput_dim: 3\r\ninput_dim: 12\r\ninput_dim: 12\r\n\r\nlayer {\r\n name: \"conv1\"\r\n typ"
},
{
"path": "face_modules/mtcnn_pytorch/caffe_models/det2.prototxt",
"chars": 3386,
"preview": "name: \"RNet\"\r\ninput: \"data\"\r\ninput_dim: 1\r\ninput_dim: 3\r\ninput_dim: 24\r\ninput_dim: 24\r\n\r\n\r\n##########################\r\n#"
},
{
"path": "face_modules/mtcnn_pytorch/caffe_models/det3.prototxt",
"chars": 3931,
"preview": "name: \"ONet\"\ninput: \"data\"\ninput_dim: 1\ninput_dim: 3\ninput_dim: 48\ninput_dim: 48\n##################################\nlaye"
},
{
"path": "face_modules/mtcnn_pytorch/caffe_models/det4.prototxt",
"chars": 14504,
"preview": "name: \"LNet\"\r\ninput: \"data\"\r\ninput_dim: 1\r\ninput_dim: 15\r\ninput_dim: 24\r\ninput_dim: 24\r\n\r\nlayer {\r\n name: \"slicer_data\""
},
{
"path": "face_modules/mtcnn_pytorch/extract_weights_from_caffe_models.py",
"chars": 1755,
"preview": "import caffe\nimport numpy as np\n\n\"\"\"\nThe purpose of this script is to convert pretrained weights taken from\nofficial imp"
},
{
"path": "face_modules/mtcnn_pytorch/get_aligned_face_from_mtcnn.ipynb",
"chars": 855366,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {\n \"ExecuteTime\": {\n \"end_time\""
},
{
"path": "face_modules/mtcnn_pytorch/refine_faces.ipynb",
"chars": 56878,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 2,\n \"metadata\": {\n \"ExecuteTime\": {\n \"end_time\""
},
{
"path": "face_modules/mtcnn_pytorch/src/__init__.py",
"chars": 80,
"preview": "from .visualization_utils import show_bboxes\nfrom .detector import detect_faces\n"
},
{
"path": "face_modules/mtcnn_pytorch/src/align_trans.py",
"chars": 11104,
"preview": "# -*- coding: utf-8 -*-\n\"\"\"\nCreated on Mon Apr 24 15:43:29 2017\n@author: zhaoy\n\"\"\"\nimport numpy as np\nimport cv2\n\n# from"
},
{
"path": "face_modules/mtcnn_pytorch/src/box_utils.py",
"chars": 6918,
"preview": "import numpy as np\nfrom PIL import Image\n\n\ndef nms(boxes, overlap_threshold=0.5, mode='union'):\n \"\"\"Non-maximum suppr"
},
{
"path": "face_modules/mtcnn_pytorch/src/detector.py",
"chars": 4364,
"preview": "import numpy as np\nimport torch\nfrom torch.autograd import Variable\nfrom .get_nets import PNet, RNet, ONet\nfrom .box_uti"
},
{
"path": "face_modules/mtcnn_pytorch/src/first_stage.py",
"chars": 3158,
"preview": "import torch\nfrom torch.autograd import Variable\nimport math\nfrom PIL import Image\nimport numpy as np\nfrom .box_utils im"
},
{
"path": "face_modules/mtcnn_pytorch/src/get_nets.py",
"chars": 4951,
"preview": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom collections import OrderedDict\nimport numpy as n"
},
{
"path": "face_modules/mtcnn_pytorch/src/matlab_cp2tform.py",
"chars": 8583,
"preview": "# -*- coding: utf-8 -*-\n\"\"\"\nCreated on Tue Jul 11 06:54:28 2017\n\n@author: zhaoyafei\n\"\"\"\n\nimport numpy as np\nfrom numpy.l"
},
{
"path": "face_modules/mtcnn_pytorch/src/visualization_utils.py",
"chars": 786,
"preview": "from PIL import ImageDraw\n\n\ndef show_bboxes(img, bounding_boxes, facial_landmarks=[]):\n \"\"\"Draw bounding boxes and fa"
},
{
"path": "face_modules/mtcnn_pytorch/test_on_images.ipynb",
"chars": 3435338,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {\n \"collapsed\": true\n },\n \"outp"
},
{
"path": "face_modules/mtcnn_pytorch/try_mtcnn_step_by_step.ipynb",
"chars": 3721394,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {\n \"collapsed\": true\n },\n \"outp"
},
{
"path": "face_modules/preprocess_images.py",
"chars": 2325,
"preview": "import torch\nfrom mtcnn import MTCNN\nimport cv2\nimport numpy as np\n\nimport PIL.Image as Image\nfrom model import Backbone"
},
{
"path": "inference_demo.py",
"chars": 1967,
"preview": "import sys\nsys.path.append('./face_modules/')\nimport torch\nimport torchvision.transforms as transforms\nimport torch.nn.f"
},
{
"path": "network/AADLayer.py",
"chars": 2437,
"preview": "import torch\nimport torch.nn as nn\n\n\nclass AADLayer(nn.Module):\n def __init__(self, c_x, attr_c, c_id=256):\n s"
},
{
"path": "network/AEI_Net.py",
"chars": 4721,
"preview": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom .AADLayer import *\n\n\ndef weight_init(m):\n if "
},
{
"path": "network/HEAR_Net.py",
"chars": 1551,
"preview": "import torch\nfrom torch import nn\n\n\ndef conv4x4(in_c, out_c):\n return nn.Sequential(\n nn.Conv2d(in_c, out_c,ke"
},
{
"path": "network/MultiscaleDiscriminator.py",
"chars": 3540,
"preview": "import torch.nn as nn\nimport numpy as np\n\n\nclass NLayerDiscriminator(nn.Module):\n def __init__(self, input_nc, ndf=64"
},
{
"path": "network/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "online_preview.py",
"chars": 5816,
"preview": "import sys\nsys.path.append('./face_modules/')\nimport torch\nimport torchvision.transforms as transforms\nimport torch.nn.f"
},
{
"path": "tmp_script/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tmp_script/check_arcface_feature_map.py",
"chars": 3397,
"preview": "import sys\nsys.path.append('../Peppa_Pig_Face_Engine-master/')\nsys.path.append('../')\nfrom lib.core.api.facer import Fac"
},
{
"path": "tmp_script/test_structure_AEI.py",
"chars": 1215,
"preview": "import sys\nsys.path.append('..')\nfrom network.AEI_Net import *\nfrom network.HEAR_Net import *\nfrom network.MultiscaleDis"
},
{
"path": "train_AEI.py",
"chars": 5535,
"preview": "from network.AEI_Net import *\nfrom network.MultiscaleDiscriminator import *\nfrom utils.Dataset import FaceEmbed, With_Id"
},
{
"path": "train_HEAR.py",
"chars": 4064,
"preview": "from network.AEI_Net import *\nfrom network.HEAR_Net import *\nfrom utils.Dataset import *\nfrom torch.utils.data import Da"
},
{
"path": "utils/Dataset.py",
"chars": 6876,
"preview": "from torch.utils.data import TensorDataset\nimport torchvision.transforms as transforms\nfrom PIL import Image\nimport glob"
},
{
"path": "utils/download_vggface_dataset.py",
"chars": 1434,
"preview": "#!/usr/bin/python3\n# -*- coding: utf-8 -*-\nimport sys\nimport os\nimport threading\nimport socket\nimport urllib.request\n\nti"
},
{
"path": "utils/split_hearnet_data.py",
"chars": 3049,
"preview": "import sys\nsys.path.append('../')\nimport torch\nimport torchvision.transforms as transforms\nimport torch.nn.functional as"
}
]
// ... and 7 more files (download for full content)
About this extraction
This page contains the full source code of the taotaonice/FaceShifter GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 53 files (7.8 MB), approximately 2.1M tokens, and a symbol index with 146 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.