Category Archives: AI 人工智慧

[ 活動記錄 ] 2018.10.18- Maker Faire Taipei 2018 RS DesignSpark展品精心製作 Check it out!

文字

RS DesignSpark

圖片

RS DesignSpark

展出時間

2018/11/3(六) – 11/4(日)

 

再過半個多月,Maker Faire Taipei 2018即將盛大登場!屆時,將有許多參展廠商與創客夥伴們齊聚一堂,展出自己的精心之作。而RS DesignSpark也會參與今年的Maker Faire Taipei,並在活動中展出Arduino、Raspberry Pi、Intel Movidius⋯⋯等等應用,分別有盤旋小魚、小型的Pidentifier、Pi-Top物件識別器、Arduino空氣吉他及簡報訓練器。為讓讀者們嚐嚐鮮、過過癮、吃吃味(咦),小編先介紹其中一個作品,Check it out

via GIPHY

簡易款Pi-Top物件識別器

這款應用運用樹莓派和Intel Movidius NCS,並配合Pi-Top CEED Pro及網絡攝影機,將影像與識別結果,顯示於Pi-top螢幕的20級識別小工具。

主要構成硬體:

  1. Raspberry Pi Model B+ (811-1284)

  2. Intel Movidius Neural Network Compute Stick (139-3655)

  3. Pi-Top CEED Pro, Green(122-6547)

圖1

 

其它的作品就請讀者們前往RS官網瀏覽,上面有很詳盡的說明。網址:https://www.rs-online.com/designspark/article-41-cn

 

這次RS DesignSpark參加Maker Faire Taipei 2018,只有作品參展嗎?當然不是囉!RS DesignSpark看準當前邊緣運算的科技趨勢,為參加者舉辦了一場「邊緣運算AI智慧裝置」體驗工作坊!

 

參加體驗工作坊可學到什麼?工作坊將運用Raspberry Pi 加上隨身碟大小的神經運算模組Intel Movidius NCS,展示低功耗又能達到高度運算負載的裝置,盼望讓使用者在AI運算高畫質圖像處理機械視覺類神經網路等應用上,觸發出新的解決方案。

 

有工作坊當然有好康囉!好康就是:凡報名體驗工作坊的夥伴,即可得到Maker Faire Taipei 2018活動票券乙張。(聽說今年的Maker Faire Taipei要購買門票喔!)所以,對邊緣運算有興趣的讀者們,請趕快報名!報名請點這裡

 

 And one more thing⋯⋯

via GIPHY

 

活動現場還將有抽獎活動,會送出Movidius、Raspberry Pi套件、Digilent Analog Discovery 2、Pmod HAT⋯⋯等等豐富獎品。所以,Maker Faire Taipei 2018,我們不見不散喔!

 

相關文章

[ 介紹文 ]CAVEDU教育團隊如何看AI 與科技教育

作者/攝影

文:曾吉弘

圖:CAVEDU教育團隊

主題圖片:Designed by Starline

文章分類介紹文
成本X
難度

X

時間X

 

CAVEDU怎麼看 AI 人工智慧

近年來全世界都掀起了一股「大家來coding」的風潮,台灣政府也開始推動基礎程式教育,目標是讓孩子們能在學習程式設計的過程中培養基礎的運算思維(Computational thinking)能力,能對這個快速變動的環境有更多的好奇心與觀察力。另一方面,自從大陸在今年(2018) 4月於上海發表全球第一本AI高中教材《人工智能基礎》之後,大家好像都緊張了起來:

  • 業界:「不 AI 一下,好像不行?得趕快說自己是 AI 產業。

  • 家長、同學:「我要找 AI 相關科系!」(當年的生科與資管也是這樣?)

  • 學校老師:「把原本的課程名稱加上AI兩個字!

 

上述也許誇大了點,但科技領域關鍵字一日數變,AI 領域又包山包海,除了極少數頂尖研究者之外,又有誰敢說自己是 AI大師、AI領航者呢?

 

AI 等資訊科技是現在進行式,今天弄得要死要活的東西,明天說不定點點按鈕就好了?近兩年物聯網教學就是很好的例證,使用 LinkIt 7697 搭配 MCS 雲服務,已經能讓國小學生也能做出簡單的物聯網專案,從網頁與手機就能監看感測器資訊或控制開發板。在此的並非說網路通訊協定不重要,而是對於非專業人士來說,這樣的設計能幫助他們聚焦在最重要的事情上:資料。如果資料對於開發者來說是有意義或是重要的,那先從資料本身開始是個相當好的出發點。

圖1

 

圖2

 

關鍵字會變,但流程與理論基礎不會。CAVEDU從2008年開始使用樂高機器人來教學(如果要回溯到我與鄭建彥最開始接觸樂高的話,那是1999年的RCX了),一路邁入手機App (Android / App Inventor@2010)、互動聯網裝置(Arduino / Rpi / LinkIt…@2013)、物聯網(@2015) 到去年開始如野火燎原一般的 AI。如果只追關鍵字的話,真的會無所適從。

 

根據美國麻省理工學院媒體實驗室終身幼兒園小組的Mitchel Resnick教授表示,幼兒(小學前)時期可說是我們一生中最具創造力的時候。該團隊所開發的 Scratch 已經是小學階段的最主要圖形化程式介面之一,Resnick教授也主張 「Scratch 是幫助孩子們成為創意思考者(Creative Thinker)的絕佳平台」,並致力於讓 Scratch 「很簡單」,他認為程式提供愈多功能或愈多元件反而會限縮孩子們的創造力。(關於創意思考者,請參考 Learning Creative Learning 課程,正體中文由阿吉老師與諸多好朋友一起翻譯完成。)

 

另一方面,MIT App Inventor小組創辦人 Hal Abelson 教授(阿吉老師於2017- 2018 於該實驗室擔任訪問學者)也說:「如果資訊科技一日數變,那為什麼還要讓孩子們和他們的祖父母一樣的方式來學習?” 因此,在這股浪潮下也有另一種反思:「是否人人都需要學如何寫程式?這樣同質化的過程會對孩子造成怎樣的影響?

 

CAVEDU的理念是:根據當前的科技發展趨勢,針對不同學習課群提供合適的教學內容。

 

對於孩子來說,好玩最重要

圖3

 

圖4

 

點我觀看與Hal Abelson教授的訪談   /   點我觀看與Mitchel Resnick教授的訪談

 

使用 Raspberry Pi 實作AI 視覺辨識無人小車

AI 對多數人來說,還是太虛無飄渺了。CAVEDU 為了讓學生理解 AI 諸多領域中最容易有感也是最容易實踐的:視覺辨識,我們使用 Raspberry Pi B3+ (後簡稱 Pi3)所設計的 「邊緣運算 AI 無人自駕小車」。

 

這是我們認為對於基礎 AI 視覺應用的最佳教學套件。之所以選用 Pi3 自然是因為其性價比以及豐富的教學資源,當年還是 Pi 2的時候就有相當不錯的 OpenCV 視覺追蹤效果,各樣的函式庫套件也非常豐富,一下子很多專題都可以使用它來完成,與Arduino 兩者號稱是學生專題救星呢(笑)!

 

AI 視覺應用的難點在於收集影像資料。喜歡養貓的阿吉老師開玩笑說:「我要幫我家的貓要拍多少張照片都沒問題,但是要蒐集十種不同的貓就難囉!」我們所設計的課程會帶學生體驗完整的訓練流程,不使用現成的資料集(因為訓練結果不會差太多),而是針對無人小車的場地實際收集影像,標記,最後選定模型來進行訓練。其中每一個環節都會影響到小車最終的辨識結果。一定有感!

圖5 學員自行收集的影像資料

 

圖6 AI視覺辨識課程實況

 

圖7 視覺辨識課程使用的AI無人小車

 

邊緣運算?

邊緣運算是指終端裝置也具有一定的能力來處理資料 ,可以加快資料的處理與傳送速度,只要把運算後的結果而非原始資料丟回雲端 (不過不一定什麼事情都要與雲端結合,後續會繼續討論)即可,自然能大幅減少因網路頻寬受限而產生的延遲。

 

例如就經濟面的考量,如果要做到抓到臉部之後能進一步辨識情緒/微笑或五官位置這類功能的話。後面的進階功能可以使用 Microsoft Azure 認知服務 或其他類似的雲端服務來做到,但這些雲端服務都需要付費(或部分免費),且多數需要信用卡來進行身份認證,這件事在多數學校就卡關了吧…   因此我們在課程設計上就朝「終端裝置就能做到」這個方向來努力。在此簡單做一些比較:

 

邊緣運算 VS 雲端服務

  1. 程式碼開源雲端服務很厲害,但它不會告訴你他是怎麼算的。我們能做的只能相信這些雲端服務供應商的結果。例如:Facebook 每天都有一大堆人在打卡與自拍,合理推斷在超大量的資料之下,Facebook在辨識臉孔上非常準,當然事實也是如此。如果把這些運算改到邊緣裝置來做的話,由於程式碼已知,就能循序漸進讓學生學到更多東西,也可以針對後續的情境來擴充。
  2. 不受網路環境影響:相信各位老師都體認到了:教室可以上網,不代表可以進行物聯網教學。能夠進行物聯網課程的話,教室的 router 要很夠力,基本要能夠負擔 「上課人數 x 3」的連線數:聯網裝置 + 手機 + 電腦 都要在同一個網段下才行。因此20人上課,連線數的基本需求就是 60。已經有許多學校著手升級網路基本設備,非常欣慰。
  3. 運算即時:以 CAVEDU 的AI教學車為例,這樣的情境就需要即時,而非連結雲端。Rpi 的速度不算太快,拍照上傳雲端,呼叫API,收到回傳結果來決定車子動作,這個過程再怎麼快也要3~5秒,這樣就算偵測到什麼東西,車子也已經撞牆了。因此有些標榜AI語音辨識結合自走車控制,好像有點奇怪⋯⋯。

 

作為邊緣運算裝置,如何提升 Raspberry Pi 的算力?

CAVEDU 的 Pi3 AI無人小車,直接讓 Rpi 執行使用 Keras 神經網路架構來進行視覺辨識,辨識張數每秒約2~5張(0.5 ~ 0.2秒/張)。這大大限制了車子的移動速度。畢竟,Pi 3只要開多一點網頁,系統就到100%了,何況大量的模型訓練呢?在不更換主板的前提下,要如何提升 Raspberry Pi 的算力呢?

 

Intel 所推出的 Movidius NCS神經運算棒來得恰到好處,可以把最耗資源的運算分一點去做。以 Pi3 小車來說,只要搭配一隻 Intel Movidius NCS 就可以讓每秒的張數提升到每秒約14~20張(0.07 ~ 0.05秒/張)。算是相當經濟實惠不錯的選擇,當然也可以期待 Pi 4就是了。根據 Intel 原廠文件表示,可以串接多隻 Movidius 達到更好的效能。

 

