目次
前書き
公式ウェブサイト:http
:
//cocodataset.org https://cocodataset.org/#download MSCOCOは、80のカテゴリを持つ大規模なデータセットです。データは、トレーニング、検証、テストの3つの部分に分かれています。各部分には118287が含まれています。 、5000枚と40670枚の写真、合計サイズは約25gです。テストデータセットには注釈情報がないため、注釈部分はトレーニングと検証専用です。
COCOテストセットについて:2017 COCOテストセットには、最大40Kのテスト画像が含まれています。テストセットは、約20Kのほぼ同じサイズの2つの分割イメージ、test-devとtest-challengeに分割されます。
Test-Dev:test-dev splitは、通常の状況でテストするためのデフォルトのテストデータです。論文の結果は通常、公正でオープンな比較のためにtest-devコレクションで報告する必要があります。
テストチャレンジ:テストチャレンジ分割は、毎年COCOチャレンジをホストするために使用されます。
COCOテストに関する参考記事:
MS COCOデータセットの出力データ形式(結果形式)とコンテストへの参加方法(参加)(公式ウェブサイトから)
下载地址:
2017トレイン画像[118K / 18GB]:http://images.cocodataset.org/zips/train2017.zip 2017Val
画像[5K / 1GB]:http://images.cocodataset.org/zips/val2017.zip2017
テスト画像[41K / 6ギガバイト]:http://images.cocodataset.org/zips/test2017.zip
2017注釈ます。http://images.cocodataset.org/annotations/annotations_trainval2017.zip
COCOデータ編成フォーム
そのデータ編成形式:
画像は、テスト、トレーニング、およびvalの3つの部分に分割されます。画像の注釈保存形式は、jsonファイルであり、すべての画像注釈はjsonファイルに配置されます。
ターゲット検出の場合、注意が必要なアノテーションは、annotationsフォルダー内のinstances_train.jsonとinstances_val.jsonであり、それぞれtrainイメージとvalイメージのアノテーションに対応します。
これら2つのjsonファイルの構成は次のとおりです。
全体的なフォーマット
{
"info": info,#描述数据集的基本信息
"licenses": [license],#协议,不用管
"images": [image],#图片信息,大小,id,文件名等
"annotations": [annotation],#标注信息,包括分割和边框信息
"categories": [category]#类别信息,包括类别id,所属子类和类名
}
例としてinstances_train.jsonを取り上げます。
情報パーツフォーマット
"info":{
"description":string"COCO 2017 Dataset"
"url":string"http://cocodataset.org"
"version":string"1.0"
"year":int2017
"contributor":string"COCO Consortium"
"date_created":string"2017/09/01"
}
ライセンスパーツフォーマット
"licenses":[#8 items
0:{
#3 items
"url":string"http://creativecommons.org/licenses/by-nc-sa/2.0/"
"id":int1
"name":string"Attribution-NonCommercial-ShareAlike License"
}
1:{
...}#3 items
2:{
...}#3 items
3:{
...}#3 items
4:{
...}#3 items
5:{
...}#3 items
6:{
...}#3 items
7:{
...}#3 items
]
画像パーツフォーマット
"images":
[
{
"license":int3
"file_name":string"000000391895.jpg"
"coco_url":string"http://images.cocodataset.org/train2017/000000391895.jpg"
"height":int360
"width":int640
"date_captured":string"2013-11-14 11:18:45"
"flickr_url":string"http://farm9.staticflickr.com/8186/8119368305_4e622c8349_z.jpg"
"id":int391895
},
{
...},
....
]
注釈パーツ形式
"annotations": [
{
"segmentation": [[510.66,423.01,511.72,420.03,510.45......]],
"iscrowd": 0,
"image_id": 1,
"bbox": [ # x1,y1,w,h,coco的边框表示是左上角坐标加宽高
535.0,
371.0,
199.0,
181.0
],
"area": 36019.0,
"category_id": 1,
"id": 1
},
{
...},
....
]
カテゴリパーツフォーマット
"categories": [
{
"supercategory": "Cancer",
"id": 1,
"name": "hu"
},
{
"supercategory": "Cancer",
"id": 2,
"name": "shu"
}
]
COCOapi
COCOデータセットは、注釈ファイルをより便利に解析し、使用前にpip installpycocotoolsを介して依存関係をインストールするためのCOCOAPIを公式に提供します。COCOAPIの公式文書を直接閲覧することができます。各APIを使用する前に、COCOクラスをインスタンス化する必要があります。それが受け入れるパラメーターは、注釈ファイルのパスであり、クラスのオブジェクトが返されます。COCOのコアユニットはannoです。
COCOを使用する場合は、最初にCOCOクラスを初期化し
.__init__(self, annotation_file=None):
、val2017.jsonファイルを読み取り、それをクラス内のデータセットオブジェクトに解析してから、createIndex()を作成する必要があります。ここでの.createIndex()ステップは非常に重要です。
.createIndex()
:初期化中に、COCOクラス用に5つの非常に重要なオブジェクトが作成されます。
anns
:すべてのannoを含む辞書、keyはannoのID、valueはラベルであるannoの値です。::すべてのカテゴリを含む辞書、keyはカテゴリのID
cats
、valueはカテゴリに対応する基本情報です。 。歩行者検出の場合、クラスは1つ、人は1つだけ
imgs
です;:画像を含む辞書、キーはimage_id、値は
imgToAnns
画像の基本情報です;:画像とannoの対応する関係、キーはimage_idであり、値はこれを含むものです。
catToImgs
画像内のすべてのannoのリスト;:カテゴリと画像の間の対応する関係、キーはcategory、値はこのカテゴリの画像を含むimage_idです。
上記の初期化の後、次のAPIを呼び出すことができます。
-
.info(self)
:データセットの基本情報を印刷します。重要ではありません。 -
.getAnnIds(self, imgIds=[], catIds=[], areaRng=[], iscrow=None)
:ラベル情報の一部に対応するimage_id、cat_id、area_range、およびiscrowdに従って対応するIDを取得します。ここで、iscrowdはセグメンテーションの形式に対応しますが、これは重要ではありません。 -
.getCatIds()
:カテゴリIDを取得します。 -
.getImgIds()
:何かに基づいてimage_idを取得します。 -
.loadAnns(self, ids=[])
:idに従ってannoを取得します。 -
.loadCats(self, ids=[])
:cat_idに従ってカテゴリを取得します。 -
.loadImgs(self, ids=[])
:image_idに従って画像を取得します。 -
.showAnns(self, anns)
:annoレコードに基づいて視覚化しますが、戻り値はNoneであり、役に立たないです。ほら、COCOはメンテナンスを怠っていると言っただけです(APIを書いているインターンのインターンシップが終わったのではないかと心配しているので、手動で目を細めます)。 -
.loadRes(self, resFile)
:これは、最も一般的に使用され、最も重要な方法です。
1)別のCOCOクラスDT(以下、DTでは検出クラスと呼びます)を初期化して検出データを保存します
。2)GTのすべての画像をDTに割り当てます。つまり、DTのすべての画像とGTは正確です。同じ;
3)自分で生成した結果の.jsonファイルを読み取り、結果を判断します.jsonファイルはGTのイメージに完全に含まれている必要があります;
4)DTクラスのキャプション、bbox、セグメンテーション、キーポイントを順番に生成し、 、DTクラスのすべてのanno idを書き換えます。つまり、結果ファイルでIDを生成するかどうかに関係なく、IDの一意性を確保するために、ここでこれらのIDを書き換えます
。5)必要なDTを返します。
参照のこの部分:https://zhuanlan.zhihu.com/p/135355550