2020年10月16日 星期五

【AI HUB專欄】如何建立精準標註的電腦視覺資料集

 

圖/文 歐尼克斯實境互動工作室 許哲豪 2020/10/08

應用「深度學習」或「人工智慧」技術的朋友應該都知道,想要有好的成果必須建立在「算法(模型)」、「算力」、「資料(數據)集」及「領域知識」四大基礎之上,尤其在「監督式學習」領域下,乾淨及精準標註的資料集更是不可或缺。近年來「電腦視覺」及「自然語言處理(理解)」技術的突飛猛進,正是依靠巨量及標註品質良好的資料集。以下本文將先針對「電腦視覺」中常用的「影像分類(Image Classification)」、「物件偵測(定位)(Object Detection / Location)」、「語義(像素級)分割(Semantic Segmentation)」、「實例分割(Instance Segmentation)」、「全景分割(Panoptic Segmentation)」及「人體骨架(Human Skeleton)」等幾大領域作簡單的「任務定義」,接著再對常見的「資料集格式」、「標註形式」及「標註工具」逐一說明。


電腦視覺任務


如Fig. 1所示為常見的電腦視覺任務,以下簡單定義一下範圍,方便後續解釋資料集的表示方式及標註工具的使用方式。

*影像分類(Image Classification):一張影像中原則上只有一個主體物件(目標),且大小通常超過影像整體的一半面積,如Fig. 1a所示。若同時出現兩個以上不同類別物件時,影像分類可同時歸屬到各自分類。但這樣類型的影像最好不要出現在資料集中,以免影響訓練成果。


*物件偵測(定位)(Object Detection / Location):一張影像中可以同時出現多個物件,多個物件可以是相同類別或不同類別,大小、數量沒有限制,物件間甚至可以部份重疊、遮蔽,如Fig. 1b所示。每個物件所在的位置會以一個邊界框(Bounding Box)表示目標物件的大小(寬、高)、位置(X、Y座標)及類別名稱(Class or Label Name)。


*語義(像素級)分割(Semantic Segmentation):由於物件偵測只能粗略的得知位置及大小,無法得知物件真正的邊界所在,對於很多進階應用略嫌不足,因此可對每個像素進行分類,而不屬於任何一個分類的像素就歸入「背景」,如Fig. 1c所示。通常會以一張相同尺寸的影像來表示分割後結果,每個像素對應的數值即為對應的分類。但由於這些類別(ID)數值通常很小,所以有時會建立一組分類色彩對照表進行替換,方便人眼進行觀察。另外有時為了更清楚表示邊界所在位置,會額外增加一個「邊界」的類別。


*實例分割(Instance Segmentation):語義分割和實例分割都是屬於像素級分類,但主要是以可分類物件像素為主要對象。當面對多個相同類別物件重疊時,語義分割會把所有同類別的像素都歸到一起,如此就會造成難以區分個別物件大小、位置、個數及物體邊界,所以實例分割因此誕生,如Fig. 1d所示。通常實例分割也可像語義分割一樣,產生一張相同尺寸的影像,但因相同分類物件已重新賦予辨識碼(ID),所以其著色就和物件類別無關,且需另外產生一組對照表來表示色彩與類別及物件的關連。另外有時為了大量節省資料儲存空間,會改以封閉式多邊形甚至貝茲曲線(Bezier Curve)來近似物件的邊界,此時邊界的貼合度就會略微鬆散。


*全景分割(Panoptic Segmentation):此類影像分割原則上就是語義分割加上實例分割,如Fig. 1e所示。最常用於自駕車應用中的街景影像分割,它不像實例分割有很多無法分類的背景像素,而是會全部像素都進行分類,包括天空、道路等物件。


*人體骨架(Human Skeleton):主要標註人體重要關鍵(關節)點(Key Points)(如頭、肩、肘、腕、腰、膝、踝…),進而產生骨架(Skeleton),便於分析人體姿態及動作,如Fig. 1f所示。若再擴展至連續動作,則可用於行為分析、動作比對等應用。另外除了身體關鍵點外,亦可拓展至手指關節,應用於虛擬實境(VR)及擴增實境(AR)領域場景互動。此類應用可視為特殊物件偵測的延伸,因此每個關鍵點會產生一組座標及特殊名稱,但有時會受到遮蔽或截切(關鍵點超出影像範圍)影響,故需額外記錄相關資訊。


