项目背景简介
我国沿海地区,有很多盐场,通过圈围海水或高盐度井水的方式,在太阳下暴晒,使水分蒸发掉,逐渐结晶形成固态的盐。目前我国圈围式晒盐还采取较为传统的人工巡视方式,还没有相关的深度学习解决方案。
能否利用人工智能将盐田的状态数据进行图像分类、观测分析然后将数据结果送至用户,代替人工巡视?这样只需要浏览手机提示就可获得便捷的通知,不仅减少了劳动力需求还可以获得更加精确的消息从而实现无人化、自动化、智能化管理。
技术简介
我们计划为每个盐田编号并利用图像识别技术,实时观测盐田中卤水的水量和卤水的结晶程度,精确地处理数据并将数据传输给管理人员。我们可以通过设备实时观测盐田中卤水的高度、水量和盐的结晶程度,通过对这些数据的整合,分析出什么时候该加水,什么时候该搂盐,什么时候可以捞盐归坨,还可以计算出盐的产量,判断盐的品质,大大的提高了出盐效率。
1.采集数据阶段
实验初始阶段,我们用手机拍照的方式获取初始数据,对盐田不同阶段、不同光照环境下的状态进行大量拍照取证,通过对相似的数据保留,对个别特殊情况建立特殊数据集通过将数据经整理后存入数据集,这也是目前为止AI Studio唯一的盐田图像数据集。
本次使用的数据集分类如下:
2.数据预处理
采集完数据后我们进行数据的预处理操作, 训练图片的预处理可以提高模型的泛化能力和识别能力,有些照片可能因为拍摄角度不同,或者光照原因影响识别,对其进行数据增强将有助于避免该问题。
对数据集生成固定格式的列表,格式为:图片的路径图片类别的标签。
对数据类别进行统计等
划分训练集和测试集,各个类别中每隔十张选取一张作为测试集,并将数据集生成固定格式列表。
3.确定采用的模型
神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,网络的泛化能力也将大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,因此我们需要对数据都要做一个归一化预处理。
定义一个常规卷积层
为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等。基于这个目标,现在我们就去推导一下:每一层的权重应该满足哪种条件。“Xavier”初始化方法是一种很有效的神经网络初始化方法。
本项目借鉴Google的Inception模型,Inception模型主要为了解决CNN分类模型的两个问题。
改进后的inception结构使用较小的卷积核去替代较大的卷积核。
最后定义深度可分离卷积, 主要是分为了两个过程:逐通道卷积、逐点卷积,逐点卷积的运算与常规卷积运算非常相似。
4.模型训练
(1)模型网络结构:
将上方定义好的这些函数进行调用,最终得到salt-ConvNet卷积神经网络的结构
定义一个执行器,把个个部分串联起来,也是整个模型的重要部分。
(2)进行模型训练:
训练三十轮
最后将训练好的模型保存,便于之后的调用与移植。
5.效果展示
加载好训练的模型,对某一特定输入的盐田图片进行测试。
单帧图片推理效果:
测试结果大部分还是比较接近实际照片。至此,我们已经得到了不同状态下的盐田图像分类模型,最后部署到百度大脑EdgeBoard即可实现由机器图像识别代替工人巡视了。
通过对每块盐田进行划区域标号在各区域安放图片采集摄像机。每隔30分钟自动拍照并传至内部微型计算机,通过与事先设定好的模型图象数据集进行比对,判断是否达到操作标准、判断何时对盐田进行相应的加水、搂盐和捞盐等技术处理,最终将处理结果展示在管理端对工人进行提示操作,实现时效性(流程如下图所示)。
最后来看我们实现的系统吧。
6.总结
本项目的核心即重点图像分类模型的训练,此部分由飞桨深度学习平台完成。通过图像识别,能初步对大面积盐田的状态以及产量进行估测。采用智能化管理每个管理员都可以管理更多的盐田,经济可靠、节省人工成本、方便用户使用。
以上代码可直接在百度AI Studio 上fork我的项目来运行:
https://aistudio.baidu.com/aistudio/projectdetail/2196524
长按下方二维码立即
Star
更多信息:
飞桨官方QQ群:793866180
飞桨官网网址:
www.paddlepaddle.org.cn/
飞桨开源框架项目地址:
GitHub:
github.com/PaddlePaddle/Paddle
Gitee:gitee.com/paddlepaddle/Paddle
欢迎在飞桨论坛讨论交流~~
http://discuss.paddlepaddle.org.cn