:從數(shù)據(jù)到 TFLite 模型的 5 步完整教程)
MediaPipe Model Maker 圖像分類實戰(zhàn)從數(shù)據(jù)到 TFLite 模型的 5 步完整教程【免費下載鏈接】mediapipeCross-platform, customizable ML solutions for live and streaming media.項目地址: https://gitcode.com/GitHub_Trending/med/mediapipeMediaPipe Model Maker 是 MediaPipe 里的模型制作工具能把你的圖像數(shù)據(jù)集一條龍變成可部署的 TFLite 模型自動讀取目錄結(jié)構(gòu)、完成預(yù)處理與數(shù)據(jù)增強(qiáng)、訓(xùn)練、評估、導(dǎo)出全程一個 Python 腳本就能跑完。這篇教程帶你走完「環(huán)境安裝 → 數(shù)據(jù)集組織 → 訓(xùn)練 → 導(dǎo)出」的完整鏈路每步都給出可直接照抄的命令。1. 動手前的準(zhǔn)備版本、依賴與數(shù)據(jù)集清單這一步解決開工前到底要裝什么、數(shù)據(jù)長什么樣的問題。1.1 環(huán)境要求與安裝步驟Model Maker 隨 mediapipe 的 Python 包一起分發(fā)不需要編譯 C 框架。按下面兩步裝好即可組件要求說明Python3.8 及以上3.7 及更老版本不支持OpenCV3.x ~ 4.1訓(xùn)練過程讀取圖像幀用到mediapipe最新版含 model_maker 子包# 需要看源碼時再克隆git clone 地址 # https://gitcode.com/GitHub_Trending/med/mediapipe pip install mediapipe裝完后跑一句import mediapipe.model_maker.python.vision.image_classifier不報錯就說明依賴齊了。1.2 數(shù)據(jù)集目錄規(guī)范這一步解決圖片怎么擺才能被自動識別的問題。Dataset.from_folder的規(guī)則很簡單每個一級子文件夾就是一個類別圖片直接放在文件夾里。flower_photos/ ├── daisy/ # 每文件夾 一個類別 ├── dandelion/ ├── roses/ ├── sunflowers/ └── tulips/三條采集建議每類盡量 50 張以上、光照和角度盡量多樣、單張分辨率不低于 256×256。類別數(shù)量不用多5 類以內(nèi)就能把整個流程跑通。2. 核心流程加載、訓(xùn)練、評估、導(dǎo)出四步走這一步解決從圖片文件夾到一個 .tflite 文件的主鏈路問題。第 1 步加載數(shù)據(jù)集并劃分訓(xùn)練集Dataset.from_folder會把根目錄下所有子文件夾讀進(jìn)來標(biāo)簽按文件夾名排序所以目錄名就是最終標(biāo)簽不要用中文或帶空格的名字。from mediapipe.model_maker.python.vision import image_classifier data image_classifier.Dataset.from_folder(flower_photos) # 自動讀子目錄 train_data, rest data.split(0.8) # 80% 訓(xùn)練 validation_data, test_data rest.split(0.5) # 剩余對半分驗證 / 測試第 2 步訓(xùn)練模型這一步解決用哪個底座模型、產(chǎn)物放哪的問題。ImageClassifier.create訓(xùn)練時會自動做數(shù)據(jù)增強(qiáng)、按 cosine 策略衰減學(xué)習(xí)率并每輪保存 checkpoint。options image_classifier.ImageClassifierOptions( supported_modelimage_classifier.SupportedModels.EFFICIENTNET_LITE0, hparamsimage_classifier.HParams(export_direxport)) # 產(chǎn)物目錄 model image_classifier.ImageClassifier.create( train_datatrain_data, validation_datavalidation_data, optionsoptions)訓(xùn)練中斷了也沒關(guān)系再次運行create時它會自動從export/checkpoint恢復(fù)權(quán)重繼續(xù)訓(xùn)練。第 3 步評估 導(dǎo)出 TFLite這一步解決模型行不行、產(chǎn)物怎么落地的問題。_, acc model.evaluate(test_data) # 第二個返回值是測試集準(zhǔn)確率 print(Test accuracy: %f % acc) model.export_model() # 輸出 export/model.tflite metadata.jsonexport_model不只轉(zhuǎn)換模型還會把預(yù)處理參數(shù)和標(biāo)簽列表寫進(jìn) TFLite 的 metadata這樣 MediaPipe Tasks 加載時就不需要你手寫標(biāo)簽映射。3. 進(jìn)階技巧骨架選擇、調(diào)參與壓縮這一步解決默認(rèn)效果不夠好時往哪里使勁的問題。3.1 選對模型骨架可選骨架在SupportedModels枚舉里定義本質(zhì)是精度和體積的取舍骨架輸入尺寸歸一化適合場景MOBILENET_V2224×2240/255移動端速度優(yōu)先EFFICIENTNET_LITE0224×2240/255通用默認(rèn)選擇EFFICIENTNET_LITE2260×2600/255精度更高體積更大EFFICIENTNET_LITE4300×3000/255精度最高推理最慢MOBILENET_V2_KERAS224×224127.5/128純 Keras 實現(xiàn)便于二次修改3.2 調(diào)整訓(xùn)練超參數(shù)HParams的默認(rèn)值可以直接參考倉庫中的hyperparameters.py學(xué)習(xí)率 0.001、batch 2、10 個 epoch、L2 正則 0.0001、label smoothing 0.1且默認(rèn)開啟隨機(jī)裁剪和翻轉(zhuǎn)等數(shù)據(jù)增強(qiáng)do_data_augmentationTrue。小數(shù)據(jù)集調(diào)參的順序建議先把 epoch 加到 20~30再看是否要開do_fine_tuning微調(diào)底座最后才動學(xué)習(xí)率。3.3 導(dǎo)出時量化壓縮from mediapipe.model_maker.python.core.utils import quantization model.export_model(quantization_config quantization.QuantizationConfig.for_dynamic()) # 也可選 int8 / float16dynamic 量化無需校準(zhǔn)數(shù)據(jù)最省事int8 體積更小但需要用有代表性的樣本做校準(zhǔn)float16 精度損失可能最大。量化會小幅犧牲準(zhǔn)確率換來更小的模型文件和更快的推理速度。另外如果你的任務(wù)是框出物體而不是給整圖分類可以改用同一目錄下的object_detector模塊它直接吃 Pascal VOC 格式的 XML 標(biāo)注倉庫 testdata 里就有標(biāo)注和圖像樣例還有g(shù)esture_recognizer、text_classifier等模塊可以按同樣思路套用。4. 避坑指南這 5 個坑最容易被踩到這一步解決報錯或效果不對時先查什么的問題。1. 加載時拋Image size is zero現(xiàn)象from_folder直接報錯。原因它只讀根目錄 → 一級子文件夾這一層圖片散在根目錄或嵌套太深都算 0 張。解法按 1.2 節(jié)的目錄結(jié)構(gòu)重排保證每張圖片都在某個類別文件夾的第一層。2. 換了骨架后報尺寸或歸一化不匹配現(xiàn)象模型輸入報 shape 錯誤。原因lite0/lite2 要 224×224lite2/lite4 要 260×260/300×300歸一化參數(shù)也不同。解法不要手改輸入尺寸選對SupportedModels后這些參數(shù)由model_spec自動帶入。3. 復(fù)跑訓(xùn)練時指標(biāo)突然變差現(xiàn)象同樣的數(shù)據(jù)這次結(jié)果明顯不如上次。原因export_dir里殘留上次的 checkpointcreate會直接續(xù)訓(xùn)舊權(quán)重。解法正式重訓(xùn)前清空 export 目錄或換一個目錄避免新舊權(quán)重混在一起。4. 小類別幾乎不被識別現(xiàn)象驗證集整體準(zhǔn)確率還行但樣本少的類總是漏判。原因類別不均衡損失被大類主導(dǎo)。解法優(yōu)先補(bǔ)采該類的圖片到每類 50 張以上短期可加大batch_size、多跑幾個 epoch 觀察是否緩解。5. int8 量化后準(zhǔn)確率掉得厲害現(xiàn)象float 模型 90%int8 掉到 85% 以下。原因校準(zhǔn)集不夠有代表性量化誤差被放大。解法先用for_dynamic()對比確認(rèn)是量化本身的問題再換一批覆蓋各類、各光照的樣本做 int8 校準(zhǔn)。5. 快速回顧照著這張清單過一遍pip install mediapipePython ≥ 3.8OpenCV 3.x~4.1數(shù)據(jù)集按一個子文件夾 一個類別擺好標(biāo)簽名用英文Dataset.from_folder加載split(0.8)再split(0.5)劃分三集ImageClassifier.create訓(xùn)練export_dir指定產(chǎn)物目錄evaluate看測試集準(zhǔn)確率export_model產(chǎn)出 .tflite metadata.json下一步建議拿導(dǎo)出的 TFLite 去 MediaPipe Tasks 里跑一次推理驗證試一下object_detector做檢測任務(wù)或者用倉庫自帶的 image_classifier demo 腳本image_classifier_demo.py對照本文檢查自己的參數(shù)。如果這篇教程幫你跑通了第一個模型點個收藏后續(xù)繼續(xù)更新 MediaPipe 實操系列?!久赓M下載鏈接】mediapipeCross-platform, customizable ML solutions for live and streaming media.項目地址: https://gitcode.com/GitHub_Trending/med/mediapipe創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考