的確,覺得Pi 效能不佳的讀者,當然可以購買更高級的硬體例如 Nvidia TX1,但對於學校來說,經費可以買幾台呢?買一台大家圍著看嗎?另一方面,課程的延伸性呢?本課程已經與台灣微軟技術中心合作開辦多梯次的人工智慧實務工作坊(AGV),並搭配其 Azure 雲服務下的資料科學虛擬機器 (Data Science Virtual Machine) 來加速神經網路訓練速度,適合業界人士使用。另一方面,對於教學單位來說,可使用個人電腦來進行訓練,使用我們所提供的架構使用一般的電腦也可以完成訓練,並搭配 Pi3 完成至少一學期的課程(課表已經完成,歡迎來信索取或找我們去辦研習喔!E-mail:service@cavedu.com

圖8 Intel Movidius NCS神經運算棒

 

CAVEDU 提供各式各樣的最新課程,當第一線教學者的強力後盾。如果您也認同CAVEDU的理念,不喜歡好高騖遠的名詞大戰,歡迎來CAVEDU走走看看。

 

相關文章

 

 

[ 翻譯 ] 2018.10.12-根據TensorFlow團隊,TensorFlow將於2020年1月起,停止支援Python 2

原文作者

TensorFlow團隊

圖片

截圖自https://python3statement.org/

網站,特此致謝!

翻譯宗諭審閱鈺莨
說明

感謝TensorFlow團隊的授權翻譯,特此致謝!

 

以下公告由Martin代表TensorFlow團隊發佈:

 

程式語言Python的開發者們,將於2020年1月1日停止支援Python 2.7(詳見此文)。

 

因此,TensorFlow專案也將停止支援Python 2,當Python 2的上游支援終止於2020年。在2020年1月1日後,團隊針對TensorFlow所有原始碼的改變,將不再需要相容於Python 2。總之,TensorFlow可能自2020年起,不再適用於Python 2。

 

這樣的改變將可簡化我們的程式碼,並且可使用Python 3.x標準函式中的新功能。

 

備註:如果您想購買AI人工智慧相關產品,歡迎洽詢機器人王國商城,謝謝。

 

相關文章

[ 翻譯 ] 2018.10.09- TensorFlow團隊發佈最新的TensorFlow模型最佳化工具包,一起來看看!

原文作者

TensorFlow團隊

圖片TensorFlow團隊提供

主題圖片:Designed by Freepik

翻譯宗諭審閱阿吉老師
說明

感謝TensorFlow團隊的授權翻譯,特此致謝!原文請見這裡

 

We are excited to introduce a new optimization toolkit in TensorFlow: a suite of techniques that developers, both novice and advanced, can use to optimize machine learning models for deployment and execution.

我們很高興向大家介紹:新的TensorFlow最佳化工具包,它包含了一整套的技術,不論您是入門或進階開發者都可運用這套工具包來最佳化機器學習模型的部署與執行。

 

While we expect that these techniques will be useful for optimizing any TensorFlow model for deployment, they are particularly important for TensorFlow Lite developers who are serving models on devices with tight memory, power constraints, and storage limitations. If you haven’t tried out TensorFlow Lite yet, you can find out more about it here.

我們期待這個工具包對於部署任何TensorFlow模型,都能做到最佳化,然而,這個工具包對TensorFlow Lite的開發者來說尤其重要!因為,TensorFlow Lite的開發者需要在裝置上運作模型,這些裝置不論在記憶體、電源與儲存容量上都更為吃緊。如果您尚未試用過TensorFlow Lite,可在這裡了解更多相關資訊。

 

The first technique that we are adding support for is post-training quantization to the TensorFlow Lite conversion tool. This can result in up to 4x compression and up to 3x faster execution for relevant machine learning models.

這個工具包加入的第一項技術是針對TensorFlow Lite轉換工具的訓練後量化(post-training quantization)功能。針對相關的機器學習模型,這項技術最高可達到4倍的壓縮率,並使執行速度最高加快3倍。

 

By quantizing their models, developers will also gain the additional benefit of reduced power consumption. This can be useful for deployment in edge devices, beyond mobile phones.

藉由量化模型,開發者也將因電源功耗減少而得到額外益處。這有助於部署模型在非手機範圍的邊緣裝置上。

 

Enabling post-training quantization

The post-training quantization technique is integrated into the TensorFlow Lite conversion tool. Getting started is easy: after building their TensorFlow model, developers can simply enable the ‘post_training_quantize’ flag in the TensorFlow Lite conversion tool. Assuming that the saved model is stored in saved_model_dir, the quantized tflite flatbuffer can be generated:

啟用訓練後量化

訓練後量化技術已被整合至TensorFlow Lite轉換工具中。如何開始使用呢?很簡單!在建立TensorFlow模型後,開發者只要在TensorFlow Lite轉換工具中啟用「post_training_quantize」旗標就可以了。假設我們把模型放在saved_model_dir 這個資料夾中,就能產生量化後的「tflite flatbuffer」:

converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize=True
tflite_quantized_model=converter.convert()
open(“quantized_model.tflite”, “wb”).write(tflite_quantized_model)

 

Our tutorial walks you through how to do this in depth. In the future, we aim to incorporate this technique into general TensorFlow tooling as well, so that it can be used for deployment on platforms not currently supported by TensorFlow Lite.

我們的教學文件會詳細告訴您關於「訓練後量化」這項技術。未來,我們希望把這項技術也納入一般TensorFlow工具中,使它能部署於一些目前TensorFlow Lite尚未支援的平台上。

 

Benefits of post-training quantization

  • 4x reduction in model sizes

  • Models, which consist primarily of convolutional layers, get 10–50% faster execution

  • RNN-based models get up to 3x speed-up

  • Due to reduced memory and computation requirements, we expect that most models will also have lower power consumption

「訓練後量化」的效益:

  • 模型大小最高可減少4倍

  • 主要由卷積層所組成的模型,執行速度可加快10%-50%。

  • 以遞迴神經網路RNN為基礎的模型,最高可加速3倍。

  • 由於減低記憶體和低運算的要求日增,我們期待大多數的模型也能做到低功耗。

 

See graphs below for model size reduction and execution time speed-ups for a few models (measurements done on Android Pixel 2 phone using a single core).

關於降低模型大小與提高執行速度,請參考下面幾張圖表(使用Android Pixel 2 單核心手機)。

圖1 Model Size Comparison: Optimized models are almost 4x smaller 模型大小比較:最佳化後,模型大小幾乎小了4倍。

 

圖2 Latency Comparison: Optimized models are 1.2 to 1.4x faster 延遲比較:經過最佳化的模型加速1.2至1.4倍。

 

These speed-ups and model size reductions occur with little impact to accuracy. In general, models that are already small for the task at hand (for example, mobilenet v1 for image classification) may experience more accuracy loss. For many of these models we provide pre-trained fully-quantized models.

執行加速及降低模型大小對準確性影響不大。總體來說,原本就輕量化、專門針對行動裝置任務的模型(例如用於影像分類的mobilenet v1),準確性可能會損失較多。針對前述這些模型,我們提供預先訓練好的全量化模型

圖3 Accuracy Comparison: Optimized models show negligible accuracy drop, except for mobilenets. 準確性比較:除了mobilenets外,其它最佳化後的模型,準確性幾乎沒有降低。

 

We expect to continue improving our results in the future, so please see the model optimization guide for the latest measurements.

我們未來會繼續改良。關於最新的量測結果請參考模型優化教學。

 

How post-training quantization works

Under the hood, we are running optimizations (otherwise referred to as quantization) by lowering the precision of the parameters (i.e. neural network weights) from their training-time 32-bit floating-point representations into much smaller and efficient 8-bit integer ones. See the post-training quantization guide for more details.

「訓練後量化」如何運作?

我們運作最佳化(又稱為量化)的方式,是藉由降低參數的精確性(例如,神經網路權重),使參數的模型訓練時間,從32位元浮點表示法降低為更小也更有效率的8位元整數。如果讀者想更深入了解,請參考「訓練後量化」教學。

 

These optimizations will make sure to pair the reduced-precision operation definitions in the resulting model with kernel implementations that use a mix of fixed- and floating-point math. This will execute the heaviest computations fast in lower precision, but the most sensitive ones with higher precision, thus typically resulting in little to no final accuracy losses for the task, yet a significant speed-up over pure floating-point execution. For operations where there isn’t a matching “hybrid” kernel, or where the Toolkit deems it necessary, it will reconvert the parameters to the higher floating point precision for execution. Please see the post-training quantization page for a list of supported hybrid operations.

這樣的最佳化,將確保在結果模型中精確性降低後的操作定義能符合內核實作,後者在實作混用了定點和浮點數學。這樣可在精確度較低的情況下做到最多的運算,但其中最敏感且精確性較高的模型,通常不會 (或僅微量)因此導致精確度降低,反之如果是純浮點數執行的話,執行速度則有顯著提升。針對非「混合型」內核的運算,或工具包認為有必要,「訓練後量化」會再將參數轉換為較高精度的浮點數。關於「訓練後量化」支援哪些混合運算,請參考「訓練後量化」網頁。

 

Future work

We will continue to improve post-training quantization as well as work on other techniques which make it easier to optimize models. These will be integrated into relevant TensorFlow workflows to make them easy to use.

未來改進

我們將持續改善「訓練後量化」技術,以及其它模型最佳化技術。而這些技術將被整合至相關的TensorFlow工作流程,使大家能夠更方便使用。

 

Post-training quantization is the first offering under the umbrella of the optimization toolkit that we are developing. We look forward to getting developer feedback on it.

這套還在開發中的最佳化工具包中,「訓練後量化」是我們推出的第一項技術。期待收到大家的回饋。

 

Please file issues at GitHub and ask questions at Stack Overflow.

 

請在GitHub提出你們的建議,並請在Stack Overflow詢問問題。

 

備註:若您想購買AI人工智慧相關產品,歡迎洽詢機器人王國商城

 

相關文章

[ 介紹文 ] 2018.10.05- 人工智慧大師Andrew Ng的英文新書Machine Learning Yearning,草稿搶先讀!

文字撰寫

宗諭

圖片

截圖自「Machine Learning Yearning」網站,特此致謝!

審閱阿吉老師

 

AI人工智慧大師Andrew Ng(相關簡介)的英文新書Machine Learning Yearning,草稿已全部完成。以下是他對這本新著作的分享:

 

Machine Learning Yearning最後幾章草稿完成了!藉由這幾章的內容,您將可學到機器學習資料流(ML pipelines)的錯誤分析(Error Analysis)。舉例來說,如果您有個複雜的系統,比如一輛自駕車,它包含許多子元件。在這樣情況下,您如何決定使用哪個元件?因此,我盼望透過這本書的最後幾章,幫助您與您的團隊,更有效建構各種機器學習專案!

 

目前,本書仍處於草稿階段,為讓它對您與您的團隊更有效益,我非常歡迎任何回饋。請將建議寄我們:hello@deeplearning.ai 。」

 

讀者們如果想試閱這本書的草稿,請點擊這裡。謝謝。

 

備註:若欲購買CAVEDU的AI人工智慧相關產品,請洽機器人王國商城,謝謝。

 

相關文章

 

[ AI人工智慧-神經運算 ] 淺談人工智慧實作,開源工具Tensorflow與安裝(Windows篇)

大家在網路、報章雜誌上是不是很常聽到AI人工智慧呢?2018年許多人在研究、開發AI的神經網路運算,您聽過神經網路運算嗎?今天與讀者們快速分享一些AI、神經網路運算資訊,以及我們設計人工神經網路實作課程時,在Windows系統上使用的一些工具。

作者/攝影

CAVEDU教育團隊 徐豐智

文章分類教學技術文
時間30分鐘
成本電腦
難度

**

材料表Window 10 作業系統

說到人工智慧,相關技術的人會想到機器視覺、自然語言⋯⋯等等專有名詞,今天與讀者們分享的AI課程,是神經網路運算的相關實作。

 

Google的Deepmind團隊使用了Alpha GO 挑戰世界棋王獲勝的事,大家還記得嗎?(快速回憶AlphaGO-連結,這項成果該團隊使用的是神經網路運算技術,工具是Tensorflow。Gmail的垃圾郵件判讀、Google相簿臉部識別、Google翻譯,Google在Tensorflow上以Opensource的方式開放出來,大家可按照自己想做的AI案例收集樣本資料,訓練AI判斷的模型。

 

今年九月起,CAVEDU教育團隊與微軟合作設計AI課程(微軟技術中心上機實作課程-人工智慧實務工作坊:故事連結基於這次經驗,與大家分享如何在Windows作業系統下,安裝AI相關工具套件。我們先介紹現在的AI實作上的一些分類,接著是Tensorflow與keras、Opencv等環境安裝教學。

 

淺談人工智慧實作

首先,有幾種與運算效能不強的硬體整合的AI方式(想直接安裝Tensorflow,可跳過這一段)。

 

一、使用物聯網將判斷交給雲端處理,並將處理結果回傳

終端裝置(樹莓派、Linkit7688⋯⋯)負責收集影像、語音資料,將這些影像、語音資料上傳至雲端AI(Google、Azure、IBM bluemix⋯⋯等),雲端AI判斷後,將判斷結果回傳至終端裝置,終端裝置再進行動作。

 

A、微軟認知服務,解析人的年齡、性別、情緒實作教學連結

 

B、Google語音助理的服務,將聲音上傳到Google,交由雲端處理(實作教學連結、影片連結)

 

C、IBM Bluemix服務做TJBOT聊天機器人(實作教學連結)

 

二、使用Opensouce的工具,建立自己的AI專案,訓練AI

建立判斷AI的工具,透過AI工具提供的演算法和判斷方法,收集相關資料(比如說,透過圖片判斷動物園的動物種類),訓練AI,提高AI的的推理能力(從可分別猩猩和大象的差別,提升至可分別猩猩和獼猴的差別)。

 

A、Tensorflow與keras的機器學習工具(相關文章連結)

 

B、Caffe的機器學習工具(相關文章連結)

 

三、邊緣運算、智慧邊緣:

結合訓練的AI,將運算交給終端裝置(手機、樹梅派⋯⋯等等),解決將資料傳給雲端,再回傳資料導致的延遲。(比如說,汽車上的AI,如果因網路不順,導致判斷過慢發生車禍等意外;又或者在製造業使用的機器手臂,判斷過慢導致產線的良率不穩。)

 

A、Nvidia的GPU顯示卡,幫助電腦運算

 

B、Intel的低功耗加速AI推理的運算棒(相關文章連結)

 

在Windows上安裝TensorFlow的環境

我們要開在Windows作業系統上安裝Tensorflow的教學。請將安裝的電腦,額外預留5GB的硬碟容量以安裝相關軟體。

 

安裝順序:

一、安裝Anaconda環境

二、建立獨立的Anacoonda(Python)虛擬環境

三、安裝TensorFlow 、 Keras、Opencv

四、執行手寫辨識範例

 

一、安裝Anaconda環境

對AI初學者來說,安裝TensorFlow環境、使用的套件雜亂,相互不匹配,是第一道難關。但Anaconda可將這件事變得很單純,因為Anaconda除了支援Windows,也支援Mac、Linux作業系統。之後有空,再跟大家分享在Windows App上安裝ubuntu作業系統。

 

請先至Anaconda網站上下載軟體,點選下圖左邊的Windows選項

https://www.anaconda.com/download/

圖1

 

選擇下載的安裝環境,有Python3、2兩種版本。因為許多的AI範例使用Python3,建議使用Python 3。並依照電腦規格,選擇64位元 / 32位元的版本下載。

圖2

 

點選下載的檔案,開始安裝,點選下一步、同意。

圖3

 

圖4

 

選擇是否只安裝在這一個Windows的帳號

圖5

 

決定安裝路徑。因為之後會訓練資料,請讀者們盡量選擇讀寫速度較快的硬碟。

圖6

 

點選加入Windows的環境變數(可不選,能讓Windows的CMD視窗也可以呼叫Anaconda),預設使用Python3.6。

圖7

 

安裝完成後,在開始的列表會出現Anaconda的相關工具。

圖8

 

二、建立獨立的Anacoonda(Python)虛擬環境

Python有許多相依的套件,建議讀者們在做不一樣的Python套件實測試時,可重新建立新的環境,每個新的環境會依照名稱顯示。

 

下圖是我建立兩個環境,分別命名為testlesson1、testtensorflow。

圖9

 

首先,在本機磁碟(C),新增一個資料夾[testAI],以便管理環境中的檔案,點選[Anaconda Prompt]。

圖10

 

圖11

 

指令:移動至資料夾[testAI]

>cd \testAI
圖12

 

指令:建立Anaconda環境

>conda create --name testAI python=3.6 anaconda

 

指令功能:

conda create:建立虛擬環境

-name testAI:環境名稱,取名為testAI

python=3.6:Python的版本為3.6

anaconda:建立環境時,會把Python相關的套件也一起安裝,例如:NumPy、SciPy等常用的套件,也有Jupyter Notebook。

圖13

 

Anaconda會詢問你該虛擬環境是否安裝這些套件,輸入指令y

>y
圖14

 

圖15

 

安裝完成後,您可以用下列兩個指令開啟 / 關閉虛擬環境:

>conda activate testAI

>conda deactivate
圖16

 

若成功開啟虛擬環境,命令列最左方的顯示會由(base)改為(testAI)。

圖17

 

三、安裝TensorFlow 、 Keras、Opencv

接著,我們要安裝一些訓練AI模型的套件,這些都是python相關的套件,您可以用pip安裝,也可以用conda安裝。

 

安裝Python的Tensorflow套件:

>conda install tensorflow
圖18

 

圖19

 

安裝Python的keras套件:

>conda install keras
圖20

 

圖21

 

安裝Python的opencv套件:

>conda install opencv
圖22

 

圖23

 

套件安裝的差不多了。如果您有想要訓練的資料集、執行的程式,可以放在資料夾[testAI]裡。

圖24

 

接著移動至指定的資料夾:

cd ./ms-agv-car-master/keras_source

 

回到上一層資料夾:

cd ..

 

指令功能:

cd .\ai-car\keras_source:移動資料夾到ai-car\keras_source

cd .. :回到上一層資料夾

五、執行手寫辨識範例

最後,我們執行一個訓練資料的手寫辨識範例,確認Tensorflow系統環境都沒有問題。

(資源來自keras中文文檔https://keras-cn.readthedocs.io/en/latest/

 

首先,安裝git套件。

>conda install git
圖26

 

圖27

 

接下來:

1、透過git下載keras的範例

git clone https://github.com/fchollet/keras.git

 

2、移動到範例資料夾

> cd ./keras/examples/

 

3、執行手寫辨識訓練資料,若執行未出現錯誤,恭喜您已安裝成功,可不用等待程式執行完畢,[Ctrl+C]直接跳出訓練畫面

> python mnist_mlp.py
圖28

 

今天的分享至此結束。盼望這篇文章能給讀者們一些幫助,下次見!

 

相關文章

[ 翻譯 ] 2018.09.21- 認識TensorFlow.js,在瀏覽器就能用JavaScript 訓練機器學習模型喔!

原文作者

Josh Gordon  Sara Robinson

圖片

Josh Gordon、Sara Robinson提供

翻譯宗諭審閱阿吉老師
說明

感謝兩位作者的授權翻譯,特此致謝!原文請見這裡

We’re excited to introduce TensorFlow.js, an open-source library you can use to define, train, and run machine learning models entirely in the browser, using Javascript and a high-level layers API. If you’re a Javascript developer who’s new to ML, TensorFlow.js is a great way to begin learning. Or, if you’re a ML developer who’s new to Javascript, read on to learn more about new opportunities for in-browser ML. In this post, we’ll give you a quick overview of TensorFlow.js, and getting started resources you can use to try it out.

 

我們很興奮能向大家介紹TensorFlow.js。TensorFlow.js是一個完全開放原始碼的函式庫,只要運用Javascript與其高階API,就能在瀏覽器中直接定義、訓練並運行機器學習模型。若您本身是一位Javascript開發者,但對機器學習不是那麼熟悉,那TensorFlow.js是一個很好的學習方式。又或者,您是一位對Javascript不太熟的機器學習開發者,請繼續閱讀本文以幫助您深入了解更多關於瀏覽器內機器學習的新契機。在這篇文章中,我們將快速介紹TensorFlow.js,還有您可用來嘗試TensorFlow.js的快速上手資源。

 

In-Browser ML

Running machine learning programs entirely client-side in the browser unlocks new opportunities, like interactive ML! If you’re watching the livestream for the TensorFlow Developer Summit, during the TensorFlow.js talk you’ll find a demo where @dsmilkov and @nsthorat train a model to control a PAC-MAN game using computer vision and a webcam, entirely in the browser. You can try it out yourself, too, with the link below — and find the source in the examples folder.

 

瀏覽器內的機器學習

在瀏覽器客戶端就能直接執行機器學習程式能帶出許多新契機,例如互動式的機器學習!您可以看看TensorFlow開發者大會直播,在關於TensorFlow.js的分享中有一段是@dsmilkov@nsthorat 正demo一個完全跑在瀏覽器中的範例,運用電腦視覺和網路攝影機訓練一個模型以控制小精靈遊戲。您也可以使用下面的連結親自試一下,並在examples資料夾中找到原始程式碼。

 

If you’d like to try another game, give the Emoji Scavenger Hunt a whirl — this time, from a browser on your mobile phone.

 

如果想試試看其他遊戲,可以試試看Emoji Scavenger Hunt ,但這次請使用您手機上的瀏覽器嘗試。

圖1

 

ML running in the browser means that from a user’s perspective, there’s no need to install any libraries or drivers. Just open a webpage, and your program is ready to run. In addition, it’s ready to run with GPU acceleration. TensorFlow.js automatically supports WebGL, and will accelerate your code behind the scenes when a GPU is available. Users may also open your webpage from a mobile device, in which case your model can take advantage of sensor data, say from a gyroscope or accelerometer. Finally, all data stays on the client, making TensorFlow.js useful for low-latency inference, as well as for privacy preserving applications.

 

由使用者的角度來說,在瀏覽器中就能執行機器學習代表不用再安裝任何函式庫或驅動程式了。只要打開網頁就可以執行程式了。此外,它還可支援GPU加速。TensorFlow.js會自動支援WebGL,當GPU可用的時候,它會在背景中加速您的程式。使用者也可透過行動裝置開啟網頁,這樣一來您的模型就能取用手機的感測器資料,例如陀螺儀或是加速度計。最後,所有資料皆保留在客戶端上,使TensorFlow.js既適用於低延遲推論,也適用於需要保護的應用程式。

 

What can you do with TensorFlow.js?

If you’re developing with TensorFlow.js, here are three workflows you can consider.

  • You can import an existing, pre-trained model for inference. If you have an existing TensorFlow or Kerasmodel you’ve previously trained offline, you can convert into TensorFlow.js format, and load it into the browser for inference.

 

  • You can re-train an imported model. As in the Pac-Man demo above, you can use transfer learning to augment an existing model trained offline using a small amount of data collected in the browser using a technique called Image Retraining. This is one way to train an accurate model quickly, using only a small amount of data.

 

  • Author models directly in browser. You can also use TensorFlow.js to define, train, and run models entirely in the browser using Javascript and a high-level layers API. If you’re familiar with Keras, the high-level layers API should feel familiar.

 

我們可以運用TensorFlow.js做些什麼?

若您正使用TensorFlow.js進行開發,以下三個工作流程是您可考慮的:

  • 您可匯入現有、預先訓練好的模型進行推論。若您有一個現有的TensorFlow或Keras模型,您可將其轉換為js的檔案格式,並將其載入至瀏覽器中進行推論。

 

  • 您可以重新訓練一個已匯入的模型。在前面提及的小精靈遊戲範例中,您可使用遷移式學習,透過使用一種叫做「影像再訓練(Image Retraining)」的技術,運用在瀏覽器中收集到的少量數據,做到在離線狀態下也能訓練現有模型。這是一種只需少量資料也能快速訓練精確模型的方法。

 

  • 直接在瀏覽器中建立模型。您也可以用TensorFlow.js,運用Javascript和高階API,直接在瀏覽器內定義、訓練並運作模型。若您熟悉Keras,那麼這些高層API對您來說應該不陌生。

 

Let’s see some code

If you like, you can head directly to the samples or tutorials to get started. These show how-to export a model defined in Python for inference in the browser, as well as how to define and train models entirely in Javascript. As a quick preview, here’s a snippet of code that defines a neural network to classify flowers, much like on the getting started guide on TensorFlow.org. Here, we’ll define a model using a stack of layers.

 

一起來看看程式碼

若您願意,您可直接使用範例教程開始學習。它們展示了如何匯出用Python定義的模型並在瀏覽器中進行推論,還有如何單單使用Javascript定義並訓練模型。很快提一下,以下的程式碼,它定義了一個可以分類花朵的神經網絡,很類似TensorFlow.org上的入門教學。在此用到了多個層來定義模型。

import * as tf from ‘@tensorflow/tfjs’;
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [4], units: 100}));
model.add(tf.layers.dense({units: 4}));
model.compile({loss: ‘categoricalCrossentropy’, optimizer: ‘sgd’});

 

The layers API we’re using here supports all of the Keras layers found in the examples directory (including Dense, CNN, LSTM, and so on). We can then train our model using the same Keras-compatible API with a method call:

 

這個layers API支援範例目錄中所有的Keras層(包括Dense、CNN、LSTM等等)。接著,只要呼叫對應的方法就可以使用相容於Keras的API訓練模型。以下是這個方法:

await model.fit(
  xData, yData, {
    batchSize: batchSize,
    epochs: epochs
});

 

The model is now ready to use to make predictions:

這個模型已經可以進行預測了:

// Get measurements for a new flower to generate a prediction
// The first argument is the data, and the second is the shape.
const inputData = tf.tensor2d([[4.8, 3.0, 1.4, 0.1]], [1, 4]);

// Get the highest confidence prediction from our model
const result = model.predict(inputData);
const winner = irisClasses[result.argMax().dataSync()[0]];

// Display the winner
console.log(winner);

 

TensorFlow.js also includes a low-level API (previously deeplearn.js) and support for Eager execution. You can learn more about these by watching the talk at the TensorFlow Developer Summit.

 

TensorFlow.js也包括一個低階的API(前身是deeplearn.js),並且支援Eager execution。請參考TensorFlow開發者大會的內容,您就能更深入了解。

圖2 TensorFlow.js API的概述

 

How does TensorFlow.js relate to deeplearn.js?

Good question! TensorFlow.js, an ecosystem of JavaScript tools for machine learning, is the successor to deeplearn.js which is now called TensorFlow.js Core. TensorFlow.js also includes a Layers API, which is a higher level library for building machine learning models that uses Core, as well as tools for automatically porting TensorFlow SavedModels and Keras hdf5 models. For answers to more questions like this, check out the FAQ.

 

TensorFlow.js與deeplearn.js的關聯是什麼?

這是一個好問題!TensorFlow.js是一個為了機器學習而誕生的JavaScript工具生態系,是deeplearn.js的繼承者,而deeplearn.js現在則被稱為TensorFlow.js Core。TensorFlow.js還包括一個Layers API,這是一個更高階的函式庫,能運用Core來建置機器學習模型,它也是一款自動移植TensorFlow SavedModels與Keras hdf5模型的工具。更多類似問題的答案,請參閱FAQ

 

Where’s the best place to learn more?

To learn more about TensorFlow.js, visit the project homepage, check out the tutorials, and try the examples. You can also watch the talk from the 2018 TensorFlow Developer Summit, and follow TensorFlow on Twitter.

 

哪裡最適合學習TensorFlow.js呢?

想更深入了解TensorFlow.js,請到本專案的首頁查看教學,玩玩看各個範例。您還可觀看2018年TensorFlow開發者大會的演講,並在Twitter上關注TensorFlow

 

Thanks for reading, and we’re excited to see what you’ll create with TensorFlow.js! If you like, you can follow @dsmilkov@nsthorat, and @sqcaifrom the TensorFlow.js team on Twitter for updates.

 

謝謝您耐心讀完本文,我們很期待看到您運用TensorFlow.js做出的成果!喜歡的話,可以在Twitter上關注TensorFlow.js團隊的@dsmilkov@nsthorat@ sqcai 等人的帳號來獲得最新消息。

 

備註:若您想購買AI人工智慧相關產品,請洽機器人王國商城,謝謝。

 

相關文章

[ 介紹文 ] 2018.09.13- 從Apple秋季新品發表會,整理Apple目前最新的機器學習應用

文字撰寫

宗諭、阿吉老師

審閱

阿吉老師

照片來源pixabay發表會地點Steve Jobs Theater
發表會時間

2018年9月13日

部分觀點、看法參考自WIRED網站文章:APPLE’S LATEST IPHONES ARE PACKED WITH AI SMARTS  ,特此致謝!

完整看完這次的Apple秋季新品發表會,其中真是有相當多的亮點,包括更強大的Apple watch、最新的A12 Bionic 手機晶片、革新的iPhone照相系統,更為環保的手機生產、製造、回收方式⋯⋯等等。本文將把焦點放在新一代iPhone上所整合的AI人工智慧功能。小編將為讀者們整理出Apple將機器學習功能應用在最新一代iPhone手機上的幾個重點。

圖1 Apple更多將機器學習應用至新一代iPhone上

 

根據小編觀察,Apple在新一代iPhone以自行設計的「A12仿生」手機晶片為基礎整合了更多了機器學習的功能。根據蘋果台灣官網上的資料(https://www.apple.com/tw/iphone-xs/a12-bionic/),這款晶片搭載了一個「神經網路引擎」,每秒能執行五兆次運算來做到「即時的機器學習(Real-time Machine Learning)」。

 

上一段提及的「即時的機器學習」,實際在新一代iPhone上的應用是什麼呢?舉例而言,當小編想使用新一代iPhone照相,當我按下手機上快門後,A12晶片的「神經網路引擎」會快速運作從照片的場景中精確辨識出所要拍攝的人物、臉孔,然後把這項資訊提供給iPhone相機內建的「人像模式」使用,使我們可以在運用「人像模式」拍攝照片完畢後,自由地調整背景虛化。在這裡,真是要給Apple按個讚,因為通常一張照片景深的控制,多半在按下相機快門那一剎那就決定了,現在藉由「神經網路引擎」運用機器學習的技術,可在照片拍攝好後調整背景虛化,的確能夠幫助更多非專業攝影師,拍攝出更具質感、更有創意的照片。

圖2 搭配機器學習的技術,使用者可運用新一代iPhone相機,輕鬆拍攝出具備適合景深的照片。

 

除透過「神經網路引擎」在iPhone上實踐機器學習之外,Apple更首次讓非蘋果的開發人員,可透過Core ML(https://developer.apple.com/documentation/coreml)運用前面提到的「神經網路引擎」。什麼是Core ML呢?簡而言之,它是一個Apple開發的機器學習框架,目的是讓開發者可將機器學習部署至Apple裝置上。這樣的開放、突破將帶出什麼影響呢?預期將會有更多開發者能把機器學習運用到他們所設計的App上,讓使用者在社交、藝術創作⋯⋯等等層面上,有更棒、更豐富的體驗。

 

最後要提到的是,Apple總公司雇用了來自Google的頂尖AI主管John Giannandrea(https://www.apple.com/tw/leadership/john-giannandrea/),擔任機器學習與AI策略的主管,直接向執行長Tim Cook負責。由此可知,Apple加強了在機器學習與AI人工智慧上的發展力道,不僅是開發人員可以運用Apple現有的產品做出更棒的產品,一般使用者也能享受到更好的軟硬體操作體驗。

 

備註:若欲購買CAVEDU自造的AI人工智慧產品,請洽機器人王國商城,謝謝。

 

相關文章

[ 翻譯 ] 2018.08.03-根據TensorFlow團隊,TensorFlow 1.9正式支援樹莓派

原文作者

Pete Warden

圖片

CAVEDU教育團隊

翻譯宗諭審閱吉弘
說明

感謝作者Pete Warden的授權翻譯,特此致謝!

When TensorFlow was first launched in 2015, we wanted it to be an “open source machine learning framework for everyone”. To do that, we need to run on as many of the platforms that people are using as possible. We’ve long supported Linux, MacOS, Windows, iOS, and Android, but despite the heroic efforts of many contributors, running TensorFlow on a Raspberry Pi has involved a lot of work. Thanks to a collaboration with the Raspberry Pi Foundation, we’re now happy to say that the latest 1.9 release of TensorFlow can be installed from pre-built binaries using Python’s pip package system! If you’re running Raspbian 9 (stretch), you can install it by running these two commands from a terminal:

當TensorFlow於2015年首次發佈時,我們希望它是一個「給所有人的開源機器學習框架」。爲要達成這一點,我們需要盡可能讓它在更多人們使用的平台上運作,所以,我們長期以來支援了Linux、MacOS、Windows、iOS及Android等作業系統。然而,儘管許多貢獻者已經貢獻卓越,在Raspberry Pi上運行TensorFlow仍有許多工作需要完成。感謝與Raspberry Pi基金會的合作,我們現在很高興能宣佈:最新的TensorFlow 1.9版,可透過Python的pip套件系統來安裝建置好的二元檔了!若您正使用Raspbian 9(Raspbian stretch),只要從終端機輸入下面這兩道指令來安裝它:

 

sudo apt install libatlas-base-dev
pip3 install tensorflow

 

You can then run python3 in a terminal, and use TensorFlow just as you would on any other platform. Here’s a simple hello world example:

接下來,您可在終端機上運作python3,並如同在任何其它平台上一樣使用TensorFlow。下面是一個簡單的hello world範例:

 

# Python
import tensorflow as tf
tf.enable_eager_execution()
hello = tf.constant(‘Hello, TensorFlow!’)
print(hello)

 

If the system outputs the following, then you are ready to begin writing TensorFlow programs:

Hello, TensorFlow!

如果看到以下內容:Hello, TensorFlow!, 那您便可開始編寫TensorFlow的程式。

 

There are more details on installing and troubleshooting TensorFlow on the Raspberry Pi on the TensorFlow website.

更多細節,請參考TensorFlow官網上的內容

 

We’re excited about this because the Raspberry Pi is used by many innovative developers, and is also widely used in education to introduce people to programming, so making TensorFlow easier to install will help open up machine learning to new audiences. We’ve already seen platforms like DonkeyCar use TensorFlow and the Raspberry Pi to create self-driving toy cars, and we can’t wait to discover what new projects will be built now that we’ve reduced the difficulty.

我們對這件事感到很興奮,因為Raspberry Pi早已被許多創新開發者使用著,也被廣泛應用於教育領域來推廣程式教育。所以,讓TensorFlow更容易安裝於Raspberry Pi上,將有助於新朋友認識何謂機器學習。我們已經看到像 DonkeyCar 這樣的平台使用TensorFlow與Raspberry Pi來做出能夠自動駕駛的玩具小車。我們也迫不及待想知道,在使用難度降低之後,會有哪些新專案誕生。

 

Eben Upton, founder of the Raspberry Pi project, says, “It is vital that a modern computing education covers both fundamentals and forward-looking topics. With this in mind, we’re very excited to be working with Google to bring TensorFlow machine learning to the Raspberry Pi platform. We’re looking forward to seeing what fun applications kids (of all ages) create with it,” and we agree!

Raspberry Pi創辦人Eben Upton表示:「現今的電腦程式教育必須涵蓋基礎知識與前瞻性的主題。考慮到這一點,我們非常興奮能與Google合作,將TensorFlow機器學習引入Raspberry Pi平台。我們期待看見所有年齡層的孩子們能運用它來打造各種有趣的應用。」這,我們完全同意!

 

We’re hoping to see a lot more educational material and tutorials emerge that will help more and more people explore the possibilities of machine learning on such a cost-effective and flexible device.

我們深切盼望看見更多教材和教學資源問世,幫助更多人在Raspberry Pi這款高CP值又具備擴充彈性的裝置上探索機器學習的各種可能性。

 

備註:若您想要購買樹莓派,可以前往機器人王國商城,謝謝。

 

相關文章

[翻譯] 2018.8.14-根據TensorFlow團隊,TensorFlow 2.0預覽版預計於下半年發佈(繁、簡中文版)

原文作者

Martin Wicke

發佈時間

原文發佈日期:2018年8月14日

翻譯宗諭審閱吉弘
說明

轉載自TensorFlow團隊社群內的公開公告,非常感謝TensorFlow團隊的授權翻譯,特此致謝!

Since the open-source release in 2015, TensorFlow has become the world’s most widely adopted machine learning framework, catering to users and use-cases. In this time, TensorFlow has evolved along with rapid developments in computing hardware, machine learning research, and commercial deployment.

 

自從TensorFlow於2015年以開放原始碼形式發佈後,已成為全球最廣為採用的機器學習框架,提供給廣泛的使用者及案例。時至今日,TensorFlow也隨著運算硬體、機器學習研究及商用部署的快速發展而不斷進化。

 

自从TensorFlow于2015年以开放原始码形式发布后,已成为全球最广为采用的机器学习框架,提供给广泛的使用者及案例。时至今日,TensorFlow也随着运算硬体、机器学习研究及商用部署的快速发展而不断进化。

 

Reflecting these rapid changes, we have started work on the next major version of TensorFlow. TensorFlow 2.0 will be a major milestone, with a focus on ease of use. Here are some highlights of what users can expect with TensorFlow 2.0:

  • Eager execution will be a central feature of 2.0. It aligns users’ expectations about the programming model better with TensorFlow practice and should make TensorFlow easier to learn and apply.
  • Support for more platforms and languages, and improved compatibility and parity between these components via standardization on exchange formats and alignment of APIs.
  • We will remove deprecated APIs and reduce the amount of duplication, which has caused confusion for users.

 

爲回應這股快速變遷的趨勢,我們(TensorFlow團隊)已開始研發TensorFlow下一個主要版本。TensorFlow 2.0將會是重要的里程碑,著眼於讓大家更容易使用。以下是一些使用者可期盼的焦點:

  • Eager execution將會是0版本的中心特色,它能滿足使用者對於實做更棒的程式模型的期待,並且應該會使TensorFlow更易於學習及應用。
  • 支援更多的平台及語言,亦改善了相容性,並且透過交換格式及API調整的標準化,在這些元件中取得平衡。
  • 我們將會移除已棄用的API,並且降低重複性,避免造成使用者混淆。

 

为回应这股快速变迁的趋势,我们(TensorFlow团队)已开始研发TensorFlow下一个主要版本。 TensorFlow 2.0将会是重要的里程碑,着眼于让大家更容易使用。以下是一些使用者可期盼的焦点:

  • Eager execution将会是0版本的中心特色,它能满足使用者对于实做更棒的程式模型的期待,并且应该会使TensorFlow更易于学习及应用。
  • 支援更多的平台及语言,亦改善了相容性,并且透过交换格式及API调整的标准化,在这些元件中取得平衡。
  • 我们将会移除已弃用的API,并且降低重复性,避免造成使用者混淆。

 

We are planning to release a preview version of TensorFlow 2.0 later this year.

 

我們預計於2018年下半年發佈TensorFlow 2.0的預覽版本。

 

我们预计于2018年下半年发布TensorFlow 2.0的预览版本。

 

Public 2.0 design process

Shortly, we will hold a series of public design reviews covering the planned changes. This process will clarify the features that will be part of TensorFlow 2.0, and allow the community to propose changes and voice concerns. Please join developers@tensorflow.org if you would like to see announcements of reviews and updates on process. We hope to gather user feedback on the planned changes once we release a preview version later this year.

 

公開的 TensorFlow 2.0設計程序

簡而言之,我們將針對已在計劃中的更新有一系列的「公開設計評論」。這個過程會說明那些即將納入TensorFlow 2.0中的功能,並且允許社群提出修改且表達關切。若您想得知評論的公告與設計過程的進展,請加入developers@tensorflow.org。一旦預覽版本於2018年下半年發佈之後,我們期盼收到使用者對於計畫中的更新的回饋意見。

 

公开的 TensorFlow 2.0设计程序

简而言之,我们将针对已在计划中的更新有一系列的「公开设计评论」。这个过程会说明那些即将纳入TensorFlow 2.0中的功能,并且允许社群提出修改且表达关切。若您想得知评论的公告与设计过程的进展,请加入developers@tensorflow.org。一旦预览版本于2018年下半年发布之后,我们期盼收到使用者对于计画中的更新的回馈意见。

 

Compatibility and continuity

TensorFlow 2.0 is an opportunity to correct mistakes and to make improvements which are otherwise forbidden under semantic versioning.

 

相容性與連續性

TensorFlow 2.0的發佈是一個改正錯誤的好機會,並且針對在semantic versioning下被禁止的部分作出改善。

 

相容性与连续性

TensorFlow 2.0的发布是一个改正错误的好机会,并且针对在semantic versioning下被禁止的部分作出改善。

 

To ease the transition, we will create a conversion tool which updates Python code to use TensorFlow 2.0 compatible APIs, or warns in cases where such a conversion is not possible automatically. A similar tool has helped tremendously in the transition to 1.0.

 

為減緩過渡時期的衝擊,我們將提供一個轉換工具,它具備兩項功能:(1)更新Python程式碼得以使用相容於TensorFlow 2.0的API;(2)假如轉換無法完全自動完成時,將發出警告。類似的工具在當年轉換到Tensorflow1.0版時可真是幫了大忙呢。

 

为减缓过渡时期的冲击,我们将提供一个转换工具,它具备两项功能:(1)更新Python程式码得以使用相容于TensorFlow 2.0的API;(2)假如转换无法完全自动完成时,将发出警告。类似的工具在当年转换到Tensorflow1.0版时可真是帮了大忙呢。

 

Not all changes can be made fully automatically. For example, we will be deprecating APIs, some of which do not have a direct equivalent. For such cases, we will offer a compatibility module (tensorflow.compat.v1) which contains the full TensorFlow 1.x API, and which will be maintained through the lifetime of TensorFlow 2.x.

 

並非所有的更新皆可全部自動完成。例如以棄用API來說,有些將要被棄用的API並沒有一個直接可對應的應用程式去處理。針對這樣的情況,我們將提供一套相容性模組(tensorflow.compat.v1),包含完整的TensorFlow 1.x API,並且確保它在TensorFlow 2.0的產品週期中被維護。

 

并非所有的更新皆可全部自动完成。例如以弃用API来说,有些将要被弃用的API并没有一个直接可对应的应用程式去处理。针对这样的情况,我们将提供一套相容性模组(tensorflow.compat.v1),包含完整的TensorFlow 1.x API,并且确保它在TensorFlow 2.0的产品周期中被维护。

 

We do not anticipate any further feature development on TensorFlow 1.x once a final version of TensorFlow 2.0 is released. We will continue to issue security patches for the last TensorFlow 1.x release for one year after TensorFlow 2.0’s release date.

 

一旦TensorFlow 2.0最終版本發佈後,就不會在開發任何TensorFlow 1.x的功能了。我們將在TensorFlow 2.0發佈一年之內,針對TensorFlow 1.x的最新版持續提供安全性修正程式(Security Patch)。

 

一旦TensorFlow 2.0最终版本发布后,就不会在开发任何TensorFlow 1.x的功能了。我们将在TensorFlow 2.0发布一年之内,针对TensorFlow 1.x的最新版持续提供安全性修正程式(Security Patch)。

 

On-disk compatibility

We do not intend to make breaking changes to SavedModels or stored GraphDefs (i.e., we plan to include all current kernels in 2.0). However, the changes in 2.0 will mean that variable names in raw checkpoints might have to be converted before being compatible with new models.

 

儲存的相容性

我們無意針對SavedModels或儲存的GraphDefs做出大幅度的修改。(例如,我們想在TensorFlow 2.0中納入所有現行的核心。)然而,在TensorFlow 2.0中的更新代表在原始檢查點中的變數名稱,在順利相容於新模型前可能需要進行轉換。

 

储存的相容性

我们无意针对SavedModels或储存的GraphDefs做出大幅度的修改。 (例如,我们想在TensorFlow 2.0中纳入所有现行的核心。)然而,在TensorFlow 2.0中的更新代表在原始检查点中的变数名称,在顺利相容于新模型前可能需要进行转换。

 

tf.contrib

TensorFlow’s contrib module has grown beyond what can be maintained and supported in a single repository. Larger projects are better maintained separately, while we will incubate smaller extensions along with the main TensorFlow code. Consequently, as part of releasing TensorFlow 2.0, we will stop distributing tf.contrib. We will work with the respective owners on detailed migration plans in the coming months, including how to publicise your TensorFlow extension in our community pages and documentation. For each of the contrib modules we will either a) integrate the project into TensorFlow; b) move it to a separate repository or c) remove it entirely. This does mean that all of tf.contrib will be deprecated, and we will stop adding new tf.contrib projects today. We are looking for owners/maintainers for a number of projects currently in tf.contrib, please contact us (reply to this email) if you are interested.

 

tf.contrib

TensorFlow的contrib模組的規模已超過可在單一版本庫中維護並支援的程度。較大的專案最好是獨立維護,同時我們會讓較小的擴充檔去跟著TensorFlow主線去走。結論是,作為發佈TensorFlow 2.0過程的一部分,我們將停止發佈tf.contrib。我們會在這幾個月之內針對個別擁有者去敲定遷移的細節,包括如何在我們的社群網頁和文件中宣傳您的TensorFlow擴充。針對每一個補充支援模組,我們將採取以下三項措施中的一項:

(a)整合專案進TensorFlow中;

(b)移至另外的版本庫,或

(c)將它整個移除。

這代表所有的tf.contrib未來都不會再使用,並且從今天起就不再允許加入新的補充支援模組專案。我們對目前tf.contrib的某些專案正在徵求維護者,如果您有興趣的話請和我們連繫(announce@tensorflow.org)。

 

tf.contrib

TensorFlow的contrib模组的规模已超过可在单一版本库中维护并支援的程度。较大的专案最好是独立维护,同时我们会让较小的扩充档去跟着TensorFlow主线去走。结论是,作为发布TensorFlow 2.0过程的一部分,我们将停止发布tf.contrib。我们会在这几个月之内针对个别拥有者去敲定迁移的细节,包括如何在我们的社群网页和文件中宣传您的TensorFlow扩充。针对每一个补充支援模组,我们将采取以下三项措施中的一项:

(a)整合专案进TensorFlow中;

(b)移至另外的版本库,或

(c)将它整个移除。

这代表所有的tf.contrib未来都不会再使用,并且从今天起就不再允许加入新的补充支援模组专案。我们对目前tf.contrib的某些专案正在征求维护者,如果您有兴趣的话请和我们连系(announce@tensorflow.org)。

 

Next steps

For questions about development of or migration to TensorFlow 2.0, contact us at discuss@tensorflow.org. To stay up to date with the details of 2.0 development, please subscribe to developers@tensorflow.org, and participate in related design reviews.

 

下一步

針對TensorFlow 2.0的開發或轉的的相關問題,請來信discuss@tensorflow.org 詢問。若想要得知TensorFlow 2.0的最新進度,請訂閱developers@tensorflow.org ,並且參與相關的設計評論,謝謝。

 

下一步

针对TensorFlow 2.0的开发或转的的相关问题,请来信discuss@tensorflow.org 询问。若想要得知TensorFlow 2.0的最新进度,请订阅developers@tensorflow.org ,并且参与相关的设计评论,谢谢。

 

On behalf of the TensorFlow team,

Martin

 

謹代表全體TensorFlow團隊

Martin

 

谨代表全体TensorFlow团队

Martin

 

相關文章

[課程紀錄文] 2018.8.13-14-跟著CAVEDU學AI人工智慧:一堂結合機器學習中的影像辨識及邊緣運算的深度課程

記錄

宗諭

攝影

吉弘

講師

吉弘、豐智

上課地點台灣微軟大樓
課程時間

2018年8月13-14日

8月13至14日,一場AI人工智慧的深度學習課程,在台灣微軟大樓展開⋯⋯。

 

然而,早在課程開始前的一個月,CAVEDU教育團隊這邊的兩位講師:「阿吉老師」曾吉弘與徐豐智,以及與此次課程的相關人員,便已針對這門課程展開緊鑼密鼓地準備。從剛開始針對課程內容進行深入研究、討論;至中期的針對「Microsoft Azure DSVM資料科學虛擬機器」持續調整、設定,並且訓練模型;最後一週與課程各單位間的持續溝通、協調、聯繫,針對上課要使用的RK Car不斷調測,設計、印刷試跑RK Car需用的道路地墊⋯⋯等等。可以說,CAVEDU教育團隊真是為這次課程卯足全勁了!

 

課程的結果也是十分甜美。根據微軟方面人員的統計,參與課程21位學員的AI AGV車皆成功跑車,一個步驟都沒有漏掉。而微軟方面亦十分肯定CAVEDU教育團隊,在這次課程中展現出的專業能力

圖1 講師之一「阿吉老師」曾吉弘

 

圖2 另外一位講師徐豐智(中著紅衣者)

 

回到這門課程,究竟教授給學員的是什麼呢?

 

課程的設計是屬於實務導向,簡而言之,就是訓練無人車達成路牌辨識的目標,等學員訓練好模型後,再至CAVEDU教育團隊設計、製作的地墊上試跑。

圖3 學員讓RK Car在CAVEDU製作的道路地墊上試跑

 

我們運用什麼工具訓練模型呢?答案是微軟的Azure DSVM資料科學虛擬機器。Azure DSVM是一種雲端服務,透過常用於資料分析、機器學習服務及AI訓練的數個熱門工具,預先安裝、設定及測試的Azure虛擬機器映像。

圖4 資料蒐集並訓練模型

 

下圖是課程中使用的無人載具RK Car,車子由CAVEDU教育團隊自造,以Raspberry Pi單板電腦為核心。RK Car上藍色的是Intel Movidius神經運算棒,阿吉老師有向學員們展示Intel的AI模型,透過Movidius的加速,針對道路上各種車輛進行分類,以及街景影像的辨識,例如街道上的人、車牌、摩托車⋯⋯等等。透過Intel Movidius,能使硬體等級沒有非常高的Raspberry Pi單板電腦,以更快速度進行影像辨識。(若欲購買RK Car,請洽機器人王國商城。)

圖5 安裝上Intel Movidius神經運算棒的RK Car

 

下圖是學員們跑車的情況。每位學員的無人載具皆需學會辨識左轉、右轉、停止標示,才能成功完成道路地墊上的試跑。在阿吉老師、豐智及助教的悉心準備、指導下,所有學員皆跑車大成功!

圖6 所有學員順利完成跑車

 

對CAVEDU教育團隊而言,這次課程使我們在AI人工智慧領域又邁進一步。之前我們較著重在「邊緣運算」,也就是將應用程式、資料及服務的運算,由網路中心節點移至網路邏輯上的邊緣節點進行處理。

 

這次,我們實作了機器學習中的影像辨識,並整合剛剛提及的邊緣運算,成功達成一次AI實務的軟硬整合課程。套一句阿吉老師的課後感言:「我想,我們應是最先推出AI實務軟硬整合課程的團隊吧。」歡迎跟著我們一起成長、一起學習AI,微軟將繼續於9月份、10月開課,歡迎點此報名

 

最後,播放一段輪型機器人視角的跑車影片,給各位讀者欣賞。

 

相關文章

[Movidius神經運算棒] 認識與操作Neural Compute SDK:mvNCCheck

作者/攝影曾吉弘
文章分類教學(翻譯)
時間3小時
成本
難度******   (1~10)
材料表
  • Raspberry Pi 3單板電腦
  • Intel Movidius神經計算棒

(Original post from Intel Movidius NCS blog: “Using and Understanding the Neural Compute SDK: mvNCCheck”:https://movidius.github.io/blog/mvNCCheck/

 

Neural Compute SDK Toolkit: mvNCCheck

Intel® Movidius™ 神經運算軟體開發套件(Neural Compute Software Development Kit,NCSDK)包含三套工具,用於幫助使用者順利上手,操作Intel® Movidius™ 神經運算棒(Intel® Movidius™ NCS)。這些工具包含:mvNCCheck,mvNCCompile及mvNCProfile。本文將幫助您更認識mvNCCheck工具程式的運作方式,以及如何將它整合至Neural Compute SDK的整體工作流程中。

圖1

 

使用mvNCCheck的網路會有怎樣的效果呢?

您將學到:

  • 如何使用mvNCCheck tool
  • 如何解釋mvNCCheck的輸出結果

 

您會需要:

  • Intel Movidius Neural Compute Stick 神經運算棒 – 購買請按我
  • 執行Ubuntu 16.04的 x86_64 筆記型電腦

 

如果尚未做過的話,請在您的開發電腦上安裝NCSDK。安裝步驟請參考Intel Movidius NCS Quick Start GuideCAVEDU的Intel Movidius相關文章

 

檢查網路

Step 1:開啟terminal,切換至ncsdk/examples/caffe/GoogLeNet目錄下

Step 2:使用mvNCCheck 來使Intel Movidius NCS上的網路生效。

mvNCCheck deploy.prototxt -w bvlc_googlenet.caffemodel

 

Step 3:完成了!您應該會看到類似下面的畫面訊息:

USB: Myriad Connection Closing.
USB: Myriad Connection Closed.
Result:  (1000,)
1) 885 0.3015
2) 911 0.05157
3) 904 0.04227
4) 700 0.03424
5) 794 0.03265
Expected:  (1000,)
1) 885 0.3015
2) 911 0.0518
3) 904 0.0417
4) 700 0.03415
5) 794 0.0325
------------------------------------------------------------
 Obtained values 
