Skip to content
This repository was archived by the owner on Nov 17, 2023. It is now read-only.

Added reflection padding #6123

Merged
merged 7 commits into from
May 9, 2017
Merged

Added reflection padding #6123

merged 7 commits into from
May 9, 2017

Conversation

matteosal
Copy link
Contributor

@matteosal matteosal commented May 5, 2017

Implemented a reflection padding method, adapted from Torch. Currently has two limitations compared to edge and constant padding

  1. Only supports 4D input (edge and constant support 5D too)
  2. Cannot pad by an amount bigger than the input size. Behaviour when padding exceeds input size is well defined in numpy (bounce back and forth between input edged until padding area is filled) and can be added

Also improved sanity checks and moved them from forward/backward to InferShape.

@matteosal
Copy link
Contributor Author

I've realized that extending to 5D support was almost trivial, so i've added that as well

out_data[pad_enum::kOut].get<xpu, 5, DType>(s);
pad_image(out, data, param_.pad_width, param_.mode, constant_value);
break;
}
Copy link
Contributor

@sbodenstein sbodenstein May 8, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you should add a LOG(FATAL) if none of the cases are matched. Do the same with backward.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is checked in InferShape though, so it would be redundant. One of them will always match. Should I add it anyway?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think its good practice. If there is a bug in infershape, this would help immediately catch it.

