TensorFlow 2学习和工业CV领域应用 心得分享

我是一名来自苏州的机器视觉开发者,从事传统的机器视觉算法开发有11年了,从2018年开始,因为一些复杂微弱的瑕疵检测项目遇到的传统算法瓶颈,开始接触到了深度学习,并选择了使用TensorFlow,期间也是不断摸索前进,同时得到了很多行业大佬的指导,TensorFlow优秀的性能和快速的模型训练部署,上手起来感受非常舒适。

使用TensorFlow以后,确实提升了生产现场的检查能力,提高了生产产品的品质和生产效率,主要的提升是 误报警率的下降、微弱特征的识别率和检查结果分类的精准化。

借此机会,我想总结下个人的关于TensorFlow在工业图像视觉领域的应用经验。工业CV领域的深度学习应用和互联网行业或者研发类行业,还是有一定差异的,主要在以下几个方面:

1. 工业图像的主要特点:工业领域,不管是3C、半导体、面板、SMD、汽车,还是饮料食品、标签、纺织等,不管检测对象是表面瑕疵划痕污染、印刷喷涂异常、组装灌装测量,还是读码和字符识别,都有一个和我们日常手机摄影头拍摄照片不一样的地方。那就是,工业取像使用更稳定的视觉硬件,包括工业相机、工业镜头和工业光源,会尽可能地打造一个稳定的成像环境,图像的背景和目标一般在位置分布和灰度上不会有太多动态的变化,但是不排除复杂的纹理特征和复杂的轮廓边界,而这也是深度学习最契合的应用场景。因此,基于工业上的图像集的特点,如果有较好推理应用的模成熟型的话,在训练好的模型基础上,做迁移学习,可能会有意外的好效果。 

2. 负样本严重不足:正常的工业生产中,良品率一般是非常高的(>90%),因此负样本的收集非常困难,有些品质要求严格的产品,可能1个月只会产生10几个不良,这样就对训练集的均衡提出了挑战。需要自主开发图像预处理算法对样本进行增强,不能局限于TensorFlow或OpenCV自带的的一些传统的图像集样本增强算法。有时候甚至会减少或者取消预测集和测试集,以最大限度地喂给模型训练。另一方面,生产现场也是允许前期一定的测试成本和评价周期,允许粗糙版本先上线,边生产边优化升级。 

3. 深度学习如何适配老旧的系统:众所周知,因为设备更新和维护成本非常高,工业设备的迭代速度是很低的,设备稳定性很好。这也造成一个问题,目前的工业领域的PC系统大多老旧,虽然是很稳定的工控机,抗击恶劣环境和连续工业性能很强,但PC配置大多较低,系统版本也不高。经常会遇到10年前的双核处理器,搭配win2000操作系统,这也给深度学习的部署应用提出了一些难题。一般的解决方案是通过在设备外部搭建深度学习服务器,和产线设备组成内网文件共享和实时通讯,实时地读取设备内生成的图像进行推理,并将推理结果通过网络反馈设备。 

4. 模型部署推理如何和现有程序集成:工业上使用的检查程序大多数是基于.NET或者C++,和较流行的python不同,而且开发者也无法再切换原有程序的语言,因为涉及到PC内很多运动控制、各种板卡和通讯交互等外部依赖的商业类库,更换语言的成本很高,也几乎不可能完成。目前一般2种方式对应:通过post通讯,python上训练和部署,并通过flask服务和原程序通讯交互;或者采用C++版本或者.net版本支持GPU的TensorFlow扩展,直接集成到现在程序中,进行训练和推理,实时内存中共享图像变量和结果。个人建议采用第2种方式,开发起来更快高效。 

5. 模型不需要前沿 需要稳定高效:工业上的算法应用一般略微落后于前沿技术,以稳定高效为主。像图像处理方面一般还是使用一些传统的经典的算法,以深度学习做图像分类为例,简单的项目使用LeNet和AlexNet网络就足够,复杂的项目一般使用到VGG Net就可以。但也有部分较前沿的技术应用,比如超分算法,对图像进行扩展以增加细节,帮助提升分类精准性。 

