譯者| 陳峻
#重樓| 審校
不知你是否注意到,資料集可能是機器學習專案中最容易被忽略的部分。在大多數人看來,資料集不過是一些快速拼湊、或已下載的預製圖像的集合。而實際上,資料集是任何基於影像的人工智慧(AI)專案的基石。對於任何旨在實現高準確性的機器學習專案來說,創建和管理一個平衡且結構合理的資料集,都是至關重要的。
不過,建立一個資料集並不像收集幾百張圖片那麼簡單。我們在嘗試啟動某個AI專案時,很可能會遇到各種隱患。下面,我將和您討論可用來建立自己的資料集的七個典型步驟,以便您深入了解資料集大小的重要性、可能出現的資料遺漏、以及將資料集轉換為資料庫等要素。
注意:這些步驟將主要適用於,那些針對包含了影像資料集的物件偵測和分類項目。而諸如 NLP 或圖形項目等其他項目類型,則需要採用不同的方法。
通常情況下,神經網路只能處理特定尺寸的影像,超過閾值的影像會被強制縮小。這意味著在使用資料集之前,我們需要選擇適合的神經網絡,並相應地調整圖像的尺寸
#如您所知,如果將圖像尺寸縮小,可能會導致精確度大幅下降,甚至使影像上的小物體消失,對整個辨識過程造成損害。如下所示,您需要在監視器拍攝的影像中偵測出車牌號碼,而車牌只佔整個影像的一小部分。因此,當神經網路對影像進行縮小處理時,車牌號碼可能會變得非常小,無法被辨識到
#如下圖所示,如果能夠了解網路可使用的圖像尺寸,將有助於您裁剪出適當的資料集圖像。
雖然大多數神經網路可處理的圖像尺寸都比較小,但是諸如 Yolo v5x6之類的最新神經網絡,則能夠處理更大解析度的影像。例如,Yolo v5xs6就能夠處理寬達 1280 像素的圖像。
為了確保資料集能夠準確反映神經網路在運行過程中所需識別的真實影像,我們在收集資料集時需要注意以下因素:
在清楚地了解了神經網路待處理的真實影像後,我們就能夠建立一個資料集,來準確地反映那些感興趣的對象、及其所處的環境。
收集Google上的普通圖片可能被認為是組成大型資料集最簡單、最快捷的方法。然而,這種方法實際上很難達到較高的精確度要求。如下圖所示,與真實相機拍攝的影像相比,Google或照片資料庫中的影像通常經過「美顏」處理
3:#格式與
#### ################我們需要注意的另一個重要面向是:圖片的格式。在開始專案之前,請檢查您選擇的框架能夠支援哪些格式,而您的圖片是否能夠符合此類要求。雖然目前的框架已能夠支援多種圖片格式,但是對於###### .jfif######等格式仍存在問題。 ############註解資料可以用來詳細說明邊界框、檔案名稱、以及可以採用的不同結構。通常,不同的神經網路和框架,需要不同的註釋方法。有些需要包含邊界框位置的絕對座標,有些則需要相對座標;有些要求每個圖像都附帶一個單獨的、包含了註釋的.txt 文件,而另一些僅需要一個包含了所有註釋的文件。可見,即使您的資料集擁有良好的圖像,如果您的框架無法處理註釋的話,也將無濟於事。
為了訓練的目的,通常將資料集分成兩個子集:
通常,神經網路會使用從訓練子集中提取到的物體特徵,來“學習”物體的外觀。也就是說,在一個訓練週期結束(歷時,epoch)後,神經網路會查看驗證子集的數據,並嘗試猜測它能夠 「看 #」到那些物體。無論是正確的、還是錯誤的猜測,其結構都能夠讓神經網路進一步深入學習。
雖然這種方法已被廣泛使用,並被證明能夠取得良好的效果,但我們更傾向於採用一種不同的方法,將數據集合分割為以下子集:
:資料遺漏
如果您使用來訓練機器學習演算法的資料中,恰好包含了您試圖預測的信息,那麼就可能發生資料外洩。如下圖所示,從影像辨識的角度來看,當訓練子集和驗證子集的相同物件的照片非常相似時,就會發生資料外洩。顯然,數據遺漏對於神經網路的品質來說是極為不利的。
本質上來說,模型在訓練資料集中看到了一幅圖像後,會先提取其特徵,然後進入驗證資料集,進而發現看到的完全相同(或非常相似)的圖像。因此,與其說模型在真實學習,不如說它只是在記憶各種資訊。有時,這會導致驗證資料集上的準確率,高得離譜(例如,可高達98%),但是在生產實際中的準確率卻非常低。 目前最常用的一種資料集分割方法是:將資料隨機打亂,然後選取前 70%
的圖片放入訓練子集,剩下的30%
###則放入驗證子集。這種方法就容易導致資料遺漏的產生。如下圖所示,我們的當務之急是從資料集中刪除所有「重複」的照片,並檢查兩個子集中是否有類似的照片。 #####################對此,我們可以使用簡單的腳本來自動執行重複刪除。當然,您可以調整重複閾值,例如:只刪除完全重複的圖片、或相似度高達到 90% 的圖片等。總的說來,只要刪除的重複內容越多,神經網路的生產精度就會越高。
如果您的資料集相當大,例如:超過 10萬 圖片、以及具有數十個物件類別與子類別的話,我們建議您建立一個簡單的資料庫,來儲存資料集資訊。這背後的原因其實非常簡單:對於大型資料集而言,我們很難追蹤所有的資料。因此,如果不對資料進行某種結構化的處理,我們將無法對其進行準確分析。
透過資料庫,您可以快速地診斷資料集,進而發現諸如:特定類別的圖片數量過少,會導致神經網路難以辨識出物件;類別之間的圖片分佈不夠均勻;特定類別中的Google圖片數量過多,導致該類別的準確率得分過低等情況。
透過簡單的資料庫,我們可以包含以下資訊:
##物件類型、名稱等物件相關資訊
# 7
## :資料集增強
作為一種用於增加影像數量的技術,資料增強是對資料進行簡單或複雜轉換的過程,例如透過翻轉或樣式轉化,我們可以提高資料的有效性。而據此獲得的有效資料集,則無需經歷過多的訓練。如下圖所示,此類資料轉換既可以是簡單到僅將影像旋轉 90 #度,也可以複雜到在影像中添加太陽耀斑、以模仿背光照片或鏡頭耀斑。
訓練內增強的-
# 採用類似###### PyTorch######的框架內建影像變換技術。 #####################值得注意的是,資料集的大小增加十倍,並不會讓神經網路的效率提高十倍。事實上,這反而可能會使網路的效能比以前更差。因此,我們應只使用與生產環境相關的增強功能。例如,對於被安裝在建築物內的攝影機,在其正常運作的情況下,是不會出現雨淋的。因此我們完全沒有必要在影像中加入針對「雨景」的增強。 #############儘管對於那些希望將AI應用到業務中的人來說,資料集是最不令人興奮的部分。但不可否認的是,資料集是任何影像辨識項目中的重要部分。而且在大多數影像辨識專案中,資料集的管理和整理,往往會花費團隊大量的時間。最後,讓我們小結一下,該如何透過適當地處置資料集,以便從AI專案中獲得最佳結果:
#陳峻(Julian Chen),51CTO社群編輯,具有十多年的IT專案實施經驗,善於對內部和外部資源與風險實施管控,專注於傳播網路與資訊安全知識與經驗。
原文標題:7 Steps To Prepare A Dataset For An Image-Based AI Project#,作者:Oleg Kokorin
以上是準備圖像AI專案資料集的七個步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!