COCOデータセットの概要

前書き

公式ウェブサイト: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

おすすめ

転載: blog.csdn.net/yanghao201607030101/article/details/112575770