冬天終于來了,而與之一起到來的是 Coral 新發(fā)布的 C++ 和 Python API 及工具,還有針對 Edge TPU 優(yōu)化的新模型,以及對基于 TensorFlow 2.0 工作流的進一步支持。
C++
https://github.com/google-coral/libcoral
Python API
https://github.com/google-coral/pycoral
針對 Edge TPU 優(yōu)化
https://coral.ai/models
Coral(https://coral.ai)是一個可用于構(gòu)建本地 AI 產(chǎn)品的完整工具包。我們的設備端推理功能,以及借助 TensorFlow Lite 和 Edge TPU,支持您構(gòu)建高效、私密、快速和離線的產(chǎn)品。
TensorFlow Lite 和 Edge TPU
https://coral.ai/technology
之前,我們提供了 Python 和 C++ 版本的 API,從而讓開發(fā)者可以利用 Edge TPU 來提高推理速度。通過對機器學習模型進行離線處理的方式,可以大大節(jié)省帶寬和云計算成本。同時這樣做也可以使數(shù)據(jù)保留在本地,保護用戶的隱私。最近,我們一直在努力重構(gòu)我們的 API,使其更加模塊化、重用性更強并擁有更好的性能。與此同時,我們還在減少不必要的 API 抽象,并開放開發(fā)者所熟悉的更多原生 TensorFlow Lite API。
因此,在最新的版本中,我們現(xiàn)在提供了兩個獨立的復用庫,每個庫都依托于強大的 TensorFlow Lite API 構(gòu)建而成,并且在自己的存儲庫中各自獨立,其分別是適用于 C++ 的 libcoral 和適用于 Python 的 PyCoral。
libcoral
https://github.com/google-coral/libcoral
Python 的PyCoral
https://github.com/google-coral/pycoral
libcoral (C++)
與我們之前的一些 API 不同,libcoral 并不會隱藏 tflite::Interpreter。相反,我們會將這個原生的 TensorFlow Lite 類打造成一個頭等組件,并提供一些額外的輔助 API,以在您處理常見模型(例如分類和檢測)時,幫您簡化代碼。
使用新的 libcoral 庫在 C++ 中執(zhí)行推理時,開發(fā)者通常應該遵循以下模式:
1. 使用 Edge TPU 上下文創(chuàng)建 tflite::Interpreter 實例并分配內(nèi)存
為簡化這一步驟,libcoral 提供了 MakeEdgeTpuInterpreter() 函數(shù):
// Load the model auto model = coral::GetFlag(FLAGS_model_path)); // Get the Edge TPU context auto tpu_context = coral::ContainsEdgeTpuCustomOp(*model) ? coral::GetEdgeTpuContextOrDie() : nullptr; // Get the interpreter auto interpreter = coral::MakeEdgeTpuInterpreterOrDie( *model, tpu_context.get());
2. 配置 interpreter 的輸入
3. 調(diào)用 interpreter:
interpreter->Invoke();
作為 Invoke() 的替代方案,您可以使用 InvokeWithMemBuffer() 和 InvokeWithDmaBuffer() 函數(shù)來實現(xiàn)更高的性能,這兩個函數(shù)可以分別處理輸入數(shù)據(jù)而無需從另一個內(nèi)存區(qū)域或從DMA文件描述符進行復制。
4. 處理 interpreter 的輸出
為簡化這一步驟,libcoral 提供了一些適配器,所需的代碼更少:
auto result = coral::GetClassificationResults( *interpreter, /* threshold= */0.0f, /*top_k=*/3);
上方是分類適配器的示例,開發(fā)者可以在其中指定最小置信度閾值,以及返回結(jié)果的數(shù)量上限。該 API 還具有一個檢測適配器,該適配器擁有自己的結(jié)果過濾參數(shù)。
如需查看完整的示例應用源代碼,請參閱 GitHub 上的 classify_image.cc,如需獲取有關如何將 libcoral 集成到應用中的說明,請參考 GitHub 上的 README.md。
GitHub 上的 classify_image.cc
https://github.com/google-coral/libcoral/blob/master/coral/examples/classify_image.cc
GitHub 上的 README.md
https://github.com/google-coral/libcoral/blob/master/README.md
我們還在此次的新版本中帶來了對設備端再訓練的更新,能夠在更新的 ImprintingEngine 上將 imprinting 函數(shù)與推理解耦。新的設計讓 imprinting 引擎能夠直接與 tflite::Interpreter 一起使用。
為方便尋找主機上可用的 Edge TPU,libcoral 支持諸如 "usb:0" 或 "pci:1" 之類的標簽。您可借此更加輕松地管理多 Edge TPU 系統(tǒng)的資源。
最后,我們做了很多性能上的改進,例如更高效的內(nèi)存使用和基于內(nèi)存而不是基于文件的抽象。此外,通過將 Abseil(https://abseil.io/)庫用于誤差傳播、通用接口和其他常見模式,API 的設計也更加一致,應該可以提供更一致和穩(wěn)定的開發(fā)者體驗。
PyCoral (Python)
新的 PyCoral 庫(在新的 pycoral Python 模塊中提供)遵循了 libcoral 引入的一些設計模式,并為我們的 C++ 和 Python API 帶來了平衡。PyCoral 為分類和檢測以及基于相同標簽的 TPU 語義尋址設計了相同的 imprinting 解耦設計和模型適配器。
在 PyCoral 中,“運行推理”功能現(xiàn)在已完全委托給原生的 TensorFlow Lite 庫,這是因為我們放棄了用于抽象 TensorFlow 解釋器的模型“引擎”。借助這項更改,我們消除了由特定于 Coral 的 BasicEngine、ClassificationEngine 和 DetectionEngine 類(這些來自“Edge TPU Python 庫”的 API 現(xiàn)已被棄用)所引入的代碼重復。
要使用 PyCoral 執(zhí)行推理,我們可以遵循與 libcoral 類似的模式:
1. 創(chuàng)建 interpreter:
interpreter = edgetpu.make_interpreter(model_file) interpreter.allocate_tensors()
2. 配置 interpreter 的輸入:
common.set_input(interpreter, image)
3. 調(diào)用 interpreter:
interpreter.invoke()
4. 處理 interpreter 的輸出:
classes = classify.get_classes(interpreter, top_k=3)
如需獲取完整詳細的示例代碼,請查看我們的 Python 版文檔 (https://coral.ai/docs/edgetpu/tflite-python/)。
Coral Model Garden 更新
在這一版本中,我們通過 MobileDet 進一步擴展了 Coral Model Garden。MobileDet 指的是使用 TensorFlow 對象檢測 API 的輕量級單發(fā)檢測器系列,該系列在 Edge TPU 上實現(xiàn)了最先進的精度和延遲權衡。與 MobileNet 系列模型相比,MobileDet 是一種低延遲的檢測模型,具有更高的準確性。
查看 Coral 為 Edge TPU 提供的完整模型集合(https://coral.ai/models),其中包括分類、檢測、分割和專門為設備端訓練準備的模型。
將我們的整個工作流和模型集合遷移到 TensorFlow 2 是一項長期工作。從這個版本的 Coral 機器學習 API 開始,我們將引入對基于 TensorFlow 2 的工作流的支持。目前,MobileNet v1 (ImageNet)、MobileNet v2 (ImageNet)、MobileNet v3 (ImageNet)、ResNet50 v1 (ImageNet) 和 UNet MobileNet v2 (Oxford pets) 均支持使用 TensorFlow 2 進行訓練和轉(zhuǎn)換。
Model Pipelining
libcoral 和 PyCoral 都已將 Model Pipelining 功能從測試狀態(tài)升級到正式使用狀態(tài)。借助 Model Pipelining 功能,我們能夠分割大型模型,然后將其分配到多個 Edge TPU 上,從而大大加快模型的運行速度。
請參考對應文檔以查看該 API 的 C++ 和 Python 版本示例。
C++
https://coral.ai/docs/reference/cpp/pipeline/
Python
https://coral.ai/docs/reference/py/pycoral.pipeline/
我們會通過 Edge TPU 編譯器完成模型分割,該編譯器采用參數(shù)計數(shù)算法,可將模型分割成參數(shù)大小相近的片段。對于此算法無法提供所需吞吐量的情況,我們在這一版本中引入了一個新工具,該工具支持基于分析的算法,通過實際多次運行模型,然后根據(jù)觀察到的延遲來劃分片段,因此可能會得到更平衡的輸出。
新的 profiling_partition 工具可以這樣使用:
./profiling_partition --edgetpu_compiler_binary $PATH_TO_COMPILER --model_path $PATH_TO_MODEL --output_dir $OUT_DIR --num_segments $NUM_SEGMENTS
了解詳情
如需了解有關上述 Coral API 的詳細信息,請參閱以下文檔:
使用 C++ 在 Edge TPU 上運行推理
https://coral.ai/docs/edgetpu/tflite-cpp/
使用 Python 在 Edge TPU 上運行推理
https://coral.ai/docs/edgetpu/tflite-python/
通過多個 Edge TPU 對模型進行流水設計
https://coral.ai/docs/edgetpu/pipeline/
在 Edge TPU 上執(zhí)行遷移學習
https://coral.ai/docs/edgetpu/models-intro/#transfer-learning-on-device
Coral Model Garden
https://coral.ai/models
責任編輯:xj
原文標題:Coral 迎來多項更新,為邊緣 AI 注入更多精彩!
文章出處:【微信公眾號:TensorFlow】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
-
AI
+關注
關注
87文章
30947瀏覽量
269216 -
C++
+關注
關注
22文章
2109瀏覽量
73678 -
python
+關注
關注
56文章
4797瀏覽量
84729
原文標題:Coral 迎來多項更新,為邊緣 AI 注入更多精彩!
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論