【深度学习】手把手教你实现一个人工智能案例(蓄电池爬碱识别)

本文的目标:手把手教一个零基础员工入门省公司AI平台项目开发

本项目目标:实现了通信运检一班通信蓄电池爬碱的人工智能识别

前期准备:需要自学python的基本语法,只要看得懂python语句之后,就可以看别人的人工智能项目进行学习了。比如看本次项目。

推荐python学习网站:

https://www.runoob.com/python/python-tutorial.html。

推荐项目学习网站:

https://aistudio.baidu.com/aistudio/

结果展示:

d89a9c1e5de86308ac29fdca29ff8879.png

上图模型训练结果显示,在训练集上识别的准确率为100%,在测试集上识别准确率为90%。

下面从0开始教学(默认python语法已自学完毕):

一、概念理解

首先解释一下什么是机器学习和深度学习。

机器学习的定义是:“计算机程序可以在给定某种类别的任务 T 和性能度量 P 下学习经验 E ,如果其在任务 T 中的性能恰好可以用 P 度量,则随着经验 E 而提高。”

简单可以这样理解:让机器看作文的特征和老师给定的分数,机器在看了足够多不同特征的作文及其得分之后,就可以自己给老师还没有批改的作文打分了(或者分类,好还是坏)。

深度学习的定义是:“深度学习是一种特殊的机器学习,通过学习将世界使用嵌套的概念层次来表示并实现巨大的功能和灵活性,其中每个概念都定义为与简单概念相关联,而更为抽象的表示则以较不抽象的方式来计算。”

简单可以这样理解:深度学习比机器学习更厉害了,机器不仅可以给作文打分,因为他看的作文够多了,并且知道什么是好作文,什么是差作文,最后他自己都可以写出好作文来了。

我们今天要完成的任务就是基于深度学习的图像识别任务,让他看足够多的照片(训练集),提前告诉他,哪些蓄电池是好的,哪些蓄电池是坏的。训练出模型之后,他就可以自动识别出刚拍的还没有打标记的照片(测试集),哪些是好的蓄电池,哪些是坏的蓄电池。如果你训练的时候告诉了他蓄电池坏的种类,他甚至可以告诉你蓄电池坏的种类具体是哪一类。

真实场景中蓄电池最常见的肉眼可见的缺陷就是爬碱。含有氢氧化钾(KOH)和氢氧化锂的碱性电解液有爬上容器口,翻越容器壁向地面再向墙壁爬越的特性,称为爬碱。爬碱的危害是爬碱现象会引起蓄电池正、负极以及其他回路自放电加大,降低蓄电池正、负极间和直流系统的绝缘水平,消耗电解液,从而降低蓄电池适用寿命。所以自动识别爬碱具有重要的实用价值。

检修一班真实现场的爬碱照片如下图所示:

7f2dad842dbd8c8759f31d76eb8a0e4d.png

很明显有爬碱现象和没有爬碱现象的蓄电池在图像层面上有着本质的区别,只需要用深度学习模型学习到这个区别,就可以根据现场无论什么设备什么方式采集到的蓄电池照片全自动完成蓄电池是否爬碱的判断,也就实现了人工智能。

二、数据集准备

千里马常有而伯乐不常有,套用到人工智能领域就是优秀的模型算法常有,但优质的数据集不常有,这就是为什么大数据会成为企业重要资产的原因。

目前限制整个国网公司以及信通公司在人工智能领域应用的核心痛点不是没有需求和应用场景,而是在对应需求和应用场景下没有优质的大规模数据集。

因为蓄电池运维问题一直是通信运检一班运维的痛点和难点,所以班组有意识收集了大量的数据集。将数据集整理为两类,一类是正常蓄电池,一类是爬碱蓄电池,再将数据集拆分为训练集(train)和测试集(test),训练集用来训练模型,数量种类越多,模型训练出来就越优秀。测试集用来测试模型是否能准确预测,各种刁钻的拍摄角度和爬碱类型都要来点儿,看是否能全部预测出来。

整理后的效果如图所示。

训练集(包含正常蓄电池和爬碱蓄电池):

e39218db4b30cdac97c47ab2a870c622.png

eca0e595371de978e74aa18162050352.png

测试集(包含正常蓄电池和爬碱蓄电池):

7d40d18fc82f237ca74cf5d95280a3d4.png

5c35e05461135b71cca8628f82877140.png

最后打包成zip:

8048c5e5d9d19974eea1a1994e97f1d6.png

训练集遵循一个原则,多多益善,为什么抖音(本质上是人工智能分发系统)能在全球大火,就是因为中国用户太多了,数据喂得饱,模型训练得好。跟中国比,其他国家全是小数据,只有我们是大数据。(美帝强就强在,他在全球拿数据)

三、省公司AI平台的使用(百度AI Studio)

省公司AI平台本质上是百度Ai Stduio的本地化部署,所以本次实验我们就在百度Ai Stduio上完成。省公司AI平台在Ai Stduio的基础上,考虑到基层员工编程技能不熟练,所以开发了一些智能编程的模块,比如:作业建模,可视化建模,自动化建模。本实验相当于是Notebook建模,从头开始自己完整写出来。自己能够写一整套代码后,也更有利于其他简单建模的理解。省公司建立这个AI平台是更希望广大员工帮忙一起补充数据集,标注数据集。如果想自己独立开发,那么我更建议百度Ai Stduio,完成验证后可直接移植到省公司AI平台上。

