coco关键点标注json_COCO 数据集中目标检测标注说明
此篇文章會不斷補充內容,建議長期關注。最后更新日期為2018年11月25日。
需要用到的工具:
UltraEdit
Git
Python ,包含 jupyter notebook,以及其它必要的包
Adobe Photoshop CC
目前官方 API 只提供了 Lua 腳本、Python 腳本和 Matlab 腳本的編程接口,暫時沒有適配 .net 框架的接口。其中只有 Matlab 腳本才能使用 analyze() 函數對評估結果進行分析。
coco 數據集有五種標注類型,分別是“目標檢測”、“關鍵點檢測”、“素材分割”、“全景分割”和“圖像說明”。標注信息使用 JSON 格式存儲。請注意,下載頁面上描述的 COCO API 可用于訪問和操作所有“標注”。 所有“標注”都具有下面相同的基本數據結構:
{
"info" : info,
"images" : [image],
"annotations" : [annotation],
"licenses" : [license],
}
info{
"year" : int,
"version" : str,
"description" : str,
"contributor" : str,
"url" : str,
"date_created" : datetime,
}
image{
"id" : int,
"width" : int,
"height" : int,
"file_name" : str,
"license" : int,
"flickr_url" : str,
"coco_url" : str,
"date_captured" : datetime,
}
license{
"id" : int,
"name" : str,
"url" : str,
}
接下來只描述“對象檢測”的特定格式:
一、對象檢測
每個對象實例的標注都包含一系列字段,包括對象的類別ID(category_id)和分段掩碼(segmentation)。 分段格式取決于實例是表示單個對象(iscrowd = 0,在這種情況下使用多邊形)還是對象集合(iscrowd = 1,在這種情況下使用RLE)。 請注意,單個對象(iscrowd = 0)可能需要多個多邊形,例如,如果被遮擋。 人群注釋(iscrowd = 1)用于標記大組對象(例如一群人)。 此外,為每個對象提供一個封閉的邊界框(框坐標是從左上角的圖像角測量的,并且是0索引的)。 最后,標注結構的 categories 字段存儲 category id 到 category 和 supercategory 名稱的映射。 另請參閱檢測任務。
annotation{
"id" : int,
"image_id" : int,
"category_id" : int,
"segmentation" : RLE or [polygon],
"area" : float,
"bbox" : [x,y,width,height],
"iscrowd" : 0 or 1,
}
categories[{
"id" : int,
"name" : str,
"supercategory" : str,
}]
TODO:其它四種格式的說明。
對象檢測 JSON 結構總覽
其中,info、licenses、images、annotations 和 categories 均為數組。
二、對象檢測示例
COCO 數據集提供了應用程序編程接口和使用實例,并托管在了 GitHub 倉庫中。
點擊此處訪問 COCO API 的倉庫。
點擊此處訪問 COCO API 使用示例。
以上使用示例中未曾提到邊界框屬性(bbox),以下將演示如何使用邊界框屬性。
以2017年的驗證集中編號為174482的圖片為例(如果沒有2017年的數據集,可以點擊下方鏈接下載完整壓縮包,或只單獨下載某張圖片):
圖片正中央為自行車。
打開 標注壓縮包,找到instance_val2017.json文件中第一個圖片編號為174482的標注屬性,如下所示:
圖片編號為174482的第一個標注。
該段內容中 “segmentation” 屬性太長,故折疊。
其中“bbox”屬性為實例的邊界框(bounding box)。這四個數字的含義為左上角橫坐標、左上角縱坐標、寬度、高度,單位為像素。這個框為大致畫出,因此對實例的標注并非完全精確,如下所示:
使用 bbox 屬性畫出的邊界框。
三、對象檢測評估
1. 度量
以下12個度量標準用于表征COCO上對象檢測器的性能:
平均精度(Average Precision, AP)
平均精度在 IoU=.50:.05:.95 (主要度量挑戰)
平均精度在?IoU=.50 (PASCAL VOC 度量)
平均精度在?IoU=.75 (嚴格度量)
不同尺度的平均精度(Average Precision Across Scale, APAS)
小型對象平均精度,面積小于
中等對象平均精度,面積介于
和
之間
大型對象平均精度,面積超過
平均重復調用次數(Average Recall, AR)
每張圖片檢測 1 次
每張圖片檢測 10 次
每張圖片檢測 100 次
不同尺度的平均重復調用次數(Average Recall Across Scale, ARAS)
小型對象平均重復調用次數,面積小于
?中等對象平均重復調用次數,面積介于
和
之間
大型對象平均重復調用次數,面積超過
2. 評估代碼
評估代碼可在 COCO GitHub 網站上獲得。 具體來說,分別在 Matlab 或 Python 代碼中查看 CocoEval.m 或 cocoeval.py。 另請參閱 Matlab 或 Python 代碼(演示)中的evalDemo。 在運行評估代碼之前,請以結果格式頁面中描述的格式準備結果。
評估參數如下(括號中的默認值,通常無需更改):
params{
"imgIds" : [all] N img ids to use for evaluation
"catIds" : [all] K cat ids to use for evaluation
"iouThrs" : [.5:.05:.95] T=10 IoU thresholds for evaluation
"recThrs" : [0:.01:1] R=101 recall thresholds for evaluation
"areaRng" : [all,small,medium,large] A=4 area ranges for evaluation
"maxDets" : [1 10 100] M=3 thresholds on max detections per image
"useSegm" : [1] if true evaluate against ground-truth segments
"useCats" : [1] if true use category labels for evaluation
}
通過調用evaluate()函數和accumulate()運行評估代碼會生成兩個測量檢測質量的數據結構。 這兩個結構是evalImgs和eval,它們分別測量每個圖像的質量并在整個數據集中進行聚合。 evalImgs結構具有KxA個條目,每個評估設置一個,而eval結構將此信息組合到精度和重新調用數組中。下面是兩個結構的詳細信息(另請參閱CocoEval.m或cocoeval.py):
evalImgs[{
"dtIds" : [1xD] id for each of the D detections (dt)
"gtIds" : [1xG] id for each of the G ground truths (gt)
"dtImgIds" : [1xD] image id for each dt
"gtImgIds" : [1xG] image id for each gt
"dtMatches" : [TxD] matching gt id at each IoU or 0
"gtMatches" : [TxG] matching dt id at each IoU or 0
"dtScores" : [1xD] confidence of each dt
"dtIgnore" : [TxD] ignore flag for each dt at each IoU
"gtIgnore" : [1xG] ignore flag for each gt
}]
eval{
"params" : 用于評估的參數
"date" : 執行評估的日期
"counts" : [T,R,K,A,M] 參數維度(見上)
"precision" : [TxRxKxAxM] 每次評估設置的精度
"recall" : [TxKxAxM] 每次評估設置的最多重復調用次數
}
最后,summary() 函數根據eval結構計算前面定義的12個檢測指標。
3. 分析代碼
除了評估代碼之外,我們還提供了一個函數analyze()函數來執行誤報的詳細分類。 這是受到Derek Hoiem等人在物體探測器中診斷錯誤的啟發,但在實現和細節上有很大不同。 代碼生成如下圖:
兩個圖都顯示了何愷明(上海交通大學)等人的ResNet(bbox)探測器的分析,該探測器是2015年探測挑戰賽的獲勝者。 第一個圖顯示了人員類ResNet錯誤的細分;第二個圖是對所有類別的平均ResNet的整體分析。
每個圖是一系列精確的回憶曲線,其中每個PR曲線保證嚴格高于之前的曲線,因為評估設置變得更加寬松。 曲線如下:
C75: PR at IoU=.75 (AP at strict IoU), area under curve corresponds to APIoU=.75?metric.
C50: PR at IoU=.50 (AP at PASCAL IoU), area under curve corresponds to APIoU=.50?metric.
Loc: PR at IoU=.10 (localization errors ignored, but not duplicate detections). All remaining settings use IoU=.1.
Sim: PR after supercategory false positives (fps) are removed. Specifically, any matches to objects with a different class label but that belong to the same supercategory don’t count as either a fp (or tp). Sim is computed by setting all objects in the same supercategory to have the same class label as the class in question and setting their ignore flag to 1. Note that person is a singleton supercategory so its Sim result is identical to Loc.
Oth: PR after all class confusions are removed. Similar to Sim, except now if a detection matches?any?other object it is no longer a fp (or tp). Oth is computed by setting all other objects to have the same class label as the class in question and setting their ignore flag to 1.
BG: PR after all background (and class confusion) fps are removed. For a single category, BG is a step function that is 1 until max recall is reached then drops to 0 (the curve is smoother after averaging across categories).
FN: 刪除所有剩余錯誤后的PR(通常AP = 1)。
每條曲線下方的區域顯示在圖例的括號中。 在ResNet檢測器的情況下,IoU = .75的總體AP為.399,完美的本地化將AP增加到.682。 有趣的是,刪除所有類混淆(超類別和跨超類別)只會略微提高AP到.713。 刪除背景fp會將性能提升到.870 AP,其余的錯誤都會丟失檢測(盡管如果添加更多檢測,這也會增加很多fps)。 總之,ResNet的錯誤主要是不完美的本地化和背景混淆。
對于給定的檢測器,代碼總共生成372個圖! 共有80個類別,12個超類別和1個總體結果,總共93個不同的設置,并且分析以4個等級(所有,小,中,大,所以93 * 4 = 372個圖表)進行。 文件命名為[supercategory] – [category] – [size] .pdf,每個類別80 * 4的結果,整體 – [supercategory] – [size] .pdf,每個超類別結果為12 * 4,總體而言 – all- [size] .pdf為1 * 4整體結果。 在所有圖中,通常整體和超類別結果是最感興趣的。
注意:analyze()函數可能需要很長時間才能運行完畢,請耐心等待。因此,我們通常不在評估服務器上運行此代碼;您必須使用驗證集在本地運行代碼。最后,目前analyze()只是Matlab API的一部分;Python代碼即將推出。
贊過:
贊 正在加載……
相關
總結
以上是生活随笔為你收集整理的coco关键点标注json_COCO 数据集中目标检测标注说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 08 域控 架构主机 转移_论无服务器架
- 下一篇: java mp3转wav_在线语音转文字