6. 算法落地的配套工具开发量占比高:工业中一个完整项目的落地,需要交付一整套系统,其中生产人员的便捷应用和人性化的交互UI也是比较重要的。因此,深度学习在工业现场应用,很大一部分开发工作量在于配套的工具。例如,数据集标注制作、模型训练、模型快速部署和训练推理过程的可视化,这些都需要封装成易用稳定的工具,交付客户时可以让无编程经验的客户也能快速开展深度学习的业务。

7. 传统算法为主 深度学习辅助:虽然现在深度学习技术已经看上去无所不能,但在工业应用上,还是主要以传统算法为主,深度学习辅助的模式。这并非是孰是孰非的问题,而是当前时期,传统视觉算法在兼顾运算速度、像素计算精度和算法开发速度上,还是略微占优势。而深度学习一般作为补充,弥补传统算法在复杂纹理和复杂特征描述上的不足,将传统算法达到的90%准确率,助推至95%。

以上,是我个人的一些工业应用中的心得,接下来,和大家分享一下我自己学习TensorFlow 2.x的一些经验和故事。

最初,我是在B站偶然的看到Google的官方账号的,然后在这里学习了一些TensorFlow一手视频资料,同时结合TensorFlow官网的API手册进行边学边用。

然后,在今年年初的 Google 开发者大会 TensorFlow DEV SUMMIT 2020 上,学习了解到了很多东西。包括TensorFlow 2.2的新特性,TensorFlow致力打造的生态,TFUG(TensorFlow User Groups),以及TensorFlow Certificate开发者认证体系。

在这次开发者大会后,我开始接触并使用TensorFlow 2.x,工作中的项目也逐渐从1.x转换至2.x。同时,我也关注了TensorFlow官方微信公众号,加入了TFUG社区成为其中一员。

关注TensorFlow官方公众号真的给我带来了很多一手新鲜的资讯和前沿技术信息。通过这个公众号,我参加了第1期TensorFlow机器学习Study Jam课程,并获得第1批通过在线考试的证书卡片和精美定制背包礼品。也陆续参加了后续的一系列Study Jam课程,以及每一次的视频直播,收获颇丰。

课程里,我发现了GDE李锡涵大佬的“简单粗暴TensorFlow2”的在线网站,并注册成为第1批早期论坛会员,在论坛上和大家积极交流互动。“简单粗暴TensorFlow2”一直是我强烈推荐给身边同事好友的,我认为是快速入门TensorFlow最好的教材,也特别适合一些偏现场应用的攻城狮们,可以低学习成本快速进入深度学习殿堂。

也是在今年初的开发者大会上,我了解到了TensorFlow开发者认证。在国内和国外一些前几位通过TF认证的大佬们的指导帮助下,我系统地学习了Coursera上面吴恩达老师旗下deeplearning.ai出品的Laurence Moroney老师的著名课程“TensorFlow In Practice专项课程”,并且认真准备全部满分通过了该课程的所有课后练习和考试,顺利拿到了该课程的全部结业认证证书。通过接下来的一个月每天晚上下班后在家的复习备考,我也顺利通过TensorFlow Certificate认证,成为国内前几位拿到证书的开发者。为了帮助国内更多地了解TF认证,也方便大家交流学习,将大佬们无私指导我的精神传承下去,我利用业余时间翻译了官方的考试手册,整理出中文版认证考试手册方便大家了解,并建立交流群,方便大家交流学习,目前已经有好多群友陆续通过认证。

同时,我也是一位.NET开发者,如何让TensorFlow 2.x和.NET框架紧密集成,也是我在工作中遇到的挑战。通过github上查找资源,我认识了SciSharp社区的TensorFlow .Net开发者,并加入SciSharp社区,一起帮忙广大.NET开发者更方便地使用TensorFlow 2.x,通过半年多的努力,目前TensorFlow .NET终于绑定升级到TensorFlow 2.3,实现了大部分的2.x API,可以十分快速地使用C#进行TensorFlow的项目应用。