ea5800c5337b26af73351a4201c46777.png

用自己的百度账号,登陆Ai Stduio,点击创建项目。

eef36555f7c387ee2d2739b5678a66b7.png

选第一个Notebook就新建了一个Jupyter Notebook自己从头开始编写。接着配置环境选AI Studio经典版,项目描述随意填写。

1d6f47537e77c09f54368032544dfe22.png

点启动环境,开始进行编程。现在可以免费白嫖GPU算力,以后按百度的尿性肯定要收费,所以趁早白嫖,直接选至尊GPU,运算速度快。如果以后收费了,也可以在省公司AI平台上去利用平台服务器的GPU进行运算,自己的个人电脑是不可能完成大规模深度学习模型训练的,这也是省公司开放AI平台的原因。

3c35ed0f6dbde44db8fb211fad489ac8.png

四、上传数据集

把打包好的zip文件放在work目录下,执行一段linux命令把zip解压缩。

6481cdf26e6e611fbadc22b483fc1a3b.png

!unzip -q work/蓄电池数据集.zip -d work/

五、代码编写

设置参数:

batch_size = 10
lr =5e-5
epoch = 20
train_path = './work/train'
eval_path = "./work/test"

数据传入:

from paddle.vision.datasets import DatasetFolder
from paddle.io import DataLoader
from paddle.vision import transforms


def train_dataload(image_dir):
    data_transform = transforms.Compose([
                transforms.Resize(256),
                transforms.RandomCrop(230),
                transforms.ToTensor(),
                transforms.Transpose([0,1,2])
            ])
    dataset = DatasetFolder(image_dir, transform=data_transform)
    return dataset
    
    def eval_dataload(image_dir):
    data_transform = transforms.Compose([
                transforms.Resize(230),
                transforms.RandomCrop(230),
                transforms.ToTensor(),
                transforms.Transpose([0,1,2])
            ])
    dataset = DatasetFolder(image_dir, transform=data_transform)
    return dataset
    
train_dataset =  train_dataload(train_path)
eval_dataset = eval_dataload(eval_path)


train_loader = list(DataLoader(train_dataset,batch_size=batch_size,shuffle=True))
eval_loader = list(DataLoader(eval_dataset,batch_size=batch_size,shuffle=False))

打印几个图像数据出来看看:

for e in train_loader[:3]:
    print(e)

336e0f669d75bfbf090989171483c85e.png

打印一个图像出来看看:

import matplotlib.pyplot as plt
from PIL import Image


img = Image.open("./work/test/爬碱蓄电池/微信图片_20211020170100.jpg")
plt.imshow(img)
plt.axis('off')
plt.show()

abbbc65cc892f01ab37809d65cb8ccb9.png

建立模型:

from paddle.vision.models import resnet50
import paddle
mymodel = paddle.Model(resnet50(num_classes=2,pretrained=True))
loss = paddle.nn.CrossEntropyLoss()
optimizer = paddle.optimizer.Adam(learning_rate=5e-5,parameters=mymodel.parameters())
mymodel.prepare(loss=loss,optimizer=optimizer,metrics=paddle.metric.Accuracy())

(Resnet是残差网络(Residual Network)的缩写,该系列网络广泛用于目标分类等领域以及作为计算机视觉任务主干经典神经网络的一部分,典型的网络有resnet50, resnet101等。Resnet网络证明网络能够向更深(包含更多隐藏层)的方向发展。)

训练保存模型:

mymodel.fit(train_data=train_loader,eval_data=eval_loader,batch_size=10,epochs=epoch,verbose=True,save_dir="./check_ponit",save_freq=1)

c5da6b458b32d969fea785a15f59db0b.png

结果分析:

训练出来的模型在训练集上的正确率为100%。

在测试集上的正确率为90%,达到预期目标。

模型保存:

aab3d9677a450f5eac23a6846155f034.png

保存后的模型可部署到硬件设备上进行人工智能自动识别。

总结:

整个人工智能应用案例分为以下4个主要步骤:

  1. 确定应用场景

  2. 准备数据集

  3. AI平台创建项目

  4. 编程实现

整个项目最难的部分在优质数据集的有效收集。

进一步优化思路:

  1. 更多的年轻人学会使用python和AI平台,并结合自己的生产实际提出更多的应用场景。

  2. 建立班组大数据库,全员有意识收集相关的数据。更合理的方式是数据由设备自动采集存储。

  3. 积累更多的数据集来优化训练已有的模型从而提高识别准确率。

  4. 尝试更多的先进模型并调整参数来提高识别准确率

学习路径及免费资源:

百度Ai Studio(百度账号登陆):

a4713d347f5082d8b10eb4d3e2b809a2.png

阿里天池(支付宝账号登陆):

1dc91bd8a9ca372b87cb7ad550d8d3d1.png

9d09c0c5989e1c93a2724323106f436f.png
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群554839127,加入微信群请扫码:

74873ed2c7619995f807a7d782c19665.png

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值