|
|
|
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': 'http://images.cocodataset.org/train2017/0.jpg', |
|
|
|
'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() |
|
|
|
|
|
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() |
|
|
|
|
|
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() |
|
|
|
|
|
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() |
|
|
|
|
|
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() |
|
|
|
|
|
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() |
|
|
|
|
|
self.assertEqual(len(dataset), 4) |
|
self.assertEqual(len(dataset.load_data_list()), 4) |
|
|