*其它任務:另外為了不同應用,可能會產生各種不同標註方式,如影像標題(Image Captions)、視頻動作(Actions)、關鍵點(Key Points)、場景(Scene)、表情、年齡、文字辨識(OCR),甚至擴展到3D點雲(Point Cloud)等更多應用,這裡就不一一說明。


Fig. 1 電腦視覺主要任務及標註方式。(a)原始影像/影像分類,(b)物件偵測/定位,(c)語義分割,(d)實例分割,(e)全景分割,(f)人體骨架/關鍵點。[1] [2] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

資料集格式


在電腦視覺領域中有幾大挑戰賽事,包括2005至2012年間的PASCAL VOC (The Pattern Analysis, Statical Modeling and Computational Learning Visual Object Classes)[3]、2010至2017年間的ILSVR(ImageNet Large Scale Visual Recognition Competition)[4]及2015年至今的微軟COCO(Microsoft Common Object in Context Challenges)[5]。由於這些賽事所制定的資料格式已普遍被大家採用,因此這些格式目前也成為主流的標註資料格式,包括了影像分類、物件偵測、語義分割、實例分割及人體骨架(關鍵點)等等。另外在物件偵測領域的YOLO(You Only Look Once)[6]也是大家最常用的資料格式之一,以下就簡單為大家說明一下這些常用資料集其主要特色及格式。

【PASCAL VOC】

由Mark Everingham和Luc van Gool等人創立,共有1萬7千多張影像,分為20類,標註內容包括影像分類、物件偵測、語義分割等。其標註資料主要採用XML格式,其影像分類及物件偵測標註格式大致如Fig. 2所示。而語義分割標註部份則採用PNG索引色(非一般RGB 24bit)檔案格式,影像大小和原影像相同,其索引值即為影像分類編號(ID),而另外以白色代表邊界、黑色代表背景(不屬任何一類),如Fig. 3所示。

Fig. 2 PASCAL VOC影像分類/物件偵測標註格式內容。[3] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

Fig. 3 PASCAL VOC語義分割資料格式。[3] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

【ImageNet】

由史丹佛李飛飛教授創立,共有超過1400萬張影像,透過Amazon Mechanical Turk外包協助下進行手動標註,包含2萬多個類別,超過100萬個物件偵測邊界框(Bounding Box)被標註。另外亦有提供場景分類的標註資料集。目前其資料採取階層式路徑存放影像及標註資料,需另外以程式建立對應關係。

【COCO】

由微軟創立,共有超過32萬張影像,包含91個類別,超過250萬個物件測邊界框被標註。而語義分割資料集,共分80類,超過20萬張標註影像,150萬標註物件。另外亦有提供超過25萬個人體骨架關鍵點資料集。其標註資料主要採用JSON格式,其資料格式內容如Fig. 4所示。

其中關於語義分割表示方式有兩種形式。第一種為封閉多邊形(Polygon),iscrowd要設為0,其內容為n邊形頂點座標的集合[X1, Y1, X2, Y2, …, Xn, Yn]。而當iscrowd設為1時,則採RLE (Run Length Encoding)壓縮方式來表示一張黑白圖像,其規則為黑(0)白(1)點數量交替表示。如[20736,2,453,…]即表示先20736個黑點,再2個白點,再453個黑點,如此反覆到影像結束,最後要再加上一個size來表示圖像真正尺寸。而不管是那一種,area都用來表示被多邊形包圍面積或白點數量。

Fig. 4 COCO標註資料格式。[5] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

另外關於人體骨架/關鍵點的標註方式,如Fig. 5所示。keypoints為一組長度3*K的數據,而K為關鍵點的數量,每個關鍵點分別用[X, Y, V]三個數值表示。其中V=0表示關鍵點沒標註,通常XY也會一起被標為0。而V=1表示有標註但被遮擋了。而V=2則表示有標註也可正常看見的關鍵點。正常情況下人體骨架有17組關鍵點,但遇到物件(人)較小時可能無法全部標註,此時num_keypoints會用來表示有被標註的關鍵點數量。另外在categories下的keypoints分別指定關鍵點的名稱,而skeleton則表明了各關鍵點的連結方式,如Fig. 5右側的小綠人所示。

Fig. 5 COCO人體骨架/關鍵點標註資料格式。[5] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

【YOLO】


