[零基础,全开源]基于web的远程深度学习服务搭建
所有代碼和工具均已開源。關注“DL工程實踐”,后臺回復“web”,自動獲取。
?
1、背景介紹
目前有很多的深度學習推理方案,不過大多是離線部署的。這方面可以利用的開源資源有很多,例如ncnn,mnn,tensorflow?lite等。雖然終端離線部署模型具有很大的優勢,高效,快速,低延時,能夠帶來很好的體驗,但是也存在一些缺點,例如模型不能太大,且對于不同的硬件平臺需要重新部署,開發周期比較長。所以在那些延時沒有那么苛刻的場景,使用基于web的深度學習推理服務是非常方便的。一方面與終端硬件無關,使用成熟的http協議進行交互,那么在世界的任何一個角落,只要拿出手機或者電腦,通過網頁就能做很多有趣的深度學習檢測,這個部署成本比離線的推理要低太多了。另一方面,利用遠程深度學習服務器的高性能,還能部署一些大型的網絡,提升深度學習的性能。本期我們就來實踐一個基于web的深度學習服務,實現遠程的深度學習調用,并將結果展現在瀏覽器上面。為了實現web服務,需要選擇一款web框架,基于python的web框架非常多,這里選擇一個非常小巧又經典的web框架:web.py。
?
2、效果演示
電腦端效果演示:
URL鏈接:https://video.zhihu.com/video/1337520524713914369?
手機效果演示:
URL鏈接:https://video.zhihu.com/video/1337520739416141824?
?
3、項目結構
如下圖所示為項目的代碼結構。由于需要通過web交互,所以需要一點點前端知識。整個工程可以劃分為三個部分。第一個部分是models推理模塊,主要放一些推理的模型。前端模塊,包含static與templates為界面展示相關的代碼。templates里面包含了兩個html的結構文檔,用來定義瀏覽器的顯示界面。static里面的css和img用來修飾界面。服務模塊:server.py。里面是web服務的一個業務邏輯。
網絡推理模塊:
由于習慣了使用pytorch,我這里放了一個基于pytorch訓練好的shufflenetv2 1.0x的imagenet1000的預訓練模型,從torchvision里面可以直接下載。網絡模型文件也是直接使用的torchvision.models里面的模型文件。Infer.py:里面定義了一個PreModel類,用來加載深度學習模型,進行相關的推理。另外為了展示類別的結果,放了一個class_map.py,把imagenet數據集的數字標簽與類別名稱做了一個對應,方便在瀏覽器界面上展示。
前端模塊:
首先需要對瀏覽器上的展示界面做一個大致的規劃,如下圖所示,我規劃了三個部分:標題部分,結果顯示部分,按鈕部分。首先看按鈕部分,第一個按鈕用于選擇圖片,點擊之后可以從本地選擇一張圖片。檢測按鈕點擊之后,可以將剛才選擇的圖片上傳到服務器,服務器進行深度學習檢測,然后將結果返回當當前頁面。返回的結果顯示在“結果展示”區。這里我定義了一個分類的展示模式,上半部分是檢測的圖片,下半部分是檢測出的top3的類別。
下面來看一下界面的html文件,其實也非常簡單,就是按照剛才的三個模塊進行了劃分。分別使用三個<div>來表示。
服務模塊:
服務模塊其實就一個源文件:server.py,定義了web交互的邏輯。其實代碼含義非常清晰。當用戶選擇好圖片,并點擊了“檢測”按鈕之后,圖片會被瀏覽器使用POST方法傳送到后端,所以會進入到server.py的POST方法里面。第一行的x=web.input(image_file={})表示的就是將瀏覽器傳過來的圖片放在變量x中。然后進入到第一部分的代碼,“保存用戶上傳的圖片”,因為此時的圖片內容在x變量中,是在內存里的,所以先將內存里的圖片x保存到本地服務器上面。這里將其保存到static目錄下面。首先做一個字符串轉換,因為windows服務器傳過來的圖片,名稱中很有可能包含'\'字符,需要轉換成'/'字符,然后獲取文件名,因為傳過來的是一個文件路徑。然后在static目錄下面新建一個同名的文件,將x里面的圖片內容保存到新的同名文件中。接下來進入到第二個流程:調用models的推理模塊進行推理。這個就不詳細展開,搞過深度學習的人應該很清楚其流程。最后一個流程是根據推理的結果進行一些展示,這里使用matplotlib進行原始圖片和預測類型的柱狀圖展示,為了美觀,改成了橫向的柱狀圖。
4、服務搭建
為了能夠隨時隨地的訪問我們的深度學習服務,那么需要一臺具有公網IP地址的服務器,但是很可惜,我們現在申請的寬帶一般都不會分配公網IP,一個可行的辦法是使用云服務器,這種服務器都會給你公網IP。例如騰訊云,阿里云等。還有其他方法就是使用NAT打洞或者使用一些第三方的DDNS服務。這里不在展開,有興趣的朋友可以自行查閱。我這里為了方便,就在局域網里面搭建深度學習服務,然后只要連接在這個局域網里面的客戶端,都能夠通過瀏覽器訪問并上傳圖片進行檢測。該工程需要依賴web.py, torch,torchvison, matplotlib等,所以可以使用pip或者conda等命令安裝好依賴包。至于是windows還是linux,這個沒有關系。安裝好依賴之后,進入到工程根目錄下面:cd ?web-dl;啟動服務:python server.py。之后會加載模型,打印模型加載進度,完畢之后屏幕打印:http://0.0.0.0:8080/ 表示我們的web服務已經正常啟動,并在8080端口進行監聽。此時通過任意一臺局域網中的電腦或者手機,打開瀏覽器,輸入:http://ip:8080就可以了。
關注“DL工程實踐”,后臺回復“web”,自動獲取源碼地址。
@end
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的[零基础,全开源]基于web的远程深度学习服务搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科学家发现新类地行星 Wolf 1069
- 下一篇: 深度学习资料汇总(满满的干货)