------------------------------------------------------------
 Obtained Min Pixel Accuracy: 0.1923076924867928% (max allowed=2%), Pass
 Obtained Average Pixel Accuracy: 0.004342026295489632% (max allowed=1%), Pass
 Obtained Percentage of wrong values: 0.0% (max allowed=0%), Pass
 Obtained Pixel-wise L2 error: 0.010001560141939479% (max allowed=1%), Pass
 Obtained Global Sum Difference: 0.013091802597045898
------------------------------------------------------------

 

mvNCCheck的功能為何,為何要用到它?

作為NCSDK的一部分,mvNCCheck提供以下三項主要功能:

  • 確保資料從fp32轉為fp16時的正確性
  • 快速確認指定網路是否相容於Intel NCS
  • 對網路各層進行快速除錯

 

確保結果的準確性

為確保結果的正確性,mvNCCheck會比較Intel Movidius NCS 與網路原生框架(Caffe/TensorFlow™)兩者間的推論結果。由於Intel Movidius NCS與NCSDK採用16-bit 浮點數資料,因此必須將收進來的32-bit浮點數資料轉為16-bit。fp32/fp16的轉換過程可能在推論結果中產生minor rounding的問題,這時候mvNCCheck工具程式就很好用了,它可檢查您所使用的網路是否產生正確的結果。

 

