AI 智慧眼鏡能否讓盲人變得更獨立?
Klacci 凱樂奇 Kii Assistant 智慧酒店服務系統 |
使用深度學習人工智慧製作最先進的鈔票探測器的指南,此服務辨識鈔票的貨幣(歐元或美元)和面額(5,10,20, ...)。社會影響的目的是幫助盲人,所以我小心翼翼地製作了「現實生活中」的訓練影像,手裡拿著鈔票,有時摺疊,有時覆蓋部分鈔票。
希望這篇報導有助於鼓勵其他人學習深度學習。我正在使用令人驚歎 fast.ai 線上免費課程,我非常推薦。作為他們務實、自上而下的方法的證明,這個支線專案基於第 3 課。在他們的線上論壇上,你可以找到更多來自同學的驚人應用。
我的專案佈署在 iris.brunosan.eu 上,以下是一個推斷的例子:
令人驚訝的是,快速、有趣和更容易的部分是深度學習部分(恭喜fastai!),生產伺服器大約需要 10 倍的時間(我還必須瞭解一些關於 docker 和無伺服器應用程式的詳細資訊)。
挑戰
我發現在辨識鈔票,以幫助盲人方面只做了一些努力。一些嘗試使用電腦視覺和「比例不變特徵」(精度約為 70%),有些嘗試使用機器學習(精度高得多)。在機器學習方面,值得一提的是微軟去年研究的一項,今年尼泊爾程式設計師 Kshitiz Rimal 在英特爾的支援下的一個:
- 微軟在去年的人工智慧峰會上宣佈了他們的版本,「已被下載超過 10 萬次,並幫助使用者完成 300 多萬項任務。」 他們的程式在這裡可用(沒有培訓資料)。基本上,他們使用 Keras 和轉移學習,就像我們在課程中所做的那樣,但他們不會解凍進行微調,他們用無關的圖片建立了一個「背景」負面類(我發現建立負面類很奇怪 ...... 你如何學習「缺點功能」)。他們使用行動友好的預培訓網路「MobileNet」,在裝置上執行檢測,以及每張鈔票 250 張影像(+加資料增強)。他們獲得 85% 的準確性。
- Kshitiz 的尼泊爾版本:總共 14,000 張圖片(由他拍攝),準確率為 93%。他從神經網路的 VGG19 和 Keras 開始,以及應用程式的「Reach Native」(這是一個框架,可以用相同的程式建立 iOS 和 Android 應用程式),但後來他切換到使用 MobileNetV2,和每個平台上的原生應用程式的 Tensorflow。這是 6 個月的努力。庫多斯!! 他有培訓程式,應用程式程式,以及 github上的 訓練資料。
我的目標是複製類似的解決方案,但我只會製作一個功能正常的網站,而不是應用程式,也不會進行裝置上檢測(我現在就這樣了)。然而,我將使用不同的架構。既然我想同時做幾種貨幣,我想嘗試多類分類。我看到的所有解決方案都使用單類檢測,例如「`1 usd`」,我想將其分為兩類,「`1`」和「usd`」。原因是我認為跨貨幣(所有美元看起來都很相似)和各面額(例如,5 usd 和 5 eur有共同數字 5)可以學習的功能。共性應有助於網路強化每個類的這些特徵(例如,大數字「5」)。
簡單的部分,深度學習
我基本上參加了關於衛星探測多類課程的 fast.ai 課程,沒有進行太多修改:
資料
在現實生活中,很難在單張鈔票上獲得影像,這令人驚訝。完成這個專案後,我找到了上面提到的約旦貨幣的學術論文,以及尼泊爾專案,這兩個專案都連結到他們的資料集。
我決定依靠谷歌影像搜尋,以及歐洲中央銀行和美國鑄幣局的影像,我知道這將給我帶來不切實際的好鈔票影像。我還用我家裡的錢拍了一些照片,因為低面額(可悲的是,我沒有 100 美元或 500 歐元在家裡)。我每個鈔票面額總共有 14 到 30 張圖片。 一點也不多。我的影像資料集在這裡。
由於我沒有很多影像,所以我使用具有加寬參數的資料增強。 (我錯誤地添加了翻頁,這可能不是一個好主意):
tfms = get_transforms(do_flip=True,flip_vert=True,
max_rotate=90,
max_zoom=1.5,
max_lighting=0.5,
max_warp=0.5)
最後,資料集在訓練/驗證期間看起來是這樣的:
令人驚訝的是,人們能用那麼多的影像獲得如此好的結果。
培訓
我用 20% 的拆分進行驗證,用 256 畫素大小來驗證影像,用「resnet50」作為預先訓練的模型。隨著網格凍結,我做了 15 個紀元(每個 2 分鐘)訓練新增的頂層,並得到了「.087」的fbeta,已經相當不錯了。然後解凍,在 20 個時代用切片的學習率(最後幾層的比率較高)進行更多訓練,以獲得「fbeta=.098」。透過再次凍結預先訓練的模型並做更多的紀元,我能夠擠出更多的準確性。最好的是「fbeta=0.983」。沒有過度安裝的跡象,我使用了輟學的預設參數。
匯出模型並測試推斷。
將模型匯出到 PyTorch Torch 指令碼進行佈署只需幾行程式。
我確實花了一些時間測試匯出的模型,並檢視了輸出(包括原始啟動和softmax)。 然後我意識到我可以用它來推斷信心:
- 正原始啟動(總是翻譯為高軟最大值)通常意味著高置信度。
- 負原始啟動,但非零 softmax 的可能發生在沒有明確的辨識時,所以我可以使用它們作為「暫定的替代方案」。
例如,讓我們看看這個有問題的影像,一個摺疊的 5 usd 覆蓋了大部分 5 個
{“可能性”:
“課程”:[“1”、“10”、“100”、“20”、“200”、“5”、“50”、“500”、“歐元”、“usd”)
“softmax”:[“0.00”、“0.00”、“0.01”、“0.04”、“0.01”、“0.20”、“0.00”、“0.00”、“0.00”、“99.73”],
“產出”:[“-544.18”、“-616.93”、“-347.05”、“-246.08”、“-430.36”、“-83.76”、“-550.20”、“-655.22”、“-535.67”、“537.59”],
“摘要”:[“usd”],
“其他”:{“5”:“0.20%”,“20”:“0.04%”,“100”:“0.01%”,“200”:“0.01%”}}
只有類「usd」陽性的啟動(最後在陣列上),但softmax也正確地將類「5」抬高,同時對類「20」有一些疑慮。
佈署
這是困難的部分。
基本上你需要 2 個部件。前端和後端。
- 前端是人們看到的,它的作用是給你一個頁面來檢視(我使用 Bootstrap 進行使用者介面),選擇影像並最終顯示結果的程式。我在前端添加了一些程式,以使用 Javascript 對客戶端上的映像進行下調。原因是現在的相機照片相當重,所有推理過程都需要 256 畫素的影像。這些是客戶端下樣本的 11 行程式。由於這些都是靜態程式,我在同一儲存庫上使用了github頁面。 要將影像傳送到伺服器,我直接將它們作為 DataURI 傳遞,而不是將它們上傳到某個地方,然後從那裡提取。
- 後端是接收影像、在我們的模型上執行推理程式,並返回結果的後端。這是困難部分的困難部分:),見下文:
我按照這裡的指示,我第一次使用谷歌雲引擎(GCE)。我的佈署程式在這裡,它包括與推斷類一起上傳和儲存使用者影像副本的程式,因此我可以檢查使用它們進行進一步培訓的虛假分類。相當整潔。
總的來說,它很容易佈署。它基本上建立了一個 docker,可以佈署你需要的任何程式,並根據需要旋轉例項。我的問題是,伺服器一直在執行,實際上至少 2 個例項。GCE 目的在實現非常高的可擴充性和響應性,這很好,但它也意味著我一直在付錢,即使沒有人使用它。我認為每月會是 5-10 美元。如果可能的話,我想佈署一些可以長時間保持線上,而無需支付太多費用的東西。
我決定切換到 AWS Lambda(這裡的課程說明)。這個過程看起來更複雜,但實際上沒有那麼難,巨大的好處是,你只付費使用費用。此外,對於使用級別,我們將很好地處於免費等級(除了將模型保留在 S3 上的成本,這是最低的)。我要佈署的程式在這裡。由於你正在佈署 Torchscript 模型,你只需要 PyTorch 依賴項,AWS 有一個漂亮的 docker 檔案,其中包含你需要的一切。我不得不新增一些 python 庫來格式化輸出和日誌記錄,它們都在那裡。這意味著你的實際 python 程式是最小的,你不需要攜帶 fastai(在課程執行緒上,如果你也需要將 fastai 帶入佈署,則另一位學生分享了她的佈署技巧)。
使用者體驗,響應時間。
分類的推斷大約需要 0.2 秒,這真的很快,但使用者從選擇影像到獲得結果的總體時間可能高達 30 秒,甚至失敗。額外的時間部分是將影像從客戶端上傳到伺服器,並在上傳前縮小規模(如果需要)。
在現實生活中的測試中,響應時間中位數為 1 秒,這是可以接受的 ...... 除了第一次,有時需要 30 秒才能第一次響應。我認為這被稱為「冷啟動」,對應於 AWS 從儲存中提取 Lambda 的時間。為了儘量減少這種影響,我添加了一些程式,這些程式在你載入客戶端頁面後,立即觸發向伺服器發出 ping。那個 ping 只是返回「乒乓球」,所以它不會消耗太多的計費時間,但它使觸發 AWS 為真正的推理呼叫做好準備的技巧。
宣傳
今年夏天,我每週有一個小部分在西班牙國家廣播電台上談論影響科學,我致力於在一集中談論人工智慧,以及對就業和社會的影響。我舉了一個例子,介紹了這個工具。你可以聽它(西班牙語,時間戳 2 h 31 m):Julia en la Onda,Onda Cero。
下一步
我很想得到你的回饋和想法。或者,如果你嘗試複製它有問題,請告訴我。
以下是我已經想到的下一個衝刺的一些要點:
- 使用「MobileNetV2」等行動友好型重新訓練模型
- 使用儘可能多的貨幣(和硬幣)重新訓練模型。當你新增更多貨幣時,多類別分類對檢測面額的好處應該會變得可見。
- 新增伺服器程式以上傳使用者影像的副本,就像我在 GCE 佈署時所做的那樣。
- 帶有裝置上推斷的智慧手機應用 app。
沒有留言:
張貼留言