深度学习

理解和使用深度学习网络

应对COVID-19的应用:口罩检测

今天的帖子来自MathWorks韩国办公室的应用工程师Wanbin Song,在这里谈论工程师如何用新的创新应用应对COVID-19大流行。请注意Chrome是最佳视频浏览体验的推荐浏览器。
与COVID-19研究相关的深度学习应用急剧增加,部分原因是公共可用数据集的普及和可用性。
  • 来自世卫组织/蒙特利尔大学的胸部X射线数据集(链接
  • 来自白宫的文章和文档数据集(链接
  • 研究论文资料库(链接
  • 新冠病毒-19追踪数据集(链接
深度学习研究人员现在对许多应用程序感兴趣,并且有很多示例代码可用,因此我想介绍我使用MATLAB创建的两个新演示,以响应新冠病毒-19。这篇博文将重点介绍第一个演示:面具检测。

掩模检测

利用深度学习,我想检测一个戴着面具的人的存在。您可以设想这样一个场景:在进入需要口罩的地方之前,可能要确保佩戴口罩。
你可以在这里看到代码的结果:
对于这个应用程序,我请MathWorks韩国办公室的同事帮助创建一个用于训练和测试算法的新数据集。(特别感谢所有做出贡献的人!)
我将简要地介绍一下开发工作流,重点是以下步骤:自动图像标记、比较训练算法和生成加速推断的代码。你可以在这里下载代码:https://github.com/matlab-deep-learning/COVID19-Face-Mask-Detection-using-deep-learning

图像自动标注

标记所有训练图像可能是一个耗时的过程。我们能否半自动化掩模标记过程?方法如下:我们知道,我们可以使用预训练的人脸检测器以合理的精度检测人脸(计算机上有许多检测器可用)文件交换,在计算机视觉的工具箱)理论上,我们可以用脸的下半部分来检测面具应该放在哪里。下图将工作流显示为一组步骤:

显示自动检测的口罩用作输入到口罩检测器训练。从戴口罩的人的图像(左)开始,检测人脸(中),检测人脸的下半部(右)。

为了创建一个自动化算法,我们需要使用数据集中的样本图像进行测试。我们通过创建一个图像数据存储,下载并导入预训练的人脸检测器。(请注意,计算机视觉工具箱中还有一个人脸检测器,但我想演示与Caffe的互操作性。)通过分析人脸检测器预测的边界框的下部,我们可以看出该方法非常适合于面具标签。
%创建imageDatastore以收集所有培训图像imds=图像数据存储(“SampleMaskData\”)%请将“SampleMaskData”更改为您的培训数据位置
从Caffe导入预训练人脸检测器
%导入预先训练的人脸检测器FaceyOne=ImportCacheNetwork('models\net\u face\u yolo\u deploy.prototxt',…'models\net\u face\u yolog.caffemodel','OutputLayerType','returnal');保存net\u face\u yolog.mat faceyoOne
接下来,读取一个示例图像,检测人脸,并使用边界框的下半部分作为近似遮罩位置。
img =阅读(imd);or_sz = size(img,[1 2]);Re_sz = [448 448];imgr = imresize (img, re_sz);= or_sz ./ re_sz;%检测的脸bbox = predictFace (imgr net_face_yolo.mat);%查找边界框的下半部分bbox(:,4)=bbox(:,4)。/2+20;bbox(:,2)=bbox(:,2)+bbox(:,4)-20;bbox(:,3)=bbox(:,3)+20;bbox=bboxresize(圆形(bbox),缩放);%显示最终图像img = insertShape (img,“矩形”,bbox,“线宽”,15);图;imshow (img);标题(“DetectedMask”);

显示代码结果的屏幕截图。这是检测掩模位置的合理工作。

对于这些样本图像,这段代码可以很好地检测掩模的位置,但现在我想把这个算法应用到整个训练数据集。使用成像标签机,我们可以自动化这个过程。我们可以使用自定义算法来标记和识别感兴趣的区域——快速修改任何不完美的边界框——并导出所有训练图像的边界框。这里是一个短剪辑显示自动标签imageLabeler:
在训练之前,我们需要执行几个步骤,如将数据划分为训练、验证和测试集,确定锚盒估计,并实现数据增强以提高鲁棒性和准确性。在这些数据准备过程之后,我们就可以进行培训了。我决定训练各种物体探测器并比较结果。这些探测器需要大约一个小时的训练,我们可以在下一步对结果进行比较。

比较训练算法

使用MATLAB住编辑控件,您可以快速切换网络和定制的深度学习训练或测试与最小的代码更改。
住编辑控件,您可以为每个项分配一个值,然后在选中该选项时编写代码(如上所示)。对于这个示例,每个网络都分配了一个简单的值1,2,3,如下所示。
研究中有许多目标检测算法;我选择实现像YOLO v2和SSD这样的一级检测器,用于对训练模型进行实时推理。对于这些检测器,我们不需要在将图像馈送到像RCNN系列这样的网络之前实现区域建议提取过程。在本演示中,我优先考虑了推理精确性差;这些考虑因素使我想到了适用于此应用的YOLO v2和SSD探测器。这两种探测器都能很好地检测面具,如下所示。
比较SSD和YLO v2探测器。

生成加速推理的代码

在下面的视频中,你可以看到在左上角捕获的不同帧率。是什么造成了速度上的差异?左边的视频是在MATLAB的GPU上运行代码,右边的视频是运行代码转换为优化的CUDA在MATLAB中。
虽然生成代码对于本演示是可选的,但我观察到生成CUDA MEX执行以下操作:
  • 大约比在MATLAB中运行代码的CPU快8倍
  • 大约比在MATLAB中运行代码的GPU快2倍(注意,我在演示中使用的是带有闪电连接的外部GPU)
您可以访问完整的代码
我希望您喜欢了解如何创建自定义遮罩检测器。通过使用预训练的对象检测算法,它可以很容易地在MATLAB中实现。请在下面留下问题或评论。
|
  • 打印
  • 发送电子邮件

コメント

コメントを残すには,此処をクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。