首先,mvNCCheck工具程式會讀取網路,並將模型轉換為Intel Movidius NCS可用的格式。接著它會在Intel Movidius NCS上使用網路來推論,也會用網路原生框架(Caffe/TensorFlow)來執行推論。

 

最後,mvNCCheck 會產生一份簡易的報表,比較Intel Movidius NCS與網路原生框架兩者的推論結果。這些結果可用於確認某個神經網路在fp32/fp16轉換後,是否還能產生一定正確性以上的結果。比較結果接下來會詳細討論。

 

判斷網路與Intel Movidius NCS的相容性

mvNCCheck也可用於檢查某個網路是否相容於Intel Movidius NCS。有蠻多原因都會造神經網路與Intel Movidius NCS不相容,其中包括(但不限於)記憶體限制、不支援的層或不支援的神經網路架構。若想了解更多原因,請參考 Intel Movidius NCS documentation website 上關於TensorFlow與Caffe框架的說明。另外,最新的 NCSDK Release Notes也會說明關於SDK的勘誤與最新功能⋯⋯等等。

 

使用mvNCCheck對網路進行偵錯

若您的網路執行不如預期,可運用mvNCCheck來對網路偵錯,只要執行 mvNCCheck 時加上 -in-on 選項即可。

  • -in 選項可讓您將某個節點指定為輸入節點
  • -on 選項可讓您將某個節點指定為輸出節點

