
    DPh                        d dl Z d dlZddl d dlZd dlmZ d dlmZ dZd Z	d Z
dedej                  fd	Zdedej                  fd
Zdej                  j                  j                   fdZd Zd Zd Zd Zd Zd Zd Zy)    N   )*)_ConvNdc                     d}| j                         D ])  }|t        j                  |j                         g      z  }+ t	        | j                               | j
                  d<   y Nr   )
parameterstorchDoubleTensornumelcalculate_parameterstotal_params)mxyr   ps        bC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\thop/vision/basic_hooks.pycount_parametersr      sM    L\\^**AGGI;77 ,Q\\^<ANN1    c                 >    | xj                   t               z  c_         y N)	total_opscalculate_zero_opsr   r   r   s      r   zero_opsr      s    KK%''Kr   r   r   c           	         |d   }t        j                  | j                  j                         dd        j	                         }| j
                  dnd}| xj                  t        t        |j                        t        |j                        t        | j                  j                        | j                  | j
                        z  c_        y )Nr      r   )
input_sizeoutput_sizekernel_sizegroupsbias)r	   zerosweightsizer   r!   r   calculate_conv2d_flopslistshaper    )r   r   r   
kernel_opsbias_opss        r   count_convNdr*      s    	!AQXX]]_QR01779JFF&qAHKK)!'']177m188>>*vv Kr   c                 >   |d   }t        j                  |j                         d d |j                         dd  z         j                         }| xj                  t        | j                  j                         | j                  j                         |      z  c_        y )Nr   r   r   )	r	   r"   r$   r   r   calculate_convr!   nelementr#   )r   r   r   r   s       r   count_convNd_ver2r.   -   sr    	!A ++qvvx|affhqrl:<BBDK KK>!&&//"3QXX5F5F5H+VVKr   c                     |d   }t        |j                               }t        | dd      st        | dd      r|dz  }| xj                  |z  c_        y )Nr   affineFelementwise_affiner   )calculate_normr   getattrr   )r   r   r   flopss       r   count_normalizationr5   <   sL     	
!A1779%E8U#wq2F'N
KK5Kr   c                     |d   }|j                         }| j                  s| xj                  t        |      z  c_        y y r   )r   trainingr   calculate_relur   r   r   	nelementss       r   count_prelur;   R   s5    	!A	I::	~i00 r   c                     |d   }|j                         }| xj                  t        t        |j                              z  c_        y r   )r   r   calculate_relu_flopsr&   r'   r9   s       r   
count_relur>   Z   s2    	!A	IKK'QWW66Kr   c                     |d   }|j                         | j                     }|j                         |z  }| xj                  t	        ||      z  c_        y r   )r$   dimr   r   calculate_softmax)r   r   r   	nfeatures
batch_sizes        r   count_softmaxrD   b   sD    	!AIi'JKK$Z;;Kr   c                 `    |j                         }| xj                  t        |      z  c_        y r   )r   r   calculate_avgpool)r   r   r   num_elementss       r   count_avgpoolrH   j   s#     779LKK$\22Kr   c           	      F   t        j                  t        j                  g |d   j                  dd        t        j                  g |j                  dd              }t        j                  |      }|j                         }| xj                  t        ||      z  c_        y )Nr   r   )r	   divr
   r'   prodr   r   calculate_adaptive_avg)r   r   r   kernel	total_addrG   s         r   count_adap_avgpoolrO   r   s    YY.adjjn./+aggabk+,F 

6"I779LKK))\BBKr   c                    | j                   dvr8t        j                  d| j                   z         | xj                  dz  c_        y |d   }| xj                  t	        | j                   |j                               z  c_        y )N)nearestlinearbilinearbicubicz1mode %s is not implemented yet, take it a zero opr   )modeloggingwarningr   calculate_upsampler-   r   s      r   count_upsamplerY   }   sb    vv   	KaffTU	qaD	)!&&!**,??r   c                 z    | j                   }|j                         }| xj                  t        ||      z  c_        y r   )in_featuresr   r   calculate_linear)r   r   r   	total_mulrG   s        r   count_linearr^      s.    I 779LKK#I|<<Kr   )argparserV   	calc_funcr	   torch.nnnntorch.nn.modules.convr   multiply_addsr   r   Tensorr*   r.   modules	batchnorm
_BatchNormr5   r;   r>   rD   rH   rO   rY   r^    r   r   <module>rj      s         )=(G 5<< .W W W	2:://:: 	,17<3C@=r   