Ultra-Light-Fast-Generic-Face-Detector-1MB-master
模型是针对边缘计算设备设计的轻量人脸检测模型。
- 在模型大小上,默认FP32精度下(.pth)文件大小为 1.04~1.1MB,推理框架int8量化后大小为 300KB 左右。
- 在模型计算量上,320x240的输入分辨率下 90~109 MFlops左右。
- 模型有两个版本,version-slim(主干精简速度略快),version-RFB(加入了修改后的RFB模块,精度更高)。
- 提供320x240、640x480不同输入分辨率下使用widerface训练的预训练模型,更好的工作于不同的应用场景。
2数据处理
2.1 输入尺寸的选择
由于涉及实际部署时的推理速度,因此模型输入尺寸的选择也是一个很重要的话题。
在作者的原github中,也提到了一点,如果在实际部署的场景中大多数情况为中近距离、人脸大同时人脸的数量也比较少的时候,则可以采用
320×240
的输入尺寸;
如果在实际部署的场景中大多数情况为中远距离、人脸小同时人脸的数量也比较多的时候,则可以采用
640×480
或者
480×360
的输入尺寸;
这里由于使用的是EAIDK310进行部署测试,边缘性能不是很好,因此选择原作者推荐的最小尺寸
320×240
进行训练和部署测试。 注意:过小的输入分辨率虽然会明显加快推理速度,但是会大幅降低小人脸的召回率。
2.2 数据筛选
由于widerface官网数据集中有比较多的低于10像素的人脸照片,因此在这里选择剔除这些像素长宽低于10个pixel的照片;
3SSD网络结构
SSD是一个端到端的模型,所有的检测过程和识别过程都是在同一个网络中进行的;同时SSD借鉴了Faster R-CNN的Anchor机制的想法,这样就像相当于在基于回归的的检测过程中结合了区域的思想,可以使得检测效果较定制化边界框的YOLO v1有比较好的提升。
SSD较传统的检测方法使用顶层特征图的方法选择了使用多尺度特征图,因为在比较浅的特征图中可以对于小目标有比较好的表达,随着特征图的深入,网络对于比较大特征也有了比较好表达能力,故SSD选择使用多尺度特征图可以很好的兼顾大目标和小目标。
SSD模型结构如下:
这里关于SSD不进行更多的阐述,想了解的小伙伴自行搜索查看
整个项目模型搭建如下:
# 网络的主题结构为SSD模型
class SSD(nn.Module):
def __init__(self, num_classes: int, base_net: nn.ModuleList, source_layer_indexes: List[int],
extras: nn.ModuleList, classification_headers: nn.ModuleList,
regression_headers: nn.ModuleList, is_test=False, config=None, device=None):
"""Compose a SSD