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?
微信號:
總結
以上是生活随笔為你收集整理的TensorFlow 2学习和工业CV领域应用 心得分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把 Console 部署成 Window
- 下一篇: .NET架构小技巧(6)——什么是好的架