-
Notifications
You must be signed in to change notification settings - Fork 822
Add support for Upsample op in CAFFE #625
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
gasgallo
wants to merge
1
commit into
XiaoMi:master
Choose a base branch
from
gasgallo:feature/support-caffe-upsample
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the late review.
Thanks for your wonderful code, but as you know, we can not modify the caffe code and maintain a nonstandard version, perhaps we can make this pull request stay here and help the others, but it can not be merged.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about keeping the original Dockerfile as it was and create a
Dockerfile-upsamplethat contains the patched version?Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gasgallo I read the code and had a question, how about developping a
ResizeNearestNeighborop in caffe like in tensorflow? or developping aUpSampleop like in ONNX, in that cases, there are no need to change the mace's code?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lu229 can you elaborate? I'm not sure I understand what you mean
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gasgallo MACE support the
UpSampleoperator for ONNX, and supportResizeNearestNeighboroperator for Tensorflow, What I means is that, If you simulatedUpSampleop in CAFFE like in the ONNX, or simulatedResizeNearestNeighborop in CAFFE likein the Tensorflow, there is no need to modify MACE's c++ code(only need to modify the python code for convert). I think perhaps this is a better selection?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gasgallo Perhaps I did not understand your problem, why dose you need calling shape_inference before convert_ops? The shape inferences in ONNX and caffe and tensorflow are different, I think if you add the op in caffe, perhaps you need add it as the same the other caffe operators?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lu229 because current caffe upsample layer is like onnx one, that provides a scale factor, therefore we need to know upsample input size to calculate its output size that is required by MACE resizenearestneighbor op.
The other option is that caffe upsample layer directly provides output shape, like happens in tf.image.resize_nearest_neighbor.
I was wondering if the first solution would work? If not, I will consider the second option.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gasgallo Perhaps I still did not understand your problem, but I can try to reply. Yes you can refer to the
infer_shape_conv_pool_shapefunction intools/python/transform/shape_inference.py, which is used to infer the output shape ofconvoperator, when you infer theUpsample's output shape, you can get the input shape by the_output_shape_cachevariable.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lu229 sorry for confusion, I'll write more in detail right now.
My CAFFE upsample op is defined in a similar way as ONNX upsample op, that takes a
scaleparameter, so we don't know output shape a priori. For MACE we need to know output shape when callingself.add_tensor.This works in
onnx_converter.pybecause we can useself._graph_shapes_dictobject that contains all pre-computed shapes, and it is created inself.extract_shape_infobefore callingself.convert_ops.This is
convert_upsampleinonnx_converter.py:And this is
run()inonnx_converter.py:In
caffe_converter.pyinstead,shape_inferer.run()is called afterself.convert_ops, therefore all output shapes are not available during ops conversion, so I cannot compute output shape of upsample op.This is
run()incaffe_converter.py:And
shape_inferer.run()cannot be called beforeself.convert_opsbecause it requiresself._mace_net_defto be already completely defined (that happens inself.convert_ops).@lu229 Let me know if this makes my point clear.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gasgallo Thanks for your detailed description, now I understand your problem, yes you need to define the upsample as same as the other
Caffeoperators, for the shape inference inCaffeandONNXis different.