1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

题解

  • 题面概述:给定展开后的输入张量与卷积核及其形状,和分组数 groupsgroupsgroups,实现分组卷积(包含深度卷积的特例)前向计算。默认 stride=1stride=1stride=1、padding=0padding=0padding=0、dilation=1dilation=1dilation=1。若形状与 groupsgroupsgroups 不合法或输出空间维度非正,则输出 −1-1−1。

  • 关键条件:

    • inchannelsin_channels % groups = 0inc​hannels
    • outchannelsout_channels % groups = 0outc​hannels
    • kchannels=in_channelsgroupsk_channels = \dfrac{in\_channels}{groups}kc​hannels=groupsin_channels​
    • 输出尺寸:Hout=H−Kh+1,Wout=W−Kw+1H_{out} = H - K_h + 1,W_{out} = W - K_w + 1Hout​=H−Kh​+1,Wout​=W−Kw​+1,需要 Hout>0,Wout>0H_{out} > 0, W_{out} > 0Hout​>0,Wout​>0

P3493.第2题-Group卷积实现

    1000ms Tried: 1565 Accepted: 408 Difficulty: 5 所属公司 : 华为
    算法与标签>模拟

题目内容

卷积(Convolution)(Convolution)(Convolution)是计算视觉中常用的计算算子,广泛应用于图像分类、检测、跟踪等多领域。

如下图所示,以 22 2个三维张量卷积计算为例,取输入张量 为通道数 、高度 、宽度 ,卷积核 为通道数 、高度 、宽度 ,二者执行卷积计算要求其通道数相同。

当取卷积计算步长 ,填充 ,膨胀 ,无偏置项(bias)(bias)(bias)时,卷积核 在输入张量 上从左至右,从上至下滑动,分别与滑窗所重叠的输入张量 切片,逐元素相乘求和后,得到输出张量 的各元素。

例如:

y0,0=x0,0,0k0,0,0+x0,0,1k0,0,1+x0,1,0k0,1,0+x0,1,1k0,1,1+x1,0,1k1,0,1+x1,1,0k1,1,0+x1,1,1k1,1,1+x2,0,0k2,0,0+x2,1,0k2,1,0+x2,1,1k2,1,1=72y_{0,0}=x_{0,0,0}k_{0,0,0}+x_{0,0,1}k_{0,0,1}+x_{0,1,0}k_{0,1,0}+x_{0,1,1}k_{0,1,1}+x_{1,0,1}k_{1,0,1}+x_{1,1,0}k_{1,1,0}+x_{1,1,1}k_{1,1,1}+x_{2,0,0}k_{2,0,0}+x_{2,1,0}k_{2,1,0}+x_{2,1,1}k_{2,1,1}=72y0,0​=x0,0,0​k0,0,0​+x0,0,1​k0,0,1​+x0,1,0​k0,1,0​+x0,1,1​k0,1,1​+x1,0,1​k1,0,1​+x1,1,0​k1,1,0​+x1,1,1​k1,1,1​+x2,0,0​k2,0,0​+x2,1,0​k2,1,0​+x2,1,1​k2,1,1​=72

面向不同的应用需求,卷积存在多类变种。分组卷积(GroupConvolution)(Group Convolution)(GroupConvolution)即是随2012 2012 2012年AlexNet AlexNet AlexNet提出的一种变种,其将输入张量和卷积核分组后,分别执行卷积计算,然后把多个输出张量进行融合。

例如,输入张量尺寸为 1×32×32×321×32×32×321×32×32×32(其中首个维度1 1 1为样本数),卷积核尺寸为4×16×3×3 4×16×3×34×16×3×3(其中首个维度4 44 为输出张量通道数,亦可理解为卷积核个数),下图为分组数 时分组卷积计算。

输入张量被切分为1×16×32×321×16×32×321×16×32×32 的两组张量,卷积核被切分为2×16×3×32×16×3×32×16×3×3 的两组张量,分组进行无 paddingpadding padding的卷积计算后,将两组尺寸为1×2×30×301×2×30×301×2×30×30 的计算结果,在第2 22 个维度拼接,得到尺寸为1×4×30×301×4×30×301×4×30×30 的输出张量。

