2022百度人工智能创意赛-创新组作品

一、项目背景

1、煤炭行业发展现状

煤炭资源是我国广泛使用的能源之一,它被广泛应用于发电、制热及人们的日常生活中。现在,煤炭占我国能源生产和消费的比例长期在60%以上,在之后很长时间内煤炭资源依旧会是我国的主要能源。煤炭主要采用传送带输送机进行煤炭的输送,所以传送带输送机的运行状况直接影响着煤矿的产能和效率。近年来我国的经济也在进一步转型,煤矿企业也正在改变过去的生产经营模式,大力推广节能降耗技术,提高能源利用率。煤矿井下传送带运输距离远、运输量大、运输时间长,而且因为生产需要,不能随时停机,导致传送带输送机经常无煤空载,不仅浪费了电能,对输送机损害严重,而且影响煤矿的产能和效益。据统计,每年煤矿传送带空载造成的电能亏损占到正常运行电能损耗的30%。

搜狐:智慧矿山

2020年2月国家八部委联合印发了《关于加快煤矿智能化发展的指导意见》,明确了发 展目标、主要任务以及保障措施等内容。到2035年,各类煤矿要基本实现智能化,构建多产业链、多系统集成的煤矿智能化系统,建成智能感知、智能决策、自动执行的煤矿智能化体系。围绕满足“智慧矿山”生产需要,立足煤矿安全、高效、绿色、低碳、智能开采的新形势和新要求,煤矿带式输送机领域的科技创新以高可靠性设计、高效软启动及功率平衡技术、 动态分析技术、智能感知技术、无人巡检技术、智能化运维管理等关键技术为突破口,攻克制约设备在设计、制造和运行过程中的技术瓶颈,加强基础和核心技术研究,实现我国井工和露天煤矿主运输系统的节能低耗和智能化发展。加快智慧矿山、智能化煤矿建设是煤炭工业迈向高质量发展的“新引擎”。

百度百科:数字化矿山

2、井下煤炭输送存在的问题

煤炭在井下开采后,必须通过传送带运输到地面,因此煤流运输是煤炭产业的大动脉,但在目前的运输过程中,存在着以下的问题:

  1. 空载、轻载造成电能浪费:由于煤炭生产的不连续性,使带式输送机常常处于空载、轻载及很少达到满载的运行状态,造成电能浪费,同时加剧了设备磨损;多数煤炭企业服役的带式输送机多是恒速运行模式,没有适时进行调整。
  2. 人工监控工作量大,准确率低:传统的视频监控需要员工时刻守在屏幕前,随着监控视频时间的不断增长、监控范围的不断扩大,员工的工作量也必然会很大,极易产生视觉疲劳,难以达到精密的监控,再加上煤矿井下环境复杂,人工不易分辨运动目标。
  3. 视频图像不清晰:煤矿井下的环境十分特殊,比如粉尘较大、矿灯全天候照明、头灯等,这些因素会导致视频图像质量差、可辨别度低。
  4. 现有检测方法精确度低,成本高:基于超声波测距等使用硬件进行检测的方法不仅成本高,还需要工作人员的定期维护。

二、项目内容

本项目是一个井下煤流视频的智能分析系统,包含传送带运输状态识别和煤流分割两个功能:

(1)传送带运输状态识别:将传送带运行过程分为了“传送带不动,无煤”、“传送带不动,有煤”、“传送带动,无煤(空转)”和“传送带动,有煤”四个状态,使用图像分类模型并结合帧差法实时分析传送带的运行状态,如果监测到传送带长时间处于空转状态,系统将会向用户发送一个报警信号;

(2)煤流分割:为了能够实时监控传送带上煤量的多少,又引入了实时语义分割模型,对传送带和煤流实时进行分割,根据分割结果可以计算出煤炭宽度与整个传送带宽度的占比,以此可以体现出传送带上煤量的占比,方便工作人员对传送带的运行速度做出适时调整,提升了传送带系统运行的经济性。

最后视频监控画面采用了GUI界面设计,可以显示传送带当前的运行状态、该状态本次持续时间、四个状态总共的持续时间、煤量占比、运行状态变化折线图和报警信息等内容,辅助企业实现启停自适应控制、煤量自适应调速、多级协同控制、煤流均衡技术。

