人工智能

应用机器学习和深度学习

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

今天的文章来自MathWorks韩国办公室的应用工程师宋万斌,在这里谈论工程师们如何用新的创新应用程序应对COVID-19大流行。请注意Chrome是推荐的浏览器,以获得最佳的视频观看体验。
与COVID-19研究相关的深度学习应用急剧增加,部分原因是公开数据集的普遍存在和可用性。
  • 胸部x光数据集,来自世界卫生组织/蒙特利尔大学(链接
  • 文章和文件数据集来自白宫(链接
  • 研究论文数据集(链接
  • COVID-19跟踪数据集(链接
现在,深度学习研究人员对许多应用程序感兴趣,并且有很多示例代码可供使用,所以我想介绍两个我为应对COVID-19而使用MATLAB创建的新演示。本文将重点介绍第一个演示:掩码检测。

掩码检测

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

自动图像标注

标记所有训练图像可能是一个耗时的过程。掩模贴标过程能否实现半自动化?方法是这样的:我们知道我们可以使用预先训练的人脸检测器以合理的精度检测人脸(有许多检测器可用FileExchange,在计算机视觉工具箱).理论是我们可以用脸的下半部分来检测口罩应该放在哪里。下图显示了工作流的一组步骤:

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

为了创建一个自动化算法,我们需要使用数据集中的样本图像进行测试。我们通过创建一个imageDatastore,下载并导入预先训练好的人脸检测器。(请注意,在计算机视觉工具箱中也有一个人脸检测器,但我想演示与Caffe的互操作性。)通过分析人脸检测器预测的边界框的下半部分,我们可以看到该方法非常适合于面具标记。
创建imageDatastore收集所有训练图像imds = imageDatastore("SampleMaskData\")请将“SampleMaskData”更改为您的训练数据位置
从Caffe导入预先训练好的人脸检测器
导入预先训练的人脸检测器faceYoloNet = importCaffeNetwork('models\net_face_yolo_deploy.prototxt',…“模型\ net_face_yolog.caffemodel”、“OutputLayerType’,‘回归’);拯救net_face_yolog。垫faceYoloNet
接下来,读取样本图像,检测人脸,并使用包围框的下半部分作为掩模的近似位置。
Img = read(imds);Ori_sz = size(img,[1 2]);Re_sz = [448 448];Imgr = imresize(img,re_sz);Scale = ori_sz ./ re_sz;%检测面部bbox = predictFace(imgr,' net_face_yoloo .mat');查找包围框的下半部分Bbox (:,4) = Bbox (:,4) ./2 + 20;Bbox (:,2) = Bbox (:,2) + Bbox (:,4) - 20;Bbox (:,3) = Bbox (:,3) + 20;Bbox = bboxresize(round(Bbox),scale);显示最终图像img = insertShape(img,'Rectangle',bbox,'LineWidth',15);图;imshow (img);标题(“DetectedMask”);

显示代码结果的屏幕截图。这可以很好地检测掩码位置。

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

比较训练算法

使用MATLAB实时编辑器控件,您可以在网络之间快速切换,并以最小的代码更改自定义深度学习训练或测试。
实时编辑器控件,您可以为每个项目分配一个值,然后在选择该选项时编写代码(如上)。在这个例子中,每个网络被分配了一个简单的值1,2,3,如下所示。
目前正在研究的目标检测算法有很多;我选择实现YOLO v2和SSD这样的一级检测器,用于训练模型的实时推断。对于这些检测器,我们不需要在像RCNN系列那样将图像输入网络之前实现区域建议提取过程。对于这个演示,我优先考虑推理速度而不是准确性;这些考虑使我为这个应用程序选择了YOLO v2和SSD检测器。这两个探测器都能很好地探测掩模,如下所示。
SSD和YOLO v2检测器比较。

生成代码以加速推理

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

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。