深度学习

理解和使用深度学习网络

应用响应Covid-19:掩模检测

今天的帖子来自万宾歌,在Mathworks韩国办事处的应用工程师,这里谈谈工程师如何与新的和创新应用程序对Covid-19大流行作出反应。请注意Chrome是推荐的浏览器以获得最佳视频查看体验。
与Covid-19研究相关的深度学习应用程序急剧增加,部分原因是公开可用数据集的普及和可用性。
  • 胸部/蒙特利尔大学的胸部X射线数据集(关联
  • White House的文章和文件数据集(关联
  • 研究论文数据集(关联
  • Covid-19跟踪数据集(关联
深度学习研究人员现在有许多应用程序,许多样本代码正在变得可用,因此我想介绍一下我使用MATLAB的Covid-19创建的两个新演示。此博客帖子将专注于第一个演示:掩模检测。

掩模检测

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

自动图像标注

它可能是标记所有培训图像的耗时过程。我们可以半自动掩盖标签的过程吗?以下是方法:我们知道我们可以使用普里雷托的面部探测器(有许多探测器可用)来检测具有合理精度的面孔fileexchange.,在电脑视觉工具箱)。理论是我们可以使用面部的下半部分检测面罩应该是的。下图显示了作为一组步骤的工作流程:

显示用作掩模检测器训练的输入的自动检测掩模。从佩戴面膜(左)的图像开始,检测面部(中央),检测面罩为面部的下半部分(右)。

要创建一个自动化算法,我们需要使用数据集中的样本图像进行测试。我们通过创建一个imageDatastore,下载和导入佩戴物探测器。(请注意,计算机视觉工具箱中还有一个面部探测器,但我想用Caffe展示与Caffe的互操作性。)通过分析面部探测器预测的边界框的下部,我们可以看到该方法非常适合面具标签。
%创建imageageatastore以收集所有培训图像imds = imageageataStore(“samplemaskdata \”)%请将“samplemaskdata”更改为培训数据位置
从Caffe进口佩带的面部探测器
%导入佩带的面部探测器faceyolonet = ImportCEnfenetwork('opment \ net_face_yolo_deploy.prototxt',...'models \ net_face_yolog.caffemodel','outputlayertype','回归');保存net_face_yolog.mat faceyolonet.
接下来,读取样本图像,检测面部,并使用边界框的底部为近似掩码位置。
img =读(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_yolo.mat');%找到边界框的一半bbox(:,4)= bbox(:,4)./2 + 20;BBOX(:,2)= BBOX(:,2)+ BBOX(:,4) -  20;BBOX(:,3)= BBOX(:,3)+ 20;bbox = bboxresize(圆形(bbox),scale);%显示最终图像img = insertshape(img,'矩形',bbox,'linewidth',15);数字;imshow(img);标题('侦察扫描');

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

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

比较训练算法

使用matlab.实时编辑控件,您可以快速在网络之间切换并使用最小的代码更改自定义深度学习培训或测试。
实时编辑控件,您可以分配每个项目的值,然后在选择该选项时编写代码(上图)。对于此示例,每个网络被分配1,2,3的简单值,如下所示。
研究中有许多对象检测算法;我选择实现1级探测器,如YOLO V2和SSD,用于实时推理训练型型号。对于这些探测器,我们不需要在将图像送入像RCNN系列之类的网络之前实现区域提案提取过程。对于该演示,我优先考虑推断速度超过准确性;这些考虑因素导致我的yolo v2和ssd探测器进行此应用。两个探测器都非常适用于检测如下所示的面罩。
比较SSD和YOLO V2探测器。

生成代码来加速推理

您可以在以下视频中看到不同的帧速率在左上角捕获。速度差异是什么?左侧的视频正在MATLAB中的GPU上运行代码,右侧的视频正在运行代码转换为优化的CUDA在matlab。
在生成代码对于此演示是可选的,我观察到生成CUDA MEX执行:
  • 比在MATLAB中运行代码的CPU大约8倍
  • 比MATLAB中的代码运行的GPU大约2倍(注意我使用外部GPU与此演示的雷电连接)
你可以访问完整的代码
我希望您喜欢看如何创建自定义掩码探测器。通过使用佩带的物体检测算法,在Matlab中实现相当容易。留下下面的问题或评论。
|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。