1. 程式人生 > >ARCore之路-計算機視覺之機器學習(一)

ARCore之路-計算機視覺之機器學習(一)

  在前面的章節中,我們看到了我們的裝置如何在ARCore的幫助下,跟蹤使用者,瞭解使用者的世界,併疊加虛擬的物體到真實世界中。ARCore使用裝置的感測器和攝像頭作為輸入,不斷更新對環境的理解,營造出了良好的虛擬現實混合的效果。但是,我們也提及到,如果我們僅僅停留在這一層面,將無法形成大規模的應用,因為我們沒有能解決計算機視覺方面的問題。在5年前,這似乎都是一項不可能完成的任務。但是隨著人工智慧(AI,Artificial Intelligence)技術的發展,特別是深度學習(Deep Learning)技術的發展,計算機視覺技術也迎來了新的紀元,Google公司的Tensorflow、Facebook的Pytorch等等,許多公司已經開始開放機器學習原始碼,並提供他們的工具,大大的方便了我們的學習。我們接下來將利用當前最先進的AI技術來助力AR應用。接下來我們將學習:

  • 機器學習(Machine Learning, ML)
  • 深度強化學習(Deep reinforcement learning)
  • 神經網路(Neural Network)
  • ML-Agents
DavidWang原創

一、機器學習

  機器學習是一門非常先進的學科,需要多年的學習才能運用自如。我們將學習一些基本的技術,讀者可以通過更多的學習或實現自己的解決方案來擴充套件這些技術。
  機器學習是一個廣泛用於人工智慧和相關計算機預測分析模型的術語。機器學習(Ml)是人工智慧的一個領域,它使用統計技術使計算機系統能夠從資料中“學習”(例如,逐步提高在特定任務上的效能),而無需顯式程式設計。機器學習這個名字是1959年阿瑟·塞繆爾(Arthur Samuel)發明的。機器學習探索了能夠從資料中學習並對資料做出預測的演算法的研究和構造,這種演算法通過進行資料驅動的預測或決策來克服嚴格的靜態程式指令。通過建立樣本輸入模型,機器學習被應用於一系列計算任務中,在這些任務中,設計和程式設計效能良好的顯式演算法是非常困難或不可行的;例如,應用程式包括電子郵件過濾、網路入侵者的檢測和計算機視覺。這裡的機器顯然是指計算機或其他裝置,而學習傾向於表示一種演算法或模型,該演算法或模型將隨著時間的推移而進化或學習。然而,在許多機器學習模型中,情況往往並非如此。因此,就我們的目的而言,我們將使用更廣泛的機器學習術語來指任何可以訓練以識別AR中環境或環境部分的工具或演算法,從而使我們,即開發人員,能夠更好地識別環境或環境的一部分。
  機器學習是一個很大的領域,而且還在不斷的擴充套件中,對我們而言,我們更關注的是以下具體問題:

  • 目標檢測(Target detection)
      目標檢測一直是AR應用程式的主要跟蹤和參考點。在攝像機獲取的影象中作目標檢測也是最基本的需求。

  • 影象識別(Image recognition)
      影象識別就是對當前攝像機獲取的影象資訊與資料庫中的影象資訊進行對比識別。

  • 物體識別(Object detection)
      能夠從點雲資料中檢測到3D中的物體物件,這並不是一件容易的事,但正處於高速發展中。

  • 人臉識別(Face detection)
      在影象中檢測人臉已經得到了大規模的應用,在許多應用程式中已經產生了很大的影響。

  • 人形檢測(Person detection)
      在影象中探測靜態或者動態的人形。

  • 手勢檢測(Hand/Gesture detection)
      手勢檢測指在裝置的攝像頭前檢測到使用者的手部動作或手勢。與觸控手勢完全不一樣。手勢檢測是進行AR手勢操作的基礎。

  • 姿態檢測(Pose detection on object)
      與目標檢測相關,指檢測目標的位置和方向。

  • 光源識別(Light source detection)
      能夠根據真實環境的光照資訊,在場景中重建的燈光,使虛擬物件的渲染更加逼真。

  • 環境識別(Environment detection)
      對使用者環境進行檢測與理解,在測繪建築物或其他沒有全球定位系統的地點有很大的應用,這適用於大多數室內空間。

  這些問題中的每一個都可能需要不同的工具和技術來解決。在機器學習中,模型的大小和效能上的差異可能是至關重要的。這裡我們重點要提一下OpenCV,這是一個成熟的底層API,用於Android,商業版本已經移植到Unity,儘管如此,使用它仍然需要更底層的知識;Google TensorFlow,目前Tensorflow還處於起步發展階段,但很快就成了CNN的平臺標準,為方便C#呼叫,也已經有TensorFlowSharp。使用它也需要底層知識與更高階的理念。

