[轉(zhuǎn)載]使用TensorFlow Lite GPU delegate進(jìn)行實(shí)時推理來掃描書籍 vFlat

原作者: TensorFlow(Kunwoo Park, Moogung Kim, Eunsung Han)
鏈接: https://medium.com/tensorflow/how-vflat-used-the-tflite-gpu-delegate-for-real-time-inference-to-scan-books-df3bb86a4eb7

使用vFlat應(yīng)用程序?qū)澢鷷撨M(jìn)行平掃

盡管有許多移動掃描應(yīng)用程序可供下載躬柬,但大多數(shù)都專注于將平面文檔數(shù)字化,在掃描書籍的彎曲頁面時會遇到困難。當(dāng)掃描帶有文本的曲面時,人們可以通過移除書本或出版物的裝訂來進(jìn)行破壞性掃描,或者簡單地按原樣接受輸入并處理讀取相機(jī)捕獲的曲面圖像油宜。

這就是為什么我們在旅行者開發(fā) vFlat, 一款使用深度學(xué)習(xí)來解決這個問題的Android應(yīng)用程序。vFlat應(yīng)用程序的目的是讓用戶輕松地瀏覽他們的書籍,而不必?fù)?dān)心彎曲的頁面宪睹。它還試圖通過自動確定書籍頁面的邊界來減少用戶的手動輸入。

Left: Curved book page image captured by a normal mobile camera. Right: Scanned version of the same image using vFlat

左圖:普通移動相機(jī)拍攝的彎曲書頁圖像蚕钦。右:使用vFlat掃描同一圖像的版本
當(dāng)用戶試圖通過OCR(光學(xué)字符識別)從書頁的照片中提取文本時亭病,這一點(diǎn)非常有用。當(dāng)從上面的圖像中提取文本時嘶居,OCR無法正確識別某些單詞和文本行罪帖,因?yàn)樗鼈兲珡澢恕H欢程瑢⑼瑯拥募夹g(shù)應(yīng)用到右邊的圖像會產(chǎn)生更高的成功率胸蛛,并且可以在幾乎沒有錯誤的情況下提取文本。

vFlat應(yīng)用程序中圖像B的OCR結(jié)果

如何構(gòu)建vFlat應(yīng)用程序

我們開發(fā)了一個深度學(xué)習(xí)模型樱报,可以使彎曲的書頁變平葬项,并決定在移動設(shè)備上進(jìn)行,以提供最佳的最終用戶體驗(yàn)迹蛤。在vFlat應(yīng)用程序中民珍,有一個“實(shí)時預(yù)覽”功能,用戶可以在其中看到實(shí)時展平的書頁(超過20FPS)盗飒。如果用戶只需使用該應(yīng)用程序就可以將掃描的頁面實(shí)時預(yù)覽為扁平圖像嚷量,那么他們可以在拍照前調(diào)整角度和邊框。


vFlat的“實(shí)時預(yù)覽”功能

為了在移動應(yīng)用程序中實(shí)現(xiàn)實(shí)時推理逆趣,我們優(yōu)化了訓(xùn)練模型蝶溶,并利用硬件加速的優(yōu)點(diǎn)。我們最初的想法是用OpenGL自己實(shí)現(xiàn)推理模塊宣渗,所以我們準(zhǔn)備用GLSL(OpenGL著色語言)實(shí)現(xiàn)模型的層抖所。
幸運(yùn)的是,我們遇到了TensorFlow Lite的GPU支持痕囱,并決定嘗試一下(在編寫本文時田轧,'TensorFlow-Lite-GPU' package版本已更新為“org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly”). 我們減少了權(quán)重和復(fù)雜操作的數(shù)量,提出了一個輕量級版本的模型鞍恢,并利用TFLite GPU代理進(jìn)行硬件加速傻粘。深神經(jīng)網(wǎng)絡(luò)非常適合GPU每窖,因?yàn)樗鼈儽萩pu具有更多的計算能力,并且擅長處理大量并行工作負(fù)載弦悉。但是窒典,使用移動GPU并不是一件小事;這就是TFLite GPU代理的作用所在警绩。
TFLite GPU代理為移動GPU優(yōu)化神經(jīng)網(wǎng)絡(luò)圖崇败,并生成和編譯異步執(zhí)行的計算著色器。感謝TFLite GPU代理肩祥,我們不必實(shí)現(xiàn)自己的硬件加速推理模塊后室,從而節(jié)省了幾個月的開發(fā)時間。
盡管我們使用TFLite GPU代理節(jié)省了時間和精力混狠,但我們在將自己的模型轉(zhuǎn)換為TFLite模型并將其與TFLite GPU代理集成時遇到了問題岸霹。僅GPU代理的實(shí)驗(yàn)版本支持的操作 它主要用于MobileNet,不支持我們原始模型中的某些操作将饺。
為了在不犧牲模型性能的情況下利用GPU代理贡避,我們必須在保持整個網(wǎng)絡(luò)結(jié)構(gòu)不變的情況下替換一些操作。我們在轉(zhuǎn)換過程中遇到了問題予弧,由于此時源代碼尚未打開刮吧,因此很難確定我們看到的錯誤的原因。(TFLite GPU代理的代碼現(xiàn)在公開提供在 GitHub)
例如掖蛤,由于TFLite GPU代理不支持LeakyReLU操作杀捻,因此我們必須按以下方式使用受支持的PReLU操作:
通過改變

