深度学习

理解和使用深度学习网络

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

今天的帖子来自MathWorks韩国办公室的应用工程师Wanbin Song,在这里谈论工程师如何用新的创新应用应对COVID-19大流行。请注意Chrome是最佳视频浏览体验的推荐浏览器。
与COVID-19研究相关的深度学习应用急剧增加,部分原因是公共可用数据集的普及和可用性。
  • 蒙特利尔谁/谁(链接
  • White House的文章和文件数据集(链接
  • 研究论文资料库(链接
  • Covid-19跟踪数据集(链接
深度学习研究人员现在有许多应用程序,许多样本代码变得可用,因此我想介绍一个使用Matlab的Covid-19创建的两个新演示。此博客帖子将专注于第一个演示:掩模检测。

掩模检测

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

自动图像标签

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

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

为了创建一个自动化算法,我们需要使用数据集中的样本图像进行测试。我们通过创建一个imageDatastore,下载和导入佩戴物探测器。(请注意,在计算机视觉工具箱中也有一个面部探测器,但我想展示与Caffe的互操作性。)通过分析面部探测器预测的边界框的下部,我们可以看到该方法非常适合面具标签。
%创建imagedatastore以收集所有培训图像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,“线宽”,15);图;imshow (img);标题(“DetectedMask”);

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

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

比较训练算法

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

生成加速推理的代码

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

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。