1 前言
口罩作为常用的医疗用品,一直坚守在人们健康卫生的第一防线。食堂打饭,比手抖更可怕的是阿姨不戴口罩的亲切问候;工厂生产,为了避免粉尘危害呼吸道,戴口罩也是对员工规范操作的基本要求;尤其是近几年疫情影响,口罩更是成为生活必需品,逛商场、公园必须戴口罩,乘坐公共交通工具必须戴口罩,进去医院、食堂等公共场所更是必须戴口罩。
当戴口罩成为基本操作时,总有人不能很好的执行,为了监督落实,往往会增加工作人员,负责检查戴口罩情况,我退休2年的二大爷很荣幸收到某公园邀请返聘担任该职责。
刚开始一个月,二大爷干的很开心,看到有大爷大妈没戴口罩就拿着小旗子把别人拦下,从国家政策聊到国际形势,最后想起来劝别人戴口罩。后来大爷大妈看到二大爷拿着小旗走过来就赶紧戴上口罩,二大爷值班一天都没机会开口讲话,很郁闷,然后玩起了手机,但是又担心有人不戴口罩趁他不注意混进去了,回来让我们想想办法。
三大爷以他多年菜市场卖菜的经验,送了他一个大喇叭,让他拿着反复播放“入园请佩戴好口罩”的提示音。可是公园乃清净养心之地,这大喇叭整天喊总有一天要被投诉。结果没等别人投诉,二大爷自己都听的受不了,又跑来找到我,说你们都讲科技向善,倒是来帮帮我这个退休老人啊!
我想是时候该我出手了,解放双手、释放劳动力、提升工作效率。我打算训练一个模型,用来检测人脸是否戴口罩。判断人脸是否戴口罩属于图像分类问题,由于之前没做过CV,所以还要学习一下,并把背景知识和操作过程记录下来,便于二大爷亲自上手。
2 图像分类
图像分类是计算机视觉中最基础的一个任务,图像分类的目标就是将不同图片划分到不同类别,实现最小的分类误差。在这个过程中存在诸多挑战,但机遇与挑战并存。近年来随着深度学习技术的兴起,图像分类得到飞速发展,并延伸出一系列的研究方向,如:多类别图像分类,细粒度图像分类,多标签图像分类,无/半监督图像分类,零样本图像分类等。简单来说,就是从已知的类别标签集合中为给定的输入图片选定一个类别标签。
图像分类常用数据集:猫狗识别、鸢尾花识别、手写字识别。
以猫狗识别举例,假设我们的类别集为{cat,dog,other},给出一张图:
分类模型将给该图像分配标签,并给出每个标签的概率,如:{dog:96%,cat:3.5%,other:0.5%},根据概率,我们知道该图像中的动物是狗。
口罩检测也一样,我们有两个结果集:{unmask,mask},通过给定的人脸照片,判断unmask和mask的概率。
图像分类常见的技术难点有以下几点:
(1)视角变化:同一个物体,摄像机可以从多个角度来展现。
(2)大小变化:物体可视的大小通常是会变化的。
(3)形变:很多东西的形状并非一成不变,会有很大变化。
(4)遮挡:目标物体可能被挡住。有时候只有物体的一小部分是可见的。
(5)光照条件:在像素层面上,光照的影响非常大。
(6)背景干扰:物体可能混入背景之中,使之难以被辨认。
(7)类内差异:一类物体的个体之间的外形差异很大,比如椅子。这一类物体有许多不同的对象,每个都有自己的外形。
传统图像分类问题的处理主要涉及三部分关键步骤:
(1)数据预处理
(2)图像特征
(3)分类模型
常见图像分类算法有:KNN、SVM、BP神经网络、CNN
涉及到的知识挺多的,为了快速高质量解决问题,并且让二大爷零门槛入门,我选择了EasyDL零门槛AI开发平台。
3 EasyDL
EasyDL从2017年11月中旬起,在国内率先推出针对AI零算法基础或者追求高效率开发的企业用户的零门槛AI开发平台,提供从数据采集、标注、清洗到模型训练、部署的一站式AI开发能力。对于各行各业有定制AI需求的企业用户来说,无论您是否具备AI基础,EasyDL设计简约,极易理解,最快5分钟即可上手学会,15分钟完成模型训练。
您采集到的原始图片、文本、音频、视频、OCR、表格等数据,经过EasyDL加工、学习、部署后,可通过公有云API调用,或部署在本地服务器、小型设备、软硬一体方案的专项适配硬件上,通过离线SDK或私有API进一步集成,流程如下:
其中,**EasyDL 图像,**支持定制基于图像进行多样化分析的AI模型,实现图像内容理解分类、图中物体检测定位等,适用于图片内容检索、安防监控、工业质检等场景。其中图像分类正是我们遇到的问题。
且支持公有云API、本地服务API和SDK的部署方式,方便我们低成本解决问题。
EasyDL不需要关注算法本身,零门槛、低成本、高精度的特性能够在最短时间帮我们解决问题。
接下来喊二大爷直接上手!
4 轻松上手
4.1 创建模型
打开EasyDL首页:https://ai.baidu.com/easydl
点击立即使用
可以看到EasyDL目前支持的各种模型类型,我们要做目标人群是否戴口罩的检测,所以选择图像分类
然后创建口罩检测的模型
填写模型名称,选择个人身份,填写邮箱、联系方式和业务描述等基本信息,放心填写,不会收到营销电话,仅用于算力资源额度不足时提醒
4.2 创建数据集
模型创建好后,需要导入数据集并训练模型,我们先创建数据集
填写数据集名称,点击完成
数据集创建完成后,导入数据
选择有标注数据集,由于我们的数据集已经标注好了,分类放在不同的文件夹下,以压缩包的形式准备着,所以选择有标注的数据集,导入方式选择本地压缩包的形式导入。标注形式为文件夹命名分类。选好之后选择上传压缩包
阅读并同意,然后上传压缩包
上传压缩包后,点击确认并返回
可以看到数据集正被导入
导入完成后,可以看到一共有183张图片,标注状态为100%,不需要手动标注
4.3 模型训练
接下来开始训练模型
首先选择我们刚刚创建的数据集
添加刚刚创建的数据集
添加好后,点击确定
接下来设置训练配置
其中,公有云部署训练的模型以公有云API的方式提供,优点是方便自己开发应用,缺点是每个人公有云免费调用额度有限,额度用完了会收费。
我们看到有限时免费的浏览器/小程序部署
选项可选,这种部署方式,模型会下载到本地,通过SDK调用本地模型进行识别,免费的,不占用百度算力资源,可以离线部署,看来可以通过这种方式白嫖了。
选择浏览器/小程序部署
,训练环境选择免费的
点击开始训练,即可看到模型已经在训练中,填了手机号之后训练完成还会短信通知自己
由于我们数据量较少,训练很快,收到训练完成短信通知后,我们回来可以看到模型效果
点击申请发布
,发布模型
模型发布需要一点点时间
等模型发布完成之后,可以看到模型信息
4.4 模型体验
点击下载SDK
得到一个基于Vite的demo,代码结构:
|--public
| |--model
| |--model.json
| |--chunk_1.dat
| |--chunk_2.dat
| |--chunk_3.dat
|--src
| |--components
| |--App.vue
| |--config.json
| |--env.d.ts
| |--label.json
| |--main.ts
| |--modelInfo.json
| |--usePredict.ts
|--index.html
|--package.json
|--READ.md
|--tsconfig.json
|--tsconfig.node.json
|--vite.config.ts
|--yarn.lock
其中public/model下的model.json、chunk_1.dat…chunk_n.dat为模型文件,src下为业务代码,index.html为入口文件
安装依赖:npm install
启动项目:npm run dev
浏览器打开http://localhost:3000
,可以看到主界面
上传图片看下效果
我们可以看到,口罩检测效果还是非常好的。
在这个过程中,我们没有写一行代码,却轻松得到一个口罩检测的工具,二大爷表示,so easy!
5 产品优化
将SDK封装成APP,检测戴口罩概率大于55%时认为已经配戴口罩,否则没有配戴口罩。APP启动时打开摄像头,二大爷对着门口排队的人,每0.5秒自动拍照并检测是否戴口罩,并将结果显示在屏幕右上角
检测到未戴口罩的人时,提示未戴口罩,同时播放语音,提醒对方配戴口罩
6 产品迭代
才过了2天,二大爷又找到我,说APP好用是好用,就是要一直拿着,还不能玩手机,感觉不比原来轻松多少,问我有没有更好的方案。
我拿出祖传的树莓派,说当然有了,有了它你可以下岗了。
二大爷一惊,说那不是还要买摄像头什么的,多麻烦啊,还是算了。
又过了几天,二大爷又兴冲冲的找到我,说保卫处领导说了,这个工具很好,借助科技力量解决工作生活中的问题,是应该得到支持的,希望他老人家继续研究出更好用的产品,不用下岗,可以换岗到健康码检查岗。
一个新的产品在我脑海中已经形成:公园门口第一道闸机检测口罩,检测到人脸正常佩戴口罩闸机才开门,未佩戴口罩则提醒游客佩戴口罩。
现在二大爷每天下班就跟我一起学习,我想起之前看到一个网友问,35岁开始学编码晚不晚?你不妨从EasyDL开始,我二大爷都60多了!
7 参考文献
[1] CS231n Convolutional Neural Networks for Visual Recognition:http://cs231n.github.io/convolutional-networks/
[2] How to Retrain Inception』s Final Layer for New Categories:https://www.tensorflow.org/tutorials/image_retraining
[3] Image Augmentation for Deep Learning With Keras:http://machinelearningmastery.com/image-augmentation-deep-learning-keras/
[4] 飞桨EasyDL:https://ai.baidu.com/easydl
[5] 图像分类算法:https://blog.csdn.net/seek97/article/details/119219087