Skip to content
This repository was archived by the owner on Jul 2, 2021. It is now read-only.

Commit 80401b1

Browse files
committed
fix tests
1 parent 1c31a00 commit 80401b1

File tree

6 files changed

+66
-168
lines changed

6 files changed

+66
-168
lines changed

chainercv/links/model/fpn/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from chainercv.links.model.fpn.bbox_head import BboxHead # NOQA
88
from chainercv.links.model.fpn.bbox_head import bbox_loss_post # NOQA
99
from chainercv.links.model.fpn.bbox_head import bbox_loss_pre # NOQA
10+
from chainercv.links.model.fpn.mask_head import MaskHead # NOQA
1011
from chainercv.links.model.fpn.mask_head import mask_loss_post # NOQA
1112
from chainercv.links.model.fpn.mask_head import mask_loss_pre # NOQA
1213
from chainercv.links.model.fpn.rpn import RPN # NOQA

chainercv/links/model/fpn/faster_rcnn.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,10 @@ def predict(self, imgs):
152152
hs, rpn_rois, rpn_roi_indices = self(x)
153153
if self._store_rpn_outputs:
154154
rpn_rois_cpu = [
155-
chainer.backends.cuda.to_cpu(rpn_roi) for rpn_roi in
156-
_flat_to_list(rpn_rois, rpn_roi_indices, len(imgs))]
155+
chainer.backends.cuda.to_cpu(rpn_roi) / scale
156+
for rpn_roi, scale in
157+
zip(_flat_to_list(rpn_rois, rpn_roi_indices, len(imgs)),
158+
scales)]
157159
output.update({'rois': rpn_rois_cpu})
158160

159161
if self._run_bbox:
@@ -198,7 +200,7 @@ def predict(self, imgs):
198200
# Currently MaskHead only supports numpy inputs
199201
masks_cpu = self.mask_head.decode(segms, bboxes_cpu, labels_cpu, sizes)
200202
output.update({'masks': masks_cpu})
201-
return (output[key] for key in self._return_values)
203+
return tuple([output[key] for key in self._return_values])
202204