1、分类模型训练

1.1、数据集(本项目只展示部分数据)

本项目的数据来源于我们的合作企业——河南省永城市永煤集团股份有限公司新桥煤矿、河南省新乡市-辉县龙田煤业有限公司程村矿。该视频数据均由井下传送带上方的监控摄像头所采集,其分辨率为1920×1080,格式为MP4,帧率为30FPS。我们利用分帧脚本对采集到的视频数据进行抽帧操作,设定每间隔6帧抽取一次图像并保存,共获得2811张图像分类数据,1000张图像分割数据。
我们一共设置了四个类别,如图所示,分别为“传送带不动”、“传送带动”、“无煤”和“有煤”四类,共2811张图像。其中前两个类别的图像在视频抽帧时必须进行帧间差分处理,后两个类别只需要在视频抽帧时保存原图像即可,由于图像分类无需标注工具,我们手动将属于同一类的图片放在同一个文件夹下。

数据文件结构如下:

1.2、模型训练

1.2.1、安装PaddleX

! pip install paddlex==2.0.0

1.2.2、准备分类数据集

!unzip -oq chuansong_dataset.zip -d ./

1.2.3、训练模型

import paddlex as pdx
from paddlex import transforms as T#自定义图像预处理流程transforms
train_transforms = T.Compose([T.RandomCrop(crop_size=224), T.RandomHorizontalFlip(), T.Normalize()])eval_transforms = T.Compose([T.ResizeByShort(short_size=256), T.CenterCrop(crop_size=224), T.Normalize()
])#定义训练和验证所用的数据集
train_dataset = pdx.datasets.ImageNet(data_dir='home/aistudio/chuansong_dataset',file_list='home/aistudio/chuansong_dataset/train_list.txt',label_list='home/aistudio/chuansong_dataset/labels.txt',transforms=train_transforms,shuffle=True)
eval_dataset = pdx.datasets.ImageNet(data_dir='home/aistudio/chuansong_dataset',file_list='home/aistudio/chuansong_dataset/val_list.txt',label_list='home/aistudio/chuansong_dataset/labels.txt',transforms=eval_transforms)#初始化模型,并进行训练
num_classes = len(train_dataset.labels)
model = pdx.cls.ResNet50(num_classes=num_classes)
model.train(num_epochs=10,train_dataset=train_dataset,train_batch_size=32,eval_dataset=eval_dataset,lr_decay_epochs=[4, 6, 8],save_interval_epochs=1,learning_rate=0.025,save_dir='output/ResNet50',use_vdl=True)

1.3、模型效果

训练完成后在路径 output/ResNet50/vdl_log/ 下可以看到生成的log文件。

将log文件下载到本地,使用VisualDL工具可以看到loss与acc1等参数的变化趋势,如图所示。

1.4、保存最佳模型

运行以下指令将最佳模型保存到inference_model_cls中,后续使用paddlex.deploy.Predictor()接口调用

!paddlex --export_inference --model_dir=output/ResNet50/best_model --save_dir=inference_model_cls

2、分割模型训练

2.1、数据集(本项目只展示部分数据)

我们对采集到的视频数据进行抽帧处理,共保存了1000张原始图像。由于语义分割模型是对像素点进行分类,我们设计了“背景”、“传送带”,“煤矿”这三个类别,使用labelme标注软件对保存下来的1000张图像进行标注并生成对应的json文件,通过PaddleX提供的脚本文件对其进行处理,生成可用于训练的8位彩色掩膜图像(像素点以类别0,1,2…进行分布)。为了获得更好的模型效果,我们还使用了Augmentor数据增强库中的随机旋转、随机亮度等方式对原始数据与掩膜图像进行同步扩充,将原始数据扩充到了2000张,原始图像、标注后生成的掩膜图像及可视化融合图像。

数据文件结构如下:

2.2、模型训练

2.2.1、准备分割数据集

