用PaddleClas實現酒標識別,讓你秒變「鑑酒達人」

「酒」一直在咱們中華民族的傳統文化中佔據着不可或缺的位置,更有「無酒不成席、無酒不成禮」之說。而當今「全球酒罈」百花齊放,成千上萬的酒品琳琅滿目,咱們如何瞭解這些酒的特色和它們身後的故事呢?「百瓶App」的產品研發團隊就敏銳的發現了這一獨特的需求,力爭爲「酒圈」的消費者提供更貼心、人性化的體驗,並經過百度飛槳開源深度學習平臺的助力,完成了「百瓶App」中的「掃酒標識酒」的功能,讓各種酒友都變成識酒達人。git

下載安裝命令

## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

「掃酒標識酒」基於百度飛槳的AI技術方案

「掃酒標識酒」功能主要用到圖像分類的技術,百度飛槳做爲源於產業實踐的開源深度學習平臺,在圖像分類方面一樣有着極其豐富的AI解決方案資源。github

其中飛槳圖像分類套件PaddleClas提供了豐富的圖像分類模型資源,覆蓋ResNet_vd、MobileNetV3等23種系列的分類網絡結構以及對應的117個分類預訓練模型,用戶可根據本身的需求,針對不一樣場景選擇相應的模型進行訓練使用。在本項目中,考慮識酒功能須要在移動端APP上部署,所以咱們採用了參數量和計算量較少的MobileNetV2模型。同時採用飛槳輕量化推理引擎Paddle Lite實現移動端輕量化部署和高效預測,最終在測試數據上達到了超過97%的識別準確率網絡

案例實現過程詳盡回放

1. 數據集收集框架

數據集總共包含114個品牌,每一個品牌獨立爲一個類別。其中訓練集中每一個類別有250張左右的圖像,驗證集中每一個類別有50張左右的圖像。爲知足真實場景的多樣性,數據集中同類別圖像的酒瓶擺放方向、光線、酒標出鏡程度等略有不一樣。性能

2. 訓練集聚類學習

在對訓練集進行分析後,咱們發現因爲數據採集方式較爲單一,致使訓練集中同一類別下的圖像重複度較高,若是直接訓練將花費較長時間,且容易帶來模型過擬合的問題。所以咱們採用K-means聚類方法對訓練集進行聚類,在每一個類中隨機抽取一張做爲此類的表明,訓練過程以下圖所示。最終訓練集中,每一個類別下的樣本數據減小爲原來的1/5,聚類後的數據集僅保留了差別較爲明顯的樣本。測試

圖1 訓練集聚類過程fetch

3. 數據預處理優化

在真實應用場景中,被拍攝的酒瓶每每會受到光線、擺放角度、入鏡大小等因素的影響,會與訓練集存在必定的差別,經過數據加強來提升模型的泛化能力,是十分必要的。數據加強主要爲5個步驟,具體以下:spa

  1. 以50%的機率進行隨機旋轉(旋轉範圍爲0-30度);

  2. 對上一步中圖像進行隨機裁剪;

  3. 將上一步中裁剪後的圖像調整大小到224*224分辨率(分辨率大小可根據實際數據集適當調整);

  4. 對上一步中結果進行隨機顏色擾動,隨機顏色擾動由圖2中四種擾動方式構成,以50%的機率按照「明亮度->對比度->色相->平衡度」的順序進行顏色擾動,剩餘50%的機率按照「明亮度->色相->平衡度->對比度」的順序進行顏色擾動;

  5. 對上一步中結果以50%的機率進行左右翻轉;

圖2 隨機顏色擾動

在進行圖像加強操做後,爲了更好地適配飛槳所提供的預訓練模型,對當前的圖像進行減均值除以方差的操做。

4. 模型訓練
基於模型最終的實際使用場景,咱們採用MobileNetV2模型做爲分類模型,它能夠看作是一種MobileNetV1和ResNet的結合,在MobileNetV1引入深度可分離卷積下降計算量和參數量的基礎上,引入了ResNet的殘差結構(bottleneck),精度相對於MobileNetV1有較大提高,圖3對比了3種模型的子結構。

圖3 MobileNetV一、MobileNetV二、ResNet子結構對比

最終,在學習率策略爲piecewise decay、學習率爲0.002五、批大小爲6四、epoch爲20的基礎上,分類精度可達到97%以上

5. 模型部署

移動端APP的大小和響應速度每每是評價APP性能的兩個重要指標飛槳輕量化推理引擎Paddle Lite專門用於實現包括手機移動端在內的端側輕量化高效預測,是一個高性能、輕量級的深度學習預測引擎。

在該項目中,Paddle Lite首先對訓練得到的MobileNetV2模型進行操做融合 (Operator fusion)、存儲優化 (Memory optimization)這一系列計算圖優化操做,優化後模型體積大幅減少且預測速度獲得大幅提高。經過操做的融合,Paddle Lite在對推理庫進行剪裁後得到只包含feed、fetch、conv2d、depthwise_conv2d、 elementwise_add、fc、pool2d、relu六、softmax這幾個Operator的推理庫;對於優化後的模型,Paddle Lite將執行階段和計算圖優化階段實現良好的解耦拆分,移動端直接部署無任何第三方依賴的執行階段。(Paddle-Lite提供了在各個平臺上模型的部署的示例代碼:

https://github.com/PaddlePaddle/Paddle-Lite-Demo)

最終單張圖片在不一樣硬件環境中推理耗時以下表所示:

案例結果展現

訓練後的模型成功部署於「百瓶App」,支持了App中的「掃酒標識酒」功能。如圖4所示,打開App中的拍照功能,拍攝想識別的酒標,便可快速識別出對應的酒,並把酒的相關信息和評論信息推送出來。

圖4 「百瓶App」識別結果

結語

飛槳提供了涵蓋豐富模型資源的圖像分類套件PaddleClas,針對不一樣的任務有不一樣的適配模型,用戶可根據本身的需求,針對不一樣場景靈活選擇相應的模型;而且經過飛槳輕量化推理引擎Paddle Lite,可靈活的實現移動端或嵌入端的輕量化高效預測。「百瓶App」的「掃酒標識酒」功能是飛槳落地企業AI項目的又一力做,填補了移動端智能識酒領域的空白,讓人人秒變「識酒達人」,感興趣的快來試一試吧。

相關資源

下載安裝命令

## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

飛槳圖像分類套件PaddleClas:

Github:

https://github.com/PaddlePaddle/PaddleClas

Gitee:

https://gitee.com/paddlepaddle/PaddleClas

飛槳輕量化推理引擎Paddle Lite:

Github:

https://github.com/PaddlePaddle/Paddle-Lite

Gitee:

https://gitee.com/paddlepaddle/paddle-lite

若是您加入官方QQ羣,您將趕上大批志同道合的深度學習同窗。官方QQ羣:703252161。

若是您想詳細瞭解更多飛槳的相關內容,請參閱如下文檔。

官網地址:

https://www.paddlepaddle.org.cn

飛槳開源框架項目地址:

GitHub:

https://github.com/PaddlePaddle/Paddle

Gitee: 

https://gitee.com/paddlepaddle/Paddle

相關文章
相關標籤/搜索