-
1 # 你看我獨角獸嗎
-
2 # AI中國
如何利用CNNs建立計算機視覺模型?什麼是現有的資料集?訓練模型的方法有哪些?本文在嘗試理解計算機視覺的最重要的概念的過程中,為現有的一些基本問題,提供了答案。
在機器學習中最熱門的領域之一是計算機視覺,它具有廣泛的應用前景和巨大的潛力。它的發展目的是:複製人類視覺的強大能力。但是如何透過演算法來實現呢?
讓我們來看看構建計算機視覺模型中,最重要的資料集以及方法。
現有的資料集
ImageNet是最龐大且最著名的資料集之一,它是一個現成的資料集,包含1400萬幅影象,使用WordNet概念手工註釋。在整個資料集中,100萬幅影象包含邊界框註釋。
另一個著名的例子是Microsoft COCO(Common Objects in Contex,常見物體影象識別)的 DataSet,它包含了32.8萬張圖片,其中包括91種物件型別,這些物件型別很容易被識別,總共有250萬個標記例項。
來自COCO資料集的帶註釋影象的示例
雖然沒有太多可用的資料集,但有幾個適合不同的任務,
研究人員運用了包含超過20萬名人頭像的CelebFaces Attributes資料集和超過300萬影象的"臥室"室內場景識別資料集(15,620幅室內場景影象);和植物影象分析資料集(來自11個不同物種的100萬幅植物影象)。
照片資料集,透過這些大量的資料,不斷訓練模型,使其結果不斷最佳化。
一個總體戰略
深度學習方法和技術已經深刻地改變了計算機視覺以及人工智慧的其他領域,以至於在許多工中,它的使用被認為是標準的。特別是,卷積神經網路(CNN)已經超越了使用傳統計算機視覺技術的最先進的技術成果。
這四個步驟概述了使用CNN建立計算機視覺模型的一般方法:
建立由帶註釋的影象組成的資料集,或使用現有的資料集。註釋可以是影象類別(用於分類問題)、邊界框和類(用於物件檢測問題)、或者是對影象中感興趣的每個物件進行畫素級分割(對於例項分割問題)。從每個影象中提取與當前任務相關的特性。這是問題建模的關鍵點。例如,用於識別人臉的特徵,基於面部標準的特徵,明顯不同於用於識別旅遊景點或人體器官的特徵。訓練一個基於特徵分離的深度學習模型。訓練意味著給機器學習模型提供許多影象,它將根據這些特徵學習如何解決手頭的任務。使用訓練階段沒有使用的影象來評估模型。透過這樣做,可以測試訓練模型的準確性。這個策略很基本,但可以很好地達到了目的。這種方法稱為監督機器學習,需要一個包含模型且必須學習的現象的資料集。訓練物件檢測模型
解決物件檢測挑戰的方法有很多種。 在Paul Viola 和 Michael Jones 的論文《健壯實時物件檢測》(Robust Real-time Object Detection)中提出了普遍的方法。
論文傳送門:「連結」
雖然該方法可以訓練用來檢測不同範圍的物件類,但其最初的目的是面部檢測。它是如此的快速和直接,並且它是在傻瓜相機中實現的演算法,這也使得實時人臉檢測幾乎沒有處理能力。
該方法的核心特性是使用一組基於Haar特性的二進位制分類器進行訓練的。這些特徵表示邊和線,在掃描影象時非常容易計算。
Haar features
雖然非常基本,但在特定的人臉情況下,這些特徵允許捕獲重要的元素,如鼻子、嘴巴或眉毛之間的距離。它是一種監督方法,需要識別物件型別的許多正例和反例。
基於CNN的方法
深度學習已經成為機器學習中一個真正的遊戲規則改變者,特別是在計算機視覺領域中,基於深度學習的方法是許多常見任務的前沿。
在提出的各種實現目標檢測的深度學習方法中,R-CNN(具有CNN特徵的區域)特別容易理解。本文作者提出了三個階段的過程:
雖然R-CNN演算法對於具體採用的區域建議方法是不可知的,但是在原著中選擇的區域建議的方法是選擇性搜尋。步驟3非常重要,因為它減少了候選物件的數量,從而降低了方法的計算開銷。
這裡提取的特徵不如前面提到的Haar特徵直觀。綜上所述,我們使用CNN從每個區域提案中提取4096維特徵向量。考慮到CNN的性質,輸入必須始終具有相同的維度。這通常是CNN的弱點之一,不同的方法以不同的方式解決這個問題。對於R-CNN方法,經過訓練的CNN架構需要輸入227×227畫素去固定區域。由於提議的區域大小與此不同,作者的方法只是扭曲影象,使其符合所需的尺寸。
與CNN所需的輸入維度匹配的扭曲影象的示例
雖然取得了很好的效果,但是訓練遇到了一些障礙,最終這種方法被其他人超越了。其中一些在文章中進行了深入的回顧——《深度學習的物件檢測:權威指南》。
回覆列表
前幾年我就開始學習Python和Django。 我喜歡透過學習Python中的新東西來放鬆自己。 對深度學習模型,人工智慧和用於構建神經網路模型的不同工具我很感興趣。
有個資料問題是包括初創公司在內的許多企業都會遇到延遲付費客戶的問題, 只需看看谷歌搜尋詞和趨勢的數量,原來延遲付款和追債的市場估計為數十億美元這麼多。。
一些初創公司正在使用人工智慧解決延遲付款的問題。 他們正在構建智慧應用程式,以自動化使用不同通訊代理聯絡客戶的過程。 我認為透過將python程式碼應用於深度學習模型來了解有關神經網路和人工智慧的更多資訊會很有趣。
我們的示例是使用Keras構建的,Keras是一個簡單但功能強大的深度學習python庫。 請參閱Keras的安裝要求。 您需要安裝後端引擎(如TensorFlow)才能使API正常工作。
深度學習和神經網路我們的大腦有連線神經元網路,使用模式來學習和記憶東西。我們使用前向傳播不斷提供大腦資料。
神經網路透過在輸入資料神經元之間建立連線,將它們傳遞給其他子神經元進行處理以獲得最終輸出,在我們的大腦中使用相同的模式識別概念。我們將此過程稱為向前傳播。
神經網路試圖在資料中找到模式。我們將其稱為深度學習,因為網路中隱藏層的級別,這是學習或培訓發生的地方。
反向傳播並最大限度地減少錯誤在深度學習中,我們將模型的預期輸出與訓練資料集的輸出進行比較。使用反向傳播,當從一個神經元移動到下一個神經元時,我們的網路將繼續調整權重,直到訓練資料集和模型的輸出之間的輸出差異最小化。因此,最小化我們的模型和預期輸出之間的誤差。
如果我們期望輸出為10,例如模型給出輸出6,則誤差為4.模型將返回並調整模型中神經元連線之間的權重,以儘可能地減少誤差。
樣本模型
我將從一個例子開始,這個例子的靈感來自閱讀這篇關於用python編寫的神經網路的部落格文章。我們將使用Keras構建我們的多層深度學習模型。功能強大的python包允許快速更改模型的體系結構。我們可以快速調整隱藏層的數量,每層中的神經元,模型啟用函式,損失函式和模型型別,而無需重寫數學公式的函式。
在下面的XOR門示例中,我們為每個訓練集示例提供了三個輸入和一個輸出。我們的輸出取決於第三列不相關的前兩列。如果前兩列中的輸入為1或0,則輸出為1,否則輸出為0。
在使用上面的資料訓練我們的模型之後,我們希望它為下面的測試輸入預測正確的輸出:
答案應該是0。
建立我們的模型:
我們用七個輸入集為我們的模型提供資訊。 每個輸入都有一個權重轉到下一個隱藏層。 第一個隱藏層神經元是它所連線的節點的權重和值的總和。
該模型將比較結果輸出與我們的訓練資料的預期輸出。 這是模型的錯誤。
該模型將繼續調整神經元連線的權重,以最小化模型輸出和預期輸出之間的誤差。
我們調整隱藏層的數量,每層中的神經元以及模型迭代(時期)的數量,以實現高模型精度和最低可能誤差的最佳結果。模型程式碼實際上並不長,但我提供了一些註釋來解釋這些程式碼,請確保您閱讀它們以更好地掌握模型:
我們的模型執行20,000次迭代。 對於輸入[1,0,0],我們的模型預測輸出為0.0000001062! 非常接近我們的預期值0。最後,我們還將我們的輸入提供給模型以預測輸出,並且非常準確地預測了我們的訓練資料的1和0,這結果還算不錯。