if ((rank != 4) && (rank != 5)) {
LOG(FATAL) << "Current implementation only supports 4-D or 5-D input.";
}
if (pad[0] || pad[1] || pad[2] || pad[3]) {
Copy link
Contributor

@sbodenstein sbodenstein May 8, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you make this explicit, so pad[0] == 0 etc? I know this is more compact, but its also less readable. Also: shouldn't this only check that pad[0] == 0 and pad[1] == 0? Surely pad[2] can be non-zero?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is from the previous design, nothing has changed. pad[0-1] -> batch dimension, pad[2-3] -> channel dimension

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apologies, my mistake. I still prefer explicit pad[0] != 0

}
if (param_.mode == pad_enum::kReflect) {
auto size = dshape.data();
if ((pad[4] >= size[2]) || (pad[5] >= size[2]) ||
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does the equality case not work? Surely the difficultly only comes when the padding size is strictly greater than the input size?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, it starts when equal. Suppose you want to pad (a, b, c) on the right with padding size 2, you would get (a, b, c, b, a). So padding size 3 is the point at which you have to bounce off the edge, getting (a, b, c, b, a, b).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh ok, I somehow thought that (a, b, c) -> (a, b, c, c, b). If that is what numpy does, we definitely need to follow that convention.

@piiswrong
Copy link
Contributor

@sbodenstein Is this good to merge?

@sbodenstein
Copy link
Contributor

Yes, it is ready.

@piiswrong piiswrong merged commit db300ca into apache:master May 9, 2017
@matteosal matteosal deleted the ReflectionPadding branch May 9, 2017 09:28
bikestra pushed a commit to bikestra/mxnet that referenced this pull request May 10, 2017
* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability
rishita pushed a commit to rishita/mxnet that referenced this pull request May 10, 2017
* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability
piiswrong pushed a commit that referenced this pull request May 11, 2017
* updated docstring for set_lr_mult and set_wd_mult

* updated docstring per review

* Fixed imdecode crash bug when flag=0 (#6134)

* Fix (#6131)

* Docs for MXRecordIO, MXIndexedRecordIO modified (#6013)

* docs for MXIndexedRecordIO modified

* changes after review

* recordIO doc modified

* changes after review

* lint error

* minor change

* minor change after review

* empty commit to retrigger build

* changes after review

* Update documentation for mx.callback.Speedometer. (#6058)

* Update documentation for mx.callback.Speedometer.

* Minor doc changes.

* Use module instead of model in example code.

* update doc for Load (#6092)

* Installation instructions for MacOS and Cloud (#6012)

* Fix NDArray bool checking (#6130)

* fix shape order bug (#6136)

* TOC click unfold (#6133)

* [doc] new sphnix plugin  (#6105)

* update doc

* rm

* update

* update ndarray

* update mds

* update

* update

* update

* update

* update

* update

* update image.md and others

* update

* [doc] use debug mode to build (#6151)

* move ctc loss to contrib (#6154)

* Fix for invalid numpy float indexing (#6144)

* Fix python3 compatibilities (#6143)

* [doc] small changes to tutorials (#6164)

* [doc] Fix left toc link (#6162)

* [example]ADD practical functions and options for speech_recognition example (#6141)

* ADD practical functions and options for speech_recognition example

* add missing stt_bi_graphemes_util.py and deepspeech.cfg template

* Added reflection padding (#6123)

* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability

* Fixing LICENSE file and adding NOTICE (#6172)

* Creating NOTICE. 

When code moves to Apache, it will need adjusting to the Apache format.

* Replacing source header with full license text

* doc improvement - softmax, metrics, and initializer (#5945)

* doc improvement, softmaxoutput, initializer-constant, minor fixes

* doc improvement, metrics

* fix softmax doc, fix metric lint

* softmax more fixes

* add doc change in initializer.py. some minor fix in softmax_cross_entropy

* doc change in initializer.py

* fix grammer

* fix

* fix

* fix

* minor fix

* fix

* minor fix

* DataBatch and NDArrayIter doc modified (#6091)

* DataBatch and NDArrayIter doc modified

* fixes after review

* fixes after review

* wording changed

* some more fixes

* improvement

* desc fix

* Datadesc info added

* minor addition

* fix

* fix

* fix after review

* [Scala] Change version to 0.9.5-SNAPSHOT (#6173)

* [scala] change version to 0.9.5-SNAPSHOT

* API doc improvement Dropout and SoftmaxActivation (#6088)

* doc improve for dropout oper

* doc improve for SoftmaxActivation oper

* fix

* fix

* Update documentation for mx.callback.do_checkpoint (#6059)

* Update documentation for mx.callback.do_checkpoint

* Use module instead of model for example code.

* Update documentation for plot_graph. (#6098)

* Update documentation for plot_graph.

* Minor doc fix.

* Restruct get started (#6167)

* Change get started page

* Small fix

* Improve

* Update documentation of Initializer.dumps() (#6128)

* Doc Improvement - RMSProp and RMSPropAlex (#6107)

* rmsprop

* rmsprop alex

* add link in optimizer.py

* fix

* fix

* missed fix..

* Docforcs,fft,ifft (#6145)

* fft.cc

* add all

* changed the description of set_lr_mult and set_wd_mult

* Explicitly specify quiet in R install_version (#6171)
saurabh3949 pushed a commit to saurabh3949/mxnet that referenced this pull request May 23, 2017
* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability
saurabh3949 pushed a commit to saurabh3949/mxnet that referenced this pull request May 23, 2017
* updated docstring for set_lr_mult and set_wd_mult

* updated docstring per review

* Fixed imdecode crash bug when flag=0 (apache#6134)

* Fix (apache#6131)

* Docs for MXRecordIO, MXIndexedRecordIO modified (apache#6013)

* docs for MXIndexedRecordIO modified

* changes after review

* recordIO doc modified

* changes after review

* lint error

* minor change

* minor change after review

* empty commit to retrigger build

* changes after review

* Update documentation for mx.callback.Speedometer. (apache#6058)

* Update documentation for mx.callback.Speedometer.

* Minor doc changes.

* Use module instead of model in example code.

* update doc for Load (apache#6092)

* Installation instructions for MacOS and Cloud (apache#6012)

* Fix NDArray bool checking (apache#6130)

* fix shape order bug (apache#6136)

* TOC click unfold (apache#6133)

* [doc] new sphnix plugin  (apache#6105)

* update doc

* rm

* update

* update ndarray

* update mds

* update

* update

* update

* update

* update

* update

* update image.md and others

* update

* [doc] use debug mode to build (apache#6151)

* move ctc loss to contrib (apache#6154)

* Fix for invalid numpy float indexing (apache#6144)

* Fix python3 compatibilities (apache#6143)

* [doc] small changes to tutorials (apache#6164)

* [doc] Fix left toc link (apache#6162)

* [example]ADD practical functions and options for speech_recognition example (apache#6141)

* ADD practical functions and options for speech_recognition example

* add missing stt_bi_graphemes_util.py and deepspeech.cfg template

* Added reflection padding (apache#6123)

* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability

* Fixing LICENSE file and adding NOTICE (apache#6172)

* Creating NOTICE. 

When code moves to Apache, it will need adjusting to the Apache format.

* Replacing source header with full license text

* doc improvement - softmax, metrics, and initializer (apache#5945)

* doc improvement, softmaxoutput, initializer-constant, minor fixes

* doc improvement, metrics

* fix softmax doc, fix metric lint

* softmax more fixes

* add doc change in initializer.py. some minor fix in softmax_cross_entropy

* doc change in initializer.py

* fix grammer

* fix

* fix

* fix

* minor fix

* fix

* minor fix

* DataBatch and NDArrayIter doc modified (apache#6091)

* DataBatch and NDArrayIter doc modified

* fixes after review

* fixes after review

* wording changed

* some more fixes

* improvement

* desc fix

* Datadesc info added

* minor addition

* fix

* fix

* fix after review

* [Scala] Change version to 0.9.5-SNAPSHOT (apache#6173)

* [scala] change version to 0.9.5-SNAPSHOT

* API doc improvement Dropout and SoftmaxActivation (apache#6088)

* doc improve for dropout oper

* doc improve for SoftmaxActivation oper

* fix

* fix

* Update documentation for mx.callback.do_checkpoint (apache#6059)

* Update documentation for mx.callback.do_checkpoint

* Use module instead of model for example code.

* Update documentation for plot_graph. (apache#6098)

* Update documentation for plot_graph.

* Minor doc fix.

* Restruct get started (apache#6167)

* Change get started page

* Small fix

* Improve

* Update documentation of Initializer.dumps() (apache#6128)

* Doc Improvement - RMSProp and RMSPropAlex (apache#6107)

* rmsprop

* rmsprop alex

* add link in optimizer.py

* fix

* fix

* missed fix..

* Docforcs,fft,ifft (apache#6145)

* fft.cc

* add all

* changed the description of set_lr_mult and set_wd_mult

* Explicitly specify quiet in R install_version (apache#6171)
Guneet-Dhillon pushed a commit to Guneet-Dhillon/mxnet that referenced this pull request Sep 13, 2017
* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability
Guneet-Dhillon pushed a commit to Guneet-Dhillon/mxnet that referenced this pull request Sep 13, 2017
* updated docstring for set_lr_mult and set_wd_mult

* updated docstring per review

* Fixed imdecode crash bug when flag=0 (apache#6134)

* Fix (apache#6131)

* Docs for MXRecordIO, MXIndexedRecordIO modified (apache#6013)

* docs for MXIndexedRecordIO modified

* changes after review

* recordIO doc modified

* changes after review

* lint error

* minor change

* minor change after review

* empty commit to retrigger build

* changes after review

* Update documentation for mx.callback.Speedometer. (apache#6058)

* Update documentation for mx.callback.Speedometer.

* Minor doc changes.

* Use module instead of model in example code.

* update doc for Load (apache#6092)

* Installation instructions for MacOS and Cloud (apache#6012)

* Fix NDArray bool checking (apache#6130)

* fix shape order bug (apache#6136)

* TOC click unfold (apache#6133)

* [doc] new sphnix plugin  (apache#6105)

* update doc

* rm

* update

* update ndarray

* update mds

* update

* update

* update

* update

* update

* update

* update image.md and others

* update

* [doc] use debug mode to build (apache#6151)

* move ctc loss to contrib (apache#6154)

* Fix for invalid numpy float indexing (apache#6144)

* Fix python3 compatibilities (apache#6143)

* [doc] small changes to tutorials (apache#6164)

* [doc] Fix left toc link (apache#6162)

* [example]ADD practical functions and options for speech_recognition example (apache#6141)

* ADD practical functions and options for speech_recognition example

* add missing stt_bi_graphemes_util.py and deepspeech.cfg template

* Added reflection padding (apache#6123)

* Added reflection padding

* Lint fix

* Added 5d reflection padding

* Added failure in forward/backward for input dimensions other than 4 of 5

* Improved sanity check readability

* Fixing LICENSE file and adding NOTICE (apache#6172)

* Creating NOTICE. 

When code moves to Apache, it will need adjusting to the Apache format.

* Replacing source header with full license text

* doc improvement - softmax, metrics, and initializer (apache#5945)

* doc improvement, softmaxoutput, initializer-constant, minor fixes

* doc improvement, metrics

* fix softmax doc, fix metric lint

* softmax more fixes

* add doc change in initializer.py. some minor fix in softmax_cross_entropy

* doc change in initializer.py

* fix grammer

* fix

* fix

* fix

* minor fix

* fix

* minor fix

* DataBatch and NDArrayIter doc modified (apache#6091)

* DataBatch and NDArrayIter doc modified

* fixes after review

* fixes after review

* wording changed

* some more fixes

* improvement

* desc fix

* Datadesc info added

* minor addition

* fix

* fix

* fix after review

* [Scala] Change version to 0.9.5-SNAPSHOT (apache#6173)

* [scala] change version to 0.9.5-SNAPSHOT

* API doc improvement Dropout and SoftmaxActivation (apache#6088)

* doc improve for dropout oper

* doc improve for SoftmaxActivation oper

* fix

* fix

* Update documentation for mx.callback.do_checkpoint (apache#6059)

* Update documentation for mx.callback.do_checkpoint

* Use module instead of model for example code.

* Update documentation for plot_graph. (apache#6098)

* Update documentation for plot_graph.

* Minor doc fix.

* Restruct get started (apache#6167)

* Change get started page

* Small fix

* Improve

* Update documentation of Initializer.dumps() (apache#6128)

* Doc Improvement - RMSProp and RMSPropAlex (apache#6107)

* rmsprop

* rmsprop alex

* add link in optimizer.py

* fix

* fix

* missed fix..

* Docforcs,fft,ifft (apache#6145)

* fft.cc

* add all

* changed the description of set_lr_mult and set_wd_mult

* Explicitly specify quiet in R install_version (apache#6171)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants