一、前言
之前有一段時間在負責以圖搜圖項目的測試工作,接到這個項目的時候 有點懵,不知道從何開始,咨詢了公司同一條業務線的大佬們,都沒有接過這種算法項目,沒辦法,只能趕鴨子上架,自行百度查找各種AI算法相關的測試知識,所以想記錄一下整個項目過程,以及通過這個項目學習到的一些算法相關的皮毛知識 ,整篇屬於比較理論。
二、需求分析過程
1、了解需求
整個需求分析過程,總的來說,一頭霧水,沒有需求文檔,以口相授,即是以圖搜圖,類似百度識圖,可以搜索出相似的圖片,所以我百度了下以圖搜圖的概念。
“以圖搜圖”正式的名稱應該叫“相似圖像搜索引擎”,也稱為“反向圖片搜索引擎”。最初的圖像搜索引擎是基於文本關鍵字檢索的,比如圖像的文件名和路徑名、圖像周圍的文本,以及Alt標簽中的注釋索引,然而有時圖像周邊的這些文本信息和圖像並沒有關系,會造成搜索出來的部分圖像結果和查詢關鍵詞並不一致,所以為了提高准確率,同時也隨着人工智能(特別是深度學習理論和技術)的發展,諸多主流圖像搜索引擎紛紛引入了深度學習算法來提高圖像搜索的准確率,像日常使用的百度、搜狗等通用搜索引擎均提供了相似圖像檢索功能,淘寶、京東等電商平台也利用自己龐大的商品圖像庫開發了垂直領域內的圖像檢索功能來滿足消費者們不易用文字描述的商品搜索需求。
而我所要負責的項目,即是類似淘寶的圖像檢索,主要用於搜索衣服的布料圖片,算是有自己的布料商品圖像庫吧。
2、算法是如何實現的
整個模型預測流程是怎么樣的?數據是如何處理的?用的是什么算法?下面貼2張網上的算法內容圖

圖1:機器學習
圖2:深度學習
以圖搜圖的關鍵技術叫做“感知哈希算法”,這是一個很簡單且快速的算法,其原理在於針對每一張圖片都生成一個特定的“指紋”,然后采取一種相似度的度量方式得出兩張圖片的近似程度。圖3是圖像搜索引擎架構圖,用於生成特征索引庫的圖像數據集,盡量擴充用於構建特征索引庫的數據集的規模和覆蓋面,使其有一定的廣度和深度,收集一定量的垂直領域數據集來微調模型,使提取的特征更加符合該領域的特點。


圖3:圖像搜索引擎架構
3、測試人員需要給出的評價指標
領導靈魂拷問"如何判斷搜出來的數據是准確的?",“有沒有什么指標可以衡量?”,個人比較膚淺地認為,能搜出相似圖片即可(比較主觀)
三、測試流程
前面粗略了解完需求后,算法工程師需要測試去配合他們優化新開發的“圖像搜索引擎”,如圖4是大致的測試流程。然而針對流程中的幾個環節,又開始着手准備進入掃盲階段了。

圖4:圖像搜索引擎優化流程

四、數據標注
這個階段其實是准備圖片數據集給算法工程師訓練模型,一般算法工程師會將整個數據集,自己划分為訓練集、驗證集、測試集。或者訓練集、驗證集 等等。
1、什么是數據標注
數據標注是通過數據加工人員借助類似於BasicFinder或labelImg這樣的標記工具,對人工智能學習數據進行加工的一種行為。通常數據標注的類型包括:圖像標注、語音標注、文本標注、視頻標注等種類。標記的基本形式有標注畫框、3D畫框、文本轉錄、圖像打點、目標物體輪廓線等。
類比機器學習,我們要教他認識一個蘋果,你直接給它一張蘋果的圖片,它是完全不知道這是個啥玩意的。我們得先有蘋果的圖片,上面標注着“蘋果”兩個字,然后機器通過學習了大量的圖片中的特征,這時候再給機器任意一張蘋果的圖片,它就能認出來了。
機器學習分為有監督學習和無監督學習,無監督學習的效果是不可控的,常常是被用來做探索性的實驗。而在實際產品應用中,通常使用的是有監督學習,有監督的機器學習就需要有標注的數據來作為先驗經驗。
2、訓練集和測試集的概念
訓練集和測試集都是標注過的數據,還是以蘋果為例子,假設我們有1000張標注着“蘋果”的圖片,那么我們可以拿900漲作為訓練集,100張作為測試集。機器從900張蘋果的圖片中學習得到一個模型,然后我們將剩下的100張機器沒有見過的圖片去給它識別,然后我們就能夠得到這個模型的准確率了。
3、數據收集方向
思考什么情況下可能會影響到算法識別,所以需要考慮以下問題:
- 需要什么樣的測試數據——真實用戶場景:商品庫包含純色面料和花型圖
- 測試數據要多少,照片數據覆蓋是否全面——覆蓋純色面料圖和花型圖
- 測試數據的數量和訓練數據的比例合理——當數據量比較小時,可以使用 7 :3 訓練數據和測試數據
- (西瓜書中描述 常見的做法是將大約 2/3 ~ 4/5 的樣本數據用於訓練,剩余樣本用於測試)
4、測試數據的標注
- 純色面料圖:每組3-5張圖片,共20組左右
- 花型圖:每組花型包含3-5張圖片,共500組左右
- 不分組:200張圖片左右,包含純色和花型圖
五、模型訓練
一般情況下,模型訓練是由算法部門來進行完成的,對於模型訓練來說,產品方一定要給到具體的需求,這樣既可以提高效率,也能夠增加准確率。
六、模型測試
1、模型測試指標
- 精確率:識別為正確的樣本數/識別出來的樣本數
- 召回率:識別為正確的樣本數/所有樣本中正確的數
2、測試腳本
測試腳本主要功能:批量運行所有測試數據,記錄模型預測值,和標注值進行,計算得出評價指標。
3、競品對比測試
跟百度識圖進行對比測試:
- 通過百度識圖拿到的圖片數據,進行數據清洗
- 將清洗過的圖片數據,生成商品庫數據
- 后台成功建立特征索引庫后,在圖像識別工具進行搜索,將搜索的結果跟百度識圖進行對比
- 最后將對比結果反饋給開發
4、結果分析
查看評價指標。
七、產品評估&上線
不管是機器學習,推薦系統,圖像識別還是自然語言處理,都需要有一定量的測試數據來進行運行測試。
算法測試的核心是對學習器的泛化誤差進行評估。為此是使用測試集來測試學習器對新樣本的差別能力。然后以測試集上的測試誤差作為泛化誤差的近似。測試人員使用的測試集,只能盡可能的覆蓋正式環境用戶產生的數據情況。正式環境復雜多樣的數據情況,需要根據上線后,持續跟進外網數據。算法模型的適用性一定程度上取決於用戶數據量,當用戶量出現大幅增長,可能模型會隨着數據的演化而性能下降,這時模型需要用新數據來做重新訓練。