使用mvNCCheck並搭配 -in-on 參數,透過逐層分析或二元搜尋分析,比較Intel NCS 與Caffe/TensorFlow的結果,這樣便有機會找出發生錯誤/差異的層。

 

偵錯範例:

假設您的網路架構如下:

  • Input – Data
  • conv1 – Convolution Layer(卷積層)
  • pooling1 – Pooling Layer(池化層)
  • conv2 – Convolution Layer(卷積層)
  • pooling2 – Pooling Layer(池化層)
  • Softmax – Softmax

假設您執行mvNCCheck所取得的結果為nan(並非數字)。請用以下指令搭配 -on  選項來檢查第一卷積層(Convolution layer) “conv1” 的輸出結果:

mvNCCheck user_network -w user_weights -in input -on conv1 

 

若是較大的網路時,使用二元搜尋法將有助於降低找到發生問題的那一層所需的時間。

 

理解mvNCCheck的輸出結果

圖2

 

來看看上述 mvNCCheck 輸出所代表的意義:

  • 綠色方框為Intel NCS的前五項推論結果
  • 紅色方框為原生框架(可能是Caffe或TensorFlow)的前五項推論結果
  • 藍色方框是兩者推論結果的各項比較結果

若想要深入理解這些結果,我們得先了解Intel Movidius NCS與Caffe/TensorFlow的輸出都是儲存在一個tensor中(tensor 要簡單定義的話,就是一個值的陣列)。五項測試都是兩個tensor間的數學性比較。

 

