參賽隊伍名稱:LUS.AI
提案動機
在肺部的檢查上,超音波相較X光或電腦斷層掃描,具有無放射性,操作相對方便的優點,然而與其他兩項醫學檢測相同特性,超音波具有不可攜性,病患須至醫療院所才能做超音波檢查,對於偏遠或醫療資源匱乏的地區,難以利用。
且超音波在判讀上,具有難解釋性的缺點,對於超音波影像的判讀,往往訓練時間長,判讀時間也較久,醫生與醫生間也存在著主觀判讀的歧異性,在醫病溝通上,對於判讀過後的結果,醫師也較難與病患說明。
基於上述的兩項缺點 (不可攜性、難解釋性),本團隊希望能訓練AI模型,協助醫師做肺部超音波影像的判讀,並利用OpenVINO具有最佳化與壓縮模型的優點,協助我們最大化利用現有的硬體資源做模型的推論,讓AI模型在肺部超音波的判讀上更快、更即時,達到即時輔助判讀的效果。
另我們也配合可攜式的超音波探頭做測試,希望往後也能在院外做超音波檢測,達到遠距醫療的願景。
解決方案
LUS.AI 團隊開發的移動式智能超音波方案,只要帶著一台筆電和手持超音波機,不用插電源就可以到處移動為病患做檢查。
本團隊開發用的筆電規格為 Intel® Core™ i7 1165G7 處理器 2.8 GHz,搭配顯卡 Intel® Iris Xe Graphics,16G RAM。簡單來說這就是一台 Intel 第11代 CPU 的筆電,平常可以作一般使用的用途,比如開視訊會議、分享討論案例等等,但如果搭配觸控筆也能方便對超音波影像做標註。
除了在筆電上導入AI功能可以輕鬆達成外,即使今天到了收訊不良的地區,因為AI在筆電裡面跑,所以不需要額外的網路連線,模型推論也非常迅速,能夠即時提供醫師第一時間的判讀參考。
(目前完成的只有AI肺部異常偵測的模組,之後會再繼續擴充其他功能模組)
<圖一、 智慧超音波解決方案。相片中的彩虹熱區圖,後面技術部分會再討論>
成果說明
AI模型的設計訓練是使用 Tensorflow 2.6 完成,OpenVINO 則是銜接後續模型佈署和推論的部份。以下是技術分享的大鋼,分為四個項目,2 3 4 項 是比較少文章提到的部份,將無私與大家分享:
- OpenVINO™ 基礎開發流程
- 不同精度模型在不同裝置上的推論速度比較
- 不得已的 CAM
- OpenVINO™ Integration with TensorFlow* (new)
<圖二、OpenVINO™ 的應用架構,資料來源:Intel >
OpenVINO™ 基礎開發流程
如 圖二 所示,最左邊是訓練好的模型,藍色的部分是 OpenVINO™ 的區塊,推論引擎將與應用程式作互動。
1. 模型開發的部份,我們選用 Tensorflow 作框架,因為Tensorflow生態系是比較完整的,許多工具都有支援。
2. OpenVINO™ 在安裝上,是比較複雜的部份,網路上有許多文章介紹如何安裝,但可能因為 OpenVINO™ 持續改版的關係,所以建議還是參考官網的安裝說明,是最沒問題的方式。
3. 如果不想在本機安裝的話,其實還有兩個選擇,可以完成 Model Optimizer 的步驟(簡稱 MO),將模型準備為 FP32 或 FP16 的 IR 檔案(.xml .bin):
第一個選擇是申請使用 OpenVINO DevCloud,可以參考 MakerPRO的介紹。
第二個選擇是使用 Google CoLab 開虛擬環境(Ubuntu 18.04)安裝使用,裝失敗就重新開一個 notebook,最後將轉換完成的 IR 檔下載下來即可。參考這篇文章(裡面有CoLab連結),但這個範例安裝的版本比較舊,建議參考官方的安裝說明作點小修改,當然使用稍舊的版本依然可以完成 MO 的步驟。
4. 推論引擎 Inference Engine 的部份(簡稱 IE),是正式應用程式要跑的部份,讀取 IR 檔在 OpenVINO™ 支援的硬體上作快速推論。這部分若想體驗,其實也可以使用 CoLab notebook 測試看看,只需要 pip install openvino 就可以使用 IE 了,詳細也可參考這篇文章(內有CoLab連結)。
下一個部份,將會跟大家分享使用不同裝置的推論效率。
5. 使用者介面 User Application,我們簡單使用 pyQt5 來建立。其中影像顯示、模型推論、熱圖顯示是使用兩個平行處理完成。由於模型推論速度已經很快(幾十個毫秒),所以目前速度較慢的反而是資料的前處理、後處理和UI的部份,這方面也許可以做更多的平行化,讓應用程式可以更為即時(real-time)。
不同精度模型在不同裝置上的推論速度比較
這邊使用 OpenVINO™ 的 benchmark 工具,來評估模型推論引擎 (IE) 搭配不同裝置的效能,這台筆電包含了兩個可用的裝置(CPU、iGPU)。
(C:\Program Files (x86)\Intel\openvino_2021.4.752\deployment_tools\tools\benchmark_tool\benchmark_app.py)
以下 圖三 的評估只有考慮到模型推論的部份,資料前處理、後處理、UI等都沒有納入計算。
淺藍色為 MO 轉換的 FP16 的模型,深藍為 FP32 的模型。我們可以看到FP16模型在 GPU 的效能為 CPU 的兩倍,同質整合CPU和GPU的模式(MULTI)有更佳的表現。
但其實 CPU 沒有支援 FP16 的資料輸入,所以效能比直接使用 FP32 略差。
異質整合(HETERO)模式,將模型拆分為 CPU 執行的部分、GPU 執行的部分,在這個模型上沒有必要使用到這個模式,所以就當參考。
最後,其實在 iGPU 上就已經足夠快了,我們的應用目標是包含前處理、後處理、UI 達到 30 FPS。所以我們決定使用 高精度(FP32)模型在 iGPU 上做推論,然後將 CPU 留做 前處理、後處理、UI 的運算上使用。
<圖三、推論引擎使用不同裝置的效能,每秒推論幾個樣本(FPS) >
不得已的 CAM
CAM (Class Activation Mapping) 是作為分類依據的可視化方法,也是 圖一 相片中的熱區圖。
CAM(沒有Grad) 的實作上,我們參考了這篇範例(pneumonia-classification)。如果有使用 DevCloud 的話,也可以在 Sample Applications 當中找到這範例。
這部分我們遇上了比較難解的狀況:沒有辦法獲得模型中的梯度(Gradient),所以沒有辦法算出比較好的熱圖(Grad-CAM等)。嘗試了 OpenVINO™ nGraph 的工具,但還是沒有好的解決,所以只能作簡單的 CAM(沒有Grad) 顯示。
分析無法得到模型梯度的原因,可能是 OpenVINO™ 專注在模型佈署和推論上(Forward pass);所以如果要監看梯度,可能還是得回到 Tensorflow 的功能來實現。
<圖四、Tensorflow 實現的 Grad-CAM 熱區顯示比較精確>
OpenVINO™ Integration with TensorFlow* (new)
因為要做到 Grad-CAM,所以需要進階地使用到 Tensorflow。但如何讓 Tensorflow 可以使用到 iGPU 就是這個段落想達成的目標。
OpenVINO™ integration with TensorFlow (GitHub repo) 其實跟上面提到的 OpenVINO™ 運作方式上不太一樣,這個工具提供的是一個 後端(backend) 讓 Tensorflow 可以直接使用到 Intel® 的 CPU、iGPU、VPU,如圖五所示。
<圖五、OpenVINO™ Integration with TensorFlow 應用架構,資料來源:Intel >
在筆者撰寫此篇的時候,它在 Windows 上還是 Beta版 (其他作業系統已經是正式版了)。但我們還是依照 互動安裝指引 來安裝這個工具,如 圖六 所示,Windows版 當前只支援 Python3.9。
如果是在 Ubuntu 18.04 作業系統,裝好 tensorflow 2.7.0 之後,直接 pip3 -U install openvino-tensorflow 就輕鬆完成工具安裝了。
<圖六、互動安裝指引,資料來源:Intel >
在使用上,出奇的簡單!如 圖七 的簡單範例,在定義完 後端(backend) 之後,就繼續正常使用 Tensorflow 。
<圖七、openvino_tensorflow 範例>
結論
目前嘗試的 OpenVINO™ Integration with TensorFlow 在windows上的beta版只能用到 CPU,後端可以看出有使用到新一代的 Intel oneAPI 的 oneDNN,在硬體的整合運用上很值得期待。雖然目前 openvino_tensorflow 在我們模型上的推論效能為 25.27 FPS 表現較為普通,但期待日後正式版的發佈,屆時若能用上 iGPU 肯定會有更佳的體驗。
成果短片展示
<喜歡這篇文章,請投我們一票>
未來應用令人期待!
謝謝 禮宏 支持。