基于深度卷积神经网络的卡车装载矿石量估计研究
Study on the Estimation of Ore Loading Quantity of Truck Based on Deep Convolutional Neural Network
收稿日期: 2017-09-15 修回日期: 2018-03-16 网络出版日期: 2019-03-11
基金资助: |
|
Received: 2017-09-15 Revised: 2018-03-16 Online: 2019-03-11
作者简介 About authors
郭昭宏(1995-),男,四川广元人,硕士研究生,从事数字矿山方面的研究工作
关键词:
Keywords:
本文引用格式
毕林, 李亚龙, 郭昭宏.
BI Lin, LI Yalong, GUO Zhaohong.
运载计量是矿山的一项日常生产管理工作。运载计量一般采用人工方法进行统计,但是人工统计不具有客观性,可能影响卡车司机的工作量考核;此外还有使用激光扫描技术或地磅来精确测量矿石量,这些方法的测量精度和效率较高,但测量设备购置和系统维护成本高。相比之下,使用人工智能技术可以低成本、便捷和自动化地实现测量运载计量,其边际成本几乎为零,只需在新的测量点添置摄像头,卡车不用像地磅称重那样停下来,实现过程不需要人工参与。
高如新等[1]基于双目立体视觉技术,对传送带上的煤堆体积进行了测量;毛琳琳[2]基于双目立体视觉技术,对矿山、港口和粮仓等大堆物料进行了测量。双目立体视觉技术的原理是通过获取同一场景下2个角度的照片,对场景中特征点在图片中的位置进行匹配,然后计算出各个特征点的三维坐标,最后计算出煤堆的体积。影响双目立体视觉技术测量准确度的因素有:摄像机标定的精度,立体匹配的精度,煤堆体积计算离散化方法引入的误差等。但是该方法对拍摄图片的质量要求较高,体现在2个方面:一是煤堆周围不能有遮挡物,否则一定会影响煤堆的三维重建;二是煤堆所在的背景对测量结果的影响很大,也就是说如果背景中存在其他物体,需要对煤堆做分割预处理,而分割的效果又会影响测量的值。
以上问题说明本文所研究的问题不适合用双目立体视觉技术来解决,因其应用场景与本文所研究的问题差别较大,具体表现为卡车车斗壁挡住了矿石堆的下半部分,并且图片的背景较为复杂。近年来,深度学习技术得到了很大发展,被越来越多地应用于许多行业,用以解决图像和语音识别的问题。本文提出了一个基于深度学习的卡车装载矿石量估计方法,选择合适的网络构建深层卷积神经网络拟合实验样本。
1 数据准备
1.1 物理引擎
本文采用基于深度卷积神经网络的方法估计卡车装载矿石量。在深度学习领域,为了使实验结果具有更好的拟合效果,通常需要大量实验样本,在本实验中样本即为固定角度的卡车装载矿石照片。在实际矿山中,获取大量样本照片比较困难,故采用虚拟物理引擎的方法来模拟现实世界。通过使矿石单元从不同方位降落至卡车车斗内,从而形成具有不同形状的数据样本。
物理引擎是用于创建虚拟场景的程序,这个虚拟场景中物体的运动满足物理定律[3]。此虚拟环境中的物体会受到重力以及物体之间相互碰撞的作用力的影响,物理引擎会计算处于这个虚拟环境中的物体所受的力以及运动轨迹。Chrono是一个跨平台的基于物理的建模与仿真基础设施,支持C++、Python和MATLAB接口。Chrono的核心是Chrono:Engine这个中间件,其C++接口可用于开发仿真软件。实验中,各个矿石单元的物理属性计算由Chrono:Engine模块完成,比如速度、位移和坐标等。Irrlicht引擎[4]是一个用C++书写的高性能实时的3D引擎,跨平台且具有良好的移植性。矿石单元下落可视化部分由Chrono:irrlicht模块完成,所以代码部分重点需要调用Chrono:irrlicht模块。Irr命名空间下定义了所有的Irr引擎文件,引擎文件包括五大模块,每个模块都有自己的命名空间,分别是Irr:Core模块,Irr:Io模块,Irr:Gui模块,Irr:Scene模块和Irr:Video模块。
Irr各模块的功能解释如表1。
在Irr的设计中,处理的基本单元是一个个场景节点,sceneManager管理这个场景节点。Irr引擎使用流程如图1所示。
表1 Irr各模块功能
Table 1
模块 | 功能 |
---|---|
Core | 包括一些核心引擎类,各种数据结构,自定义结构类型 |
Gui | 包括一些常用的图像用户接口类,实现了各种常用控件 |
Io | 一些输入输出,xml,zip,ini文件读写等操作接口 |
Scene | 负责管理场景,包括场景节点,摄像机,粒子系统,公告板,Mesh,灯光,动画器,地形等大部分的3D功能 |
Video | 负责设置视频驱动,渲染2D和3D场景,控制纹理,灯光,材质,顶点,图片等渲染属性 |
图1
首先通过调用CreatDevice函数,获取一个IrrlichtDevice类的对象,这样就创建了一个设备,这个对象是使用这个引擎的根对象;然后从设备中获取视频设备(IVideoDriver类的对象),场景管理器(ISceneManager类的对象)和用户图形环境(IGUIEnvironment)的指针并存储起来;接下来便可以调用ISceneManager类的getMesh方法导入模型文件,并创建场景节点显示。Irrlicht引擎支持.obj等格式的模型文件。接着需要设置摄像头观察的目标点和摄像头的空间坐标。最后调用IvideoDriver类的beginScene方法将屏幕以指定的颜色深度和缓冲清空,使用图形用户接口(GUI)和场景管理器在内存中绘制场景,调用IvideoDriver类的endScene方法将内存中的数据绘制到屏幕上。结束时调用IrrlichtDevice类的drop方法释放掉创建的设备。
1.2 生成样本
实验中设置正方体为矿石单元,其尺寸在一个范围内随机生成,以矿石单元的总数量作为卡车装载的矿石量。将3DMax制作的卡车模型导出为obj格式文件,再将obj格式的文件作为新的场景节点导入irrlicht引擎。卡车模型不是Chrono物理系统中创建的物体单元(ChBodyEasy),无法与矿石单元交互,所以矿石并不会停留在卡车车斗中。因此需要创建底部封闭的容器加入到Chrono物理系统(ChSystem)中,并且容器的尺寸和位置与卡车车斗相匹配。将矿石块体单元在卡车车斗内的最终堆叠状态保存作为样本。各物体单元的参数如表2所示。
表2 各物体单元参数
Table 2
物体 | 尺寸(分别为x,y,z方向) | 坐标(x,y,z) |
---|---|---|
容器底板 | (10,0.1,24) | (0,0,0) |
容器侧板1 | (0.1,5.5,24.01) | (-5,2.75,0) |
容器侧板2 | (0.1,5.5,24.01) | (5,2.75,0) |
容器侧板3 | (10.1,5.5,0.1) | (0,2.75,-12) |
容器侧板4 | (10.1,5.5,0.1) | (0,2.75,12) |
矿石单元 | (0.8~0.9,0.8~0.9,0.8~0.9) | (-3~3,5~15,-10~10) |
其中,摄像机的观察点为(0,0,-5)。坐标系如图2所示。
图2
实验共生成4批数据,这4批数据在Z方向的范围不同,矿石单元的下落初始位置在设置范围内随机生成,同一批数据样本中矿石单元数量不重复。各批次数据参数具体设置见表3。
表3 各批次数据参数设置
Table 3
数据批次 | 坐标范围 | 矿石单元数/个 | 样本数/个 |
---|---|---|---|
一 | (-3~3,5~15,-10~10) | 0~999 | 1 000 |
二 | (-3~3,5~15,-10~0) | 0~599 | 600 |
三 | (-3~3,5~15,-5~5) | 0~599 | 600 |
四 | (-3~3,5~15,0~10) | 0~599 | 600 |
从表中可以看出,第一批数据的矿石单元下落位置均匀分布在矿车车斗上方;第二批数据的矿石单元下落位置集中在靠车头一侧;第三批数据的矿石单元下落位置集中在车斗中部;第四批数据的矿石单元下落位置集中在靠车尾一侧。4批数据共计2 800个样本。
实验训练集与测试集比例为3∶1。为使测试样本分布均匀,测试样本组成如表4所示。
表4 测试样本组成
数据 批次 | 矿石单元数/个 | 样本数/个 |
---|---|---|
一 | 0~49,200~249,400~449,600~649,800~850 | 250 |
二 | 100~149,300~349,500~549 | 150 |
三 | 50~99,250~299,450~499 | 150 |
四 | 150~199,250~399,550~599 | 150 |
2 基于卷积神经网络的矿石量估计
2.1 构建DCNN网络
表5 深度卷积神经网络结构参数
Table 5
层名称 | 特征输出 | 核尺寸/步长 | 填充 | 权重参数量 |
---|---|---|---|---|
卷积层1 | 256*256*32 | 5*5/1 | 2 | 2 400 |
最大池化层1 | 177*177*32 | 3*3/2 | 0 | 9 220 |
卷积层2 | 177*177*32 | 5*5/1 | 2 | 25 600 |
平均池化层2 | 87*87*32 | 3*3/2 | 0 | 9 220 |
卷积层3 | 87*87*64 | 5*5/1 | 2 | 51 200 |
平均池化层3 | 47*47*64 | 3*3/2 | 0 | 18 430 |
全连接层 | 1 | - | - | 141 380 |
图3
2.2 向前计算
网络中卷积层的输出[11]定义为
卷积层用几个可训练的卷积核与输入的特征图进行卷积,再通过激活函数得到输出的特征图,输出的每个特征图可能是与多个输入特征图卷积而来。
一个池化层产生输入特征图的一个下采样层。如果有n个输入特征图,就会产生n个输出特征图。down(.)表示一个子采样函数,一个典型的函数是对输入特征图中的n*n大小的像素块求平均,这样输出特征图在每个维度上都减小n倍。
Relu函数定义如式(3)所示。在采用随机梯度下降优化参数时,用Relu激活函数的训练速度比tanh或sigmoid这些非线性函数要快许多,深度神经网络用Relu的训练速度比tanh快几倍[13]。
网络在池化层后接一个局部响应归一化层,一般用Relu作为激活函数时不需要用局部归一化,因为Relu可以避免神经元出现饱和(saturating)的现象,只要有一些大于零的输入,学习过程就可以发生在这些神经元上。但是Relu后使用局部归一化也能够提高网络的泛化能力。局部响应归一化的过程是当前卷积核的激活值除以附近n个卷积核激活值的平方和的若干倍的若干次方,定义为
式中:求和操作是针对附近n个特征图中对应位置的激活值,N是该层中特征图的数量,在训练开始前卷积核的顺序是随机的[14]。
2.3 梯度计算
该网络的代价函数使用均方误差代价函数,定义为
因为整个数据集的误差是单个样本误差之和,所以针对单个样本考虑误差反向传播的过程,则第n个样本的误差定义为
在传统的全连接层中,可以用如下形式的反向传播公式计算E对每个权重的偏导。用l表示当前层,用L表示输出层,定义当前层的输出[15]:
在网络中反向传播的误差可以看作是每个神经元对bias扰动的灵敏度,可表示为:
然后,用
网络结构中每个卷积层后接一个池化层,设卷积层为第l层,池化层为第l+1层,反向传播算法为了计算第l层中神经元的偏导值,应当首先对l+1层中与当前神经元相连的神经元的偏导值求和,然后乘以这些连接在l+1层中定义的权值。接着乘以激活函数对当前神经元输入的导数值。由于卷积层后接池化层,l+1层中神经元的偏导
式中:
笔者得到了l层的敏感度map,可以通过对
最后,通过反向传播求卷积核的梯度。正如求偏置的梯度一样,卷积核是被多个连接所共享的,因此需要对所有连接传递的梯度求和得到卷积核权重的梯度:
这里通过旋转敏感度map进行相互作用计算,并且要再次旋转返回到原来的位置,这样下次进行前向计算时卷积核的位置才是正确的。
3 实验及分析
3.1 实验参数与实验平台
利用物理引擎生成的样本共2 800张,按照3∶1的比例将所生成的样本划分为训练集和测试集,测试样本的组成如表3所示,剩余样本用于训练。对样本的标签值进行归一化处理(将装载量除以最大可能的装载量形成0~1之间的数值),例如有500个矿石单元的样本标签值为0.5。
DCNN网络的训练参数设置如下:最大迭代次数MaxIter设置为4 000,学习率α设置为0.001,动量因子μ设置为0.9,正则项系数WeightDecay设置为0.004,优化算法采用Nesterov[18]。
实验拟采用GTX TITAN X GPU GeForce硬件平台以及深度学习框架Caffe软件平台。作为一种高效的深度学习框架,该方法使用Protobuf配置文件定义网络结构,能够有效支持卷积神经网络,实现在GPU上的高速运算。另外,Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口,可以在CPU和GPU直接无缝切换。
3.2 可视化分析
图4
从图中可以看出,第一层卷积核没有明显的提取边缘特征,但是有明显的颜色特征。比如黄色的卷积核是提取了卡车的颜色信息,与背景颜色相近的卷积核是提取了背景信息,颜色较暗的卷积核则是提取了矿石信息。
图5所示为提取卡车颜色信息的卷积核。其中,上部分是卷积核图,下部分是对应的特征图。左半部分是提取卡车信息的图,可以明显看出卡车车身的轮廓,因为卡车车身的颜色与卷积核的颜色相匹配;右半部分是提取背景信息的图,可以看出卷积核的颜色与图片的背景色很接近,于是所对应的特征图里显示的是背景信息。
图5
以上关于矿石信息、车身信息和背景信息的观察表明每个卷积核所提取的特征均不相同,而提取矿石信息的卷积核有效保证了模型对矿石量估计的可靠性,同时也说明模型较好地学到了相关特征。
3.3 实验结果
该DCNN网络训练与测试的Loss在迭代过程中的变化情况如图6所示。
图6
实验基于Caffe平台,显卡是GTX TITAN X GPU GeForce,网络训练时间为20 min,测试单张图片的时间约为0.2 s。实验数据显示,测试和训练误差在10-4量级,因此平均误差大概在10-2量级,这样的误差对于实际应用是完全可以接受的。
一般来讲,计算机对矿石量的识别误差在10%以内是可以接受的。当绝大部分的预测误差在此范围内时,说明模型达到了理想的优化结果。故以该网络模型在测试集上的误差分布来衡量模型的性能,该网络模型在测试集上样本的误差分布如图7所示。
图7
横轴表示预测值与真实值之差的绝对值,纵轴表示误差在该区间的样本数量。从图中可以看出,大部分样本的误差在4%以内,几乎所有的样本误差都在10%以内,表明该网络模型已经足够好地拟合了实验的数据集。
4 结语
本文的实验结果说明卷积神经网络可以解决卡车装载矿石量估计这样的回归问题,同时也证明了用深度学习的方法对实际场景下卡车装载矿石量进行估计的可行性。本文所构建的卷积网络在实验所用的数据集上预测准确度很高(大部分测试样本误差在4%以内),在实际应用中完全可以接受。通过可视化特征图与卷积核可以看到部分卷积核关注矿石区域的信息,这对于理解卷积网络解决该问题的过程有所帮助。
本文的实验效果虽然理想,但数据集中图片背景比较单一,而光照、拍摄角度等因素对自然场景下拍摄的图片有较大影响,背景发生变化可能影响图像识别的效果。如果矿石单元在卡车车斗内存在凹形,则通过单角度识别图像来估计矿石量也可能有较大误差。后续的研究可以考虑在复杂背景下进行矿石单元的识别,并且多角度拍摄自然场景下的矿体,以多角度的图片作为输入信息,考虑多角度图片的融合问题,并且考虑将卡车先检测出来之后再进行网络参数的训练。
参考文献
基于双目立体视觉的煤体积测量
[J].
Volume measurement of coal based on binocular stereo vision
[J].
基于双目立体视觉的大堆物料体积测量方法研究
[D].
Research on Measurement Method for Piles of Material Volume Based on Binocular Stereo Vision
[D].
虚拟现实中物理引擎关键技术的研究与应用
[D].
Research and Application of Physics Engine Key Techniques in Virtual Reality
[D].
基于Irrlicht引擎的3D游戏的设计与实现
[D].
Design and Implementation of 3D Game Based on the Irrlicht Engine
[D].
Gradient-based learning applied to document recognition
[J].
A fast learning algorithm for deep belief nets
[J].
Deep,big,simple neural nets for handwritten digit recognition
[J].
A Logical Calculus of the Ideas Immanent in Nervous Activity
[M]
End-to-end text recognition with convolutional neural networks
[C]
A convolutional neural network cascade for face detection
[C]
Backpropagation applied to handwritten zip code recognition
[J].
Noisy activation functions
[C]
Batch normalization:Accelerating deep network training by reducing internal covariate shift
[C]
Notes on convolutional neural networks
[R].
Understanding the difficulty of training deep feedforward neural networks
[J].
Rectified linear units improve restricted boltzmann machines
[C]
A differential equation for modeling nesterov’s accelerated gradient method:Theory and insights
[J].
AtomNet:A deep convolutional neural network for bioactivity prediction in structure-based drug discovery
[J].
ImageNet classification with deep convolutional neural networks
[J].
Visualizing and understanding convolutional networks
[C]
/
〈 |
|
〉 |
