Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
magicwindyyd
mindspore
提交
d4185f33
M
mindspore
项目概览
magicwindyyd
/
mindspore
与 Fork 源项目一致
Fork自
MindSpore / mindspore
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
mindspore
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d4185f33
编写于
7月 06, 2020
作者:
M
mindspore-ci-bot
提交者:
Gitee
7月 06, 2020
浏览文件
操作
浏览文件
下载
差异文件
!2848 change crop_size from tensor to tuple
Merge pull request !2848 from xutianchun/crop_size_tuple
上级
0aa8f001
f9088f46
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
17 addition
and
14 deletion
+17
-14
mindspore/ops/operations/image_ops.py
mindspore/ops/operations/image_ops.py
+15
-12
tests/st/ops/ascend/test_aicpu_ops/test_crop_and_reszie.py
tests/st/ops/ascend/test_aicpu_ops/test_crop_and_reszie.py
+2
-2
未找到文件。
mindspore/ops/operations/image_ops.py
浏览文件 @
d4185f33
...
...
@@ -45,10 +45,9 @@ class CropAndResize(PrimitiveWithInfer):
extrapolate the input image values. Types allowd: float32.
- **box_index** (Tensor) - A 1-D tensor of shape [num_boxes] with int32 values in [0, batch).
The value of box_ind[i] specifies the image that the i-th box refers to. Types allowd: int32.
- **crop_size** (Tensor) - Only constant value is allowd. Types allowed: int32.
A 1-D tensor of 2 elements, size = [crop_height, crop_width].
All cropped image patches are resized to this size. The aspect ratio of the image content is not preserved.
Both crop_height and crop_width need to be positive.
- **crop_size** (Tuple[int]) - A tuple of two int32 elements: (crop_height, crop_width).
Only constant value is allowed. All cropped image patches are resized to this size.
The aspect ratio of the image content is not preserved. Both crop_height and crop_width need to be positive.
Outputs:
A 4-D tensor of shape [num_boxes, crop_height, crop_width, depth] with type: float32.
...
...
@@ -70,8 +69,8 @@ class CropAndResize(PrimitiveWithInfer):
>>> image = np.random.normal(size=[BATCH_SIZE, IMAGE_HEIGHT, IMAGE_WIDTH, CHANNELS]).astype(np.float32)
>>> boxes = np.random.uniform(size=[NUM_BOXES, 4]).astype(np.float32)
>>> box_index = np.random.uniform(size=[NUM_BOXES], low=0, high=BATCH_SIZE).astype(np.int32)
>>> crop_size =
np.array([24, 24]).astype(np.int32
)
>>> crop_and_resize = CropAndResizeNet(crop_size=
Tensor(crop_size)
)
>>> crop_size =
(24, 24
)
>>> crop_and_resize = CropAndResizeNet(crop_size=
crop_size
)
>>> output = crop_and_resize(Tensor(image), Tensor(boxes), Tensor(box_index))
>>> print(output.asnumpy())
"""
...
...
@@ -91,11 +90,10 @@ class CropAndResize(PrimitiveWithInfer):
x_shape
=
list
(
x
[
'shape'
])
boxes_shape
=
list
(
boxes
[
'shape'
])
box_index_shape
=
list
(
box_index
[
'shape'
])
crop_size_shape
=
list
(
crop_size
[
'shape'
])
# get value
if
crop_size
[
'value'
]
is
None
:
raise
ValueError
(
f
"For
{
self
.
name
}
, crop_size must be const."
)
crop_size_value
=
crop_size
[
'value'
]
.
asnumpy
()
raise
ValueError
(
f
"For
{
self
.
name
}
, crop_size must be const
ant
."
)
crop_size_value
=
crop_size
[
'value'
]
# get dtype
x_dtype
=
x
[
'dtype'
]
boxes_dtype
=
boxes
[
'dtype'
]
...
...
@@ -107,15 +105,20 @@ class CropAndResize(PrimitiveWithInfer):
mstype
.
float32
,
mstype
.
float64
,
mstype
.
uint8
,
mstype
.
uint16
],
self
.
name
)
validator
.
check_tensor_type_same
({
"boxes"
:
boxes_dtype
},
[
mstype
.
float32
],
self
.
name
)
validator
.
check_tensor_type_same
({
"box_index"
:
box_index_dtype
},
[
mstype
.
int32
],
self
.
name
)
validator
.
check_
tensor_type_same
({
"crop_size"
:
crop_size_dtype
},
[
mstype
.
int32
],
self
.
name
)
validator
.
check_
value_type
(
"crop_size"
,
crop_size_value
,
[
tuple
],
self
.
name
)
# check input shape rank
validator
.
check
(
"x rank"
,
len
(
x_shape
),
"expected"
,
4
,
Rel
.
EQ
,
self
.
name
)
validator
.
check
(
"boxes rank"
,
len
(
boxes_shape
),
"expected"
,
2
,
Rel
.
EQ
,
self
.
name
)
validator
.
check
(
"box_index rank"
,
len
(
box_index_shape
),
"expected"
,
1
,
Rel
.
EQ
,
self
.
name
)
validator
.
check
(
"crop_size rank"
,
len
(
crop_size_shape
),
"expected"
,
1
,
Rel
.
EQ
,
self
.
name
)
validator
.
check
(
"crop_size size"
,
len
(
crop_size_value
),
"expected"
,
2
,
Rel
.
EQ
,
self
.
name
)
validator
.
check
(
"boxes dim_0"
,
boxes_shape
[
0
],
"box_index dim_0"
,
box_index_shape
[
0
],
Rel
.
EQ
,
self
.
name
)
validator
.
check
(
"boxes dim_1"
,
boxes_shape
[
1
],
"expected"
,
4
,
Rel
.
EQ
,
self
.
name
)
# check crop_size_value
validator
.
check
(
"crop_height"
,
crop_size_value
[
0
],
"minimum"
,
0
,
Rel
.
GT
,
self
.
name
)
validator
.
check
(
"crop_width"
,
crop_size_value
[
1
],
"minimum"
,
0
,
Rel
.
GT
,
self
.
name
)
# check crop_size element type
validator
.
check
(
"crop_height dtype"
,
crop_size_dtype
[
0
],
mstype
.
int32
,
self
.
name
)
validator
.
check
(
"crop_width dtype"
,
crop_size_dtype
[
1
],
mstype
.
int32
,
self
.
name
)
num_boxes
=
boxes_shape
[
0
]
crop_height
=
crop_size_value
[
0
]
...
...
tests/st/ops/ascend/test_aicpu_ops/test_crop_and_reszie.py
浏览文件 @
d4185f33
...
...
@@ -43,7 +43,7 @@ def test_net_float32():
image
=
np
.
random
.
normal
(
size
=
[
batch_size
,
image_height
,
image_width
,
channels
]).
astype
(
np
.
float32
)
boxes
=
np
.
random
.
uniform
(
size
=
[
num_boxes
,
4
]).
astype
(
np
.
float32
)
box_index
=
np
.
random
.
uniform
(
size
=
[
num_boxes
],
low
=
0
,
high
=
batch_size
).
astype
(
np
.
int32
)
crop_size
=
np
.
array
([
24
,
24
]).
astype
(
np
.
int32
)
net
=
Net
(
crop_size
=
Tensor
(
crop_size
)
)
crop_size
=
(
24
,
24
)
net
=
Net
(
crop_size
=
crop_size
)
output
=
net
(
Tensor
(
image
),
Tensor
(
boxes
),
Tensor
(
box_index
))
print
(
output
.
asnumpy
())
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录