由Joseph Redmon和Ali Farhadi創立,其模型因簡捷有力,且在物件偵測應用上效能頗佳,因此非常受到歡迎。該算法並不帶資料集,故不局限使用何種物件偵測資料集,包含VOC, ImageNet, COCO甚至自訂義的皆可。一張影像對應一個純文字型的txt格式標註檔,亦可從其它資料集標註檔案轉換過來。檔案中沒有多餘的描述,只用了五個元素表示一個物件:[物件分類編號ID] [物件中心X座標] [物件中心Y座標] [物件寬度佔比W] [物件高度佔比H],而其座標及尺寸採相對影像大小之浮點數,和其它資料集標註時多半採絕對尺寸有明顯不同,如Fig. 6所示。

Fig. 6 YOLO物件標註格式。[6] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

標註形式


從上述各種資料集的格式中可以得知不同電腦視覺任務所需的標註方式各有不同,以下就逐一說明。

  • 影像分類:需產生一文字標籤(Label)並依序加入指定檔案即可。
  • 物件偵測/定位:需產生多個邊界框(Bounding Box)分別記錄物件的位置、尺寸及分類標籤,如Fig. 7a所示。
  • 人體骨架/關鍵點:需記錄關鍵點(Keypoints)座標、標籤名稱及各關鍵點間連線(Edges / Lines),如Fig. 7b所示。
  • 語義/實例/全景分割:需要精準找出物件邊界(封閉區域)且賦予指定標籤及編號(ID),最後再以特殊格式圖檔輸出做為後續訓練及驗證依據,如Fig. 7d所示。為了達到此一目的,又可分為下列幾種作法。
  • 多邊形(Polygon):可點擊物件大概的輪廓邊界,雖較不精準,但操作速度較快,如Fig. 7e所示。但缺點是多個物件靠在一起時,大部份的工具都不支援邊界共用做法,因此容易導致多邊形之間會有重疊區域產生。
  • 貝茲曲線(Bezier Curve):和多形邊形一樣點擊物件大概的輪廓邊界,透過曲線擬合,可得到較圓滑且較貼近物件的邊界,如Fig. 7e所示。缺點就是一般資料集無法支援其表示方式需轉換到多邊形形式,故會自動產生較多的點座標。
  • 自由筆刷(Brush):直接像操作一般繪圖軟體的筆刷一樣,直接在影像上進行塗抹,直接產生對應的遮罩圖(Mask),甚至可以對封閉區域進行填充,如Fib. 7e所示。操作速度快,但對於較小或邊界很複雜的物件會很難取得精準的邊界。
  • 超像素合併(Superpixel Merge):利用超像素算法自動分割影像,依影像特性決定初始超像素數量,經計算後可得到較精準的邊界,如Fig. 7f所示。只是一般軟體未支援合併功能,需客製化或採用商業化軟體來完成合併及輸出。
  • 其它形式:有些軟體有提供圓形、橢圓形、可旋轉矩形等不同標註形式,但受限於大部份的標註格式都不相容,因此多半會轉換成多邊形式進行儲存。

Fig. 7 不同標註型式。(a)物件邊界框,(b)骨架關鍵點/連接線,(c)多邊形/貝茲曲線,(d)語義/實例/全像分割,(e)自由筆刷,(f)超像素合併。[7] (OmniXRI Oct. 2020整理繪製)(點擊圖放大)

標註工具


由於深度學習及人工智慧領域產出的相關模型及資料集格式多半由學術界在主導,因此相關標註工具多半也都可以在開源社群中找到。通常最基本的標註功能都有「影像分類」和「物件偵測」的邊界框(Bounding Box)。而有支援多邊形標註的通常都能應用在各種「影像分割」上。另外有些廠商為了滿足更大量、快速、精準及特殊領域(如醫學影像等)的標註工作,亦有推出一些付費版本的工具。以下就快速簡單介紹一下常見的標註工具。

【影像分類/物件偵測類】


RectLabel https://rectlabel.com/ (商業付費版)
可標註邊界框、多邊形、貝茲曲線、直線段、骨架/關鍵點、自由筆刷、超像素合併,可支援多種資料集格式輸入及輸出,包括CSV, COCO(json), VOC(xml), YOLO(txt), TFRecord等。

LabelImg https://github.com/tzutalin/labelImg
可標註邊界框,支援VOC, YOLO格式輸出。

