代码 地址 https://github.com/AITTSMD/MTCNN-Tensorflow
这里我就不在进行MTCNN的介绍了。分析的再清楚都不如从源码的实现去分析。
Talk is cheap, just show me the code 。
MTCNN主要分为三个网络 PNet RNet ONet
其中PNet是个全卷积网络 这是和RNet ONet最大的区别
由于篇幅有限 分成多篇进行分析
MTCNN源码详细解读(2)- PNet的训练和数据集的构建
MTCNN源码详细解读(3)- RNet的训练和数据集的构建
def P_Net(inputs,label=None,bbox_target=None,landmark_target=None,training=True):
#define common param
# 为相同的卷积操作 设置一样的初始化参数和激活函数prelu
with slim.arg_scope([slim.conv2d],
activation_fn=prelu,
weights_initializer=slim.xavier_initializer(),
biases_initializer=tf.zeros_initializer(),
weights_regularizer=slim.l2_regularizer(0.0005),
padding='valid'):
# PNet 训练输入时(batch_size, 12, 12, 3)
# (batch_size, 10, 10, 10)
net = slim.conv2d(inputs, 10, 3, stride=1,scope='conv1')
# (batch_size, 5, 5, 10)
net = slim.max_pool2d(net, kernel_size=[2,2], stride=2, scope='pool1', padding='SAME')
# (batch_size, 3, 3, 16)
net = slim.conv2d(net,num_outputs=16,kernel_size=[3,3],stride=1,scope='conv2')
# (batch_size, 1, 1, 32)
net = slim.conv2d(net,num_outputs=32,kernel_size=[3,3],stride=1,scope='conv3')
#batch*H*W*2
# 用 1 * 1卷积核来做输出
# 这里是类别输出 虽然是二分类 但是作者用2的维度来表示 第一位表示不是人脸置信度 第二位表示是人脸的置信度
conv4_1 = slim.conv2d(net,num_outputs=2,kernel_size=[1,1],stride=1,scope='conv4_1',activation_fn=tf.nn.softmax)
#batch*H*W*4
# 这里就是输出坐标的偏移 4个值
bbox_pred = slim.conv2d(net,num_outputs=4,kernel_size=[1
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删