一文帶你讀懂計算機視覺

2020-12-11 雷鋒網

本文為 AI 研習社編譯的技術博客,原標題 :

Learning computer vision

作者 | Romain Beaumont

翻譯 | 黃偉聰、chesc

校對 | 醬番梨        整理 | 菠蘿妹

原文連結:

https://towardsdatascience.com/learning-computer-vision-41398ad9941f


最近,我已經閱讀了很多與計算機視覺相關的資料並做了大量實驗,這裡介紹了在該領域學習和使用過程中有意思的內容。

自動駕駛的圖像分割

近年來,計算機視覺取得了很大進展。這些是我將在這裡提到的主題:

技術

  • 人臉檢測:Haar,HOG,MTCNN,Mobilenet

  • 人臉識別:CNN,Facenet

  • 目標識別:alexnet,inceptionnet,resnet

  • 遷移學習:在一個新場景上用很少的資源重新訓練大型神經網絡

  • 圖像分割:rcnn

  • 生成式對抗網絡

  • 計算機視覺所需硬體:選擇什麼,關鍵是GPU

  • 集成視覺的UI應用程式:ownphotos

應用

  • 個人圖片整理

  • 自動駕駛汽車

  • 自動無人機

  • 驗證碼識別/OCR

  • 過濾網站/應用程式上的圖片

  • 自動標記應用程式的圖片

  • 從視頻(電視節目,電影)中提取信息

  • 視覺問答

  • 藝術

關注的人

課程

相關領域

人臉檢測是在臉部周圍標記方框

人臉檢測是檢測臉部的任務。有好幾種算法可以做到這一點。

https://github.com/nodefluxio/face-detector-benchmark 提供了這些方法在速度上的基準,並且易於重用實現代碼。


Haar分類器

這些是自2000年以來在opencv中出現的舊的計算機視覺方法。在這篇論文:http://wearables.cc.gatech.edu/paper_of_week/viola01rapid.pdf 中做了介紹。

這是一種機器學習模型,專門用於目標檢測的特徵提取。Haar分類器速度快但準確度低。

請參閱:https://docs.opencv.org/3.4.3/d7/d8b/tutorial_py_face_detection.html 中有關於如何使用它的更詳細解釋和示例。


HOG:方向梯度直方圖

HOG是一種用於目標檢測的提取特徵的新方法:它自2005年開始使用。該方法基於計算圖像像素的梯度。然後將這些特徵饋送到機器學習算法,例如SVM。這種方法具有比Haar分類器更好的精度。

