
    Ng3                     V    d Z ddlZddlmZ ddlmZ d Z G d dej                  ZdS )	z PyTorch Mixed Convolution

Paper: MixConv: Mixed Depthwise Convolutional Kernels (https://arxiv.org/abs/1907.09595)

Hacked together by / Copyright 2020 Ross Wightman
    N)nn   )create_conv2d_padc                       fdt                    D             }|dxx          t          |          z
  z  cc<   |S )Nc                     g | ]}z  S  r   ).0_num_chan
num_groupss     T/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/layers/mixed_conv2d.py
<listcomp>z#_split_channels.<locals>.<listcomp>   s    ???X#???    r   )rangesum)r   r   splits   `` r   _split_channelsr      sN    ?????U:->->???E	!HHH3u::%%HHHLr   c                   .     e Zd ZdZ	 	 d fd	Zd Z xZS )	MixedConv2dz Mixed Grouped Convolution

    Based on MDConv and GroupedConv in MixNet impl:
      https://github.com/tensorflow/tpu/blob/master/models/official/mnasnet/mixnet/custom_layers.py
       r    Fc                    t          t          |                                            t          |t                    r|n|g}t          |          }	t          ||	          }
t          ||	          }t          |
          | _        t          |          | _	        t          t          ||
|                    D ]D\  }\  }}}|r|nd}|                     t          |          t          |||f||||d|           E|
| _        d S )Nr   )stridepaddingdilationgroups)superr   __init__
isinstancelistlenr   r   in_channelsout_channels	enumeratezip
add_modulestrr   splits)selfr"   r#   kernel_sizer   r   r   	depthwisekwargsr   	in_splits
out_splitsidxkin_chout_chconv_groups	__class__s                    r   r   zMixedConv2d.__init__   s#   k4  ))+++%/T%B%BUkk%%
#K<<	$\:>>
y>>
OO'0[)Z1X1X'Y'Y 	 	#C#!UF#,3%%!KOOC!61V-3#h{V VNTV V     r   c                     t          j        || j        d          fdt          |                                           D             }t          j        |d          }|S )Nr   c                 8    g | ]\  }} ||                   S r   r   )r	   icx_splits      r   r   z'MixedConv2d.forward.<locals>.<listcomp>1   s)    DDD41a71:DDDr   )torchr   r(   r$   valuescat)r)   xx_outr9   s      @r   forwardzMixedConv2d.forward/   sW    +aa00DDDD9T[[]]+C+CDDDIeQr   )r   r   r   r   F)__name__
__module____qualname____doc__r   r?   __classcell__)r4   s   @r   r   r      s_         
 ?@=B           *      r   r   )rC   r:   r   conv2d_samer   r   
ModuleDictr   r   r   r   <module>rG      s            * * * * * *      "-     r   