openvino
openvino copied to clipboard
Extend Python API with a new `model.reshape()` overload
Context
Currently there are multiple ways to reshape model inputs in Python API. They are defined as bindings to C++ code.
A new way to reshape has been suggested - implicit input reshaping with a list of input shapes. An example of new, desired overload/Python API function:
modelhas three inputs: A, B and Cmodelis being reshaped with a list of shapes:model.reshape([[2,2], [1, 3, 224, 244], [10]])- the given shapes are assigned to respective inputs:
A.shape = [2, 2]B.shape = [1, 3, 244, 244]C.shape = [10]
Python API model binding needs to be extended with a new overload which will add this functionality.
What needs to be done?
- Add a new overload for
model.reshapeinmodelC++ bindings - Add tests for the new functionality in the correct test file -
test_model.py - Submit a PR
- Wait for review
Resources
- Contribution guide - start here!
- How to extend OpenVINO Python API
- How to test OpenVINO Python API
- Blog post on contributing to OpenVINO
Contact points
@p-wysocki @jiwaszki @akuporos
Don't hesitate to reach out, we're here to help!
Ticket: 110444
Do we need any placeholder if I want to change only specific shapes? E.g. model has 3 inputs and old last one needs to be changed.
I guess in that case the user should use dict overload, where a specific input can be reshaped. Either that or we do the placeholder you suggested, but I think that whatever the placeholder would be, it wouldn't be clear. We can't do -1 since it means a dynamic shape, None I think would look a bit weird, maybe some string? I guess it's a thing to discuss.
cc @jiwaszki @akuporos
hey @p-wysocki @ilya-lavrenov I want to work on this can you please assign it to me
thanks a lot for assigning me , i will surely come up with doubts or updates if any
@dev-seek Thanks for taking a look, we're here to answer any questions. :)
I guess in that case the user should use dict overload, where a specific input can be reshaped. Either that or we do the placeholder you suggested, but I think that whatever the placeholder would be, it wouldn't be clear. We can't do
-1since it means a dynamic shape,NoneI think would look a bit weird, maybe some string? I guess it's a thing to discuss.cc @jiwaszki @akuporos
As for placeholder values, there is a problem with adding them. What should be a concept instead of integers? Enums like ov.PartialShape.KEEP and consequence of it ov.Dimension.KEEP? Or just a string value KEEP?
I think that placeholder values are not in the scope of this task and @p-wysocki solution with dict is suitable for now (e.x. {1: [1, 21, 37]}).
In general case user could perform something like model.reshape([model.inputs[0].shape, [1, 22, 48], model.inputs[0].partial_shape) where shape/partial_shape can be used interchangeably depending on dynamism of given model inputs. It's worth adding a test-case(s) for such usage.
hey @p-wysocki @jiwaszki Just to clearify can i build the whole on Debian as here -> https://github.com/openvinotoolkit/openvino/blob/master/docs/dev/build_linux.md its written for Ubuntu can i do the same for Debian as Ubuntu is based on Debian
Hi @dev-seek, as far as I know this instruction works for Debian. If you encounter any issues please let us know.
hey is the issue resolve I want to contribute . I am new to open-source contribution
Hey @Jay-sanjay i am already contributing to it
I'm returning the task to being open due to current assignee's inactivity.
Sry @p-wysocki i am not inactive in middle i am suffering from a bad health issue related to heart... But believe me i am on after a week... If u can plz remain it as it is..
i really want this to be done if u can, please reassign it to me @p-wysocki
Sure, get well soon. :)
Thanks a lot @p-wysocki Bed rest of 1 week is remaining, not suggested to work via doc... After a week i will be back and start working on it for sure
I'm returning the task to being open due to current assignee's inactivity.
Hey @p-wysocki doesn't this already solve this issue?
@slyalin could you please take a look? IIRC this feature was at your request, do you think there's a benefit on expanding our API to also accepting lists, when we have an overload which @siddhant-0707 linked?
@slyalin
@p-wysocki, the mentioned by @siddhant-0707 method accepts py::dict, this ticket is about a list. I don't see how they are connected. The problem when we want to skip part of the arguments in reshape and still want to use a method that accepts a list of shapes should be left as-is -- without any resolution, because in this case, indeed, mentioned by @siddhant-0707 method with py::dict should be used.
So we still don't have a method that just accepts the list of shapes. In the example from the description, instead of model.reshape([[2,2], [1, 3, 224, 244], [10]]) we still need to write model.reshape({0: [2,2], 1: [1, 3, 224, 244], 2: [10]}) which is rather annoying and is not aligned with capabilities provided for a compiled model used as a callable -- there I can use a list of inputs.
The real problem is how to align a newly proposed reshape method with other existing reshape methods: how to avoid ambiguities.
want to make sure I understand this, basically to resolve this issue, go into model.cpp and add a new model.def("reshape", [](){ <code>} that will support the new desired functionality? if this seems to be an appropriate amount of understanding then I would like to pick up this issue
@slyalin @p-wysocki
Hello @mcshawn10, your understanding is correct. Adding a new model.def adds a new Python binding "overload" - it most likely should call the same C++ function internally, but probably do some preprocessing on the input data gotten from Python. Thanks for being interested in that! If you wish to pick up the issue, you can comment .take.
Thank you for looking into this issue! Please let us know if you have any questions or require any help.
Thank you for looking into this issue! Please let us know if you have any questions or require any help.
.take
Thanks for being interested in this issue. It looks like this ticket is already assigned to a contributor. Please communicate with the assigned contributor to confirm the status of the issue.
Hi @p-wysocki, could you transfer assignment of this issue, thank you!
Hi @p-wysocki, could you transfer assignment of this issue, thank you!
you got it! Sorry for inconvenience, we have to seriously talk with our bot ;) have fun!
Hello @mcshawn10, is there anything we can help you with? Do you have any questions?