看AI產品經理如何介紹「計算機視覺」(基於實戰經驗和案例)
前言:本文作者Jasmine ,是我們「AI產品經理大本營」的早期成員之一,也是「AI研習小分隊」的分享嘉賓;下面是她分享的第三篇文章,以饗大家。
計算機視覺(Computer Vision),對我來說也算老朋友了,我最開始接觸人工智慧就是CV相關的知識。最近受益於老大每天帶我去旁聽演算法例會,又加上看了商湯CEO@徐立 的文章《計算機視覺的完整鏈條,從成像到早期視覺再到識別理解》,發現很多信息,當時不覺得有什麼,但現在想想,每一步都是有意義的;
今天,我會根據親身經歷的項目案例和平時所學,從產品實踐的角度,談談計算機視覺。
前言
計算機視覺,是使用計算機及相關設備對生物視覺的一種模擬;它的主要任務,是通過對採集的圖片或視頻進行處理,以獲得相應場景的三維信息。
在徐立的分享中,將計算機視覺的完整鏈條分為了三部分:成像(Image)、早期視覺(Early Vision)和識別理解(Recognition);本文將結合實際例子,談談AI產品經理在這三部分中可以關注的內容。
一、成像(Image)
成像是模擬相機原理,解決「怎樣把拍攝照片的質量進行提升」的問題。
我們在實際工業應用中經常發現,實際數據的質量遠遠差於實驗室數據,甚至在最開始訓練模型的時候會發現,實驗室模型在實際場景毫無效用。
經過多次試驗測試,我們發現影響圖像質量的因素大概有以下幾類:
1、光照影響
過暗或過亮等非正常光照環境,會對模型的效果產生很大幹擾。在解決光照影響這個問題上,可以通過兩種方式:
1)從產品角度控制
A)在用戶可以更換環境的前提下(比如手機自拍等),可語音/界面提示用戶目前環境不理想,建議換一個環境。
B)在用戶不能控制更換環境的情況下(比如人臉識別、車輛識別等攝像頭固定的場景),只能通過調試硬體設施彌補這個問題。
a)晚上。在工業上,我們碰到過曝或者過暗的情況更多是在晚上。由於攝像頭在晚上會自動切換到黑夜場景(從圖片上看就是從彩色切換為黑白),因此在晚上強光下(例如車燈照射)圖像就會過曝,這時,我們可以通過強制設置攝像頭環境為白天(圖像為彩色)來避免。而過暗的情況,從節省成本角度看,可以在攝像頭旁邊增加一個光線發散、功率不高的燈來彌補。當然這兩個問題也可以通過購買高質量的攝像頭解決,但這樣做也意味著更高的成本。
b)白天。白天也會出現光線過亮的情況,這種情況可以考慮用濾光片等等。
2)從演算法角度控制
用演算法將圖片進行處理,可以將圖片恢復得讓人眼看清的程度。徐立在文中用這樣一張圖片舉例:
這張圖片從暗到明,經過演算法的處理,我們可以顯而易見地觀察到整個圖片的內容。這個辦法非常靈活,但也對公司的演算法能力提出了更高的要求。我們知道,每一次演算法的過濾時間是非常重要的,如果在對時間要求非常嚴格的場景(人臉識別、車輛識別),這樣在識別之前還要對圖片進行轉化,無疑是增加了輸出結果的時間。技術實力不那麼強的公司可能是需要權衡一下的。
2、模糊(Blur)
模糊也是工業中經常遇到且令人十分頭痛的問題。這裡我們先將模糊分下類:
1)運動模糊:人體移動、車輛移動。
2)對焦模糊:攝像頭距離等因素構成,類似近視眼,圖像中低頻存在,高頻缺失。所以需要用演算法設法補齊高頻部分。
3)低解析度差值模糊:小圖放大等,圖像中低頻存在,高頻缺失。所以需要用演算法設法補齊高頻部分。
4)混合模糊:多種模糊類型共同存在。
對於模糊,產品上能控制的場景比較少,僅針對於第一種運動模糊且產品和用戶有交互的情況下才能做到。其他類型的模糊均需要採用演算法進行處理。
我們發現大多數模型(包括Face++等技術領先公司的模型),也會出現大量正常圖像被判為模糊。從演算法角度講這可能不是很理想,但從工業角度講這是可以被接受的,因為被誤判為模糊圖像的正常圖像會被過濾掉(或者經過演算法處理後再識別),這對用戶來說不會造成使用上的不適;而且我們也能保證閾值以上的圖都是正常圖片,對模型訓練來說也是有利的。所以,產品需要關注的精確率和召回率,在某種特定情況下其實是可以降低要求的。
影響圖像質量的因素除了光照、模糊之外,還有雜訊、解析度等等問題,這些問題大多也是從演算法和硬體上去優化,值得注意的是我之前提過的,需要考慮到時間和成本的權衡。
二、早期視覺(Early Vision)
Early Vision這部分,其實是我之前沒有注意的概念,看了徐立的分享,回頭才發現「哦!原來大家當時做的是這個部分的內容!」。
Early Vision主要是做哪些工作呢?主要是圖像分割、邊緣求取、運動和深度估計。這些內容其實沒有直接的結果應用,是一個「中間狀態」。
圖像分割,是指將特定的影像分割成【區域內部屬性一致】而【區域間不一致】的技術,是圖像處理中最基礎和最重要的領域之一。
圖像分割方法有很多種,比如灰度閾值分割的方法、邊緣檢測法和區域跟蹤等方法。很多種類的圖像或景物都有相對應的分割方式對其分割,但同時有些分割方法也僅限於某些特殊類型的圖像分割。另外,邊緣檢測,目的是找到圖像中亮度變化劇烈的像素點構成的集合,表現出來就是輪廓。
徐立提出了Early Vision目前的兩個問題:
1、結果不精確;
2、需要長時間的知識沉澱才能做到;
第一個問題的解決辦法是用端到端的方式,第二個問題的解決辦法可以依靠數據驅動。
這部分產品介入的比較少吧,平時跟演算法同事溝通,聽見比較多的反饋是在圖像分割上有一些缺陷。就像徐立說的,「怎麼樣用這種中間的結果去得到更好的應用,至今來說都是一個比較難回答的問題」,因此產品或許可以去考慮早期視覺直接應用的場景。
三、識別理解(Recognition)
識別理解,是把一張(輸入)圖對應到一張(輸出)圖,或者說一張(輸入)圖對應到一個中間結果。簡單來說就是把一張圖對應到一個文字或標籤。
這其中有兩個重要的因素:標籤、數據。這兩個因素廣度和精度越高,針對模型最後的識別效果就越好。
1、標籤
標籤的定義,其實也就是規則的定義;我在上一篇文章《AI產品經理需要了解的數據標註工作入門》里有提過,越精確的標籤肯定對模型的結果有利,但同時越精確的標籤意味著這類標籤下的數據量就會越少,產品也需要考慮到這個因素。還有一些會被主觀因素影響的標籤定義,比如顏值,每個人對顏值的評價都是不一樣的。徐立說,在他們的顏值模型里會分為「漂亮」「不漂亮」兩個標籤,主要是靠社交網站上的評分和明星與大眾的區別來標註。其實我以前也涉及過顏值的模型,在我的模型里對顏值更加細化了:有「好看/普通/丑」。除了根據社交網站打分、明星打分這種方式,我的經驗是關注數據的場景類型,很多數據被歸為一類都是場景相似的。比如如花,我們覺得丑吧?大多數男扮女的裝扮也都會被定義為丑。
另外細分標籤會有更多的落地可能性。我印象最深的,是一次「顏值模型」相關的節日運營活動,主題是「扮丑」,辦得越丑的人還會有小禮品;這個活動上線後,在友商的用戶圈內引起了很高的關注度。當時我接到這個活動的時候,思想其實是被顛覆的,因為我最開始認為顏值模型可能存在的場景主要是去識別美的人,比如在直播等平台中去區分主播的顏值、推薦更優質的主播上首頁等等後端的應用,沒有想過還能反著用。經過這個活動的啟發,後來我們也發現,顏值模型在娛樂性上可以有更多挖掘的可能性。
這樣看來,由於我們的模型多了一個標籤定義,就多了一種落地的可能性,標籤的重要性也就不言而喻了。
2、數據優化
數據的數量和質量對模型來說舉足重輕。最近剛接收到的重磅消息:阿法狗的弟弟阿法元沒有任何先驗知識的前提下,通過完全的自學,打敗了由數據訓練出來的阿法狗。我相信以後這個技術肯定會越來越多的應用,說不定以後確實在某些領域不利用海量數據也能完成模型訓練。但是就目前而言,在計算機視覺領域,數據的大量性是重中之重的。
大家肯定都知道,數據優化可以使模型越來越好。什麼類型的功能表現得不好,就要填補那些對應的數據。除了這個常識外,其實數據優化還可以用來解決我們經常在訓練過程中出現的問題——過擬合。
什麼是過擬合?通常來講,過擬合是模型把數據學習過深,數據中的細節和噪音也學習進去了,這樣就導致模型泛化的性能變差。過擬合的表現是,一個模型(一個假設)在訓練集上表現得很好,但是在測試集上表現得不是很好。
那該如何通過數據限制過擬合呢?
1)重新清洗數據。數據的噪音太多會影響到模型效果,清洗數據能夠把由於這個因素造成的過擬合問題規避。
2)增加訓練集的數據量,如果訓練集佔總數據的比例太少,也會造成過擬合。
當然也能通過演算法限制這個問題的,比如正則化方法和dropout法,以後有機會我們可以再深入討論。
四、項目實踐 (以車型識別為例)
車輛檢測系統下,有很多CV相關的應用,比如車型識別、車牌識別、車顏色識別等等。我們從車型識別這一個例子著手,探索項目的具體流程。
1、項目前期準備
1)數據準備
車型這個主題說大不大,說小不小。全世界的車輛品牌數目大約三四百個,每個品牌下面又有幾十種車系。我們從0開始立項,至少需要把常見的車輛車系都包含。像大眾、豐田、賓士、寶馬、奧迪、現代等等熱門車輛品牌更是需要拿全數據。每一種車型至少有車頭、車尾、車身三種基礎數據。
比如賓士C200:
這三張圖片代表了三種數據,不同場景下這三種數據的重要性大為不同。在項目前期,假設我們定下來識別車型這個需求主要應用場景是「停車場識別車輛」,那車頭這個數據相對而言就更加重要,需要花更多心思收集。為什麼呢?我們可以想像,停車場的車輛識別攝像頭為了捕捉車牌號,一般會將攝像頭正對車輛,攝像頭傳上來的數據很少會有純側面車身的數據甚至車尾數據。我們為了項目更快地應用落地,其他類型數據比較缺少的情況是可以暫時放下後期再做優化的。
在數據準備的過程中,首先需要通過爬蟲從網上爬取數據,再由人工篩選過濾出可用的數據,將數據統一整合,才能進行下一步工作。
2)文檔準備
A)數據標註文檔。包括我們項目一共所含多少鍾車型、每一種車型分別對應什麼樣式。數據標註中需要注意的問題,多輛車的圖片、角度刁鑽的圖片是否需要捨棄等等。
B)產品文檔。包括落地場景說明、需求說明文檔等常規文檔。這裡以工業車輛識別需求分析下的系統設計為例:
--演算法需求描述(識別的種類、範圍、速度、準確率、穩定性等等)
--攝像頭設備硬體需求描述、環境描述、數據傳送描述、攝像頭配置描述
--平台程序設計(車輛識別系統平台前後端設計)
--數據關聯描述(車輛信息分析統計關聯)
如果攝像頭在區域網,且有布控功能(識別車輛黑名單的需求)還需要:
--下發程序(考慮雲端到本地的圖像特徵下發)
--點播程序設計(可以從互聯網查看本地攝像頭)
簡單畫一下非區域網的系統架構:
2、項目流程跟蹤
1)軟硬體端:按照常規的軟硬體項目跟蹤開發
2)演算法:車型識別的流程基本如下:
A)車型圖像上傳:通過攝像頭/web上傳
B)圖像預處理:包含了上文成像部分中的模糊圖像恢復處理(運動模糊有快速演算法去模糊:通過已知速度V、位移S,確定圖像中任意點的值)
C)Early Vision中的圖像分割(將目標圖像從背景圖中標識出來,便於圖像識別,可以考慮邊緣檢測方法)、圖像二值化(將圖像中的像素點的灰度值設置為0或者255,使用輪廓跟蹤讓目標輪廓更為凸顯)
D)圖像特徵提取
E)特徵比對
3、項目測試
--攝像頭測試
--攝像頭與點播程序測試
--點播程序(可實時查看攝像頭的程序)與平台後台程序測試
--演算法與平台後台測試、備用介面測試
--模型識別時間測試
--模型識別準確率、召回率測試
--伺服器穩定性測試
--網路帶寬限制測試
--正反向測試
--其他平台、硬體產品常規測試
4、項目驗收
產品按照流程功能逐一驗收。
後記
今天,我從產品實踐角度梳理了計算機視覺的相關鏈條,裡面可能沒太多涉及演算法知識,我主要是想通過分享這些個人經歷給大家,產生更多產品上的碰撞。當然,在整個流程中還有很多有意思的事,大家可以多了解相關知識,也可以關注我的微信公眾號「AI產品的自我修養(AIAIjas)」,我們一起溝通交流:)
注1:「AI研習小分隊」,是「AI產品經理大本營」成員們一起研習AI、輸出乾貨的興趣小組。特別的,對於能夠持續總結分享乾貨文章的團員(每4周1篇),會成為「分享嘉賓」,在hanniman的公眾號/知乎等平台「首發」其文章。
如果你也是AI產品經理(或正在轉型)、也有興趣通過「主動輸出」來提高自己、結交牛人朋友,可以加入我們「AI產品經理大本營」 ,共同進步吧:)
注2:飯糰「AI產品經理大本營」 ,是黃釗hanniman建立的、行業內第一個「AI產品經理成長交流社區」,通過每天乾貨分享、每月線下交流、每季職位內推等方式,幫助大家完成「AI產品經理成長的實操路徑」,詳情可見 http://fantuan.guokr.net/groups/219/ 。
---------------------
作者:黃釗hanniman,圖靈機器人-人才戰略官,前騰訊產品經理,5年AI實戰經驗,8年互聯網背景,微信公眾號/知乎/在行ID「hanniman」,飯糰「AI產品經理大本營」,分享人工智慧相關原創乾貨,200頁PPT《人工智慧產品經理的新起點》被業內廣泛好評,下載量1萬+。
推薦閱讀:
※IROS2017筆記->Toward Unifying Model-based and Learning-based Robotics
※目標跟蹤---ECO: Efficient Convolution Operators for Tracking
※【目標跟蹤】使用深度特徵來跟蹤目標
※簡單易懂的講解深度學習(入門系列之陸)
※人臉識別中的活體檢測