首頁>科技>

本文來自社群投稿與徵集,作者 Henry,來自 TFUG 蘇州。

我是一名來自蘇州的機器視覺開發者,從事傳統的機器視覺演算法開發有 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 的官方賬號的:Google中國 (https://space.bilibili.com/64169458),然後在這裡學習了一些 TensorFlow 一手影片資料,同時結合 TensorFlow 官網的 API 手冊進行邊學邊用。

然後,在年初的 TensorFlow Dev Summit 2020 上,學習瞭解到了很多東西。包括 TensorFlow 2.2 的新特性,TensorFlow 致力打造的生態,TFUG(TensorFlow User Groups),以及 TensorFlow Certificate 開發者認證體系等。

在課程學習中,我發現了 GDE 李錫涵大佬的 “簡單粗暴 TensorFlow2” 的線上系列教程,並註冊成為第 1 批早期論壇會員 (tf.wiki),在論壇上和大家積極交流互動。“簡單粗暴 TensorFlow2” 一直是我強烈推薦給身邊同事好友的,我認為是快速入門 TensorFlow 最好的教材,也特別適合一些偏現場應用的攻城獅們,可以低學習成本快速進入深度學習殿堂。

也是在 2020 年初的 TensorFlow Dev Summit 上,我瞭解到了 TensorFlow 開發者認證。在國內和國外一些前幾位透過 TF 認證的大佬們的指導幫助下,我係統地學習了 Coursera 與 deeplearning.ai 合作的,由 Laurence Moroney 老師錄製的著名課程 “TensorFlow In Practice 專項課程”,並且認真準備全部滿分通過了該課程的所有課後練習和考試,順利拿到了該課程的全部結業認證證書。透過接下來的一個月每天晚上下班後在家的複習備考,我也順利透過 TensorFlow Certificate 認證,成為國內前幾位拿到證書的開發者。

TensorFlow In Practice 專項課程https://www.coursera.org/specializations/tensorflow-in-practice

為了幫助國內更多地瞭解 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 的專案應用。

18
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 使用gitee(碼雲)製作部落格圖床