二、深度強化學習

  傳統的預測模型,如線性迴歸,並不能很好的支援擴充套件,因為它們總是需要使用所有可用的點或資料來計算整個解決方案。這些型別的技術或模型沒有記憶、學習和改進的能力,它們通常被歸類為受監督的模型。這導致了更高階的學習模型(稱為強化學習(ReforcementLearning,RL)的發展。事實上,深度學習和深度強化學習技術在效能和精度上比統計方法高出幾個數量級。深度強化學習將深度學習的感知能力和強化學習的決策能力相結合,可以直接根據輸入的影象進行控制,是一種更接近人類思維方式的人工智慧方法。由於卷積神經網路對影象處理擁有天然的優勢,將卷積神經網路與強化學習結合處理影象資料的感知決策任務目前是最熱門的研究方向。

  深度增強學習是將深度學習與增強學習結合起來從而實現從Perception感知到Action動作的端對端學習的一種全新的演算法。簡單的說,就是和人類一樣,輸入感知資訊比如視覺,然後通過深度神經網路,直接輸出動作,中間沒有hand-crafted工作。深度增強學習具備使機器人實現完全自主的學習一種甚至多種技能的潛力。

  雖然將深度學習和增強學習結合的想法在幾年前就有人嘗試,但真正成功的開端是DeepMind在NIPS 2013上發表的Playing Atari with Deep Reinforcement Learning一文,之後DeepMind在Nature上發表了改進版的DQN文章,引起了廣泛的關注。而Hinton,Bengio及Lecun三位專家在Nature上發表的Deep Learning 綜述一文最後也將Deep Reinforcement Learning作為未來Deep Learning的發展方向。

DavidWang原創

三、神經網路

  人工神經網路(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經網路(NNs)或稱作連線模型(Connection Model),它是一種模仿動物神經網路行為特徵,進行分散式並行資訊處理的演算法數學模型。這種網路依靠系統的複雜程度,通過調整內部大量節點之間相互連線的關係,從而達到處理資訊的目的。簡單的說,人工神經網路是一種應用類似於大腦神經突觸聯接的結構進行資訊處理的數學模型。
  人工神經網路的計算模型靈感來自動物的中樞神經系統(尤其是腦),並且被用於估計或可以依賴於大量的輸入和一般的未知近似函式。人工神經網路通常呈現為相互連線的“神經元”,它可以從輸入的計算值,並且能夠機器學習以及模式識別由於它們的自適應性質的系統。例如,用於手寫體識別的神經網路是由一組可能被輸入影象的畫素啟用的輸入神經元來限定。然後經過加權,並通過一個函式轉化,模擬訊號在神經元之間的傳遞。重複此過程,直到最後,輸出神經元被啟用,從而決定了哪些字元被讀取。像其他的從資料-神經網路認識到的機器學習系統方法已被用來解決各種各樣的很難用普通的以規則為基礎的程式設計解決的任務,包括計算機視覺和語音識別。人工神經網路的最大優勢是他們能夠被用作一個任意函式逼近的機制,從觀測到的資料進行“學習”。
  神經網路是通過對人腦的基本單元——神經元的建模和聯接,探索模擬人腦神經系統功能的模型,並使用程式碼編寫的一種具有學習、聯想、記憶和模式識別等智慧資訊處理功能的模型。神經網路的一個重要特性是它能夠從環境中學習,並把學習的結果分佈儲存於網路的突觸連線中。神經網路的學習是一個過程,在其所處環境的激勵下,相繼給網路輸入一些樣本模式,並按照一定的規則(學習演算法)調整網路各層的權值矩陣,待網路各層權值都收斂到一定值,學習過程結束。然後我們就可以用生成的神經網路來對真實資料做處理。

四、ML-Agents

  Unity Machine Learning Agents (ML-Agents) 是一款開源的 Unity 外掛, 能夠讓我們在真實環境或者模擬環境中訓練智慧 agent。可以使用 強化學習(Reinforcement learning)、模仿學習(Imitation learning)、神經進化(Neuroevolution)或其他機器學習方法, 通過簡單易用的 Python API進行控制,對 Agent 進行訓練。ML-Agents還提供目前最新的機器學習實現方式(基於 TensorFlow),讓開發者訓練用於 2D、3D 和 VR/AR 的智慧 agent。 這些經過訓練的 agent 可用於多種目的, 包括控制 NPC 行為(採用各種設定, 例如多個 agent 和對抗)、對遊戲內部版本進行自動化測試、以及評估不同遊戲設計決策的預釋出版本。ML-Agents 為機器學習提供了一個集中的平臺, 使得我們得以在 Unity 的環境中測試 AI 的最新進展。

   ML-Agents 是一個 Unity 外掛,它包含三個高階元件:

  • 學習環境 - 包括 Unity 場景或者AR場景。
  • Python API - 包含用於訓練(學習某個行為或 policy)的 所有機器學習演算法。與學習環境不同,Python API 不是 Unity 的一部分,而是位於外部 並通過 External Communicator 與 Unity 進行通訊。
  • External Communicator - 它將 Unity 環境與 Python API 連線起來。它位於 Unity 環境中。
DavidWang原創

參考文獻

1、Machine learning Machine learning
2、神經網路 神經網路