作者:Rockelbel,兩年互聯網PM,AI轉型學習中,偏好NLP方向
上一篇文章介紹了機器學習和神經網路等一系列概念,這篇文章將主要對AI的關鍵技術及應用層面的內容做個簡單的總結。考慮到篇幅可能過長,本文僅介紹計算機視覺相關技術,其他如自然語言處理、專家系統、知識圖譜等技術會在下一篇文章中補充。
本系列其他文章:AI產品經理知識系列(1)——AI的背景知識及機器學習
一、AI產業結構
本來打算把產業結構放在最後一部分,後來考慮了一秒鐘,這篇文章會更加偏實際應用,對人工智慧產業鏈有一個宏觀的認識可能更有幫助。下圖是一張關於人工智慧產業生態的圖譜,很多機構都做過類似的圖,大同小異。技術層和應用層是本文的主要內容,這裡先對基礎層的內容做個簡單介紹。

人工智慧產業鏈圖譜
基礎層包括提供算力的高性能晶元、底層開源框架、感測器等,作為人工智慧技術的底層支持。我們經常聽到這樣一種說法,這次人工智慧的熱潮很大程度是基於三個領域的突破:大數據支持、算力的提升、演算法的突破。這些都屬於基礎層的範疇。
1、高性能處理器
高性能處理器:CPU、GPU、FPGA(半定製化的可編程電路)、TPU(一種ASIC,谷歌專門為機器學習打造的處理器)。這部分的內容儘管去百度,找不到算我輸。
下圖展示了CPU和GPU的結構差別,綠色區域是計算單元,橙色區域是儲存單元,「相對CPU而言,為什麼GPU更適合用於機器學習」這個問題大家應該能比較直觀的理解了。

CPU和GPU計算能力區別
2、雲服務
雲服務:Amazon ML、Google Cloud ML、Microsoft Azure ML、Databricks、Haven OnDemand、IBM Watson 和 Predictive Analytics、阿里雲 ML、騰訊TML、百度BML
很多大廠都提供了各自的機器學習雲平台服務,國外像Google/Amazon/Microsoft都是布局人工智慧比較早的企業,提供的服務相對更加成熟
相關閱讀:不可錯過的精彩回顧:6種雲機器學習服務
3、開源庫或計算框架
開源庫或計算框架:TensorFlow(大名鼎鼎)、Torch(基於Lua語言)、Caffe(Facebook,基於C++)、MXNET(Amazon,很強大)、Keras(易於使用,黑箱子,適合新手)、PaddlePaddle(百度)、Theano、sclikt-learn、Deeplearning4j(基於java語言)、Deepmat、Lasagne、Neon、Pylearn、Chainer、Turicreate(Apple2017年推出)、PyTorch(Facebook)、CNTK (Microsoft)......
專用領域的開源庫:OpenCV、OpenFace(人臉識別)、DarkNet-YOLO(物體檢測)......
各種開源框架數不勝數,這裡列舉了一些比較知名和用戶比較廣泛的框架,實際的項目也並不一定使用單一的框架。

各個開源框架gitbuh數據對比(數據比較舊)
相關閱讀:主流深度學習框架對比
基礎層的內容就介紹(搬運)到這裡,其他還有如Decker容器、機器學習中的可視化解決方案等等概念感興趣的可以去了解一下。
二、關鍵技術及應用領域
人工智慧的研究領域包括計算機視覺、自然語言處理、機器人、專家系統等,。根據AI應用範圍或發展層次可以分為專用人工智慧(ANI)、通用人工智慧(AGI)、超級人工智慧(ASI)三種,目前的AI還停留在專用人工智慧的階段,這階段主要是通過感知和記憶存儲來實現特定領域或特定功能,如計算機視覺、語音識別、智能推薦等等,目前這些領域有較為成熟的成果。
- 通用人工智慧,一般指Agent基於認知學習和決策執行的能力,有一定的自我意識,能夠真正理解人類的情緒語言,實現多個領域的綜合智能。
- 超級人工智慧,定義為具有完整的自我意識,獨立的價值觀世界觀,能夠自我創新,甚至超過人類。這種AI層次僅停留在想象中。
「可以預見的是,在由專業領域向通用領域過度的過程中,自然語言處理與計算機視覺兩個方向將會成為人工智慧通用應用最大的兩個突破口。」(極客公園)
目前深度學習在自然語言處理和計算機規覺領域已取得重大的進展,其中語音識別、 圖像識別已達到商業化的成都。在各類比賽中,圖像識別和語音識別錯誤率達到甚至超過人類水平。
計算機視覺(Computer Vision)
首先對區分這三個概念:計算機視覺、機器視覺、圖像處理
- 計算機視覺:指對圖像進行數據採集后提取出圖像的特徵,一般處理的圖像的數據量很大,偏軟體層;
- 機器視覺:處理的圖像一般不大,採集圖像數據后僅進行較低數據流的計算,偏硬體層,多用於工業機器人、工業檢測等;
- 圖像處理:對圖像數據進行轉換變形,方式包括降噪、、傅利葉變換、小波分析等,圖像處理技術的主要內容包括圖像壓縮,增強和復原,匹配、描述和識別3個部分。
計算機視覺是指利用計算機來模擬人的視覺,是人工智慧中的「看」。從技術流程上來說,分為目標檢測、目標識別、行為識別三個部分。根據識別的目標種類可以分為圖像識別、物體識別、人臉識別、文字識別等。在智能機器人領域,計算機視覺可以對靜態圖片或動態視頻中的物體進行特徵提取、識別和分析,從而為後續的動作和行為提供關鍵的信息。
近年來,基於計算機視覺的智能視頻監控和身份識別等市場逐漸成熟擴大,計算機視覺的技術和應用趨於成熟,廣泛應用於製造、 安檢、圖像檢索、醫療影像分析、人機交互等領域。
下圖展示了計算機視覺的技術分類,基本上可以分為靜態內容識別和動態內容識別兩大類,實際上在國內計算機視覺領域,動靜態圖像識別和人臉識別是主要研究和應用方向。當然很多應用需要計算機視覺和其他關鍵AI技術相結合,比如AR/VR的主要技術是人機交互和計算機視覺。

計算機視覺應用場景
常用技術分類
1.1圖像特徵提取與描述
特徵提取是很多CV技術的前置操作,比如判斷兩幅頭像是否是同一個人,計算機根據圖像的某些局部特徵,如邊緣和線條的特徵。
1圖像特徵種類
圖像的顏色特徵、紋理特徵、形狀特徵、空間關係特徵(應用於機器人的姿態識別問題,確定一個三維物體的方位等)、局部特徵
圖像特徵描述
圖像特徵描述的一個核心就是魯棒性(robust,這個詞大家肯定聽過吧,出場率極高)和可區分性,而這兩點常常是矛盾的。
魯棒性是指一個特徵應該適用於不同的圖像變換情況,這就要求這個特徵比較「粗糙」,例如一個茶杯從上方看和從側面看都應該是同一個茶杯。可區分性是指,能夠區分一些比較相似的局部特徵,顯然其魯棒性往往比較低。
相關閱讀:局部圖像特徵描述總結
1.2圖像分類
大家在新聞上肯定看到過這些比賽——ImageNet(李飛飛創立)、Kaggle、MSCOCC、阿里天池等等(以及ILSVRC、PASCAL VOC 2012),這些比賽的常設項目一般為不同領域下的圖像識別分類與場景分類,此外還有一些物體探測追蹤之類的。(這些比賽一般使用【top-5錯誤率】的高低來衡量演算法的優異,有興趣的可以去了解一下)
常用演算法:卷積神經網路CNN
常用神經網路模型:AlexNet、 VGG、 GoogLeNet、 ResNet)
1.2.1圖像分類(Image Classification)
根據圖像正反映出的不同特徵,依照特徵把圖片分類。顯然分類技術有基於色彩的、基於紋理的、基於形狀的、基於空間關係的。
舉個栗子,鎚子手機的有個桌面整理的功能,把顏色相似的圖片分類到一屏,這裡應用了基於顏色的圖像分類技術。
1.2.2場景分類(Scene Classification)
場景分類:基於對象(根據場景中出現的對象區分,例如出現床可能是卧室)、基於區域、基於上下文、基於Gist特徵
推薦一篇相關文章:基於深度學習的場景分類演算法