名詞解釋:

  • ACTUAL – 神經運算棒的tensor輸出
  • EXPECTED– 框架(Caffe或TensorFlow)的 tensor 輸出
  • Abs – 計算絕對值
  • Max – 計算一個(或多個)tensor的最大值
  • Sqrt – 計算某數值的平方根
  • Sum – 計算某數值的加總

 

 

最小像素正確度(Min Pixel Accuracy):

本數值代表兩個輸出tensor值之間的最大誤差。

圖3

 

平均像素正確度(Average Pixel Accuracy):

兩個 tensor 數值的均差。

圖4

 

錯誤值百分比:

本數值代表Intel Movidius NCS的tensor值,與框架tensor間的誤差是否超過 2%。

圖5

 

為什麼是2%?這個閾值設定扣掉了來自fp32/fp16轉換後的精度降低的影響程度。

 

Pixel-wise L2 error:

本數值代表整個輸出tensor的約略相對誤差。

圖6

 

將差異加總起來:

將Intel Movidius NCS tensor與框架tensor之間的所有差異加總起來。

圖7

 

沒有輸入的話,mvNCCheck如何進行推論?

在神經網路中進行向前傳遞時,常見的作法是以一個tensor或一個數值陣列作為輸入。如果未指令輸入的話,mvNCCheck使用範圍在 -1 至 1之間的隨機浮點數作為輸入tensor。只要在圖像路徑後加上 “-i” 參數,也可將讓 mvNCCheck 接受圖像輸入。

 

可能發生的錯誤與解決方法

若執行 mvNCCheck 但網路發生錯誤時,可能原因如下:

 

輸入值縮放

某些神經網路要求輸入值得先被縮放(scale)調整過。若輸入未經縮放的話,可能造成Intel Movidius NCS與網路原生框架的推論結論不一致的狀況。

 

使用 mvNCCheck 時,可用–S選項來指定用於縮放輸入值的除數。圖像通常以每個顏色通道數值範圍介於 0 到 255 間的方式儲存。若有個神經網路需要輸入值介於 0.0 到 1.0 之間,請用–S 255選項將所有輸入數值除以255,就可以把它們縮放到 0.0 到 1.0 之間了。

 

  –M 選項可用於對輸入值減去均值。例如,若某個神經網路需要輸入值介於 -1 到 1 之間的話,請同時用–S 128–M 128選項將做到此事。

 

未支援的層

Intel Movidius NCS 並未支援前所有的神經網路架構與層。若執行 mvNCCheck 後看見“Stage Details Not Supported”的錯誤訊息,就代表您所選用的網路需額外處理步驟,或是Neural Compute SDK尚未支援這些層。想知道目前支援哪些層,請參考 Neural Compute Caffe SupportNeural Compute TensorFlow Support 等說明網頁。

 

其他Bug

其他造成不正確結果的可能原因就是bug啦!請來這邊回報吧:Intel Movidius Neural Compute Developer Forum.

 

更多關於mvNCCheck

關於 mvNCCheck 所以有可用的參數,請參考 mvNCCheck 文件頁面

 

延伸閱讀

 

相關文章

[Movidius神經運算棒]在Intel® Movidius™ NCS上部署客製化Caffe模型來進行影像分類

作者/攝影曾吉弘
文章分類教學(翻譯)
時間3小時
成本
難度******   (1~10)
材料表
  • Raspberry Pi 3單板電腦
  • Intel Movidius神經計算棒

 

