MTCNN常见问题总结:
1、为什么不直接进行预测而要通过偏移框反算真实框的位置?
直接预测只有一个框可能会找不到真实框,而通过坐标反算可以有多个预测框只需要在多个预测框中挑出置信度最大的那个,此种方法不易出现预测框丢失的情况。
2、为什么P网络一层池化,R网络两层池化
池化后提取的重要信息越多,p网络不进行两层池化是因为网络太浅精度达不到,池化会丢失很多重要信息
3、为什么必须通过坐标值的反算来计算图像的真实坐标,而不是直接利用神经网络去也可以目标人脸的真实坐标?
因为在神经网络在多次的反算过程中,每次移动步长就会输出一个预测框,在最后输出的是一系列的预测框,通过iou的计算和nms的计算就可以输出较大概率上的真实值,如果是网络直接去学习目标人脸的位置,最后输出的预测框是只有一个,很可能会出现目标预测不准确的情况。如果是反算,输出的一直是在挑选中的再进行挑选,增加了准确率。
4、为什么要做金字塔变换?
解决目标多尺度的问题,由于照片的拍摄情况各不相同,在原图上的大小位置也有很大差别,通过图形金字塔能够将不同大小的人脸缩放到合适的尺度,便于检测。同时每进行一次图像金字塔就要进行一测检测判断,相当于进行了多次检测,提高检测到目标的的可能性。
5、为什么训练时对图片的尺寸有限制,但是在检测时可以输入任意尺寸大小的图片?
在训练时各个网络是分开训练的,在使用时输入的图片依次经过P网络,R网络,O网络,在P网络中的最后一层为全连接层(输入的尺寸可以任意大小)
6、O-Net的准确度最高,为什么不直接过O-Net?或者使用比O-Net更深的网络呢?
这是因为,假如直接过O-Net网络,运行速度会非常的慢,实际上P-Net和R-Net 这两步对含人脸检测Proposal bounding box 做了一个过滤,使得最后过耗时更大的O-Net网络 的bounding box 比较少,从而减少了整体时间。
7为什么官方的缩放因子选择0.709?
因为0.709刚好是1/2开根号得到的数,这样可以保证每一次所缩放之后的面积是前一次的1/2,不至于缩放太大或太小
8为什么输入的尺寸越来越大?
多次池化的前提是信息的量更多更复杂,因为越往后边的网络越深,新信息量越大。
9、为什么不用yolo作人脸识别?
原则上可以利用yolo同时作检测和回归,但是yolo不适合目标之间相互差异较小的样本,yolo适用于不同类差异较大的样本之间的检测
10、为什么不能同时检测和识别?
1)因为softmax当类别比较多时分不开,它只会做简单的区分,而不会去扩大类别间的距离。
2)只用MTCNN同时做检测和识别训练的成本比较大,每次新来一个人就要重新训练一次。
11、为什么MTCNN的训练不能使用softmax做损失函数?
1)如果用了softmax,本身具有排他性,则四个坐标值的和为1,如果其中一个坐标的值为0.9,则其他几个坐标的值会变得很小,不符合坐标的规律
2)交叉熵损失函数一般适用于求概率,而概率值和真实值之间是存在偏差的,所以用均方差最好,坐标值输出层不激活,置信度输出层可以用sigmoid激活(概率值),如果用softmax则置信度输出值至少为2个
12、为什么不缩放建议框而要缩放图片?
建议框是要传入网络里的,直接用缩放建议框的人方法寻找人脸每次得到的建议框大小不一样,增加了网络处理的难度。解决方法:缩放图片:图形金字塔,缩放到图片最小边时停止。
13、为什么置信度越高,越可能是人脸?
置信度越高说明越可能是人脸,当同样框到手和脸时,脸的置信度要高于手的置信度
14.为什么不能用重叠的面积去衡量?
两个很小的框相交的面积重合程度小于两个很大的框重合度小的面积
15.对于大框套小框为什么令iou为1?
意味着重合程度越高,越有可能框的是同一个目标
16.两个框的并集和交集如何算?
17.各个网络的多个框从何而来?
(1)图像每缩放一次会框一次
(2)建议框在图像上滑动时识别到人脸会框出来