! unzip -oq /home/aistudio/conveyor_belt_1.zip
#将json格式数据转换成可用于训练的8位彩图转换后生成的文件夹是conveyor_belt_1_train
! paddlex --data_conversion --source labelme --to SEG --pics ./conveyor_belt_1/pics  \--annotations ./conveyor_belt_1/annotations --save_dir ./conveyor_belt_1_train
!pip install Augmentorimport Augmentor
import os
import shutil#数据增强处理
p = Augmentor.Pipeline("conveyor_belt_1_train/JPEGImages")
p.ground_truth("conveyor_belt_1_train/Annotations")
p.rotate(probability=0.5, max_left_rotation=20, max_right_rotation=20)
p.flip_left_right(probability=0.5)
p.flip_top_bottom(probability=0.5)
p.flip_random(probability=0.5)
p.crop_random(probability=.5, percentage_area=0.9)
p.sample(200)# 数据归类整理
path = "conveyor_belt_1_train/JPEGImages/output/"
img = 'conveyor_belt_1_train/JPEGImages/'
label = 'conveyor_belt_1_train/Annotations/'
img_path = 'conveyor_belt_1_train/JPEGImages/' + '_'
label_path = 'conveyor_belt_1_train/Annotations/' + '_'
if not os.path.exists(img_path):os.makedirs(img_path)
if not os.path.exists(label_path):os.makedirs(label_path)
for file in os.listdir(path):if file[:2] == '_g':shutil.move(path + file,label_path)else:shutil.move(path + file,img_path)
os.rmdir(path)#数据重命名处理
num = 25for img in os.listdir(img_path):for label in os.listdir(label_path):if img[-14:-4] == label[-14:-4]:os.rename(os.path.join(img_path,img),os.path.join(img_path,str(num)+".png"))os.rename(os.path.join(label_path,label),os.path.join(label_path,str(num)+".png"))num += 1
def remove_file(old_path, new_path):filelist = os.listdir(old_path) for file in filelist:src = os.path.join(old_path, file)dst = os.path.join(new_path, file)shutil.move(src, dst)remove_file(r"conveyor_belt_1_train/Annotations/_", r"conveyor_belt_1_train/Annotations")
remove_file(r"conveyor_belt_1_train/JPEGImages/_", r"conveyor_belt_1_train/JPEGImages")
os.rmdir(img_path)
os.rmdir(label_path)
#将语义分割数据集划分为训练集:验证集:测试集=7:2:1
! paddlex --split_dataset --format SEG --dataset_dir conveyor_belt_1_train --val_value 0.2 --test_value 0.1

2.2.2、训练模型

import paddle.optimizer
import paddlex.ppdet.optimizerimport paddlex as pdx
from paddlex import transforms as T#自定义图像预处理流程transforms
train_transforms = T.Compose([T.Resize(target_size=256),T.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
])eval_transforms = T.Compose([T.Resize(target_size=256),T.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
])#定义训练和验证所用的数据集
train_dataset = pdx.datasets.SegDataset(data_dir='conveyor_belt_1_train',file_list='conveyor_belt_1_train/train_list.txt',label_list='conveyor_belt_1_train/labels.txt',transforms=train_transforms,shuffle=True)eval_dataset = pdx.datasets.SegDataset(data_dir='conveyor_belt_1_train',file_list='conveyor_belt_1_train/val_list.txt',label_list='conveyor_belt_1_train/labels.txt',transforms=eval_transforms,shuffle=False)#初始化模型,并进行训练
num_classes = len(train_dataset.labels)
model = pdx.seg.BiSeNetV2(num_classes=num_classes)
model.train(num_epochs=100,train_dataset=train_dataset,train_batch_size=4,eval_dataset=eval_dataset,learning_rate=0.05,save_dir='output/BiseNetV2',use_vdl=True,train_batch_size=4,eval_dataset=eval_dataset,learning_rate=0.05,save_dir='output/BiseNetV2',use_vdl=True,save_interval_epochs=10)

2.3、模型效果

训练完成后,在路径 output/BiseNetV2/vdl_log/ 下可以查看到生成的日志文件。

使用VisualDL工具可以看到loss与miou等参数的变化趋势,可见模型平均的miou为0.978,背景、传送带和煤矿这三类的miou分别为0.994、0.925和0.988,达到了预期的效果。由此可以监控模型是否在正常收敛于最优值

2.4、保存最佳模型