三種場景分類的方法
從上面這張圖可以大概了解場景分類大概的流程,當然前提得了解pooling、feature descriptors這些詞的含義(在後續介紹CNN/RNN的文章里會詳細描述)。上圖來源文章:場景分類摘錄
1.3圖像檢測(Image Detection)
圖像檢測是通過獲取和分析圖像特徵,從圖像中定位出預設的目標,並準確判斷目標物體的類別,最後給出目標的邊界,邊界一般是矩形,不過也有圓形的情況,下圖是一個人臉檢測的示例。

一個人臉檢測的示例
常用演算法:區域卷積神經網路/R-CNN
常用神經網路模型:SPPnet、Fast R-CNN、Faster R-CNN、R-FCN
圖像檢測應用領域:人臉識別、醫學影像、智能視頻監控、機器人導航、基於內容的圖像檢索、基於圖像的繪製技術、圖像編輯和增強現實等領域。(百度百科)
1.3.1物體檢測(Object Detection & Localization)
物件檢測分為靜態物體檢測和動態物體檢測,並且其一般和物體分類演算法結合,多應用於安防領域(行人檢測、智能視頻分析、行人跟蹤)、交通領域(交通場景的物體識別、車輛計數、逆行檢測、車牌檢測和識別)、互聯網領域(圖像檢測、相冊自動歸類)。
下圖展示了當前物體檢測技術的一些應用難點,包括圖片的複雜光照情況、非剛性物體形變(人、動物的各種姿勢)、低解析度、圖片模糊(商湯科技對此有比較好的處理技術)等

物體檢測技術難點(圖片來自論文:圖像物體分類與檢測演算法綜述)
這篇文章較為系統的介紹了一些檢查演算法的實現原理,推薦閱讀:乾貨 | 物體檢測演算法全概述:從傳統檢測方法到深度神經網路框架
1.3.2行人檢測(Pedestrian Detection)
行人檢測,顧名思義就是將圖片中的行人檢測出來,並輸出目標邊界,並且檢測的常常是多個行人目標。將一個視頻流中的行人的軌跡關聯起來,就是行人跟蹤,多個目標即多人跟蹤。另外一個應用稱為行人檢索,或行人再識別,即給定一個待檢索行人,從圖集或視頻中找到。(城市裡處處攝像頭,天網恢恢啊)
行人檢測應用領域:人工智慧系統、車輛輔助駕駛系統、智能機器人、智能視頻監控、人體行為分析、智能交通等領域。(百度百科)
相關閱讀:行人檢測(Pedestrian Detection)資源、行人檢測(看了一圈,還是百科說得最清楚)
1.3.3人臉檢測&人臉識別(Face Detection &Recognition)
人臉檢測是人臉識別中的一個關鍵環節,人臉檢測指對於一副給定的圖像,採用一定的策略對其分析搜索確定其中是否含有人臉,若有人臉則返回人臉邊界,以及大小、姿態等信息。
應用領域:身份認證與安全防護(很多app有實人認證)、媒體娛樂(火過一陣子的小偶app)、圖像搜索等。

實人認證示例圖

小偶app,根據照片製作一個3D人偶
人臉檢測是圖像檢測中的一種,方法基本類似,主要分為六個步驟:預處理、窗口滑動、特徵提取、特徵選擇、特徵分類和后處理(挖個坑,這部分後續會詳細介紹)
這裡插播一句題外話,去年的十月份,CNN的創始人發了一篇關於Capsule Networks(膠囊網路)的論文,大有取代CNN之勢。而目前為止,CNNs仍是圖像檢測分類領域最先進的方法,不過有時候也會出現一些不可描述的問題,比如下圖:

一個CNN圖像識別的例子
不用細說,大家應該也大概知道是什麼情況了。可以這樣(不嚴謹的)理解,CNN是由多層的神經網路組成,每一層的神經網路負責識別一類特徵,比如目標是識別人臉,可能一層負責識別眼睛的特徵,一層負責識別嘴巴的特徵,多層神經網路累加起來就會形成一個整體的特徵,但是CNN對多個特徵之間的空間關係並不能很好的識別,因此就有了上圖這樣的例子。(關於識別特徵這塊,有一個分類器的概念,感興趣的可以去了解一下Haar特徵、VJ模型和adaboost分類器)
人臉識別應該是目前計算機視覺領域商業化應用落地比較成熟的例子,下面是我搜集到的一張關於人臉識別的一些應用領域情況腦圖,需要的可以收藏。圖不太清楚,找不到來源網站,如果有知道的朋友可以評論留言我再加上。

人臉識別應用領域
1.4圖像分割(Image Segmentation)
圖像分割指把圖像分成若干個特定的、居右獨特性質的的區域並提出感興趣目標的技術。現有的圖像分割技術主要分為以下幾類:基於閾值、基於區域、基於邊緣和基於特定理論的分割方法。圖像分割是將數字圖像劃分為幾個互不相交的區域,也是一種標註的過程,即把屬於同一區域的像素給與相同的標籤。(百度百科)
這麼說可能難以理解,下圖是自動駕駛領域的一個應用示例,自動駕駛系統需要從場景中識別出各類物體,並根據先驗知識,即預設好的條件進行判斷,如應該在road區域行駛、遇到Pedestrian和Vehicle區域應該減速或停車、識別Traffic Light區域的含義等等。

圖像分割在自動駕駛領域的應用
圖像分割技術下有三個比較常見的分支——視覺顯著性檢測、物體分割、語義分割。
1.4.1視覺顯著性檢測(Visual Saliency Detection)
視覺顯著性檢測指通過演算法模擬人的視覺特點,提取圖像中可能是人類感興趣的區域,及顯著區域。
這裡涉及到另一個概念,視覺注意機制(Visual Attention Mechanism),即面對一個場景時,人類自動對感興趣區域進行處理而自動忽略不顯著的區域。

顯著性檢測圖示
人的視覺注意有兩種策略機制:
自下而上、基於數據驅動的注意機制:收感知數據驅動,將人的視覺重點引導至場景中的顯著區域,這些區域通常與周圍有較強的對比度或與周圍有明顯的區別,包括顏色、形狀、亮度等特徵。比如一副黑色圖片中的一個白點,視覺自然而然的會被引導至白點。
自上而下、基於任務驅動的、基於目標的注意機制:有根據先驗知識、預期和當前的目標來計算圖像的顯著性區域。在視頻中找到人,就是一個任務驅動的行為。
關於認知注意模型等內容,參考這篇文章:視覺顯著性檢測
關於注意力流等內容,可以去關注張江博士,他的書《科學的極致:漫談人工智慧》中有幾章對注意力機制的描述,比較直觀易懂。
1.4.2物體分割(Object Segmentation)
物體分割一般是用於把單張圖片中的一個或多個物體分割出來,物體分割常常和物體識別共同使用。相比於物體檢測只能返回一個矩形邊界,物體分割演算法可以精確的描繪出所有物體的輪廓,從像素成眠上把各個物體分割出來。
常用演算法:Mask R-CNN
下圖展示了物體分割的輸出效果,基本上可以實現把圖片中的物體的輪廓描繪出來。(設計師再也不用辛苦的摳圖了...)

物體分割效果圖
1.4.3語義分割/Semantic Segmentation
圖像語義分割,也成為語義標註,簡單而言就是給定一張圖片,對圖片上的每一個像素點分類,不區分物體,盡關心像素。
那麼它與物體分割有什麼不同呢?語義分割重在語義,即圖像中同一個類別的物體將會被劃分至同一個區域,如下右圖有兩隻牛,其都被劃分至cow區域;而上圖中可以看到,多個人或摩托車都被單獨的區分開來。

語義分割效果圖
1.5圖像描述(Image Captioning)
(圖說)圖像描述也稱為Dense Captioning,其目標是在給定一張圖像的情況下,得到圖像中各個部分的自然語言描述。圖像描述問題融合了計算機視覺和自然語言處理兩大方向,是AI解決多模式跨領域問題的典型技術。與英文相比,中文的描述常常在句法詞法的組合上更加靈活,演算法的挑戰也更大。
假設我們有一個很大的資料庫,每條記錄是圖像以及它對應的語句描述。每條語句的辭彙片段其實對應了一些特定的但是未知的圖像區域。我們的方法是推斷出這些辭彙片段和圖像區域的對應關係,然後使用他們來生成一個泛化的語言描述模型。
常用演算法:Vanilla-RNN、LSTM、GRU

