在CPU上训练模型时会耗费较长时间,所以我使用AWS EC2上的GPU资源:每次迭代需要8秒钟,一共使用了20分钟。在训练深度学习模型时,这已经是较快了。 在200次迭代后,我们画出了模型指标,可以看出性能已经较为稳定,j2直播,没有明显的过拟合现象,且实际正确率较高。 △训练时验证集和训练集的损失值和正确率 评估模型 由于当前样本量较小,所以很难得到准确的模型精度。但随着训练集样本的增多,这将更贴近实际的模型性能。我们使用sklearn库很快地输出了各类的识别效果。 △各类别的识别效果 从上图可以看出,模型的正确率(f1-score)较高:除了Lisa,其余各类的正确率都超过了80%。Lisa类的平均正确率为82%,可能是在样本中Lisa与其他人物混在一起。 △各类别的交叉关系图 的确,Lisa样本中经常带有Bart,所以正确率较低可能受到Bart的影响。 添加阈值来提高正确率 为了提高模型正确率和减少召回率,我添加了一个阈值。 在讨论阈值之前,先介绍下关于召回和正确率的关系图。 △召回和正确率的关系图 现在统计下正确预测和错误预测的相关数据:最佳概率预测,两个最相似人物的概率差和标准偏差STD。 正确预测:最大值为0.83,最优点概率差为0.773,STD值为0.21; 错误预测:最大值为0.27,最优点概率差为0.092,STD值为0.07。 如果人物1的预测正确率太低,预测人物2时标准偏差太高或是两个最相似人物间的概率差太低,那么可以认为网络没有学习到这个人物。 因此,对两个类别,绘制测试集的3个指标,希望找到一个超平面来分离正确预测和错误预测。 △测试集中多个指标的散点图 上图中,想要通过直线或是设置阈值,来分离出正确预测和错误预测,这是不容易实现的。当然还可以看出,错误预测的样本一般在图表的左下方,但在这个位置也分布了很多正确预测样本。如果设置了一个阈值(关于最相似人物间的概率差和概率),则实际召回率也会降低。 我们希望在提高准确性的同时,而不会很大程度上影响召回率,因此要为每个人物或是低正确率的人物(如Lisa Simpson)来绘制这些散点图。 此外,对于没有主角或是不存在人物的样本,加入阈值后效果很好。目前我在模型中添加了一个“无人物”的类别,可以添加阈值来处理。我认为很难在最佳概率预测、概率差和标准偏差之间找到平衡点,所以我重点关注最佳预测概率。 关于最佳预测概率的召回率和正确率 在模型中,很难平衡好召回率与正确率之间的关系,同时也无法同时提高召回率和正确率。所以往往根据实际目标,来提高单个值。 对于预测类别的概率最小值,画出F1-score、召回率和正确率来比较效果。 △对于所有类别或特定类别,正确率、召回率和F1-score与预测类别概率最小值的关系 从图10中看出,模型效果取决于不同人物。重点研究Lisa Simpson类别,为该类添加概率最小值0.2可能会提高效果,但是组合所有类别后,这个阈值并不完全适用。 所以考虑全局效果,对于预测类别的概率最小值,应该增加一个合适的阈值,且不能位于区间[0.2,0.4]内。 可视化预测人物 △12个不同人物的实际类别和预测类别 在图11中,用于分类人物的神经网络效果很好,故应用到视频中实时预测。在实际中,每张图片的预测时间不超过0.1s,可以做到每秒预测多帧。 相关链接 1.辛普森一家的人物数据集: https://www.kaggle.com/alexattia/the-simpsons-characters-dataset 2.完整项目代码: https://github.com/alexattia/SimpsonRecognition 【完】 一则通知 (责任编辑:本港台直播) |