(Original post from Intel Movidius NCS blog: “Deploying Your Customized Caffe Models on Intel® Movidius™ Neural Compute Stick”:https://movidius.github.io/blog/deploying-custom-caffe-models/ )

 

為什麼需要客製化模型?

Neural Compute Application Zoo (NCAppZoo) 會下載數個預先訓練好的神經網路,例如GoogLeNet、AlexNet、SqueezeNet與MobileNets⋯⋯等等。這些網路多數是根據ImageNet的資料集進行訓練,其中包含了上千個影像類別(class,也稱為category)。這些範例網路與程式,使開發者很容易評估所採用的平台,並以此建立簡易專題。不過,如果您打算對邊緣產品進行概念驗證,例如智慧型數位相機、能以手勢控制的無人機,或工業用的智慧攝影機的話,就應該需要客製化的神經網路才行。

如果今天要做的是一台放在住家門口的智慧監控攝影機,應該就不需要用到ImageNetLet上那上千個已經定義好的類別,比如「zebra」、「armadillo」或 「lionfish」。反之,您應該只需要大約15至20個類別,例如「person」、「dog」、「mailman」、「person wearing hoody」這樣就好。把資料集的類別從上千個降至20個的話,同時也大大降低所需要提取的特徵。這與您網路的複雜度直接相關,影響到其大小、訓練時間及推論時間⋯⋯等等。換言之,神經網路最佳化有以下好處:

  1. 資料集變小了,訓練網路的時間自然縮短。
    • 節省硬體的運行與訓練成本。
    • 縮短開發時間。
  2. 節省所需記憶體,進而降低硬體成本。
  3. 由於網路複雜度降低,藉此提高推論結果的向前傳遞(forward pass)速度,這樣就能讓邊緣裝置以更快速度處理攝影機影像。

本文將依序介紹如何使用客製化的資料集訓練一個預先定義好的神經網路,使用Intel® Movidius™ Neural Compute SDK (NCSDK)來剖析、修改網路,以改善執行時間,最後則是將客製化模型部署至Intel® Movidius™ 神經運算棒(NCS)上。

讓我們邊做邊學!

您會製作:

可以辨識狗與貓兩種類別的客製化GoogLeNet 深度神經網路。

您會學到:

  • 使用NCSDK中的mvNCProfile工具軟體來剖析神經網路

您會需要:


讓我們開始吧!

為了簡化,我將本文分成四大段:

  1. 訓練(Train) -選用神經網路、準備資料集及訓練。
  2. 剖析(Profile) -分析所採用神經網路的頻寬、複雜度與執行時間。
  3. 微調(Fine tune)-修改神經網路拓樸來改善執行時間
  4. 部署(Deploy)-將客製化完成的神經網路部署至可運行NCS的邊緣裝置上。

註:如果您的訓練機器與安裝NCSDK的系統並非同一台的話,請在您的訓練硬體上執行Step 1至3,並在安裝好NCSDK的系統上執行Step 2與4。

首先,請由NCAppZoo下載原始碼與說明文件,如以下指令:

mkdir -p ~/workspace
cd ~/workspace
git clone  https://github.com/movidius/ncappzoo

mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/movidius/ncappzoo


1. 訓練

選用神經網路

除非您打算從頭打造一套深度神經網路,不然選用何種神經網路對於您裝置的執行效能是最關鍵的事情。以這個鮭魚種類分類器來說,您只要選擇足以處理少數幾種類別的網路拓樸即可(這樣要檢查的特徵就少多了),但系統的速度還是要夠快才能成功分類不停游來游去的魚兒。另一方面,如果是倉儲物流的存貨掃描機器人的話,這時可能需要犧牲一點速度來提高分類超大量庫存商品的正確性。

一旦選好網路之後,您就得不斷微調它直到在正確性、執行時間與功耗方面達到平衡為止。GoogLeNet是針對ImageNet 2014比賽所設計的,具備超過1000個類別,顯然用它來分類貓狗是小題大作了,但為了讓本範例盡量簡單,我們還是採用它,但會清楚說明神經網路在客製化之後對於正確性與執行時間的影響。

準備資料集

  • 從Kaggle下載zip and train1.zip,放到 ~/workspace/ncappzoo/apps/dogsvscats/data路徑下。
  • 準備資料集所需的步驟都包在Makefile中了,包括:
    • 影像預處理、調整大小、裁切與直方圖均化(histogram equalization)等等
    • 影像洗牌(shuffling)
    • 將所有影像分成訓練用與驗證用兩組
    • 對這些影像建立一個lmdb資料庫
    • 計算影像均值 – 這是資料正規化的常用深度學習技術
# The helper scripts use $CAFFE_PATH to navigate into your caffe installation directory.
export CAFFE_PATH=/PATH/TO/CAFFE/INSTALL_DIR
cd ~/workspace/ncappzoo/apps/dogsvscats
make

註:請把畫面上的均值(mean)記下來,後續推論時會用到。

一切順利的話,會看到以下目錄架構:

tree ~/workspace/ncappzoo/apps/dogsvscats/data

data
├── dogsvscats-mean.binaryproto
├── dogsvscats_train_lmdb
│   ├── data.mdb
│   └── lock.mdb
├── dogsvscats_val_lmdb
│   ├── data.mdb
│   └── lock.mdb
├── test1
│   ├── cat.92.jpg
│   ├── cat.245.jpg
│   └── ...
├── test1.zip
├── train
│   ├── cat.2388.jpg
│   ├── cat.465.jpg
│   └── ...
└── train.zip

訓練

如果硬體效能夠強的話,要從頭開始訓練我們的「」資料集(25000張影像)應該不會太久,但在此要運用遷移學習(transfer learning)技術來節省開發的力氣。由於GoogLeNet是根據ImageNet資料集(包含了各種貓與狗的影像)所訓練,我們當然可以好好運用預先訓練好的GoogLeNet模型中的各個權重值。

Caffe讓我們只要在訓練指令後加入–weights 旗標就能輕鬆應用遷移學習。另外還要根據我們所採用的遷移學習類型來修改 training & solver prototxt (模型定義) 這兩個檔案。本範例選用最簡單的fixed feature extractor。

本文的dogsvscats專題github也一併提供了修改好的prototxt檔。想深入了解我改了哪些地方的話,請實際執行Caffe的範例網路檔與本專題所用網路來比較看看。

export CAFFE_PATH=/PATH/TO/CAFFE/INSTALL_DIR
cd ~/workspace/ncappzoo/apps/dogsvscats
diff -u $CAFFE_PATH/models/bvlc_googlenet bvlc_googlenet/org

請用以下指令開始訓練。根據您採用的硬體,所需時間可能從喝杯飲料到睡個午覺都有可能。

# The helper scripts use $CAFFE_PATH to navigate into your Caffe installation directory.
export CAFFE_PATH=/PATH/TO/CAFFE/INSTALL_DIR
cd ~/workspace/ncappzoo/apps/dogsvscats

# Download pre-trained GoogLeNet model
$CAFFE_PATH/scripts/download_model_binary.py $CAFFE_PATH/models/bvlc_googlenet

# Start training session
$CAFFE_PATH/build/tools/caffe train --solver bvlc_googlenet/org/solver.prototxt --weights $CAFFE_PATH/models/bvlc_googlenet/bvlc_googlenet.caffemodel 2>&1 | tee bvlc_googlenet/org/train.log

一切順利的話,會在dogsvscats/bvlc_googlenet/org資料夾中看到一大堆.caffemodel 與 .solverstate 檔。

註:我的模型在測試過程中收斂得不太理想,所以後來就不再從頭訓練,結果也好多了。如果您也遇到相同問題的話,只要拿掉 –weights 再重新跑一次訓練就好。如果想知道為什麼我的模型不會收斂的話,請到 Intel Movidius 開發者論壇 留言。

2. Profile

bvlc_googlenet_iter_xxxx.caffemodel包含了方才訓練好模型的各個權重。現在要看看它在Intel Movidius神經運算棒的執行效果如何。NCSDK ships with a 神經網路 profiler tool called mvNCProfile, ,它專門用來分析神經網路,並可對執行在某硬體平台上的神經網路提供逐層說明。

請在已安裝NCSDK的系統上執行以下指令,並確保NCS已經正確接上系統:

cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/org
mvNCProfile -s 12 deploy.prototxt -w bvlc_googlenet_iter_40000.caffemodel

ls -l graph 
-rw-rw-r-- 1 ashwin ashwin 11972912 Dec 24 17:24 graph

 

您應該會看到各層關於頻寬、複雜度與執行時間的相關資訊。或者可透過output.gv.svg與output_report.html將這些資訊以圖形介面來呈現。

 

3. 微調

請注意Inception 4a, 4b, 4c  4d是最複雜的層,並且它們用了相當長的時間來向前傳遞。理論上來說,把這些層刪掉可以讓效能提升20~30ms,但這會影響到正確性嗎?重新用custom/deploy.prototxt 來訓練看看就知道了。

以下是我對bvlc_googlenet/org/train_val.prototxt 所作修改之圖形畫呈現。

CAFFE_PATH/python/draw_net.py 這個python程式是用於繪製網路。Netscope是另一個不錯的線上Caffe網路繪製工具。

cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/org
python $CAFFE_PATH/python/draw_net.py train_val.prototxt train_val_plot.png

cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/custom
python $CAFFE_PATH/python/draw_net.py train_val.prototxt train_val_plot.png

 

 

# The helper scripts use $CAFFE_PATH to navigate into your caffe installation directory.
export CAFFE_PATH=/PATH/TO/CAFFE/INSTALL_DIR
cd ~/workspace/ncappzoo/apps/dogsvscats

# Start training session
$CAFFE_PATH/build/tools/caffe train --solver bvlc_googlenet/custom/solver.prototxt 2>&1 | tee bvlc_googlenet/custom/train.log

註:請注意,在此沒有看到 –weights旗標,代表我沒有用到遷移學習。那為什麼您會期待我這麼做呢?預先訓練好的網路,其權重會與該網路架構直接相關。由於本範例刪除了inception層,因此遷移學習的效果不會太好。

這次的訓練過程顯然會比喝杯飲料的時間久一點,耐心等一下吧。訓練好 之後,請再次執行mvNCProfile來分析客製化之後的神經網路。

cd ~/workspace/ncappzoo/apps/dogsvscats/model
mvNCProfile -s 12 dogsvscats-custom-deploy.prototxt -w dogsvscats-custom.caffemodel

ls -l graph
-rw-rw-r-- 1 ashwin ashwin 8819152 Dec 24 17:26 graph

 

看起來我們的模型與原本的GoogLeNet相比,速度快了21.26 ms,網路也小了3 MB。不過網路正確性又如何呢?現在我們要把客製化前後的訓練學習曲線畫出來。

# The helper scripts use $CAFFE_PATH to navigate into your Caffe installation directory.
export CAFFE_PATH=/PATH/TO/CAFFE/INSTALL_DIR
cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/org

# Plot learning curve
python $CAFFE_PATH/tools/extra/plot_training_log.py 2 bvlc_googlenet_train.png train.log

接著在另一個終端機中把客製化網路的學習曲線畫出來:

# The helper scripts use $CAFFE_PATH to navigate into your Caffe installation directory.
export CAFFE_PATH=/PATH/TO/CAFFE/INSTALL_DIR
cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/custom

# Plot learning curve
python $CAFFE_PATH/tools/extra/plot_training_log.py 2 bvlc_googlenet_train.png train.log

註:graph的標籤不太好懂,因為我們期待“Test Loss”會在執行多次之後下降,不過它反而上升。這個graph實際上繪製的是loss3/top-1, 這就是您網路的正確性。更多細節請參考位於train_val.prototxt中的loss3/top-1定義。

在執行訓練過程時,我發現兩個網路在正確性差異非常小。我認為原因是來自類別數量很少導致特徵也變少的關係。類別數量增加的話應該就能看到更明顯的差異。

 

4. 部署

對於這個神經網路的效能滿意了嗎?可以準備將網路部署到像是Raspberry Pi或是MinnowBoard這樣的邊緣裝置上了。在此採用image-classifier來載入graph並對指定影像進行推論。原本的程式碼要修改一下才能運用正確的均值與比例因數(scaling factor),接著將程式碼搭配正確的graph檔之後才能測試影像。

--- a/apps/image-classifier/image-classifier.py
+++ b/apps/image-classifier/image-classifier.py
@@ -16,10 +16,10 @@ import sys

# User modifiable input parameters
NCAPPZOO_PATH           = '../..'
-GRAPH_PATH              = NCAPPZOO_PATH + '/caffe/GoogLeNet/graph'
-IMAGE_PATH              = NCAPPZOO_PATH + '/data/images/cat.jpg'
-CATEGORIES_PATH         = NCAPPZOO_PATH + '/data/ilsvrc12/synset_words.txt'
-IMAGE_MEAN              = numpy.float16( [104.00698793, 116.66876762, 122.67891434] )
+GRAPH_PATH              = NCAPPZOO_PATH + '/apps/dogsvscats/bvlc_googlenet/custom/graph'
+IMAGE_PATH              = NCAPPZOO_PATH + '/apps/dogsvscats/data/test1/173.jpg'
+CATEGORIES_PATH         = NCAPPZOO_PATH + '/apps/dogsvscats/data/categories.txt'
+IMAGE_MEAN              = numpy.float16( [106.202, 115.912, 124.449] )
IMAGE_STDDEV            = ( 1 )
IMAGE_DIM               = ( 224, 224 )

@@ -77,7 +77,7 @@ order = output.argsort()[::-1][:6]

# Get execution time
inference_time = graph.GetGraphOption( mvnc.GraphOption.TIME_TAKEN )

-for i in range( 0, 4 ):
+for i in range( 0, 2 ):
print( "Prediction for "
+ ": " + categories[order[i]]
+ " with %3.1f%% confidence"

 

修改完成之後執行image-classifier:

cd ~/workspace/ncappzoo/apps/image-classifier
python3 image-classifier.py

應該會看到以下類似訊息:

——- predictions ——–
Prediction for : Dog with 98.4% confidence in 90.46 ms
Prediction for : Cat with 1.7% confidence in 90.46 ms

 

rapid-image-classifier是一個用於測試影像分類效果的實用工具軟體,它會讀取某個資料夾(包含子資料夾)中的所有影像,並顯示推論結果。請把剛剛對image-classifier做的再做一次,最後執行程式。

cd ~/workspace/ncappzoo/apps/rapid-image-classifier
python3 rapid-image-classifier.py

應該會在terminal看到以下訊息:

Pre-processing images…
Prediction for 6325.jpg: Cat with 100.0% confidence in 90.00 ms
Prediction for 7204.jpg: Cat with 100.0% confidence in 73.67 ms
Prediction for 3384.jpg: Dog with 100.0% confidence in 73.72 ms
Prediction for 5487.jpg: Dog with 100.0% confidence in 73.27 ms
Prediction for 1185.jpg: Cat with 100.0% confidence in 73.60 ms
Prediction for 3845.jpg: Dog with 68.5% confidence in 73.29 ms

    讚!您已經成功將以Caffe為基礎的客製化深度神經網路部署在邊緣裝置上了。

註:有注意到第一個與第二個推論嗎?兩者之間的差異超過20ms。這是由於要先開啟裝置與載入graph才能首次呼叫loadTensor,因此耗時較長。

上述image-classifier與rapid-image-classifier這兩個範例使用了來自mvNCProfile的預設graph檔,但您可以改用自定義的graph檔。

cd ~/workspace/ncappzoo/apps/dogsvscats/bvlc_googlenet/org
mvNCCompile -s 12 deploy.prototxt -w bvlc_googlenet_iter_40000.caffemodel -o dogsvscats-org.graph

還可以試試

  • 運用資料增強(data augmentation)技術來提高您所用模型的正確度。.
  • GoogLeNet (本範例的客製版也算) 對於分類貓狗來說真的是小題大作;換成像是VGG 16、Resnet-18或 LeNet這類型的簡易網路試試看吧
    • 在NCSDK的release note可以找到一系列已驗證的可用網路

延伸閱讀

 

相關文章

 

[Raspberry Pi] 如何使用遠端桌面

作者

袁佑緣

時間

三小時

難度

***

材料表

  1. 電腦
  2. Raspberry Pi  (2018 Pi3+測試中)
  3. 網路線
  4. USB轉RJ45接頭(如果電腦需要額外的網路孔的話))

[Raspberry Pi] 完全不接螢幕鍵盤滑鼠,電腦一開始就用網路線遠端連線Pi 中, 我們有介紹過如何指透過網路線就可以連進去Raspberry Pi中, 但是有時候我們還是需要一個圖形化的界面來操作, 或者是要顯示圖像或影片, 所以本篇文章要來介紹一下如何使用遠端桌面來解決類似的問題。

以下是兩種常用的方法,VNC以及Xrdp。

使用VNC遠端桌面

首先請先將電腦與Raspberry Pi做連線, 並用SSH登入到Raspberry Pi中, 關於這部份有問題的話, 可以直接參考這篇文章的教學 [Raspberry Pi] 完全不接螢幕鍵盤滑鼠,電腦一開始就用網路線遠端連線Pi

登入之後, 請打上以下的指令來安裝tight vnc server, 好用來在Raspberry Pi上跑一個VNC遠端桌面的服務。

sudo apt-get install tightvncserver -y

安裝完成後, 可以在終端機中輸入以下的指令來開啟這個server,

vncserver

第一次啟動的話, 程式會提示使用者設定一組密碼, 長度為八個英文字母或數字, 另外, 讀者也可以設定一組只能觀看螢幕畫面的密碼, 在本範例是略過這一步, 所以輸入n,跳過這個選項, 設定完成後, 就會在家目錄底下的.vnc資料夾生成一些設定檔,如下圖。

在Raspbian中, 管理圖形話界面的xserver會有一個DISPLAY的環境參數可以去設定, 也就是說可以透過這個參數, 來設定你要輸出的畫面到那一個顯示上, 好比說我們現在開啟的vnc server是開在:1號上,

你可以輸入以下的指令來確認現在的vnc server是開在那一個DISPLAY上。

ps a | grep vnc

所以說vnc server可能會有好幾個DISPLAY正在活動, 例如:1, :2, :3, …​好幾個桌面這樣, 每一個桌面都可以讓各別的使用者進行不同的操作, 但如果說我想要關掉特定的DISPLAY的話, 可以透過以下的指令來關掉特定的桌面, 如以下範例中的:1 號DISPLAY。

vncserver -kill :1

順帶一提, 如果我想要開一個Full HD的桌面, 而且指定為DISPLAY :2號的話, 可以透過下面的指令來完成。

vncserver -geometry 1920x1080 :2

到這邊我們已經把server端的部份搞定了, 接下來就剩下我們的電腦要安裝vnc viewer, 來遠端連線到Raspberry Pi上的桌面系統了。

讀者可以下載Chrome瀏覽器, 並安裝 VNC Viewer for Google Chrome 這個插件。

安裝完成後可以在網址列那邊輸入 chrome://apps 就可以切換到Google Chrome瀏覽器裡的App清單中, 請點擊清單中的VNC Viewer,如下圖中的左上角。

打開VNC Viewer後, 我們就可以透過連到<Raspberry Pi的ip>:<vncserver的port>, 來開啟指定port下的遠端桌面。

理論上我們要透過ssh連線到Raspberry Pi時, 就會需要用到Raspberry Pi的IP位址, 但是如果我們忘記了想要再重新查詢一遍的話, 可以在終端機中打上以下的指令查詢, 如下圖中的10.42.0.135

ip a

至於在連線時, 我們會有指定一個<vncserver的port>, 意思是5900加上DISPLAY的編號, 好比說我要連到DISPLAY :1這個桌面, 就打上5901, :2 就5902, 依此類推。

如以下的範例, 連到10.42.0.135下的:1號桌面。

連線時, 同意非加密的連線。

並打上前面設定過的vncserver的密碼。

成功登入後如下圖。

使用瀏覽器的插件來連到vnc viewer的好處是跨平台, 但是如果讀者想使用其他方法, 例如下載自己作業系統上的vnc viewer程式的話, 以下推薦一個比較常用的 RealVNC Viewer 請根據您電腦的作業系統來下載安裝。

指定SSH中的圖形畫面要在哪一個桌面上輸出

如果說讀者是從ssh登入之後, 直接在終端機上呼叫一個需要跑圖形界面的程式, 例如呼叫xterm

xterm

那麼讀者應該會看到系統回傳一個錯誤, 表示無法開啟顯示, 因為在SSH中, 預設是沒有DISPLAY的設定的。

但是如果我們把DISPLAY設定成:1, 也就是指定到我們vnc server上的:1號桌面, 並再重新跑一次xterm

export DISPLAY=:1
xterm

如此一來就可以在vnc viewer的port 5901上的這個桌面, 看到xterm成功被啟動了,如下圖。

另外, 如果說你想要查一下這個vnc viewer連到的桌面, 現在DISPLAY是設定多少的話, 可以點擊桌面上方的終端機圖示,

打開終端機後,

輸入以下的指令來顯示DISPLAY這個環境變數,

echo $DISPLAY

可以看到, 在這個桌面下,確實是DISPLAY :1呢!

 

設定新的密碼
vncpasswd
刪除舊的密碼
rm -rf passwd

使用Xrdp遠端桌面

另外一個常用的方法是使用Xrdp, 這是一套由windows發展出來的protocal, 因為它一套專門用來做遠端桌面溝通的協定, 所以在功能上會比vnc來的多,而且處理效能會較好一些。

在Raspberry Pi上要使用Xrdp的話, 只要輸入以下指令下載安裝, 系統就會自動執行了。

sudo apt-get install xrdp -y

至於連到Xrdp的工具可以從以下的網址來下載

安裝完成後, 基本上跟vnc viewer的操作上是很類似的, 不過在這邊是指定Raspberry Pi的IP後, 把使用者的帳密打上去, 如下圖所示。

成功登入後就會看到熟悉的桌面系統囉!

[AI人工智慧] 在Raspberry Pi上安裝NCSDK

作者

袁佑緣

時間

三小時

難度

***

材料表

前言

本篇文章將帶領讀者在Raspberry Pi上安裝Intel Movidius SDK, 並測試Movidius NCS是否能成功跑NCSDK的範例檔, 請讀者準備好Raspberry Pi以及要燒錄映像檔的SD Card, 另外為了要能夠從電腦直接連到Raspberry Pi上進行操作, 所以我們還需要額外一條乙太網路線來做連接。

燒錄Raspberry Pi映像檔

首先我們必須到 Raspbian的官方網站 下載Raspberry Pi的映像檔, Raspbian目前有提供兩個版本可以用, Lite版是輕量版本, Desktop版則是會連同桌面系統都內建在裡面, 但相對的檔案會比較大。

接下來為了要燒錄Raspberry Pi的映像檔, 我們需要一些工具來做燒錄, 在這邊我們推薦一款來不錯的跨平台燒錄工具 Etcher, 請根據您的作業系統來選擇安裝檔。

下載完成後, 請打開Etcher, 如下圖所示,

接著點選Select image, 並選擇剛剛下載的Raspbian映像檔的壓縮檔 (這個zip檔不需要解壓縮,Etcher會自動解壓縮成映像檔)

接下來將SD Card插入電腦上, 並在Etcher上選擇系統上顯示的裝置, 例如下圖中的/dev/mmcblk0 (Windows作業系統的話則常見是F,G槽等等)

最後就可以按下Flash開始燒錄囉! 燒錄完成後後如下圖。

將Raspberry Pi預設為啟用SSH

通常為了安全的考量, 剛燒錄完全新的Raspberry Pi系統預設都會關閉SSH Server, 因為Raspbian預設的使用者帳密都是一樣的, 所以預設開啟的話, 有可能被其他有心人士利用。

但因為在這個範例中, 我們希望可以不需要連接螢幕跟鍵盤就可以操作Raspberry Pi, 所以我們會需要改成預設開啟SSH。

以下以Windows作業系統為例, 其他作業系統也是同樣概念。

首先我們先將燒錄完系統的SD Card插到電腦上, 此時電腦會讀到一個新的裝置, 如下圖中的boot(F:)。

點進去boot之後, 按下右鍵新增一個Text Document,

將此新增的空白文件命名為ssh, 而Raspbian再開機時, 會讀取boot中有沒有名為ssh的檔案, 如果有,就會預設為啟動SSH Server, 這樣我們就可以透過ssh連進去了。

至於怎麼透過電腦做SSH連線到Raspberry Pi, 有興趣的讀者可以連到以下的文章查看詳細的教學 “[Raspberry Pi] 如何透過網路線連接Raspberry Pi的SSH連線到Raspberry Pi小節

安裝NCSDK

在安裝之前, 我們先更新一下Raspberry Pi的系統套件。

請輸入以下的指令, 來更新系統套件。

[ sourcecode language=”cpp”] sudo apt-get update
[ /sourcecode]

接著請輸入以下的指令來升級系統的套件。

sudo apt-get upgrade -y

接著輸入以下指令將NCSDK的原始碼下載下來

git clone https://github.com/Movidius/ncsdk

使用cd指令將工作目錄移到nscdk這個資料夾中。

cd ncsdk

緊接著輸入以下的指令, 將NCSDK透過Makefile的設定安裝起來。

make install

安裝的過程中, 會需需要超級使用者的權限, 請打上Raspberry Pi的超級使用者的帳密, 預設帳密是pi/raspberry

另外, 除了安裝NCSDK的套件之外, 做影像辨識還需要額外的函式庫OpenCV, 請輸入y來同意安裝。

值得注意的是, 由於Raspbian系統上並沒有編好的OpenCV3函式庫, 所以必須讓Raspberry Pi從頭編譯, 這個步驟會花掉不少時間, 例如下圖是筆者的實測編譯總計時間是171分鐘, 幾乎快要三個小時呢! (筆者使用的是Raspberry Pi最新的第三代,不同代處理效能會不一樣,所花的時間也會不一樣)

最後為了要測試Raspberry Pi是否能正確使用NCS, 請先插入NCS到USB孔上, 再輸入以下的指令來執行範例程式hello_ncs_py

cd examples/apps/hello_ncs_py/
make run

如果顯示NCS device working就代表成功囉!

備份安裝完NCSDK的Raspbian系統

走筆至此, 我們好不容易裝好了NCSDK, 並且把OpenCV函式庫也編譯完成了, 最後也確認Raspberry Pi可以讀取到NCS裝置了, 如果說我想要再新的一塊Raspberry Pi上也完成這樣的設定, 能不能不要在重新來過, 而是就直接使用已經完成的備份檔呢? 答案是可以的喔!

關於在Raspberry Pi進行系統備份以及重新燒錄檔案的教學請參考這邊教學文章, [Raspberry Pi] 如何備份Raspberry Pi的系統

另外,如果是想要直接使用Cave團隊提供的系統備份檔的話, 可以從以下的連結來下載, 總大小約4GB左右, 裡面已經有完成所有的設定, 只要按照 [Raspberry Pi] 如何備份Raspberry Pi的系統 的 燒錄映像檔到新的SD Card上 (麻煩做一下文章連結) 小節的教學燒錄即可。