-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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
【PaddlePaddle Hackathon 2】24、为 Paddle 新增 nn.ChannelShuffle 组网 API #40743
【PaddlePaddle Hackathon 2】24、为 Paddle 新增 nn.ChannelShuffle 组网 API #40743
Conversation
你的PR提交成功,感谢你对开源项目的贡献! |
PR格式检查通过,你的PR将接受Paddle专家以及开源社区的review,请及时关注PR动态。 |
PR格式检查通过,你的PR将接受Paddle专家以及开源社区的review,请及时关注PR动态。 |
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.
API的撰写已经很完善,部分细节需要修改
PADDLE_ENFORCE_GE(groups, 1, platform::errors::InvalidArgument( | ||
"groups should be larger than 0.")); |
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.
在infermeta中判断
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.
完成
void InferShape(framework::InferShapeContext* ctx) const override { | ||
PADDLE_ENFORCE_EQ( | ||
ctx->HasInput(framework::GradVarName("Out")), true, | ||
platform::errors::NotFound("Input(Out@Grad) should not be null")); | ||
PADDLE_ENFORCE_EQ( | ||
ctx->HasOutput(framework::GradVarName("X")), true, | ||
platform::errors::NotFound("Output(X@Grad) should not be null")); | ||
|
||
auto do_dims = ctx->GetInputDim(framework::GradVarName("Out")); | ||
PADDLE_ENFORCE_EQ(do_dims.size(), 4, | ||
platform::errors::InvalidArgument( | ||
"Input should be a 4-D tensor of format [N, C, " | ||
"H, W] or [N, H, W, C], but got %u.", | ||
do_dims.size())); | ||
|
||
auto dx_dims = do_dims; | ||
ctx->SetOutputDim(framework::GradVarName("X"), dx_dims); | ||
} |
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.
放入infermeta
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.
我看其他算子也都是只把前向的形状推断放在infermeta中,而反向的形状推断放在xxx_op.cc中。
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.
好的
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.
可以放到infermeta里,参考下这个PR的review
#40728
See the License for the specific language governing permissions and | ||
limitations under the License. */ | ||
|
||
#include <memory> |
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.
没有看到对这个库函数的使用
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.
已删去
"The number of groups to divide channels in[%u] " | ||
"should divide the number of channel[%u]", | ||
groups, | ||
input_dims[3])); |
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.
报错信息可以增加空格方便报错阅读
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.
是指把in[%u]
和channel[%u]
改成in [%u]
和channel [%u]
吗?
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.
嗯嗯
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.
完成。
int groups, | ||
const std::string& data_format, | ||
MetaTensor* out) { | ||
auto input_dims = x.dims(); |
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.
增加对groups,dataformat的检查
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.
完成
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
from __future__ import print_function |
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.
可删除
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.
完成
import paddle.fluid.core as core | ||
import paddle.fluid as fluid | ||
|
||
paddle.enable_static() |
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.
不需要一开始指定
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.
完成
|
||
self.assertRaises(ValueError, error_data_format) | ||
|
||
def test_error_layer(self): |
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.
增加group 不是正数、tensor不是4d的报错信息
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.
完成
请先通过CI噢~ |
@@ -69,10 +65,14 @@ def init_data_format(self): | |||
self.format = "NCHW" | |||
|
|||
def test_check_output(self): | |||
paddle.enable_static() |
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.
不需要单独在这里增加静态图的约束
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.
已删去,原先这么写是因为不设置为静态图就会报错。后来发现tools/static_mode_white_list.py
中也有test_pixel_shuffle
。经验证,在tools/static_mode_white_list.py
删去test_pixel_shuffle
后pixel_shuffle
的单测也会报错。于是我在tools/static_mode_white_list.py
中也增加了test_channel_shuffle
。
|
||
def test_check_grad(self): | ||
paddle.enable_static() |
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.
不需要单独在这里增加静态图的约束
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.
回复同上。
根据最新说明,_non_static_mode的调用路径需要更改为paddle.framework._non_static_mode,不再和fluid耦合。 |
11b3b03
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.
LG API
""" | ||
This API implements channel shuffle operation. | ||
See more details in :ref:`api_nn_vision_ChannelShuffle` . | ||
Parameters: |
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.
- 需要在每个关键字段前后增加空行,以保证官网正确解析文档~参考文档
- 中英文文档应保持一致
name (str, optional): The default value is None. Normally there is no need for user to set this property. | ||
Returns: | ||
Out(tensor): Rearranged tensor keeping the original tensor shape. | ||
Raises: |
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.
不需要增加raises,这个可以删除~
python/paddle/nn/layer/vision.py
Outdated
|
||
Shape: | ||
- x: 4-D tensor with shape: (N, C, H, W) or (N, H, W, C). | ||
- out: 4-D tensor with shape same as x. |
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.
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.
PixelShuffle
有shape这个关键字段。
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.
源码里用的是:
,好像是生成文档时自动变成-
的。
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.
LGTM for docs
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.
类似问题可参照修改:#40728 (review)
@@ -0,0 +1,74 @@ | |||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. |
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.
参考:#40728 (comment) 进行同理修改。
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.
完成
@@ -0,0 +1,73 @@ | |||
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. |
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.
参考:#40728 (comment) 进行同理修改。
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.
完成
e29fb30
完成 |
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. */ | ||
// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. |
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.
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.
LGTM
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.
LGTM
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.
LGTM for docs
* bind elementwise_mod_op_xpu *test=kunlun * add more supported dtypes and UTs *test=kunlun * fix datatype error * add op to in xpu1_op_list * Update Mac cmake version >=3.15 (#41456) * Update Mac cmake version >=3.15 * notest;read test1 notest;read test2 notest;read test3 * fix inference link error * fix inference link error * fix windows link error * fix cmake_policy * fix build big size * Add paddle::variant and replace paddle::any (#42139) * add variant and replace any * split attribute * disable unittest failed in eager CI in temporary (#42101) * test=py3-eager * test=py3-eager * test=py3-eager * combine graph_table and feature_table in graph_engine (#42134) * extract sub-graph * graph-engine merging * fix * fix * fix heter-ps config * test performance * test performance * test performance * test * test * update bfs * change cmake * test * test gpu speed * gpu_graph_engine optimization * add dsm sample method * add graph_neighbor_sample_v2 * Add graph_neighbor_sample_v2 * fix for loop * add cpu sample interface * fix kernel judgement * add ssd layer to graph_engine * fix allocation * fix syntax error * fix syntax error * fix pscore class * fix * change index settings * recover test * recover test * fix spelling * recover * fix * move cudamemcpy after cuda stream sync * fix linking problem * remove comment * add cpu test * test * add cpu test * change comment * combine feature table and graph table * test * test * pybind * test * test * test * test * pybind * pybind * fix cmake * pybind * fix * fix * add pybind * add pybind Co-authored-by: DesmonDay <908660116@qq.com> * [CustomDevice] add eager mode support (#42034) * fix FlattenContiguousRangeOpConverter out dim error (#42087) * fix FlattenContiguousRangeOpConverter out dim error * update code * fix python3.10 compile bug on windows (#42140) * Optimize dygraph GetExpectedKernelType perf (#42154) * opt dygraph scheduling * revert part impl * fix incorrect usages of std::move and other compile errors (#41045) * fix bug of std::move and others * fix an compile error in debug mode * fix wrong copy assignment operator Signed-off-by: tiancaishaonvjituizi <452565578@qq.com> * reformat Signed-off-by: tiancaishaonvjituizi <452565578@qq.com> * reformat Signed-off-by: tiancaishaonvjituizi <452565578@qq.com> * fix ArrayRef constructor following llvm * fix format * fix conflict with master * fix variant compile error (#42203) * [Eager] Support numpy.ndarry in CastNumpy2Scalar (#42136) * [Eager] Remove redundancy code, fix fp16 case (#42169) * [Eager] Support div(scalar) in eager mode (#42148) * [Eager] Support div scalar in eager mode * Updated and remove debug logs * Remove list, use 'or' directly * Remove useless statement * fix recompute (#42128) * fix recompute * modify return * add LICENSE in wheel dist-info package (#42187) * replace any by variant in infermeta (#42181) * 【PaddlePaddle Hackathon 2】24、为 Paddle 新增 nn.ChannelShuffle 组网 API (#40743) * Add infermeta for ChannelShuffle * Create channel_shuffle_grad_kernel.h * Create channel_shuffle_kernel.h * Create channel_shuffle_sig.cc * Create channel_shuffle_op.cc ChannelShuffle算子的描述 * Create channel_shuffle_kernel_impl.h ChannelShuffle核函数的实现 * Create channel_shuffle_grad_kernel_impl.h ChannelShuffle反向核函数的实现 * Add kernel register of channel shuffle and grad 注册ChannelShuffle及其反向的核函数 * add nn.functional.channel_shuffle * add nn.ChannelShuffle * Create test_channel_shuffle.py * Update example of ChannelShuffle in vision.py * Update test_channel_shuffle.py * 修改channel_shuffle核函数的实现位置 * 修正代码格式 * 删除多余空格 * 完善channel_shuffle的错误检查 * Update unary.cc * Update channel_shuffle_op.cc * Update test_channel_shuffle.py * Update unary.cc * add channel_shuffle * Update test_channel_shuffle.py * Update vision.py * 调整代码格式 * Update channel_shuffle_sig.cc * 更新ChannelShuffle的文档 * 更新channel_shuffle的文档 * remove ChannelShuffleOpArgumentMapping * add ChannelShuffleGradInferMeta * Update channel_shuffle_op.cc * 调整channel_shuffle及其梯度的核函数的位置 * Do not reset default stream for StreamSafeCUDAAllocator (#42149) * remove redundant computation in Categorical.probs (#42114) * Downloading data for test_analyzer_vit_ocr (#42041) * Change server URL * update config * add test to parallel UT rule * add checksum to ensure files are downloaded * change downloading target * reuse existing variable * change target directory * fix en docs of some Apis (gradients, scope_guard, cuda_places, name_scope, device_guard, load_program_state, scale, ParamAttr and WeightNormParamAttr) (#41604) * Update scope_guard; test=document_fix * gradients; test=document_fix * gradients; test=document_fix * name_scope; test=document_fix * cpu_places; test=document_fix * WeightNormParamAttr; test=document_fix * cuda_places; test=document_fix * load_program_state; test=document_fix * device_guard; test=document_fix * device_guard; test=document_fix * ParamAttr; test=document_fix * scale; test=document_fix * scale; test=document_fix * update code example;test=document_fix Co-authored-by: Chen Long <1300851984@qq.com> * fix datatype error add op to in xpu1_op_list *test=kunlun * fix elementwise_mod op path error *test=kunlun * fix elementwise_mod UT error *test=kunlun * fix datatype error add op to in xpu1_op_list *test=kunlun add op to in xpu1_op_list fix elementwise_mod op path error *test=kunlun fix elementwise_mod UT error *test=kunlun Co-authored-by: tianshuo78520a <707759223@qq.com> Co-authored-by: Chen Weihang <chenweihang@baidu.com> Co-authored-by: pangyoki <pangyoki@126.com> Co-authored-by: seemingwang <seemingwang@users.noreply.github.com> Co-authored-by: DesmonDay <908660116@qq.com> Co-authored-by: ronnywang <524019753@qq.com> Co-authored-by: baoachun <962571062@qq.com> Co-authored-by: Zhou Wei <1183042833@qq.com> Co-authored-by: tiancaishaonvjituizi <452565578@qq.com> Co-authored-by: Weilong Wu <veyron_wu@163.com> Co-authored-by: Roc <30228238+sljlp@users.noreply.github.com> Co-authored-by: BrilliantYuKaimin <91609464+BrilliantYuKaimin@users.noreply.github.com> Co-authored-by: Ruibiao Chen <chenruibiao@baidu.com> Co-authored-by: Feiyu Chan <chenfeiyu@baidu.com> Co-authored-by: Sławomir Siwek <slawomir.siwek@intel.com> Co-authored-by: Yilingyelu <103369238+Yilingyelu@users.noreply.github.com> Co-authored-by: Chen Long <1300851984@qq.com>
PR types
New features
PR changes
APIs
Describe
解决了Issue: #40309 。
增加了nn.ChannelShuffle和nn.functional.channel_shuffle,其行为是把其行为是将形为[N,C,H,W]重塑成[N,g,C/g,H,W]的形状,再转置成[N,C/g,g,H,W]的形状,最后重塑回[N,C,H,W]的形状。
设计文档: PaddlePaddle/community#40
中文文档: PaddlePaddle/docs#4501