圖像描述示例
相關閱讀:【圖像理解】自動生成圖像的文本描述
1.5.1圖像標註
圖像標註是從根據一幅圖自動生成一段描述性的文字,小時候的「看圖說話」。圖像描述需要把圖像中各個物體均生成描述,而圖像標註只對圖片整體進行描述。
圖像標註技術一般分為典型的圖像標註和基於注意力的圖像標註。

圖像標註示例
相關閱讀:看圖說話的AI小朋友——圖像標註趣談(上)、「Show and Tell」——圖像標註(Image Caption)任務技術綜述
1.6圖像問答(Image Question Answering)
圖像問答即回答與圖片內容相關的問題,輸入圖片及問題,系統輸出答案。15年的時候有一個新聞不知道大家知不知道,李彥宏首次向世界展示百度最新Image QA圖文問答技術,也就是下圖。新聞鏈接

圖像問答示例
圖像問答結合了注意力機制及外部知識庫后,識別能力能夠有顯著的提升。
與圖像描述類似,圖像問答同樣是結合計算機視覺與自然語言處理技術的一種應用,下圖展示了兩者之間的差異。

圖像問答和圖像描述
1.7圖像生成(Image Generation)
這大概是這篇文章最好理解的概念了,圖像生成——根據一定的條件生成圖像。比如上篇文章提到的prisma,根據預設的風格和圖片生成一張全新的圖片,這中間就是應用了圖像生成的技術。
使用GAN(對抗生成網路)來做圖像生成,目前是最流行也是最熱門的領域。當然,也可以使用MRF(馬爾科夫隨機場)、CNN來進行圖像生成。
GAN也可以用於根據一段文本描述來生成圖像,或根據一段簡筆畫來生成圖像等等。
相關閱讀:GAN之根據文本描述生成圖像、【實戰】GAN網路圖像翻譯機:圖像復原、模糊變清晰、素描變彩圖
注意啦!!!推薦大家一個好玩的網站(Demo),大家可以體驗一下,通過一副簡筆畫來生成一幅完整的圖像。

簡筆畫生成一隻貓🐱
模糊圖像復原也是圖像生成領域的重要應用,對於各種原因造成的模糊,均有較好的恢復效果,如運動模糊、抖動模糊等。

從左到右:原圖像、模糊化后的圖像和通過模型清晰化的圖像
1.8圖像檢索(Content-based Image Retrieval)
圖像檢索大概也是大家用得很多的功能吧,google、百度這些搜索引擎基本都支持以圖搜圖。圖像檢索的研究始於上世紀70年代,當時主要是基於文本的圖像檢索技術(Text-based Image Retrieval),而目前則是基於內容檢索(Content-based Retrieval)。
在檢索原理上,無論是基於文本的圖像檢索還是基於內容的圖像檢索,主要包括三方面:一方面對用戶需求的分析和轉化,形成可以檢索索引資料庫的提問;另一方面,收集和加工圖像資源,提取特徵,分析並進行標引,建立圖像的索引資料庫;最後一方面是根據相似度演算法,計算用戶提問與索引資料庫中記錄的相似度大小,提取出滿足閾值的記錄作為結果,按照相似度降序的方式輸出。(百度百科)
ps:這次文章整理得很頭疼,後面都快不想寫了,裡面可能有一些疏漏之處,如果有問題或者有補充可以在評論區留言,我會及時修正,希望同大家一起進步,感謝閱讀。
- 感謝閱讀,文中不嚴謹或疏漏之處還請見諒,歡迎討論。
- 有共同興趣的可以加我的微信(ID:Bernando2014)或者關注我的簡書主頁:蒲公英
- 轉載請註明文章來源,本文首次發佈於簡書-蒲公英。
- 特別說明:本章節中部分未說明來源的示例圖片摘選自coldyan的博客或網路