tf.keras.layers.LeakyReLU(alpha=0.3)
to
tf.keras.layers.PReLU(alpha_initializer=Constant(0.3), shared_axes=[1, 2], trainable=False)
然而,當(dāng)我們試圖通過共享所有軸(shared_axes=[1蚓庭,2致讥,3])將PReLU操作中的參數(shù)數(shù)量減少到1時,我們遇到了一個意外的行為器赞。雖然此代碼在CPU模式下運(yùn)行良好垢袱,但GPU代理失敗,錯誤為“線性alpha形狀與輸入通道數(shù)不匹配”港柜。這就是為什么我們最終只沿著軸1和軸2共享參數(shù)请契。
我們遇到的另一個問題是,當(dāng)我們試圖使用網(wǎng)絡(luò)中的Lambda層規(guī)范化-1和1之間的輸入數(shù)據(jù)時:
tf.keras.layers.Lambda(lambda x : (x / 127.5) — 1.0)

用TFLite轉(zhuǎn)換器轉(zhuǎn)換Lambda層的可視化

這似乎適用于GPU代理夏醉,但當(dāng)實(shí)際運(yùn)行時爽锥,它會在沒有警告的情況下返回到CPU。通常情況下授舟,當(dāng)這種情況發(fā)生時救恨,TFLite會以“未能應(yīng)用代理”之類的消息警告我們贸辈。只有第一個M操作將在GPU上運(yùn)行释树,其余的N操作將在CPU上運(yùn)行”肠槽。因此,在使用Lambda層時要小心奢啥,并在繼續(xù)之前始終嘗試測量實(shí)際的推斷時間

結(jié)論

在不同Android設(shè)備上秸仙,GPU上的平均推斷時間與我們模型上的基線CPU推斷時間相比

盡管在這一過程中有幾個障礙,但是我們通過使用TFLite GPU代理將模型的推理時間減少了一半以上桩盲。我們終于能夠?yàn)橛脩籼峁┮粋€“實(shí)時預(yù)覽”功能寂纪,其中扁平的頁面實(shí)時顯示.
我們可以自信地說,使用TFLite GPU代理是一個很好的選擇赌结,強(qiáng)烈建議那些想在移動設(shè)備上部署他們的訓(xùn)練模型的人嘗試一下捞蛋。
要了解更多,并親自嘗試柬姚,請閱讀TensorFlow Lite GPU delegate.

vFlat鳥瞰圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拟杉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子量承,更是在濱河造成了極大的恐慌搬设,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撕捍,死亡現(xiàn)場離奇詭異拿穴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)忧风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門默色,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阀蒂,你說我怎么就攤上這事该窗。” “怎么了蚤霞?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵酗失,是天一觀的道長。 經(jīng)常有香客問我昧绣,道長规肴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任夜畴,我火速辦了婚禮拖刃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贪绘。我一直安慰自己兑牡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布税灌。 她就那樣靜靜地躺著均函,像睡著了一般亿虽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苞也,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天洛勉,我揣著相機(jī)與錄音,去河邊找鬼如迟。 笑死收毫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的殷勘。 我是一名探鬼主播此再,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玲销!你這毒婦竟也來了引润?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痒玩,失蹤者是張志新(化名)和其女友劉穎淳附,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蠢古,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奴曙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了草讶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洽糟。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堕战,靈堂內(nèi)的尸體忽然破棺而出坤溃,到底是詐尸還是另有隱情,我是刑警寧澤嘱丢,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布薪介,位于F島的核電站,受9級特大地震影響越驻,放射性物質(zhì)發(fā)生泄漏汁政。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一缀旁、第九天 我趴在偏房一處隱蔽的房頂上張望记劈。 院中可真熱鬧,春花似錦并巍、人聲如沸目木。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刽射。三九已至怀跛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柄冲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工忠蝗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留现横,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓阁最,卻偏偏與公主長得像戒祠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子速种,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容