簡介
COCO數據集,意為“Common Objects In Context”,是一組具有挑戰性的、高質量的計算機視覺數據集,是最先進的神經網絡,此名稱還用于命名這些數據集使用的格式。
COCO 是一個大規模的對象檢測、分割和字幕數據集。COCO有幾個特點_
- 對象分割
- 在上下文中識別
- 超像素素材分割
- 330K 圖像(> 200K 標記)
- 150 萬個對象實例
- 80 個對象類別
該數據集的格式可以被高級神經網絡庫自動理解,例如Facebook的Detectron2,甚至還有專門為處理 COCO 格式的數據集而構建的工具,例如COCO- annotator和COCOapi。了解此數據集的表示方式將有助于使用和修改現有數據集以及創建自定義數據集。具體來說,我們對注釋文件感興趣,是因為完整的數據集由圖像目錄和注釋文件組成,提供機器學習算法使用的元數據。
可以用COCO做什么?
實際上有多個 COCO 數據集,每個數據集都是為特定的機器學習任務創建的,并帶有附加數據。3個最受歡迎的任務是_
在計算機視覺中,這些任務有著巨大的用途,例如用于自動駕駛車輛(檢測人和其他車輛)、基于人工智能的安全性(人體檢測和/或分割)和對象重新識別(對象分割或實例分割去除背景有助于檢查對象身份)。
COCO數據格式
基本結構和常見元素_COCO 注釋使用的文件格式是 JSON,她有字典(大括號內的鍵值對{…})作為頂部值,她還可以有列表(括號內的有序項目集合,[…])或嵌套在其中的字典。
{ "info": {…}, "licenses": […], "images": […], "categories": […], "annotations": […]}
讓我們仔細看看基本結構中的每一個部分。
“info”部分_
該字典包含有關數據集的元數據,對于官方的 COCO 數據集,如下_
{ "description": "COCO 2017 Dataset", "url": "cocodataset.org", "version": "1.0", "year": 2017, "contributor": "COCO Consortium", "date_created": "2017/09/01"}
如我們所見,她僅包含基本信息,"url"值指向數據集官方網站(例如 UCI 存儲庫頁面或在單獨域中),這是機器學習數據集中常見的事情,指向他們的網站以獲取更多信息,例如獲取數據的方式和時間。
“licenses”部分_
以下是數據集中圖像許可的鏈接,例如知識共享許可,具有以下結構_
[ { "url": "creativecommons.org/licenses/by-nc-sa/2.0/", "id": 1, "name": "Attribution-NonCommercial-ShareAlike License" }, { "url": "creativecommons.org/licenses/by-nc/2.0/", "id": 2, "name": "Attribution-NonCommercial License" }, …]
這里要注意的重要一點是"id"字段_"images"字典中的每個圖像都應該指定其許可證的“id”。
在使用圖像時,請確保沒有違反其許可_可以在 URL 下找到全文。
如果我們決定創建自己的數據集,請為每個圖像分配適當的許可_如果我們不確定,最好不要使用該圖像。
“image”部分_
可以說是第二重要的,這本字典包含有關圖像的元數據_
{ "license": 3, "file_name": "000000391895.jpg", "coco_url": "images.cocodataset.org/train2017/000000391895.jpg", "height": 360, "width": 640, "date_captured": "2013–11–14 11:18:45", "flickr_url": "farm9.staticflickr/8186/8119368305_4e622c8349_z.jpg", "id": 391895}
接下來我們看一下這些字段_
"id"領域是最重要的領域,這是用于"annotations"識別圖像的編號,因此如果我們想識別給定圖像文件的注釋,則必須在"圖像"中檢查相應圖像文檔的“id”,然后在“注釋”中交叉引用她。
在官方COCO數據集中"id"與"file_name"相同。需要注意的是,自定義 COCO數據集可能不一定是這種情況!這不是強制的規則,例如由私人照片制成的數據集可能具有與沒有共同之處的原始照片名稱"id"。
"categories"部分_
本部分對于對象檢測和分割任務以及對于實例分割任務有點不同。
對象檢測/對象分割_
[ {"supercategory": "person", "id": 1, "name": "person"}, {"supercategory": "vehicle", "id": 2, "name": "bicycle"}, {"supercategory": "vehicle", "id": 3, "name": "car"}, … {"supercategory": "indoor", "id": 90, "name": "toothbrush"}]
這些是可以在圖像上檢測到的對象類別("categories"在 COCO 中是類別的另一個名稱,我們可以從監督機器學習中了解到)。
每個類別都有一個唯一的"id",她們應該在 [1,number of categories] 范圍內。類別也分為“超類別”,我們可以在程序中使用她們,例如,當我們不關心是自行車、汽車還是卡車時,一般檢測車輛。
實例分割_
[ {"supercategory": "textile", "id": 92, "name": "banner"}, {"supercategory": "textile", "id": 93, "name": "blanket"}, … {"supercategory": "other", "id": 183, "name": "other"}]
類別數從高開始以避免與對象分割沖突,因為有時這些任務可以一起執行。從 92 到 182 的 ID 是實際的背景素材,而 ID 183 代表所有其他沒有單獨類的背景紋理。
“annotations”部分_
這是數據集最重要的部分,其中包含對特定 COCO 數據集的每個任務至關重要的信息。
{ "segmentation": [[ 239.97, 260.24, 222.04, … ]], "area": 2765.1486500000005, "iscrowd": 0, "image_id": 558840, "bbox": [ 199.84, 200.46, 77.71, 70.88 ], "category_id": 58, "id": 156}
在處理人群圖像 ( "iscrowd": 1) 時,該"segmentation"部分可能會有所不同_
"segmentation":{ "counts": [179,27,392,41,…,55,20], "size": [426,640]}
這是因為對于許多像素,明確列出所有像素創建分割掩碼將占用大量空間,相反,COCO使用自定義的運行長度編碼(RLE)壓縮,這是非常有效的,因為分段掩碼是二進制的,僅0和1的RLE可能會將大小減小很多倍。
總結
我們探討了用于最流行任務的COCO數據集格式_對象檢測、對象分割和實例分割。COCO官方數據集質量高、規模大,適合初學者項目、生產環境和最新研究。我希望本文能夠幫助小伙伴理解如何解釋這種格式,并將其用于小伙伴的ML應用程序。