刘 媛 陈小丽 屠增辉 谢志敏 郑祎能
(华中科技大学 武汉 430074)
随着社会经济和信息技术的发展,智能校园建设日益普及。教室场景下的人数统计是教学领域重要问题之一,基于课堂视频数据统计教室人数方便教师了解学生到课率情况,同时也为学生寻找自习室提供了便利,学校也可以通过学生自习人数合理分配教室数量,在一定程度上避免了教室资源的浪费。
主流人数统计方法可分为回归方式进行计数和目标检测识别计数。回归方式不需要对单个个体进行分割和识别跟踪,通常是对某个人群进行特征属性提取,通过回归函数将其和人数关系进行映射估计[1],适用于人群密度较大的拥挤环境。随着计算机技术的发展,利用深度学习进行目标检测的研究方法被广泛应用,人数统计可通过对某个场景下的所有个体、人头或人脸进行检测识别得到,从而提升了人数统计的鲁棒性和准确率。陈久红[2]等使用深度学习目标检测框架检测人头进行人数统计并在自制数据集上验证,最终得到的准确率为89.4%;沈守娟[3]等在提出了在原有算法基础上增加了目标跟踪算法来实时更正检测结果,在CoCo数据集[4]上达到93.4%的精确度。
综合上述方法以及考虑到教室场景存在高遮挡高密度问题,身体遮挡严重,通过检测身体统计人数具有较大误检率和漏检率;学生在课堂上也存在低头记笔记或看书的情况,人脸检测算法可能无法正常工作,使得人数统计准确率较低。因此本文通过改进高精度的人脸检测算法RetinaFace[5],将人脸检测迁移至人头检测,进一步提高教室场景下人数统计准确率。
目前主流的人数统计方法为目标检测统计法,通过识别人脸、人头或单个人体,从而统计某个空间内的总人数。该方法的关键问题是准确提取目标特征,传统特征提取方法有Forstner算子、SUSAN算子和SIFT算子,均需要人工设计提取器且泛化能力较差。
随着卷积神经网络的发展,基于深度学习的特征提取网络在实时性以及精度方面均优于传统方法,常见网络如SSD、Faster R-CNN、YOLO等。杨璐[6]通过对视频中采集的图像进行预处理与形态学运算,提取人体轮廓特征进而统计教室人数,但该方法需要针对不同教室进行不同的摄像机位置布局,灵活性及通用性较差;郑国书[7]等通过深度学习SSD[8]网络检测教室内人头数量并进行人数统计,对于小尺度的人头检测该模型具有较强的鲁棒性和实时性,但SSD低级特征层数较小,无法充分提取头部特征;陈久红[2]等基于R-FCN[9]目标检测框架进行了算法改进并在自制数据集上验证,最终得到的准确率仅有89.4%;沈守娟[3]等基于YOLOv3及Deep-Sort目标跟踪算法实时更正目标检测结果,在CoCo数据集上达到93.4%的精确度,该方法在实时性和准确率上均有较大的提升,但在遮挡程度较高的情况下仍无法准确统计,距离实际应用仍有一定距离。
教室内人数统计的核心网络为学生人脸或头部检测网络,输入真实教室场景的图片,输出学生人脸或头部检测结果,并根据检测到的数量进行人数统计。现有人脸检测算法的检测精度已较为精确,然而教室场景下学生听讲过程中的头部姿态情况较为复杂,在学生低头或侧头的情况下,人脸检测算法常常无法成功检测到所有人脸,从而导致教室场景下人数统计结果误差较大。如张杰[10]为解决教室场景下上述问题带来的干扰,提出了对连续时间内多帧教室图像中的人脸检测结果进行综合分析,在此基础上进行人数统计,从而降低了统计误差,将误差降至10%以内,但若能解决人脸遮挡情况下的识别问题,人脸检测结果误差将进一步大幅度减小。
RetinaFace是自然场景下较为精确且高效的人脸检测算法之一,人脸和头部的长宽比例及大小非常相似,因此本文认为将头部替换人脸作为检测目标是可行的,并对原有RetinaFace算法进行改进来设计教室内学生头部检测网络,并将改进后网络命名为RetinaStudent。该网络结构示意如图1所示,输入实际教室场景下的RGB图像,输出图像中学生头部检测结果。
图1 RetinaStudent网络结构图
RetinaStudent网络的目的是通过检测学生头部来统计教室内人数,本文采用经过ImageNet[11]数据集预训练后的ResNeXt50[12]网络为基础,来提取图像特征。由于教室场景下目标大小不会特别大,RetinaStudent网络添加了C2、C3、C4、C5层共4个降采样模块,输入网络的图像在每个降采样模块处理后,特征图大小降低两倍。由于低层网络有相对丰富的图像特征信息,而高层网络有更强的语义性和分辨性,通过FPN融合四种不同尺度的特征,使网络在教室场景下可以准确检测到不同尺度大小的目标。FPN会产生较大的计算消耗,为在一定程度上减少网络计算量,本文对于FPN的每层输出只增加了一层语义模块提升网络感受野,并使用3*3卷积核进行构建。最终,网络输出检测到的头部置信度及位置信息。由于人脸和头部的长宽比例及大小非常相似,因此本文网络的anchor设置策略和RetinaFace保持一致。
本文网络训练过程中anchor设置如下,将IoU大于0.5的设置为正样本,小于0.3的则设置为负样本,IoU值介于0.3~0.5之间的不参与网络训练,但匹配过程中有大部分anchor被标记为负样本,使得正样本的数量远低于负样本,网络训练存在严重的样本不均衡问题。为解决上述问题,本文利用在线困难样本挖掘(OHEM)策略,将所有被标记为负样本的anchor按照loss值从大到小排序,正样本与负样本按照1∶3的比例选择相应的数量进行训练,有效缓解了上述样本不均衡问题。
本文使用NVIDIA Tesla P100显卡对RetinaStudent网络进行训练,网络训练设置了SGD优化 器,其 中momentum值 为0.9,weight decay为0.0005,初始学习率(learning rate)设置为0.01,每次迭代的数量大小为12,并采用热启动方式在10个迭代完成之后将学习率升至0.1,最后通过余弦退火策略(CosineAnnealingLR),将学习率逐渐降至0。在200轮训练过程中该网络的总损失值变化如图2所示,横坐标为训练的迭代次数,纵坐标为网络的总损失值。由图可知,该网络在大约160次迭代后逐渐收敛。
图2 RetinaStudent训练过程中损失值变化曲线
目标检测算法可分为两大类,两阶段检测算法和单阶段检测算法。RetinaStudent网络同时进行目标定位和目标分类任务,属于单阶段检测算法,因此本文通过一个适用于多任务的损失函数来优化网络参数,RetinaStudent网络的总损失值为定位任务和分类任务的损失值之和。
交叉熵通常用于表示两个不同分布的距离,因此本文分类任务使用交叉熵损失函数,目标定位任务采用loss收敛稳定且容易收敛到局部最优的Smooth L1损失函数,两个任务的损失函数所占比例通过λ(本文中取值为2.0)进行调节。根据3.2节中的anchor策略,正样本需计算两类损失,而负样本只需要计算交叉熵损失,因此对于第i个anchor,多任务损失函数如式(1)所示。其中,Lcls为交叉熵损失函数,pi是一个一维向量,用来表示RetinaStudent网络对当前样本分类的预测结果,为当前数据标注值的one-hot表示。Lbox为Smooth L1损失函数,ti表示网络预测的偏移量,为当前真实值。网络训练一次迭代过程中的每个损失值累加即为本次迭代过程的总损失值。
本文对湖北某大学进行课堂视频录制,采集了大量教室场景下的视频,该视频包含了多种具有真实意义的教学场景,如听讲场景,讨论场景,回答问题场景等。从不同的课堂视频中选出1043张和400张图像分别作为RetinaStudent网络的训练集和测试集。同时,为了测试该网络模型的泛化能力,以上训练集和测试集中的图像来自于不同的课堂视频。
本文所收集的数据集StudentDetection共包含1443张图像,无论学生是否露出脸部,每张图像均标注了学生完整的头部区域,约79100个头部数据,数据集具体信息如表1所示,数据集图像中的标注示例如图3所示。本文将数据集中图像大小统一调整为640*640,为增强模型的泛化能力,对图像进行了随机裁剪与翻转,同时随机调整图像的亮度、饱和度和对比度等再输入网络进行训练。
表1 StudentDetection数据集标注信息
图3 StudentDetection数据集中的标注示意图
本节对RetinaStudent网络训练后得到的模型进行测试,并将本文算法与当下表现较为优异的算法进行对比分析。由于RetinaStudent网络是由专门进行人脸检测的RetinaFace算法改进而来,因此本节首先对模型在公开数据集SCUT-HEAD上进行人脸检测到人头检测的迁移能力测试,同时与现有优秀开源算法对比分析;其次在自制数据集StudentDetection上测试该模型在教室场景下对学生头部的检测性能,验证该算法在真实教室场景下能否提升对学生头部的检测效果。学生头部检测的测试评价指标选择平均精准率AP、精准率Presicion和召回率Recall。该算法的教室人数统计能力测试评价指标采用准确率Accuracy。
4.2.1 RetinaStudent迁移能力测试
将本文模型在公开数据集SCUT-HEAD[13]上进行测试,以验证模型的泛化和迁移能力。SCUT-HEAD数据集包含真实教室场景和网络资源图像两部分内容,是一个较为丰富的头部检测数据集,共包含4405张图像,111251个头部区域,涵盖有丰富的课堂场景,适合验证模型的迁移能力。Peng D等人建立SCUT-HEAD数据集的同时,也提出了基于ResNet-50的头部检测算法R-FCN+FRN,并在SCUT-HEAD数据集上取得最优检测结果。因此本文将与R-FCN+FRN算法进行对比测试,以检测器的精准率和召回率作为评价指标,测试结果如表2所示。该表共包含了6种检测算法的测试结果,前4个算法是较为主流的检测算法,D Peng等使用SCUT-HEAD数据集对这4种算法进行训练并测试得到了结果。作者提出的R-FCN+FRN(ResNet-50)算法分别进行了单尺度与多尺度的测试,从表中可以看出模型检测效果在多尺度输入情况下提升显著,但采用单尺度输入的RetinaStudent的精准率与召回率在测试集上超越了其他所有算法,因此RetinaStudent作为人头检测算法的泛化能力与迁移能力较强。
表2 基于SCUT-HEAD数据集的测试结果详情
4.2.2 RetinaStudent头部检测性能测试
本文使用NVIDIA Tesla P100显卡对RetinaStudent头部检测模型进行性能测试,通过平均精度AP与PR评价指标衡量该模型的检测效果。模型的输入为原尺度的图像,分别设置IoU匹配阈值为0.5和0.75。测试结果如表3所示,当输入图像大小为1920*1080时,平均每张图片头部检测时间为0.015s,当IoU匹配阈值变大时,检测准确率有所下降,但仍有较高的准确率。由此可见RetinaStudent有较高检测精度和效率。
表3 RetinaStudent测试结果详情
本文通过学生头部的检测结果来统计教室内学生人数,我们将检测到的人头数量作为相应教室中的人数统计结果,并使用自制StudentDetection数据集对该算法在真实教室场景下的人数统计能力进行测试,当检测结果与教室图像中学生数量一致时将记为有效的统计结果。实验结果表明本文使用RetinaStudent训练的头部检测模型应用到教室人数统计场景时,其准确率高达99.1%。
针对教室场景下的人数统计问题,本文通过人脸检测结果统计教室内人数,提出的RetinaStudent网络改进了原RetinaFace网络,在学生因不同的头部姿态而遮挡脸部情况下仍可以检测人头,该算法具有人脸检测到人头检测的迁移能力,与现有人数统计方法相比较为简洁且头部检测效率与精确度足以满足日常需求;同时建立了教室场景下数据集StudentDetection,本文算法在该数据集上人数统计准确率高达99.1%,解决了因学生头部姿态影响导致的人数统计不精确问题。