123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- # Copyright (c) OpenMMLab. All rights reserved.
- import os
- import unittest
- from mmengine.fileio import dump
- from mmdet.datasets import LVISV1Dataset, LVISV05Dataset
- try:
- import lvis
- except ImportError:
- lvis = None
- class TestLVISDataset(unittest.TestCase):
- def setUp(self) -> None:
- image1 = {
- # ``coco_url`` for v1 only.
- 'coco_url': 'http://images.cocodataset.org/train2017/0.jpg',
- # ``file_name`` for v0.5 only.
- 'file_name': '0.jpg',
- 'height': 1024,
- 'width': 2048,
- 'neg_category_ids': [],
- 'not_exhaustive_category_ids': [],
- 'id': 0
- }
- image2 = {
- 'coco_url': 'http://images.cocodataset.org/train2017/1.jpg',
- 'file_name': '1.jpg',
- 'height': 1024,
- 'width': 2048,
- 'neg_category_ids': [],
- 'not_exhaustive_category_ids': [],
- 'id': 1
- }
- image3 = {
- 'coco_url': 'http://images.cocodataset.org/train2017/2.jpg',
- 'file_name': '2.jpg',
- 'height': 1024,
- 'width': 2048,
- 'neg_category_ids': [],
- 'not_exhaustive_category_ids': [],
- 'id': 2
- }
- image4 = {
- 'coco_url': 'http://images.cocodataset.org/train2017/3.jpg',
- 'file_name': '3.jpg',
- 'height': 31,
- 'width': 15,
- 'neg_category_ids': [],
- 'not_exhaustive_category_ids': [],
- 'id': 3
- }
- images = [image1, image2, image3, image4]
- categories = [{
- 'id': 1,
- 'name': 'aerosol_can',
- 'frequency': 'c',
- 'image_count': 64
- }, {
- 'id': 2,
- 'name': 'air_conditioner',
- 'frequency': 'f',
- 'image_count': 364
- }, {
- 'id': 3,
- 'name': 'airplane',
- 'frequency': 'f',
- 'image_count': 1911
- }]
- annotations = [
- {
- 'category_id': 1,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': 2595,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 0,
- 'id': 0
- },
- {
- 'category_id': 2,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': -1,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 0,
- 'id': 1
- },
- {
- 'category_id': 3,
- 'bbox': [379.0, 435.0, -1, 124.0],
- 'area': 2,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 0,
- 'id': 2
- },
- {
- 'category_id': 1,
- 'bbox': [379.0, 435.0, 52.0, -1],
- 'area': 2,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 0,
- 'id': 3
- },
- {
- 'category_id': 1,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': 2595,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 0,
- 'id': 4
- },
- {
- 'category_id': 3,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': 2595,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 1,
- 'id': 5
- },
- {
- 'category_id': 3,
- 'bbox': [379.0, 435.0, 10, 2],
- 'area': 2595,
- 'segmentation': [[0.0, 0.0]],
- 'image_id': 3,
- 'id': 6
- },
- ]
- fake_json = {
- 'images': images,
- 'annotations': annotations,
- 'categories': categories
- }
- self.json_name = 'lvis.json'
- dump(fake_json, self.json_name)
- self.metainfo = dict(
- classes=('aerosol_can', 'air_conditioner', 'airplane'))
- def tearDown(self):
- os.remove(self.json_name)
- @unittest.skipIf(lvis is None, 'lvis is not installed.')
- def test_lvis05_dataset(self):
- dataset = LVISV05Dataset(
- ann_file=self.json_name,
- data_prefix=dict(img='imgs'),
- metainfo=self.metainfo,
- filter_cfg=dict(filter_empty_gt=True, min_size=32),
- pipeline=[])
- self.assertEqual(dataset.metainfo['classes'], self.metainfo['classes'])
- dataset.full_init()
- # filter images of small size and images
- # with all illegal annotations
- self.assertEqual(len(dataset), 2)
- self.assertEqual(len(dataset.load_data_list()), 4)
- dataset = LVISV05Dataset(
- ann_file=self.json_name,
- data_prefix=dict(img='imgs'),
- metainfo=self.metainfo,
- test_mode=True,
- filter_cfg=dict(filter_empty_gt=True, min_size=32),
- pipeline=[])
- dataset.full_init()
- # filter images of small size and images
- # with all illegal annotations
- self.assertEqual(len(dataset), 4)
- self.assertEqual(len(dataset.load_data_list()), 4)
- @unittest.skipIf(lvis is None, 'lvis is not installed.')
- def test_lvis1_dataset(self):
- dataset = LVISV1Dataset(
- ann_file=self.json_name,
- data_prefix=dict(img='imgs'),
- metainfo=self.metainfo,
- filter_cfg=dict(filter_empty_gt=True, min_size=32),
- pipeline=[])
- self.assertEqual(dataset.metainfo['classes'], self.metainfo['classes'])
- dataset.full_init()
- # filter images of small size and images
- # with all illegal annotations
- self.assertEqual(len(dataset), 2)
- self.assertEqual(len(dataset.load_data_list()), 4)
- dataset = LVISV1Dataset(
- ann_file=self.json_name,
- data_prefix=dict(img='imgs'),
- metainfo=self.metainfo,
- test_mode=True,
- filter_cfg=dict(filter_empty_gt=True, min_size=32),
- pipeline=[])
- dataset.full_init()
- # filter images of small size and images
- # with all illegal annotations
- self.assertEqual(len(dataset), 4)
- self.assertEqual(len(dataset.load_data_list()), 4)
- @unittest.skipIf(lvis is None, 'lvis is not installed.')
- def test_lvis1_dataset_without_filter_cfg(self):
- dataset = LVISV1Dataset(
- ann_file=self.json_name,
- data_prefix=dict(img='imgs'),
- metainfo=self.metainfo,
- filter_cfg=None,
- pipeline=[])
- self.assertEqual(dataset.metainfo['classes'], self.metainfo['classes'])
- dataset.full_init()
- # filter images of small size and images
- # with all illegal annotations
- self.assertEqual(len(dataset), 4)
- self.assertEqual(len(dataset.load_data_list()), 4)
- dataset = LVISV1Dataset(
- ann_file=self.json_name,
- data_prefix=dict(img='imgs'),
- metainfo=self.metainfo,
- test_mode=True,
- filter_cfg=None,
- pipeline=[])
- dataset.full_init()
- # filter images of small size and images
- # with all illegal annotations
- self.assertEqual(len(dataset), 4)
- self.assertEqual(len(dataset.load_data_list()), 4)
|