冬天終于來(lái)了,而與之一起到來(lái)的是 Coral 新發(fā)布的 C++ 和 Python API 及工具,還有針對(duì) Edge TPU 優(yōu)化的新模型,以及對(duì)基于 TensorFlow 2.0 工作流的進(jìn)一步支持。
C++
https://github.com/google-coral/libcoral
Python API
https://github.com/google-coral/pycoral
針對(duì) Edge TPU 優(yōu)化
https://coral.ai/models
Coral(https://coral.ai)是一個(gè)可用于構(gòu)建本地 AI 產(chǎn)品的完整工具包。我們的設(shè)備端推理功能,以及借助 TensorFlow Lite 和 Edge TPU,支持您構(gòu)建高效、私密、快速和離線(xiàn)的產(chǎn)品。
TensorFlow Lite 和 Edge TPU
https://coral.ai/technology
之前,我們提供了 Python 和 C++ 版本的 API,從而讓開(kāi)發(fā)者可以利用 Edge TPU 來(lái)提高推理速度。通過(guò)對(duì)機(jī)器學(xué)習(xí)模型進(jìn)行離線(xiàn)處理的方式,可以大大節(jié)省帶寬和云計(jì)算成本。同時(shí)這樣做也可以使數(shù)據(jù)保留在本地,保護(hù)用戶(hù)的隱私。最近,我們一直在努力重構(gòu)我們的 API,使其更加模塊化、重用性更強(qiáng)并擁有更好的性能。與此同時(shí),我們還在減少不必要的 API 抽象,并開(kāi)放開(kāi)發(fā)者所熟悉的更多原生 TensorFlow Lite API。
因此,在最新的版本中,我們現(xiàn)在提供了兩個(gè)獨(dú)立的復(fù)用庫(kù),每個(gè)庫(kù)都依托于強(qiáng)大的 TensorFlow Lite API 構(gòu)建而成,并且在自己的存儲(chǔ)庫(kù)中各自獨(dú)立,其分別是適用于 C++ 的 libcoral 和適用于 Python 的 PyCoral。
libcoral
https://github.com/google-coral/libcoral
Python 的PyCoral
https://github.com/google-coral/pycoral
libcoral (C++)
與我們之前的一些 API 不同,libcoral 并不會(huì)隱藏 tflite::Interpreter。相反,我們會(huì)將這個(gè)原生的 TensorFlow Lite 類(lèi)打造成一個(gè)頭等組件,并提供一些額外的輔助 API,以在您處理常見(jiàn)模型(例如分類(lèi)和檢測(cè))時(shí),幫您簡(jiǎn)化代碼。
使用新的 libcoral 庫(kù)在 C++ 中執(zhí)行推理時(shí),開(kāi)發(fā)者通常應(yīng)該遵循以下模式:
1. 使用 Edge TPU 上下文創(chuàng)建 tflite::Interpreter 實(shí)例并分配內(nèi)存
為簡(jiǎn)化這一步驟,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ù)來(lái)實(shí)現(xiàn)更高的性能,這兩個(gè)函數(shù)可以分別處理輸入數(shù)據(jù)而無(wú)需從另一個(gè)內(nèi)存區(qū)域或從DMA文件描述符進(jìn)行復(fù)制。
4. 處理 interpreter 的輸出
為簡(jiǎn)化這一步驟,libcoral 提供了一些適配器,所需的代碼更少:
auto result = coral::GetClassificationResults( *interpreter, /* threshold= */0.0f, /*top_k=*/3);
上方是分類(lèi)適配器的示例,開(kāi)發(fā)者可以在其中指定最小置信度閾值,以及返回結(jié)果的數(shù)量上限。該 API 還具有一個(gè)檢測(cè)適配器,該適配器擁有自己的結(jié)果過(guò)濾參數(shù)。
如需查看完整的示例應(yīng)用源代碼,請(qǐng)參閱 GitHub 上的 classify_image.cc,如需獲取有關(guān)如何將 libcoral 集成到應(yīng)用中的說(shuō)明,請(qǐng)參考 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
我們還在此次的新版本中帶來(lái)了對(duì)設(shè)備端再訓(xùn)練的更新,能夠在更新的 ImprintingEngine 上將 imprinting 函數(shù)與推理解耦。新的設(shè)計(jì)讓 imprinting 引擎能夠直接與 tflite::Interpreter 一起使用。
為方便尋找主機(jī)上可用的 Edge TPU,libcoral 支持諸如 "usb:0" 或 "pci:1" 之類(lèi)的標(biāo)簽。您可借此更加輕松地管理多 Edge TPU 系統(tǒng)的資源。
最后,我們做了很多性能上的改進(jìn),例如更高效的內(nèi)存使用和基于內(nèi)存而不是基于文件的抽象。此外,通過(guò)將 Abseil(https://abseil.io/)庫(kù)用于誤差傳播、通用接口和其他常見(jiàn)模式,API 的設(shè)計(jì)也更加一致,應(yīng)該可以提供更一致和穩(wěn)定的開(kāi)發(fā)者體驗(yàn)。
PyCoral (Python)
新的 PyCoral 庫(kù)(在新的 pycoral Python 模塊中提供)遵循了 libcoral 引入的一些設(shè)計(jì)模式,并為我們的 C++ 和 Python API 帶來(lái)了平衡。PyCoral 為分類(lèi)和檢測(cè)以及基于相同標(biāo)簽的 TPU 語(yǔ)義尋址設(shè)計(jì)了相同的 imprinting 解耦設(shè)計(jì)和模型適配器。
在 PyCoral 中,“運(yùn)行推理”功能現(xiàn)在已完全委托給原生的 TensorFlow Lite 庫(kù),這是因?yàn)槲覀兎艞壛擞糜诔橄?TensorFlow 解釋器的模型“引擎”。借助這項(xiàng)更改,我們消除了由特定于 Coral 的 BasicEngine、ClassificationEngine 和 DetectionEngine 類(lèi)(這些來(lái)自“Edge TPU Python 庫(kù)”的 API 現(xiàn)已被棄用)所引入的代碼重復(fù)。
要使用 PyCoral 執(zhí)行推理,我們可以遵循與 libcoral 類(lèi)似的模式:
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)
如需獲取完整詳細(xì)的示例代碼,請(qǐng)查看我們的 Python 版文檔 (https://coral.ai/docs/edgetpu/tflite-python/)。
Coral Model Garden 更新
在這一版本中,我們通過(guò) MobileDet 進(jìn)一步擴(kuò)展了 Coral Model Garden。MobileDet 指的是使用 TensorFlow 對(duì)象檢測(cè) API 的輕量級(jí)單發(fā)檢測(cè)器系列,該系列在 Edge TPU 上實(shí)現(xiàn)了最先進(jìn)的精度和延遲權(quán)衡。與 MobileNet 系列模型相比,MobileDet 是一種低延遲的檢測(cè)模型,具有更高的準(zhǔn)確性。
查看 Coral 為 Edge TPU 提供的完整模型集合(https://coral.ai/models),其中包括分類(lèi)、檢測(cè)、分割和專(zhuān)門(mén)為設(shè)備端訓(xùn)練準(zhǔn)備的模型。
將我們的整個(gè)工作流和模型集合遷移到 TensorFlow 2 是一項(xiàng)長(zhǎng)期工作。從這個(gè)版本的 Coral 機(jī)器學(xué)習(xí) API 開(kāi)始,我們將引入對(duì)基于 TensorFlow 2 的工作流的支持。目前,MobileNet v1 (ImageNet)、MobileNet v2 (ImageNet)、MobileNet v3 (ImageNet)、ResNet50 v1 (ImageNet) 和 UNet MobileNet v2 (Oxford pets) 均支持使用 TensorFlow 2 進(jìn)行訓(xùn)練和轉(zhuǎn)換。
Model Pipelining
libcoral 和 PyCoral 都已將 Model Pipelining 功能從測(cè)試狀態(tài)升級(jí)到正式使用狀態(tài)。借助 Model Pipelining 功能,我們能夠分割大型模型,然后將其分配到多個(gè) Edge TPU 上,從而大大加快模型的運(yùn)行速度。
請(qǐng)參考對(duì)應(yīng)文檔以查看該 API 的 C++ 和 Python 版本示例。
C++
https://coral.ai/docs/reference/cpp/pipeline/
Python
https://coral.ai/docs/reference/py/pycoral.pipeline/
我們會(huì)通過(guò) Edge TPU 編譯器完成模型分割,該編譯器采用參數(shù)計(jì)數(shù)算法,可將模型分割成參數(shù)大小相近的片段。對(duì)于此算法無(wú)法提供所需吞吐量的情況,我們?cè)谶@一版本中引入了一個(gè)新工具,該工具支持基于分析的算法,通過(guò)實(shí)際多次運(yùn)行模型,然后根據(jù)觀(guān)察到的延遲來(lái)劃分片段,因此可能會(huì)得到更平衡的輸出。
新的 profiling_partition 工具可以這樣使用:
./profiling_partition --edgetpu_compiler_binary $PATH_TO_COMPILER --model_path $PATH_TO_MODEL --output_dir $OUT_DIR --num_segments $NUM_SEGMENTS
了解詳情
如需了解有關(guān)上述 Coral API 的詳細(xì)信息,請(qǐng)參閱以下文檔:
使用 C++ 在 Edge TPU 上運(yùn)行推理
https://coral.ai/docs/edgetpu/tflite-cpp/
使用 Python 在 Edge TPU 上運(yùn)行推理
https://coral.ai/docs/edgetpu/tflite-python/
通過(guò)多個(gè) Edge TPU 對(duì)模型進(jìn)行流水設(shè)計(jì)
https://coral.ai/docs/edgetpu/pipeline/
在 Edge TPU 上執(zhí)行遷移學(xué)習(xí)
https://coral.ai/docs/edgetpu/models-intro/#transfer-learning-on-device
Coral Model Garden
https://coral.ai/models
責(zé)任編輯:xj
原文標(biāo)題:Coral 迎來(lái)多項(xiàng)更新,為邊緣 AI 注入更多精彩!
文章出處:【微信公眾號(hào):TensorFlow】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
AI
+關(guān)注
關(guān)注
91文章
39793瀏覽量
301382 -
C++
+關(guān)注
關(guān)注
22文章
2124瀏覽量
77112 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90029
原文標(biāo)題:Coral 迎來(lái)多項(xiàng)更新,為邊緣 AI 注入更多精彩!
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
什么是AI邊緣算力模組??
工業(yè)視覺(jué)網(wǎng)關(guān):RK3576賦能多路檢測(cè)與邊緣AI
AI 邊緣計(jì)算網(wǎng)關(guān):開(kāi)啟智能新時(shí)代的鑰匙?—龍興物聯(lián)
怎么導(dǎo)出python邊緣計(jì)算中的APP,想進(jìn)行修改又找不到源碼?
貿(mào)澤電子2025邊緣AI與機(jī)器學(xué)習(xí)技術(shù)創(chuàng)新論壇回顧(上)
邊緣AI盒子技術(shù)解析:ASIC/FPGA/GPU芯片及邊緣-云端協(xié)同與自適應(yīng)推理
Nordic收購(gòu) Neuton.AI 關(guān)于產(chǎn)品技術(shù)的分析
英特爾發(fā)布邊緣AI控制器與邊緣智算一體機(jī),創(chuàng)造“AI新視界”
邊緣AI的優(yōu)勢(shì)和技術(shù)基石
索尼專(zhuān)業(yè)影像產(chǎn)品線(xiàn)迎來(lái)重要更新
AI邊緣計(jì)算網(wǎng)關(guān)_AI邊緣智能網(wǎng)關(guān)賦能自助政務(wù)服務(wù)機(jī)_廈門(mén)計(jì)訊物聯(lián)科技有限公司
GUI Guider1.9.1新版本8大新亮點(diǎn)總結(jié) 為HMI開(kāi)發(fā)注入新活力
Python的PyCoral迎來(lái)多項(xiàng)更新,為邊緣AI注入更多精彩
評(píng)論