Labelme https://github.com/wkentaro/labelme
可標註邊界框、圓形、多邊形、線段、點,亦能進行影片的標註,可支援VOC, COCO格式輸出。
Intel CVAT https://github.com/openvinotoolkit/cvat
可標註邊界框、多邊形、折線、點,可支援VOC, YOLO, COCO, TFrecord, MOT等格式。另有支援網路版本。

OpenCV SuperAnnotate Desktop https://opencv.org/superannotate-desktop/ (部份免費)
可標註邊界框、多邊形、圓形、折線、點,多邊形可共用邊界,對於視頻可進行多目標同步追蹤功能,可支援VOC, YOLO, COCO, TFrecord, VOTT, CVAT等格式。
 
labelbox https://github.com/Labelbox/Labelbox
可標註邊界框、多邊形、圓形、折線、點,可用WEB(JS+Html)介面、API標註,可支援VOC, COCO等格式。

Microsoft VoTT https://github.com/microsoft/VoTT
可標註邊界框、多邊形,具視頻目標追蹤功能,可支援VOC, COCO, CNTK, CSV, VoTT, TFRecord等格式。

 VGG Image Annotator (VIA) http://www.robots.ox.ac.uk/~vgg/software/via/
可標註邊界框、多邊形,對於視頻可進行多目標同步追蹤功能,可用WEB介面標註,可支援VOC, COCO等格式。


【影像分割類】

PixelAnnotationTool https://github.com/abreheret/PixelAnnotationTool
基於OpenCV分水嶺方式實現語義分割,分割結果以圖檔輸出。


superpixels-segmentation https://github.com/Labelbox/superpixels-segmentation
基於超像素SLIC方式實現影像分割,分割結果以圖檔輸出。


semantic-segmentation-editor https://github.com/Hitachi-Automotive-And-Industry-Lab/semantic-segmentation-editor
基於WEB的標註工具,主要用於自駕車領域,支援2D(jpg, png)、3D(pcd)影像檔,具多邊形繪圖工具、魔術棒等工具,亦可對多邊形進行切割等工作。

除了以上這些基本功能外,目前標註工作亦朝向異地、雲端、多人協作模式發展,標註人員可透過行動通訊裝置或網路進行認領工作及進行標註,多級審核人員亦可於網路上完成確認,AI模型訓練師也可直接取得已審核的標註資料集來進行優化。未來隨著已標註資料集的增加及模型的強化,半自動標註功能也會慢慢建全起來,以解決大量人力投入的問題。

小結


在非監督式學習尚未成熟前,擁有一個經過良好標註的資料集,對於監督式學習的訓練是非常重要的,透過上述的介紹後,大家應該能從不同應用中找到適合的標註工具。雖然目前一些較專業領域(如醫療、工業等)或影像分割這類應用,仍需投入更多的人力進行標註,但隨著更多專業標註廠商及工具的推進,相信不久的將來就能更快速、有效、精準地完成標註工作。

*本文同步發行於歐尼克斯實境互動工作室部落格(https://omnixri.blogspot.com)及AI HUB(https://aihub.org.tw),歡迎連結至AI HUB網站【社群互動】下【AI技術交流區(https://platform.aihub.com.tw/specialist)】瀏覽更多精采文章*

參考文獻


[1] Panoptic Segmentation
https://arxiv.org/abs/1801.00868

[2] CMU OpenPose Dataset
https://github.com/CMU-Perceptual-Computing-Lab/openpose

[3] Pascal VOC Dataset
http://host.robots.ox.ac.uk/pascal/VOC/

[4] ImageNet Dataset
http://www.image-net.org/

[5] Microsoft Common Objects in Context Dataset (MS COCO)
https://cocodataset.org

[6] YOLO: Real-Time Object Detection (Darknet)
https://pjreddie.com/darknet/yolo/

[7] RectLabel
https://rectlabel.com/

延伸閱讀


人工智慧下一個兵家必爭之地【AI市集】
https://omnixri.blogspot.com/2020/07/ai-hubai_20.html


沒有留言:

張貼留言

【頂置】簡報、源碼、系列文快速連結區

常有人反應用手機瀏覽本部落格時常要捲很多頁才能找到系列發文、開源專案、課程及活動簡報,為了方便大家快速查詢,特整理連結如下,敬請參考! Edge AI Taiwan 邊緣智能交流區 全像顯示與互動交流區 台科大(NTUST) 人工智慧與邊緣運算實務 開南大學...