203205
def prepare(self, imgs):
204206
"""Preprocess images.

tests/links_tests/model_tests/fpn_tests/test_faster_rcnn.py

Lines changed: 55 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
from chainer import testing
88
from chainer.testing import attr
99

10+
from chainercv.links.model.fpn import BboxHead
1011
from chainercv.links.model.fpn import FasterRCNN
11-
from chainercv.links.model.fpn import Head
12+
from chainercv.links.model.fpn import MaskHead
1213
from chainercv.links.model.fpn import RPN
14+
from chainercv.utils import assert_is_bbox
1315
from chainercv.utils import assert_is_detection_link
16+
from chainercv.utils import assert_is_instance_segmentation_link
1417

1518

1619
def _random_array(xp, shape):
@@ -31,28 +34,35 @@ def __call__(self, x):
3134

3235
class DummyFasterRCNN(FasterRCNN):
3336

34-
def __init__(self, n_fg_class, min_size, max_size):
37+
def __init__(self, n_fg_class, return_values, min_size, max_size):
3538
extractor = DummyExtractor()
3639
super(DummyFasterRCNN, self).__init__(
3740
extractor=extractor,
3841
rpn=RPN(extractor.scales),
39-
head=Head(n_fg_class + 1, extractor.scales),
42+
bbox_head=BboxHead(n_fg_class + 1, extractor.scales),
43+
mask_head=MaskHead(n_fg_class + 1, extractor.scales),
44+
return_values=return_values,
4045
min_size=min_size, max_size=max_size,
4146
)
4247

4348

4449
@testing.parameterize(*testing.product_dict(
50+
[
51+
{'return_values': 'detection'},
52+
{'return_values': 'instance_segmentation'},
53+
{'return_values': 'rpn'}
54+
],
4555
[
4656
{'n_fg_class': 1},
4757
{'n_fg_class': 5},
4858
{'n_fg_class': 20},
4959
],
5060
[
51-
{
52-
'in_sizes': [(480, 640), (320, 320)],
53-
'min_size': 800, 'max_size': 1333,
54-
'expected_shape': (800, 1088),
55-
},
61+
# {
62+
# 'in_sizes': [(480, 640), (320, 320)],
63+
# 'min_size': 800, 'max_size': 1333,
64+
# 'expected_shape': (800, 1088),
65+
# },
5666
{
5767
'in_sizes': [(200, 50), (400, 100)],
5868
'min_size': 200, 'max_size': 320,
@@ -63,7 +73,14 @@ def __init__(self, n_fg_class, min_size, max_size):
6373
class TestFasterRCNN(unittest.TestCase):
6474

6575
def setUp(self):
76+
if self.return_values == 'detection':
77+
return_values = ['bboxes', 'labels', 'scores']
78+
elif self.return_values == 'instance_segmentation':
79+
return_values = ['masks', 'labels', 'scores']
80+
elif self.return_values == 'rpn':
81+
return_values = ['rois']
6682
self.link = DummyFasterRCNN(n_fg_class=self.n_fg_class,
83+
return_values=return_values,
6784
min_size=self.min_size,
6885
max_size=self.max_size)
6986

@@ -88,29 +105,20 @@ def test_use_preset(self):
88105
def _check_call(self):
89106
x = _random_array(self.link.xp, (2, 3, 32, 32))
90107
with chainer.using_config('train', False):
91-
rois, roi_indices, head_locs, head_confs = self.link(x)
108+
hs, rois, roi_indices = self.link(x)
92109

93-
self.assertEqual(len(rois), len(self.link.extractor.scales))
94-
self.assertEqual(len(roi_indices), len(self.link.extractor.scales))
110+
self.assertEqual(len(hs), len(self.link.extractor.scales))
95111
for l in range(len(self.link.extractor.scales)):
96-
self.assertIsInstance(rois[l], self.link.xp.ndarray)
97-
self.assertEqual(rois[l].shape[1:], (4,))
98-
99-
self.assertIsInstance(roi_indices[l], self.link.xp.ndarray)
100-
self.assertEqual(roi_indices[l].shape[1:], ())
101-
102-
self.assertEqual(rois[l].shape[0], roi_indices[l].shape[0])
112+
self.assertIsInstance(hs[l], chainer.Variable)
113+
self.assertIsInstance(hs[l].data, self.link.xp.ndarray)
103114

104-
n_roi = sum(
105-
len(rois[l]) for l in range(len(self.link.extractor.scales)))
115+
self.assertIsInstance(rois, self.link.xp.ndarray)
116+
self.assertEqual(rois.shape[1:], (4,))
106117

107-
self.assertIsInstance(head_locs, chainer.Variable)
108-
self.assertIsInstance(head_locs.array, self.link.xp.ndarray)
109-
self.assertEqual(head_locs.shape, (n_roi, self.n_fg_class + 1, 4))
118+
self.assertIsInstance(roi_indices, self.link.xp.ndarray)
119+
self.assertEqual(roi_indices.shape[1:], ())
110120

111-
self.assertIsInstance(head_confs, chainer.Variable)
112-
self.assertIsInstance(head_confs.array, self.link.xp.ndarray)
113-
self.assertEqual(head_confs.shape, (n_roi, self.n_fg_class + 1))
121+
self.assertEqual(rois.shape[0], roi_indices.shape[0])
114122

115123
def test_call_cpu(self):
116124
self._check_call()
@@ -126,13 +134,32 @@ def test_call_train_mode(self):
126134
with chainer.using_config('train', True):
127135
self.link(x)
128136

137+
def _check_predict(self):
138+
if self.return_values == 'detection':
139+
assert_is_detection_link(self.link, self.n_fg_class)
140+
elif self.return_values == 'instance_segmentation':
141+
assert_is_instance_segmentation_link(self.link, self.n_fg_class)
142+
elif self.return_values == 'rpn':
143+
imgs = [
144+
np.random.randint(
145+
0, 256, size=(3, 480, 320)).astype(np.float32),
146+
np.random.randint(
147+
0, 256, size=(3, 480, 320)).astype(np.float32)]
148+
result = self.link.predict(imgs)
149+
assert len(result) == 1
150+
assert len(result[0]) == 1
151+
for i in range(len(result[0])):
152+
roi = result[0][i]
153+
assert_is_bbox(roi)
154+
155+
@attr.slow
129156
def test_predict_cpu(self):
130-
assert_is_detection_link(self.link, self.n_fg_class)
157+
self._check_predict()
131158

132159
@attr.gpu
133160
def test_predict_gpu(self):
134161
self.link.to_gpu()
135-
assert_is_detection_link(self.link, self.n_fg_class)
162+
self._check_predict()
136163

137164
def test_prepare(self):
138165
imgs = [_random_array(np, (3, s[0], s[1])) for s in self.in_sizes]

tests/links_tests/model_tests/mask_rcnn_tests/test_mask_head.py renamed to tests/links_tests/model_tests/fpn_tests/test_mask_head.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
from chainer import testing
88
from chainer.testing import attr
99

10-
from chainercv.links.model.mask_rcnn import MaskHead
11-
from chainercv.links.model.mask_rcnn import mask_loss_post
12-
from chainercv.links.model.mask_rcnn import mask_loss_pre
10+
from chainercv.links.model.fpn import MaskHead
11+
from chainercv.links.model.fpn import mask_loss_post
12+
from chainercv.links.model.fpn import mask_loss_pre
1313

1414
from chainercv.utils import mask_to_bbox
1515

tests/links_tests/model_tests/mask_rcnn_tests/test_misc.py renamed to tests/links_tests/model_tests/fpn_tests/test_mask_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
from chainer import testing
77

8-
from chainercv.links.model.mask_rcnn.misc import segm_to_mask
9-
from chainercv.links.model.mask_rcnn.misc import mask_to_segm
8+
from chainercv.links.model.fpn.mask_utils import segm_to_mask
9+
from chainercv.links.model.fpn.mask_utils import mask_to_segm
1010

1111

1212
class TestSegmToMask(unittest.TestCase):

tests/links_tests/model_tests/mask_rcnn_tests/test_mask_rcnn.py

Lines changed: 0 additions & 132 deletions
This file was deleted.

0 commit comments

Comments
 (0)