這種方法的實現在dlib中,就是在face_recognition ( https://github.com/ageitgey/face_recognition ) lib中。


MTCNN

一種使用CNNs的變量來檢測圖像的新方法。精度更高但速度稍慢。請參閱:https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html


MobileNet

目前用於人臉檢測的最好和最快的方法,基於通用的mobile net架構。請參閱:https://arxiv.org/abs/1704.04861



目標檢測可以使用與人臉檢測類似的方法來實現

這裡有2篇文章介紹了實現它的最新方法。這些方法有時甚至也提供了目標的類別(實現目標識別):

  • https://towardsdatascience.com/review-r-fcn-positive-sensitive-score-maps-object-detection-91cd2389345c r-fcn

  • https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e a comparison of r-cnn, fast r-cnn, faster r-cnn and yolo

最近深度學習的迅速發展,可以看到許多新架構取得了很大成功。
使用許多卷積層的神經網絡就是其中之一。一個卷積層利用圖像的2D結構在神經網絡的下一層中生成有用信息。
有關什麼是卷積的詳細說明,請參閱: https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

目標識別是將物體分類為特定類別(如貓,狗,......)的一般性問題。

基於卷積的深度神經網絡在目標識別任務上取得了很好的效果。
ILSVR會議一直在ImageNet(http://www.image-net.org/ 一個有許多圖片的數據集,包括貓,狗等物品標籤)上舉辦競賽。

越成功的神經網絡使用的層數會越來越多。


ResNet架構是迄今為止對目標進行分類的最好網絡架構。

要正確地訓練ResNet,需要使用數百萬張圖像,並且即使使用數十個昂貴的GPU,也需要花費大量時間。

為了避免每次都要在這些大數據集上進行重新訓練,找到一些其他代替方法是十分重要的,而遷移學習和嵌入embeddings就是這樣的方法。

有關resnet的預訓練模型,請訪問: https://github.com/tensorflow/tensor2tensor#image-classification

人臉識別就是要弄清楚誰是一張臉。


歷史方法

解決該任務的歷史方法是將特徵工程應用於標準機器學習(例如svm),或把深度學習方法應用於目標識別。

這些方法的問題是它們需要每個人的大量數據。實際上,數據並不總是可以得到的。


Facenet

谷歌研究人員在2015年推出了Facenet https://arxiv.org/abs/1503.03832.它提出了一種識別人臉的方法,而不需要為每個人提供大量的人臉樣本。

這種方法是通過拍攝大量臉部的圖片數據集(例如 http://vis-www.cs.umass.edu/lfw/ )來有效工作的。

然後採用現有的計算機視覺架構,例如inception(或resnet),再用計算臉部的嵌入層替換目標識別神經網絡的最後一層。

對於數據集中的每個人,(使用啟發式方法)選擇三張臉(負樣本,正樣本,第二正樣本)並將其饋送到神經網絡。這產生了3個嵌入embeddings。利用這3個嵌入,計算triplet loss,這使得正樣本與任何其他正樣本之間的距離最小化,並且最大化位置樣本與任何其他負樣本之間的距離。


最終結果是每張臉(即使在原始訓練集中不存在的臉)現在也可以表示為一個嵌入embedding(128維的向量),該嵌入與其他人的臉部嵌入有很大距離。

然後,這些嵌入可以與任何機器學習模型(甚至簡單的諸如knn)一起使用來識別人。

關於facenet和face embeddings非常有趣的事情就是使用它你可以識別只有幾張照片或者只有一張照片的人。

請參閱實現它的lib: https://github.com/ageitgey/face_recognition

這是它的一個tensorflow實現: https://github.com/davidsandberg/facenet

這是人臉識別流程背後的思想的一個很酷的應用,就是識別熊臉:https://hypraptive.github.io/2017/01/21/facenet-for-bears.html


在自定義數據集上快速重新訓練準確的神經網絡

訓練非常深的神經網絡(如resnet)是非常耗費資源的,並且還需要大量的數據。

計算機視覺是高度計算密集型的(在多個gpu上進行數周的訓練)並且需要大量數據。為了解決這個問題,我們已經討論過為人臉計算出通用的嵌入embeddings。另一種方法是採用現有網絡並在其他數據集上重新訓練,訓練時僅僅訓練其中的幾層。

這是一個教程: codelab tutorial 。它建議你重新訓練一個初始模型,從而去訓練未知的花類。

在進行遷移學習時,該選擇哪一層來重新訓練,以下地址提供了很好的指導:https://medium.com/@14prakash/transfer-learning-using-keras-d804b2e04ef8


用於自動駕駛的圖像分割

近年來,圖像分割可能是一項令人印象深刻的新任務。它包括識別圖像的每個像素。

該任務與目標檢測有關。實現它的其中一種算法是mask r-cnn,有關詳細信息,請參閱此文章: https://medium.com/@jonathan_hui/image-segmentation-with-mask-r-cnn-ebe6d793272 



生成式對抗網絡,是由ian goodfellow提出,這個網絡架構分為2部分:判別器和生成器。

在學習期間調整生成器的權重,目標是使生成的圖像與該類的真實圖像儘可能相似,以至於判別器無法區分出來。

以下是最大的GAN(https://arxiv.org/abs/1809.11096)生成的圖像示例。

關於GAN在keras上的實現,請參閱: https://github.com/eriklindernoren/Keras-GAN


要訓練大型模型,需要用到大量資源。實現這一目標有兩種方法。首先是使用雲服務,比如google cloud或者aws。第二種方法是自己組裝一臺帶有GPU的計算機。

只需1000美元,就可以組裝一臺相當好的機器來訓練深度學習模型。

更多細節請參閱: https://hypraptive.github.io/2017/02/13/dl-computer-build.html



ownphotos的face儀錶盤

Ownphotos 是一個令人驚嘆的用戶界面,允許您導入照片並自動計算臉部嵌入,進行目標識別和人臉識別。

它用到的算法:

  • 人臉識別:face_recognition

  • 目標檢測:densecap, places365



計算機視覺有很多應用:

  • 個人圖片整理

  •  自動駕駛汽車

  • 自動無人機

  • 驗證碼識別/OCR

  • 過濾網站/應用程式上的圖片

  • 自動標記應用程式的圖片

  • 從視頻(電視節目,電影)中提取信息

  • 視覺問答:結合自然語言處理和計算機視覺

  • 藝術:生成式對抗網絡


正如我們這裡所見,上述視覺領域各方面的實現中誕生了許多新的有趣的方法和應用。

我認為人工智慧最有趣的,在各領域尤其在視覺領域中,是學習可再使用的算法。讓這些方法適用於處理越來越多的任務而不需要更多算力資源和數據 :


想要繼續查看該篇文章相關連結和參考文獻?

長按連結點擊打開或點擊底部【一文帶你讀懂計算機視覺】:

https://ai.yanxishe.com/page/TextTranslation/1286


AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網雷鋒網雷鋒網(公眾號:雷鋒網)

從語言學角度看詞嵌入模型

深度網絡揭秘之深度網絡背後的數學

如何將深度學習應用於無人機圖像的目標檢測

Python高級技巧:用一行代碼減少一半內存佔用


等你來譯:

五個很厲害的 CNN 架構 

用Pytorch做深度學習(第一部分)

讓你的電腦擁有「視力」,用卷積神經網絡就可以!

讓神經網絡說「我不知道」——用Pyro/PyTorch實現貝葉斯神經網絡


相關焦點

  • 獨家 | 一文讀懂Adaboost
    ,實現起來比較容易泛化錯誤率低(預測性能好),不易過擬合不需要調節很多參數,最多修改一下基礎模型的數量適用範圍廣:二分類問題,多分類問題,回歸問題 缺點: Adaboost的實際應用目前,大家都知道計算機視覺非常的火
  • 一文帶你讀懂計算機進位
    在我們的學習和工作中少不了與進位打交道,從出生開始上學,最早接觸的就是十進位,當大家學習和使用計算機時候,我們又接觸到了二進位、八進位以及十六進位。那麼大家對進位的認識和使用是否很清楚呢?今天我就帶大家一起深入了解一下計算機中的進位。
  • 一文看懂計算機視覺!7個常見術語別說你沒聽過!
    你想了解的有關計算機視覺的所有信息。計算機視覺是最強大和引人注目的AI之一,你幾乎肯定會以各種方式體驗過它,當時卻不知道。 今天我們來好好研究一下它,包括它的工作原理以及它如此出色的原因(而且只會變得越來越好)。
  • 一文讀懂磁傳感器(必須收藏)
    【點擊藍色標題,獲取文章】 >、一文讀懂接近傳感器 3、一文讀懂磁傳感器 4、一文讀懂流量傳感器
  • 用一年的時間帶你讀懂《深入理解計算機系統》
    它從你的計算機講起,描述你的主機中有什麼部件,你的主板上有什麼零件,CPU、內存和硬碟之間怎麼連接的。它還描述了你寫的程序是怎麼從一個文本文件被編譯、連結變成彙編碼,又是怎麼從彙編語言變成機器碼,以及怎麼被計算機執行的。它還會講到計算機網絡、組成原理、進程、線程等等,從硬體講到軟體,從裡講到外。它就像一張網,把我們整個計算機生涯中可能遇到的知識給組織起來了。
  • 【深度學習】:一文入門3D計算機視覺
    一.導論目前深度學習已經在2D計算機視覺領域取得了非凡的成果,比如使用一張圖像進行目標檢測,語義分割,對視頻當中的物體進行目標跟蹤等任務都有非常不錯的效果
  • 一文讀懂電容傳感器
    藍色標題,獲取文章】 10、一文讀懂光纖傳感器 11、一文讀懂溫溼度傳感器 12
  • 一文全覽深度學習在計算機視覺領域的應用
    (2-D)還有計算機視覺的預處理(2-D)。3-D、基於多視角(MVS)/運動(SFM)的重建這部分就是經典的計算機視覺問題:3-D重建。基本上可以分成兩種路徑:一是多視角重建,二是運動重建。前一個有一個經典的方法MVS(multiple view stereo),就是多幀匹配,是雙目匹配的推廣,這樣採用CNN來解決也合理。
  • 一文帶你讀懂自然語言處理 - 事件提取
    隨著神經網絡算法的改進、計算機算力的顯著提升以及大量湧現的理解框架,自然語言處理的能力正被前所未有的探索。其中一個常見應用稱為事件提取,即處理收集蘊藏在文本中的一個階段內發生的事件,自動識別發生了什麼和什麼時候發生。
  • 入門計算機視覺OpenCV
    同濟子豪兄6節課帶你掌握OpenCV下拉文末,加入課程交流群 計算機視覺顧名思義就是讓計算機或者其他電子設備具有類似人類的視覺系統,可以通過採集的圖片或視頻進行處理,從而獲得場景或事物的三維信息,並進行識別判斷。
  • 一文讀懂計算機的常見接口主要作用
    家用或辦公用的計算機一般都有很多接口,相信很多朋友對一些接口比較熟悉,如USB接口是最為常見的,也有一些外接顯示器的HDMI接口,可能你不了解它的名稱,但應該見過這樣或那樣的接口形態。當然,計算機有很多種接口,外形不一樣,功能不一。今天小編來給你全面講解關於計算機接口。
  • 獨家 | 一文讀懂Hadoop(三):Mapreduce
    讀者可以通過閱讀「一文讀懂Hadoop」系列文章,對Hadoop技術有個全面的了解,它涵蓋了Hadoop官網的所有知識點,並且通俗易懂,英文不好的讀者完全可以通過閱讀此篇文章了解Hadoop。本期獨家內容「一文讀懂Hadoop」系列文章先介紹Hadoop,繼而分別詳細介紹HDFS、MAPREDUCE、YARN的所有知識點,分為四期內容在近幾天推送。敬請關注後續內容。
  • 【又一重磅】再獲翻譯授權,斯坦福CS231N深度學習與計算機視覺
    大數據文摘作品,未經授權禁止轉載,轉載具體要求見文末。翻譯:寒小陽 龍心塵編者按:本期文章是我們為讀者帶來斯坦福課程文章第二個系列的【斯坦福深度學習與計算機視覺課程】專題第一期。此外,對於有興趣進一步學習交流的讀者,我們將通過QQ群(鑑於微信人數限制問題)組織進行學習交流。
  • 鳥瞰計算機視覺
    模式識別2.4人工智慧和機器學習2.5計算機圖形學3 計算機視覺應用領域1 視覺概述計算機視覺源自人類視覺,即一般所說的視覺。人工智慧則指由人類用計算機模擬、執行或再生某些與人類智能有關的功能的能力和技術。視覺功能是人類智能的一種體現,所以計算機視覺與人工智慧密切相關。計算機視覺的研究中使用了許多人工智慧技術,反過來,計算機視覺也可看作是人工智慧的一-個重要應用領域,需要藉助人工智慧的理論研究成果和系統實現經驗。
  • 計算機視覺:你必須了解的圖像數據底層技術
    目前主流的計算機視覺工具有OpenCV、Tensorflow、Gpu、YOLO、Keras等。計算機視覺其實是一個複雜多元的交叉領域,包含了很多來自數位訊號處理、神經科學、圖像處理、模式識別、機器學習(ML)、機器人、人工智慧(AI)等領域的概念。
  • ImageNet冠軍帶你入門計算機視覺:卷積神經網絡
    編輯|Vincent,EmilyAI 前線導語: 在第一篇文章《ImageNet 冠軍帶你入門計算機視覺:監督學習與神經網絡的簡單實現》中,我們介紹了神經網絡的基本概念以及 Tensorflow 的基本用法。 本文為系列的第二篇文章,將會介紹卷積神經網絡。
  • 一文讀懂Python裝飾器
    打開APP 一文讀懂Python裝飾器 工程師3 發表於 2018-04-28 10:48:00 比如: 這時,你就可以把
  • 淺談計算機視覺中的圖像標註_易車網
    什麼是計算機視覺?計算機視覺被認為是機器學習和人工智慧發展的重要領域之一。簡而言之,計算機視覺是人工智慧研究領域,致力於賦予計算機看世界和視覺解釋世界的能力。更進一步的說,計算機視覺是一門研究如何使機器「看」的科學,就是是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。計算機視覺的應用非常廣泛,從自動駕駛汽車和無人機到醫療診斷技術和面部識別軟體,計算機視覺的應用是巨大的和革命性的。
  • 計算機視覺新手指南
    ,可以在下面找到一系列初學者需要了解的基礎知識點。在MATLAB中進行編程時,我們使用計算機視覺系統工具箱(https://in.mathworks.com/products/computer-vision.html?s_tid=gn_loc_drop) 。 同樣,如果你使用其他語言編程,則還需要更多的開源庫。
  • 教你從讀懂詞語開始了解計算機視覺識別最火模型 | CNN入門手冊(中)
    教你從讀懂詞語開始了解計算機視覺識別最火模型 | CNN入門手冊(上)》(戳標題直接閱讀),相信大家已經對卷積神經網絡有了初步的了解。這周,我們將更深入地介紹卷積神經網絡(以下簡稱「ConvNets」),解釋上周我們提到卻又沒有細講的一些概念 。聲明:我在這部分介紹的一些主題非常複雜,完全可以單獨列出來寫成一篇文章。