运行以下指令将最佳模型保存到inference_model_seg中,后续使用paddlex.deploy.Predictor()接口调用

!paddlex --export_inference --model_dir=output/BiseNetV2/best_model --save_dir=inference_model_seg

3、结果展示

使用tkinter设计了GUI界面,目前包含如下功能:

  1. 实时显示当前传送带运输机的运行状态(不断闪烁提醒);
  2. 统计当前状态本次持续时间;统计四个状态的总共持续时间;
  3. 显示传送带最近一段时间的运行状态变化折线图;
  4. 空转超过1分钟(或3、5和10分钟,用户自己选择)之后发送报警信息;
  5. 对传送带与煤流进行分割并实时显示当前传送带运输机上的煤量占比。

运行界面-报警状态:

运行界面-正常状态:

三、应用前景

我国煤炭行业信息数据化和智能化水平快速发展,这为煤矿企业能够实现传送带运输机的视频监控系统和煤流智能分析系统奠定了基础,同时可以实现工作人员在地面监测室就能远程监测传送带运输机的实际运行状况。满足不同需求的工业相机和计算机性能的不断提高,这为基于图像处理的监测系统提供了所需的硬件支撑,因此我们的项目具有以下应用前景:

  1. 通过煤矿智能化建设,工作人员不再需要频繁的到井下检查传送带的运行状态,保证了工作人员的安全;智能化少人、无人,不仅实现减员增效,还极大改善了职工工作环境,提高了煤矿安全管理水平。
  2. 可以减少传送带运输机现场工作人员岗位,节约人力成本;长时间空转报警和根据煤量适时调速,减少了电能浪费,节约成本。
  3. 智能化控制系统升级改造应用后,将以往人工管理模式摒弃,优化了带式输送机运行管理流程,是实现智能化开采工作面和智能矿山的基础,以期实现“集中远控、无人值守、设备在线监测和故障预警”的建设目标。

四、总结

该项目成果已经被河南理工大学智能开采研究院采用并进行展示和推广

项目展望:

  1. 加入卸煤篦子堵塞检测。卸煤篦子是卸煤槽不可缺失的一部分,它是煤炭的入口,是煤矿井下运输重要的一环,使用目标检测算法可以很好地判断出是否堵塞,进而报警提醒人工干预以免影响正常运行,初步检测结果如下图所示;
  2. 进一步优化识别算法模型,将分析的皮带状态结果以MODBUS等标准协议接口输出,用于制定控制策略对皮带进行调速,实现节能降耗;
  3. 用目标检测算法,实现异物(大块煤、矸石、锚杆等)的检测;
  4. 基于计算机视觉相关算法,实现传送带跑偏、打滑等异常状态检测;

……

最终实现一套完整的“煤矿井下传送带多功能智能分析系统”,赋能煤矿安全生产。

参赛单位:河南理工大学

团队名称:世界的尽头是炼丹

合作企业:河南省永城市永煤集团股份有限公司新桥煤矿、河南省新乡市-辉县龙田煤业有限公司程村矿

此文章为搬运
原项目链接

