譯者 | 陳峻
審校 | 重樓
不知你是否注意到,數(shù)據(jù)集可能是機(jī)器學(xué)習(xí)項(xiàng)目中最容易被忽視的部分。在大多數(shù)人看來,數(shù)據(jù)集不過是一些快速拼湊、或已下載的預(yù)制圖像的集合。而實(shí)際上,數(shù)據(jù)集是任何基于圖像的人工智能(AI)項(xiàng)目的基石。對(duì)于任何旨在實(shí)現(xiàn)高準(zhǔn)確性的機(jī)器學(xué)習(xí)項(xiàng)目來說,創(chuàng)建和管理一個(gè)平衡且結(jié)構(gòu)合理的數(shù)據(jù)集,都是至關(guān)重要的。
不過,創(chuàng)建一個(gè)數(shù)據(jù)集并不像收集幾百張圖片那么簡單。我們?cè)趪L試啟動(dòng)某個(gè)AI項(xiàng)目時(shí),很可能會(huì)遇到各種隱患。下面,我將和您討論可用來創(chuàng)建自己的數(shù)據(jù)集的七個(gè)典型步驟,以便您深入了解數(shù)據(jù)集大小的重要性、可能出現(xiàn)的數(shù)據(jù)遺漏、以及將數(shù)據(jù)集轉(zhuǎn)化為數(shù)據(jù)庫等要素。
注意:這些步驟將主要適用于,那些針對(duì)包含了圖像數(shù)據(jù)集的對(duì)象檢測(cè)和分類項(xiàng)目。而諸如 NLP 或圖形項(xiàng)目等其他項(xiàng)目類型,則需要采用不同的方法。
步驟 1:圖像大小
通常,神經(jīng)網(wǎng)絡(luò)僅能處理特定的圖像大小,而任何超過閾值的圖像都會(huì)被強(qiáng)制縮小。也就是說,在使用數(shù)據(jù)集之前,我們需要選擇合適的神經(jīng)網(wǎng)絡(luò),并對(duì)圖像大小做相應(yīng)的調(diào)整。
如您所知,圖像尺寸的縮小可能會(huì)導(dǎo)致精確度大幅下降,讓圖片上小的物體消失,進(jìn)而對(duì)整個(gè)識(shí)別過程造成損害。如下圖所示,您需要在監(jiān)控?cái)z像頭所拍攝到的圖像上檢測(cè)出汽車牌號(hào)碼。而車牌只占有整個(gè)圖像的一小部分。那么當(dāng)神經(jīng)網(wǎng)絡(luò)對(duì)圖像進(jìn)行縮小處理時(shí),車牌號(hào)就可能因?yàn)樽兊梅浅P?,而無法被識(shí)別到。
如下圖所示,如果能夠了解網(wǎng)絡(luò)可使用的圖像尺寸,將有助于您裁剪出適當(dāng)?shù)臄?shù)據(jù)集圖像。
雖然大多數(shù)神經(jīng)網(wǎng)絡(luò)可處理的圖像尺寸都比較小,但是諸如 Yolo v5x6之類的最新神經(jīng)網(wǎng)絡(luò),則能夠處理更大分辨率的圖像。例如,Yolo v5xs6就能夠處理寬達(dá) 1280 像素的圖像。
步驟 2:了解您的環(huán)境
為了讓數(shù)據(jù)集能夠反映神經(jīng)網(wǎng)絡(luò)在運(yùn)行過程中待識(shí)別的真實(shí)圖像,我們?cè)谑占瘮?shù)據(jù)集時(shí),需要注意如下因素:
- 攝像頭的類型,是智能手機(jī)攝像頭,還是安全攝像頭
- 圖像的大小
- 攝像頭的位置,是在室內(nèi),還是室外
- 天氣條件,如光照、雨、霧、雪等。
在清楚了解了神經(jīng)網(wǎng)絡(luò)待處理的真實(shí)圖像后,我們就能夠創(chuàng)建一個(gè)數(shù)據(jù)集,來準(zhǔn)確地反映那些感興趣的對(duì)象、及其所處的環(huán)境。
您可能會(huì)直觀地認(rèn)為收集谷歌上的普通圖片,可能是組建大型數(shù)據(jù)集的最簡單、最快捷的方法。但是由此所產(chǎn)生的系統(tǒng),實(shí)際上很難達(dá)到較高的精確度要求。如下圖所示,與真實(shí)相機(jī)所拍攝的圖像相比,谷歌或照片數(shù)據(jù)庫中的圖像通常是被“美顏”過的。
而一個(gè)過于“漂亮”的數(shù)據(jù)集,很可能會(huì)導(dǎo)致較高的測(cè)試準(zhǔn)確率。這意味著,神經(jīng)網(wǎng)絡(luò)將僅能在測(cè)試數(shù)據(jù)(從數(shù)據(jù)集中提純過的圖像集合)上良好運(yùn)行,但在真實(shí)條件下運(yùn)行不佳,并導(dǎo)致準(zhǔn)確率低下。
步驟 3:格式和注釋
我們需要注意的另一個(gè)重要方面是:圖片的格式。在開始項(xiàng)目之前,請(qǐng)檢查您選擇的框架能夠支持哪些格式,而您的圖片是否能夠符合此類要求。雖然當(dāng)前的框架已能夠支持多種圖片格式,但是對(duì)于 .jfif等格式仍存在問題。
注釋數(shù)據(jù)可以被用來詳細(xì)地說明邊界框、文件名、以及可以采用的不同結(jié)構(gòu)。通常,不同的神經(jīng)網(wǎng)絡(luò)和框架,需要不同的注釋方法。有些需要包含邊界框位置的絕對(duì)坐標(biāo),有些則需要相對(duì)坐標(biāo);有些要求每幅圖像都附帶有一個(gè)單獨(dú)的、包含了注釋的.txt 文件,而另一些僅需要一個(gè)包含了所有注釋的文件。可見,即使您的數(shù)據(jù)集擁有良好的圖像,如果您的框架無法處理注釋的話,也將無濟(jì)于事。
步驟 4:訓(xùn)練和驗(yàn)證子集
出于訓(xùn)練目的,數(shù)據(jù)集通常被分成兩個(gè)子集:
- 訓(xùn)練子集- 它是一組圖像。神經(jīng)網(wǎng)絡(luò)將會(huì)在這組圖像上進(jìn)行訓(xùn)練。其占比為圖像總數(shù)的 70% 至 80%。
- 驗(yàn)證子集- 是用于檢查神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中學(xué)習(xí)效果的較小圖像集。其占比為圖像總數(shù)的 20% 到 30% 之間。
通常,神經(jīng)網(wǎng)絡(luò)會(huì)使用從訓(xùn)練子集中提取到的物體特征,來“學(xué)習(xí)”物體的外觀。也就是說,在一個(gè)訓(xùn)練周期結(jié)束(歷時(shí),epoch)后,神經(jīng)網(wǎng)絡(luò)會(huì)查看驗(yàn)證子集的數(shù)據(jù),并嘗試猜測(cè)它能夠 “看 ”到那些物體。無論是正確的、還是錯(cuò)誤的猜測(cè),其結(jié)構(gòu)都能夠讓神經(jīng)網(wǎng)絡(luò)進(jìn)一步去深入學(xué)習(xí)。
雖然這種方法已被廣泛使用,并被證明能夠取得良好的效果,但我們更傾向于采用一種不同的方法,將數(shù)據(jù)集劃分為如下子集:
- 訓(xùn)練子集 - 占圖像總數(shù)的 70%
- 驗(yàn)證子集 - 占圖像總數(shù)的 20%
- 測(cè)試數(shù)據(jù)集 - 約占圖像總數(shù)的10%
由于測(cè)試子集包含了神經(jīng)網(wǎng)絡(luò)從未見過的數(shù)據(jù)集中的圖像,因此開發(fā)人員可以通過該子集來測(cè)試模型,以了解其手動(dòng)運(yùn)行的效果,以及在處理哪些圖像時(shí)會(huì)遇到困難。換句話說,該子集將有助于在項(xiàng)目啟動(dòng)前,找出神經(jīng)網(wǎng)絡(luò)可能犯錯(cuò)的地方,進(jìn)而避免在項(xiàng)目啟動(dòng)之后,進(jìn)行過多的重新訓(xùn)練。
步驟 5:數(shù)據(jù)遺漏
如果您用來訓(xùn)練機(jī)器學(xué)習(xí)算法的數(shù)據(jù)中,恰好包含了您試圖預(yù)測(cè)的信息,那么就可能發(fā)生數(shù)據(jù)泄露。如下圖所示,從圖像識(shí)別的角度來看,當(dāng)訓(xùn)練子集和驗(yàn)證子集中的同一對(duì)象的照片非常相似時(shí),就會(huì)發(fā)生數(shù)據(jù)泄露。顯然,數(shù)據(jù)遺漏對(duì)于神經(jīng)網(wǎng)絡(luò)的質(zhì)量來說是極為不利的。
從本質(zhì)上說,模型在訓(xùn)練數(shù)據(jù)集中看到了一幅圖像后,會(huì)先提取其特征,然后進(jìn)入驗(yàn)證數(shù)據(jù)集,進(jìn)而發(fā)現(xiàn)看到的完全相同(或非常相似)的圖像。因此,與其說模型在真實(shí)學(xué)習(xí),不如說它只是在記憶各種信息。有時(shí),這會(huì)導(dǎo)致驗(yàn)證數(shù)據(jù)集上的準(zhǔn)確率,高得離譜(例如,可高達(dá) 98%),但是在生產(chǎn)實(shí)際中的準(zhǔn)確率卻非常低。
目前最常用的一種數(shù)據(jù)集分割方法是:將數(shù)據(jù)隨機(jī)打亂,然后選取前 70% 的圖像放入訓(xùn)練子集,剩下的 30% 則放入驗(yàn)證子集。這種方法就容易導(dǎo)致數(shù)據(jù)遺漏的產(chǎn)生。如下圖所示,我們的當(dāng)務(wù)之急是從數(shù)據(jù)集中刪除所有“重復(fù)”的照片,并檢查兩個(gè)子集中是否存在相似的照片。
對(duì)此,我們可以使用簡單的腳本來自動(dòng)執(zhí)行重復(fù)刪除。當(dāng)然,您可以調(diào)整重復(fù)閾值,比如:只刪除完全重復(fù)的圖片、或相似度高達(dá)到 90% 的圖片等??偟恼f來,只要?jiǎng)h除的重復(fù)內(nèi)容越多,神經(jīng)網(wǎng)絡(luò)的生產(chǎn)精度就會(huì)越高。
步驟 6:大型數(shù)據(jù)集數(shù)據(jù)庫
如果您的數(shù)據(jù)集相當(dāng)大,例如:超過 10萬 幅圖像、以及具有幾十個(gè)對(duì)象類與子類的話,我們建議您創(chuàng)建一個(gè)簡單的數(shù)據(jù)庫,來存儲(chǔ)數(shù)據(jù)集信息。這背后的原因其實(shí)非常簡單:對(duì)于大型數(shù)據(jù)集而言,我們很難跟蹤所有的數(shù)據(jù)。因此,如果不對(duì)數(shù)據(jù)進(jìn)行某種結(jié)構(gòu)化的處理,我們將無法對(duì)其進(jìn)行準(zhǔn)確分析。
通過數(shù)據(jù)庫,您可以快速地診斷數(shù)據(jù)集,進(jìn)而發(fā)現(xiàn)諸如:特定類別的圖片數(shù)量過少,會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)難以識(shí)別出對(duì)象;類別之間的圖片分布不夠均勻;特定類別中的谷歌圖片數(shù)量過多,導(dǎo)致該類別的準(zhǔn)確率得分過低等情況。
通過簡單的數(shù)據(jù)庫,我們可以包含如下信息:
- 文件名
- 文件路徑
- 注釋數(shù)據(jù)
- 類數(shù)據(jù)
- 數(shù)據(jù)源(源自生產(chǎn)環(huán)境、還是谷歌等)
- 對(duì)象類型、名稱等對(duì)象相關(guān)信息
可以說,數(shù)據(jù)庫是收集數(shù)據(jù)集統(tǒng)計(jì)數(shù)據(jù)不可或缺的工具。它可以協(xié)助我們快速、輕松地查看到數(shù)據(jù)集的平衡程度,以及每個(gè)類別中有多少高質(zhì)量(從神經(jīng)網(wǎng)絡(luò)的角度來看)的圖像。根據(jù)類似如下直觀呈現(xiàn)出來的數(shù)據(jù),我們可以更快地進(jìn)行分析,并將其與識(shí)別的結(jié)果進(jìn)行比較,從而找出準(zhǔn)確率低下的根本原因。
值得注意的是,準(zhǔn)確率低下的一個(gè)原因,可能源于圖片數(shù)量較少、或某一類中谷歌照片的比例較高。而通過創(chuàng)建此類數(shù)據(jù)庫,則可以大幅減少生產(chǎn)、測(cè)試、以及模型再訓(xùn)練的時(shí)間。
步驟 7:數(shù)據(jù)集增強(qiáng)
作為一種用于增加圖像數(shù)量的技術(shù),數(shù)據(jù)增強(qiáng)是對(duì)數(shù)據(jù)進(jìn)行簡單或復(fù)雜轉(zhuǎn)換的過程,例如通過翻轉(zhuǎn)或樣式轉(zhuǎn)化,我們可以提高數(shù)據(jù)的有效性。而據(jù)此獲得的有效數(shù)據(jù)集,則無需經(jīng)歷過多的訓(xùn)練。如下圖所示,此類數(shù)據(jù)轉(zhuǎn)換既可以是簡單到僅將圖像旋轉(zhuǎn) 90 度,也可以復(fù)雜到在圖像中添加太陽耀斑、以模仿背光照片或鏡頭耀斑。
通常,此類增強(qiáng)轉(zhuǎn)化都是自動(dòng)執(zhí)行的。例如,我們可以準(zhǔn)備一個(gè)專門用于數(shù)據(jù)增強(qiáng)的 Python 庫。目前,數(shù)據(jù)增強(qiáng)有兩種類型:
- 訓(xùn)練前增強(qiáng)- 在訓(xùn)練過程開始之前,對(duì)數(shù)據(jù)進(jìn)行擴(kuò)增,并將其添加到訓(xùn)練子集中。當(dāng)然,只有在數(shù)據(jù)集被劃分為訓(xùn)練子集和驗(yàn)證子集之后,我們才能進(jìn)行此類增加,以避免出現(xiàn)前文提到的數(shù)據(jù)遺漏。
- 訓(xùn)練內(nèi)增強(qiáng)- 采用類似 PyTorch的框架內(nèi)置圖像變換技術(shù)。
值得注意的是,將數(shù)據(jù)集的大小增加十倍,并不會(huì)使得神經(jīng)網(wǎng)絡(luò)的效率提高十倍。事實(shí)上,這反而可能會(huì)使網(wǎng)絡(luò)的性能比以前更差。因此,我們應(yīng)當(dāng)只使用與生產(chǎn)環(huán)境相關(guān)的增強(qiáng)功能。例如,對(duì)于被安裝在建筑物內(nèi)的攝像機(jī),在其正常運(yùn)行的情況下,是不會(huì)出現(xiàn)雨淋的。因此我們完全沒有必要在圖像中添加針對(duì)“雨景”的增強(qiáng)。
小結(jié)
盡管對(duì)于那些希望將AI應(yīng)用到業(yè)務(wù)中的人們來說,數(shù)據(jù)集是最不令人興奮的部分。但不可否認(rèn)的是,數(shù)據(jù)集是任何圖像識(shí)別項(xiàng)目中的重要部分。而且在大多數(shù)圖像識(shí)別項(xiàng)目中,數(shù)據(jù)集的管理和整理,往往會(huì)花費(fèi)團(tuán)隊(duì)大量的時(shí)間。最后,讓我們小結(jié)一下,該如何通過恰當(dāng)?shù)靥幹脭?shù)據(jù)集,以便從AI項(xiàng)目中獲得最佳結(jié)果:
- 裁剪或調(diào)整圖像的大小,以滿足神經(jīng)網(wǎng)絡(luò)的要求
- 根據(jù)天氣和照明條件,采集真實(shí)圖像
- 根據(jù)神經(jīng)網(wǎng)絡(luò)的要求,構(gòu)建注釋
- 避免使用所有的圖像來訓(xùn)練網(wǎng)絡(luò)。而需留一部分用于測(cè)試
- 刪除驗(yàn)證數(shù)據(jù)集中的重復(fù)圖像,以避免數(shù)據(jù)遺漏
- 創(chuàng)建數(shù)據(jù)庫,以快速診斷數(shù)據(jù)集
- 盡量少用數(shù)據(jù)增強(qiáng),來增加圖像數(shù)量
譯者介紹
陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn)。
原文標(biāo)題:7 Steps To Prepare A Dataset For An Image-Based AI Project,作者:Oleg Kokorin