123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- # Copyright (c) OpenMMLab. All rights reserved.
- import os
- import unittest
- from mmengine.fileio import dump
- from mmdet.datasets import CityscapesDataset
- class TestCityscapesDataset(unittest.TestCase):
- def setUp(self) -> None:
- image1 = {
- 'file_name': 'munster/munster_000102_000019_leftImg8bit.png',
- 'height': 1024,
- 'width': 2048,
- 'segm_file': 'munster/munster_000102_000019_gtFine_labelIds.png',
- 'id': 0
- }
- image2 = {
- 'file_name': 'munster/munster_000157_000019_leftImg8bit.png',
- 'height': 1024,
- 'width': 2048,
- 'segm_file': 'munster/munster_000157_000019_gtFine_labelIds.png',
- 'id': 1
- }
- image3 = {
- 'file_name': 'munster/munster_000139_000019_leftImg8bit.png',
- 'height': 1024,
- 'width': 2048,
- 'segm_file': 'munster/munster_000139_000019_gtFine_labelIds.png',
- 'id': 2
- }
- image4 = {
- 'file_name': 'munster/munster_000034_000019_leftImg8bit.png',
- 'height': 31,
- 'width': 15,
- 'segm_file': 'munster/munster_000034_000019_gtFine_labelIds.png',
- 'id': 3
- }
- images = [image1, image2, image3, image4]
- categories = [{
- 'id': 24,
- 'name': 'person'
- }, {
- 'id': 25,
- 'name': 'rider'
- }, {
- 'id': 26,
- 'name': 'car'
- }]
- annotations = [
- {
- 'iscrowd': 0,
- 'category_id': 24,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': 2595,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 0,
- 'id': 0
- },
- {
- 'iscrowd': 0,
- 'category_id': 25,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': -1,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 0,
- 'id': 1
- },
- {
- 'iscrowd': 0,
- 'category_id': 26,
- 'bbox': [379.0, 435.0, -1, 124.0],
- 'area': 2,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 0,
- 'id': 2
- },
- {
- 'iscrowd': 0,
- 'category_id': 24,
- 'bbox': [379.0, 435.0, 52.0, -1],
- 'area': 2,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 0,
- 'id': 3
- },
- {
- 'iscrowd': 0,
- 'category_id': 1,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': 2595,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 0,
- 'id': 4
- },
- {
- 'iscrowd': 1,
- 'category_id': 26,
- 'bbox': [379.0, 435.0, 52.0, 124.0],
- 'area': 2595,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 1,
- 'id': 5
- },
- {
- 'iscrowd': 0,
- 'category_id': 26,
- 'bbox': [379.0, 435.0, 10, 2],
- 'area': 2595,
- 'segmentation': {
- 'size': [1024, 2048],
- 'counts': 'xxx'
- },
- 'image_id': 3,
- 'id': 6
- },
- ]
- fake_json = {
- 'images': images,
- 'annotations': annotations,
- 'categories': categories
- }
- self.json_name = 'cityscapes.json'
- dump(fake_json, self.json_name)
- self.metainfo = dict(classes=('person', 'rider', 'car'))
- def tearDown(self):
- os.remove(self.json_name)
- def test_cityscapes_dataset(self):
- dataset = CityscapesDataset(
- 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), 1)
- self.assertEqual(len(dataset.load_data_list()), 4)
- dataset = CityscapesDataset(
- 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)
- def test_cityscapes_dataset_without_filter_cfg(self):
- dataset = CityscapesDataset(
- 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 = CityscapesDataset(
- 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)
|