【C4AI-2022】基于飞桨的井下煤流视频智能分析系统相关推荐

  1. 【解决方案】基于国标GB28181协议视频智能分析平台EasyCVR/EasyGBS打造的智慧企业AR云景解决方案

    在现今科技发展之下,如果说有什么能再次掀起产业更替大潮,第一时间我们想到的可能是VR/AR,VR/AR最有可能率先实现应用的九大领域:视频游戏.事件直播.视频娱乐.医疗保健.房地产.零售.教育.工程和 ...

  2. 赛桨PaddleScience v1.0 Beta:基于飞桨核心框架的科学计算通用求解器

    近年来,关于AI for Science的主题被广泛讨论,重点领域包含使用AI方法加速设计并发现新材料,助力高能物理及天文领域的新问题探索,以及加速智慧工业实时设备数据与模型的"数字孪生&q ...

  3. [C4AI_2022]基于飞桨的无人机智能工地安全监管系统

    ★★★ 本文源自AI Studio社区精品项目,[点击此处]查看更多精品内容 >>> 基于飞桨的无人机智能工地安全监管系统 项目展示 scrolling="no" ...

  4. 基于“飞桨”的深度学习智能车

    本文作者:吴东昱,北京钢铁侠科技深度学习算法工程师 前言   我在观察历届智能车竞赛以及教学实验中发现,采用传统视觉算法的视觉智能车只能在特定赛道中行驶,一旦赛道环境改变,必须修改大量的代码才能运行. ...

  5. 搭建基于飞桨的OCR工具库,总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别的PaddleOCR

    介绍 基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别.竖排文本识别.长文本识别.同时支持多种文本检测.文本识别的训练算法. 相关链接 PaddleOCR ...

  6. 基于飞桨 DeepLabV3+实现人体肾组织图像中肾小球识别

    基于飞桨 DeepLabV3+实现人体肾组织图像中肾小球识别 一.项目背景 估计显示,地球上有超过70亿人,银河系中有3000亿颗恒星.相比之下,成年人体内含有37万亿个细胞.确定这些细胞之间的功能和 ...

  7. 【2021CCF基线系统】基于飞桨实现系统认证风险预测-异常检测

    [2021CCF基线系统]系统认证风险预测-异常检测 本项目基于百度飞桨PaddlePaddle实现系统认证风险预测-异常检测 一.赛题背景 随着国家.企业对安全和效率越来越重视,作为安全基础设施之一 ...

  8. 基于飞桨实现高精度岩相自动分析,助力油气田勘探开发设计

    1. 概述 1.1 行业背景与痛点 岩相分析是以岩石薄片的微观描述和分类为基础的研究工作,也是沉积和成岩研究的一项重要技术,对于油气勘探开发的工程实践具有基础性指导地位.通过薄片分析矿物的比例.分布. ...

  9. 基于飞桨图像分类套件PaddleClas的柠檬分类竞赛实战

    前情提要   通过之前教程中的学习,相信大家对于如何搭建一个分类网络已经清晰了.那么我们不禁会想,有没有更快速的尝试模型及技巧的方法呢?因为我们在上一次课程中使用的代码都需要自己进行开发,自己写需要很 ...

最新文章

  1. Python+Appium自动化测试之toast定位
  2. minisap的安装
  3. Struts的MVC和Spring的MVC的区别
  4. 南方s730手簿说明书_最新S730手簿及3.0简易操作82
  5. 教师节 | 程序员都这么玩,你敢挑战吗?
  6. metronic 4.5.7开发环境下, 在Windows 10上安装了10.16.0版本的node js之后,导致node sass无法加载...
  7. 小程序自定义tabbar custom-tab-bar 6s出不来解决方案,cover-view不兼容
  8. 设计模式:给你生产一个女朋友---工厂方法模式
  9. hdu 3930 Broot 二次剩余
  10. Image-to-Image Translation with Conditional Adversarial Networks
  11. 数据挖掘是如何解决问题的
  12. mysql数据库修改结构_Mysql 数据库之修改标的结构
  13. python 数据挖掘 简书_Python数据挖掘与分析----Pandas常用知识
  14. 七周成为数据分析师 第一周:数据分析思维
  15. 记忆的分类及其理论模型
  16. android toast 自定义view,分享Android中Toast的自定义使用
  17. 详解Google Chrome浏览器(操作篇)(上)
  18. 无题--仅以此文来总结我过去的五年
  19. 开机找不到硬盘的原因
  20. 【笔记】SSH服务:基本概述、相关命令“ssh、scp、sftp”、验证方式、场景实践、安全优化

热门文章

  1. 体验 WebFont,网页上的艺术字
  2. 【调剂】华北理工大学2022年硕士研究生生源调剂信息公告
  3. 【树莓派】树莓派4配件,简单汇总玩树莓派4需要购买的配件
  4. 李佳琦1.3亿买豪宅,评论区10000句脏话:有一种人只配当“杠精”
  5. 什么是程序化自动交易接口?
  6. 在ubuntu添加中文打字法
  7. 视频教程-SEM实战教程(二)-网络营销
  8. “数据星河”系列活动——大数据资源化、资产化、资本化路径
  9. 什么是产品路线图?如何做产品路线图规划
  10. 机器学习基础:模型集成/集成学习