请不使用PyTorch、MindSpore、PaddlePaddle PyTorch、MindSpore、PaddlePaddlePyTorch、MindSpore、PaddlePaddle 等AI AIAI 框架,使用编程语言原生库,编写一个支持分组卷积和深度卷积前向传播的函数,根据输入张量、卷积核、分组数,计算输出张量。

输入描述

  1. in_data: 4 维输入张量展开后的数据序列,以空格分隔的正整数;

  2. in_shape: 4 维输入张量的形状,以空格分隔的 4 个正整数,依次为

    • batch sizebatch\ sizebatch size(样本数)
    • in_channelsin\_channelsin_channels(输入张量通道数)
    • heightheightheight(高度)
    • widthwidthwidth(宽度)
  3. kernel_data: 4 维卷积核展开后的数据序列,以空格分隔的正整数;

  4. kernel_shape: 4 维卷积核的形状,以空格分隔的 4 个正整数,依次为

    • out_channelsout\_channelsout_channels(输出张量通道数)
    • k_channelsk\_channelsk_channels(卷积核通道数)
    • kernel_hkernel\_hkernel_h(卷积核高度)
    • kernel_wkernel\_wkernel_w(卷积核宽度)
  5. groups: 分组数,需满足

in_channels%groups=0in\_channels\%groups = 0in_channels%groups=0 ,out_channels%groups=0out\_channels\%groups = 0out_channels%groups=0, k_channels=in_channelsgroupsk\_channels = \frac{in\_channels}{groups}k_channels=groupsin_channels​

输出描述

  1. out_data: 44 4维输出张量展开后的数据序列,以空格分隔的正整数;
  2. out_shape: 444 维输出张量的形状,以空格分隔的4 4 4个正整数,依次为
    • batch_sizebatch\_sizebatch_size(样本数)
    • out_out\_out_channels(输出张量通道数)
    • heightheightheight(高度)
    • widthwidthwidth(宽度)

若输入张量和卷积核的形状与 groupgroup group的取值存在冲突,或出现其它取值冲突导致无法执行卷积计算,则 out_data 和 out_shape 均返回 −1-1−1。

样例1

输入

1 2 3 4 5 6 7 8
1 2 2 2
1 0 0 1 -1 0 0 -1
2 1 2 2
2

输出

5 -13
1 2 1 1

说明

输入张量为:

[[1234],[5678]]\left[\left[\begin{array}{ll} 1 & 2 \\ 3 & 4 \end{array}\right],\left[\begin{array}{ll} 5 & 6 \\ 7 & 8 \end{array}\right]\right][[13​24​],[57​68​]]

输入张量形状为1×2×2×21×2×2×21×2×2×2 ;

卷积核为:

[[1001],[−100−1]]\left[\left[\begin{array}{ll} 1 & 0 \\ 0 & 1 \end{array}\right],\left[\begin{array}{cc} -1 & 0 \\ 0 & -1 \end{array}\right]\right][[10​01​],[−10​0−1​]]

卷积核形状为2×1×2×22×1×2×22×1×2×2 ;

分组数为222 ,输出张量为:

⌈[5],⌈−13]⌉\lceil[5],\lceil-13]\rceil⌈[5],⌈−13]⌉

输出张量形状为1×2×1×11×2×1×11×2×1×1 。

样例2

输入

1 2 3 4 5 6 7 8 9
1 1 3 3
1 0 0 -1
1 1 2 2
2

输出

-1
-1

说明

解释:

由于inininchannels=1channels=1 channels=1、outoutoutchannels=1channels=1 channels=1,不满足

in_channels%groups=0in\_channels\%groups = 0in_channels%groups=0 ,out_channels%groups=0out\_channels\%groups = 0out_channels%groups=0,

的条件,因此 out_data 和 out_shape 均返回 -1。

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 3, 51ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?