以上,就是我今年学习TensorFlow 2的一些经验分享,主要的节点是关注了 TesnsorFlow 官方公众号,通过上面的新鲜信息资讯,进一步发现了大量优秀的学习资源,大大拓宽了自己的学习视野,也认识了很多大牛们。

以上,是个人的一些学习经历分享,欢迎大家交流指正!

加入TFUG苏州

参与TFUG社区活动,可以是组织者,志愿者,讲师(不一定是大牛,只要能分享相关经验即可)等;也可以是合作伙伴,为社区提供各种资源。

如果您想作为TFUG苏州的组织者或志愿者,或者有任何意见或建议,欢迎给我们的公众号留言!

微信公众号: TFUG苏州

Join Us

If you love TensorFlow, machine learning and willing to share, if you have other great ideas about our activities, if you are interested in our community and activities here, please contact us! 

WeChat: TFUGSuzhou

关注我们的公众号,第一时间获取最新活动消息

Gmail: tfugsuzhou@gmail.com 

微信号:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

历史版本_新版本爆料第弹丨英雄练习新去处,荣耀历史秀出来!

《万物有灵》新版本即将到来新版本来临之前妲己宝宝给自己定下了2个小目标!via.小五怎么不开心目标一扩展自己小得可怜的英雄勺成为一名拥有英雄海的补位大神目标二通过自己的实力获得N1个响当当的荣耀称号很多召唤师会有疑问:凭妲己宝宝的实力&#xff…

循环遍历多层json_面试官:JSON.stringify() 实现深拷贝有什么问题

为什么要进行深拷贝JS中的变量在内存中存储分为值类型和引用类型: 值类型: 1、占用空间固定,保存在栈中; 2、保存与复制的是值本身; 3、基本类型数据是值类型(String,Number,undefined,Boolean,Null&#x…

.NET架构小技巧(6)——什么是好的架构

首先声明,可能本篇文章的含金量配不上这个标题,因为说起架构,可能大家都比较关注高大上的架构,比如分布式的,高并发的,低耦合的,易扩展的等等,本篇可能使你失望了,因为这…

电子工程系庆贺电贺信_创造下一代光电子集成电路

全球互联网正以每年24%的复合速度增长,到2021年将达到每年3.3 zb字节。高速光通信在这个不断连接的世界中是迫切需要的,为了跟上这种增长,光模块的制造的发展是迫切需要的。复旦大学电子工程系博士研究生刘晓研究了集成构成光模块的电子电路和…

禁用笔记本键盘_如何禁用/启用笔记本内置键盘?

有些小伙伴外接了USB键盘想屏蔽掉笔记本的内置键盘,绞尽脑汁都没有办法禁用,其实方法很简单只需要一个简单的命令即可。1、右键点击左下角开始图标(WinX),选择Windows Powershell(管理员)。2、在打开的窗口中,输入cmd。3、然后输入…

IdentityServer4系列 | 资源密码凭证模式

一、前言从上一篇关于客户端凭证模式中,我们通过创建一个认证授权访问服务,定义一个API和要访问它的客户端,客户端通过IdentityServer上请求访问令牌,并使用它来控制访问API。其中,我们也注意到了在4.x版本中于之前3.x…

深入探究ASP.NET Core Startup的初始化

前言Startup类相信大家都比较熟悉,在我们使用ASP.NET Core开发过程中经常用到的类,我们通常使用它进行IOC服务注册,配置中间件信息等。虽然它不是必须的,但是将这些操作统一在Startup中做处理,会在实际开发中带来许多方便。当我们…

【源码】常用的人脸识别数据库以及上篇性别识别源码

上一篇《使用ML.NET模型生成器来完成图片性别识别》发布后,很多朋友希望得到源码,这里附上地址:https://github.com/xin-lai/GenderRecognition常用的人脸数据库对于部分朋友说,找不到训练的数据,这里也给出部分数据&a…

程序员过关斩将--真的可以用版本号的方式来保证MQ消费消息的幂等性?

灵魂拷问MQ消息的消费为什么有时候要求幂等性?你们都说可以用版本号来解决幂等性消费?什么才是消息幂等性消费的根本性问题?随着系统的复杂性不断增加,多数系统都会引入MQ来进行解耦,其实从引入MQ的初衷来说&#xff0…

spring的钩子_spring提供的钩子,你知道哪些

俗话说得好“工欲善其事必先利其器”,现如今springboot与springcloud已成为快速构建web应用的利器。作为一个爪洼工程师,知道如下的spring扩展点,可能会让你编写出扩展性、维护性更高的代码。spring提供的钩子,你知道哪些bean的生…

.Net 5性能改进

起因在.Net Core跳过4.0,避免和先.Net Framework 4.0同名,版本号变为5.0,同时也不在叫.Net Core改为.Net 5(统一的叫法),先看看官方对.Net版本规划.本文主要是根据https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/ 翻译而来.不完全翻译.顺序也有所调…

开放数字世界中的复杂图数据挑战 —— 以教育与开源场景为例

摘要:开源开放的数字世界开始成为时代的潮流,云原生、数据中台、智能PRA开始成为数字世界中的新一代中流砥柱。随着第四范式的普遍流行,各个行业中的数字化转型都会带了海量的具有无限关联的复杂图数据。本报告将以教育与开源两个场景为例&am…

在IIS中部署SPA应用,多么痛的领悟!

目前公司的Web项目是SPA应用,采用前后端分离开发,所以有时也会倒腾Vue框架。“前后端应用最终以容器形态、在k8s中部署, 为此我搭建了基于Gitlab flow的Devops流程。在Devops实践中,容器部署成为良方和事实标准。但是在开发和自测阶段&#x…

mysql闪回工具下载_MySQL闪回工具之myflash 和 binlog2sql

实践利用binlog2sql查询两个binlog之间的SQL:必须是两个binlog日志,指定start-file和stop-filebinlog2sql -h127.0.0.1 -P3309 -udba -pxxxxxx -dsakila -t employee --start-filemysql-bin.000112 --stop-filemysql-bin.000113 > /tmp/db.sql利用bin…

MySQL大表优化方案

背景阿里云RDS FOR MySQL(MySQL5.7版本)数据库业务表每月新增数据量超过千万,随着数据量持续增加,我们业务出现大表慢查询,在业务高峰期主业务表的慢查询需要几十秒严重影响业务方案概述一、数据库设计及索引优化MySQL数据库本身高度灵活,造成…

使用Azure静态Web应用部署Blazor Webassembly应用

上一次演示了如何使用Azure静态web应用部署VUE前端项目(使用Azure静态web应用全自动部署VUE站点)。我们知道静态web应用支持VUE,react,angular等项目的部署。除了支持这些常见前端框架,静态web应用同样支持微软推出的最…

TIOBE 11 月榜单:Python 挤掉 Java,Java的下跌趋势确立了?

喜欢就关注我们吧!TIOBE 公布了 2020 年 11 月的编程语言排行榜。Python 已成功跃居榜单第二名,本月排名率为 12.12%;Java 被挤到第三位,排名率降至 11.68%。自有 TIOBE 榜单以来,C 和 Java 之前一直占据着前两名的位置…

一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试

一:背景 1. 讲故事每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇:我去,本地环境代码跑的哧溜,上了…

mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型

速成指南5分钟搞懂MySQL数据类型之数值型--DECIMAL类型DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]。其中M指定的是数字的总位数(精度,最大65,默认值10),D指定的是小数点后数字的位数(最大30,并且不能大…

Java面试必问JVM调优,那.NET5呢?

JVM调优已经是普通Java工程师的必修课了,而.NET开源快5年了,CLR层面的优化到目前都不多见,甚至常用的性能调优工具都还没玩过。.NET5马上来了,要想在互联网大潮中逆袭,光靠平台是不够的,开发者也得给力才行…