
    ~Why_                     R   d Z ddlmc mZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZdddddddZ e            ZdZ	 	 	 	 	 	 	 	 	 	 	 	 d0dZ ed          	 	 	 	 	 	 	 	 	 	 	 d1d            Z ed          	 	 	 	 	 	 	 	 	 	 	 d1d             Ze                    d!"          e_         e                    d#"          e_         d$ Zd% Zd& Zd2d(Zd) Z d* Z! ed+          d3d,            Z" ed-          d4d/            Z#e	j#        j         e#_         dS )5zMobileNet v3 models for Keras.    N)backend)models)imagenet_utils)VersionAwareLayers)
data_utils)layer_utils)
tf_logging)keras_exportzJhttps://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v3/) 765b44a33ad4005b3ac83185abf1d0eb 40af19a13ebea4e2ee0c676887f69a2e) 59e551e166be033d707958cf9e29a6a7 07fb09a5933dd0c8eaafa16978110389) 675e7b876c45c57e9e63e6d90a36599c ec5221f64a2f6d1ef965a614bdae7973) cb65d4e5be93758266aa0a7f2c6708b7 ebdb5cc8e0b497cd13a7c275d475c819) 8768d4c2e7dee89b9d02b2d03d65d862 d3e8ec802a04aa4fc771ee12a9a9b836) 99cd97fb2fcdad2bf028eb838de69e37 cde8136e733e811080d9fcd8a252f7e4)zlarge_224_0.75_floatzlarge_224_1.0_floatz large_minimalistic_224_1.0_floatzsmall_224_0.75_floatzsmall_224_1.0_floatz small_minimalistic_224_1.0_floata  Instantiates the {name} architecture.

  Reference:
  - [Searching for MobileNetV3](
      https://arxiv.org/pdf/1905.02244.pdf) (ICCV 2019)

  The following table describes the performance of MobileNets v3:
  ------------------------------------------------------------------------
  MACs stands for Multiply Adds

  |Classification Checkpoint|MACs(M)|Parameters(M)|Top1 Accuracy|Pixel1 CPU(ms)|
  |---|---|---|---|---|
  | mobilenet_v3_large_1.0_224              | 217 | 5.4 |   75.6   |   51.2  |
  | mobilenet_v3_large_0.75_224             | 155 | 4.0 |   73.3   |   39.8  |
  | mobilenet_v3_large_minimalistic_1.0_224 | 209 | 3.9 |   72.3   |   44.1  |
  | mobilenet_v3_small_1.0_224              | 66  | 2.9 |   68.1   |   15.8  |
  | mobilenet_v3_small_0.75_224             | 44  | 2.4 |   65.4   |   12.8  |
  | mobilenet_v3_small_minimalistic_1.0_224 | 65  | 2.0 |   61.9   |   12.2  |

  For image classification use cases, see
  [this page for detailed examples](
    https://keras.io/api/applications/#usage-examples-for-image-classification-models).

  For transfer learning use cases, make sure to read the
  [guide to transfer learning & fine-tuning](
    https://keras.io/guides/transfer_learning/).

  Note: each Keras Application expects a specific kind of input preprocessing.
  For MobileNetV3, by default input preprocessing is included as a part of the
  model (as a `Rescaling` layer), and thus
  `tf.keras.applications.mobilenet_v3.preprocess_input` is actually a
  pass-through function. In this use case, MobileNetV3 models expect their
  inputs to be float tensors of pixels with values in the [0-255] range.
  At the same time, preprocessing as a part of the model (i.e. `Rescaling`
  layer) can be disabled by setting `include_preprocessing` argument to False.
  With preprocessing disabled MobileNetV3 models expect their inputs to be float
  tensors of pixels with values in the [-1, 1] range.

  Args:
    input_shape: Optional shape tuple, to be specified if you would
      like to use a model with an input image resolution that is not
      (224, 224, 3).
      It should have exactly 3 inputs channels (224, 224, 3).
      You can also omit this option if you would like
      to infer input_shape from an input_tensor.
      If you choose to include both input_tensor and input_shape then
      input_shape will be used if they match, if the shapes
      do not match then we will throw an error.
      E.g. `(160, 160, 3)` would be one valid value.
    alpha: controls the width of the network. This is known as the
      depth multiplier in the MobileNetV3 paper, but the name is kept for
      consistency with MobileNetV1 in Keras.
      - If `alpha` < 1.0, proportionally decreases the number
          of filters in each layer.
      - If `alpha` > 1.0, proportionally increases the number
          of filters in each layer.
      - If `alpha` = 1, default number of filters from the paper
          are used at each layer.
    minimalistic: In addition to large and small models this module also
      contains so-called minimalistic models, these models have the same
      per-layer dimensions characteristic as MobilenetV3 however, they don't
      utilize any of the advanced blocks (squeeze-and-excite units, hard-swish,
      and 5x5 convolutions). While these models are less efficient on CPU, they
      are much more performant on GPU/DSP.
    include_top: Boolean, whether to include the fully-connected
      layer at the top of the network. Defaults to `True`.
    weights: String, one of `None` (random initialization),
      'imagenet' (pre-training on ImageNet),
      or the path to the weights file to be loaded.
    input_tensor: Optional Keras tensor (i.e. output of
      `layers.Input()`)
      to use as image input for the model.
    pooling: String, optional pooling mode for feature extraction
      when `include_top` is `False`.
      - `None` means that the output of the model
          will be the 4D tensor output of the
          last convolutional block.
      - `avg` means that global average pooling
          will be applied to the output of the
          last convolutional block, and thus
          the output of the model will be a
          2D tensor.
      - `max` means that global max pooling will
          be applied.
    classes: Integer, optional number of classes to classify images
      into, only to be specified if `include_top` is True, and
      if no `weights` argument is specified.
    dropout_rate: fraction of the input units to drop on the last layer.
    classifier_activation: A `str` or callable. The activation function to use
      on the "top" layer. Ignored unless `include_top=True`. Set
      `classifier_activation=None` to return the logits of the "top" layer.
      When loading pretrained weights, `classifier_activation` can only
      be `None` or `"softmax"`.
    include_preprocessing: Boolean, whether to include the preprocessing
      layer (`Rescaling`) at the bottom of the network. Defaults to `True`.

  Call arguments:
    inputs: A floating point `numpy.array` or a `tf.Tensor`, 4D with 3 color
      channels, with values in the range [0, 255] if `include_preprocessing`
      is True and in the range [-1, 1] otherwise.

  Returns:
    A `keras.Model` instance.
      ?largeFTimagenet  皙?softmaxc           
         |dv s6t           j        j                            |          st	          d|           |dk    r|r|	dk    rt	          d|	           |B|?	 t          j        |          }ng# t          $ rZ 	 t          j        t          j        |                    }n/# t          $ r" t	          d|dt          |                     w xY wY nw xY w|rt          j
                    dk    rLt          j        |          d	         |d	         k    r't	          d
| dt          j        |                     n]t          j        |          d         |d	         k    r't	          d| dt          j        |                     nt	          d|d          ||	 t          j        |           n.# t          $ r! t	          d|dt          |          d          w xY wt          j        |          rt          j
                    dk    r:t          j        |          d         }t          j        |          d         }d||f}n9t          j        |          d	         }t          j        |          d         }||df}||d}t          j
                    dk    rd\  }}nd\  }}||         }||         }|r!|r|dk     s|dk     rt	          d| d          |dk    r=|s|dvs|r|dk    rt	          d          ||k    s|dk    rt          j        d           |t                              |          }n3t          j        |          st                              ||           }n|}t          j
                    dk    rd	nd!}|rd}t           }d }nd"}t"          }d#}|}|r$t                              d$d%&          |          }t                              d'dd(d)d*d+,          |          }t                              |d-d.d/0          |          } ||          } | ||||          }t+          t          j        |          |         d1z            }|dk    rt+          ||z            }t                              |d	d)d*d23          |          }t                              |d-d.d40          |          } ||          }|rt                              d56          |          }t                              |d	d)d5d73          |          } ||          }|d8k    r"t                              |          |          }t                              |	d	d)d9:          |          }t                                          |          }t3          j        ||           t                              |d;<          |          }nS|
d=k    r$t                              d>?          |          }n)|
d@k    r#t                              dA?          |          }|t          j        |          }n|}t;          j        ||dB|z   ?          }|dk    rdC                    ||rdDndEtA          |                    }|rdF|z   dGz   }tB          |         d8         }ndF|z   dHz   }tB          |         d	         }tE          j#        |tH          |z   dI|J          }|%                    |           n||%                    |           |S )KN>   Nr   zThe `weights` argument should be either `None` (random initialization), `imagenet` (pre-training on ImageNet), or the path to the weights file to be loaded.  Received weights=r   r   zkIf using `weights` as `"imagenet"` with `include_top` as true, `classes` should be 1000.  Received classes=zinput_tensor: z7is not type input_tensor.  Received type(input_tensor)=channels_first   zWhen backend.image_data_format()=channels_first, input_shape[1] must equal backend.int_shape(input_tensor)[1].  Received input_shape=z", backend.int_shape(input_tensor)=   zTinput_shape[1] must equal backend.int_shape(input_tensor)[2].  Received input_shape=zinput_tensor specified: zis not a keras tensorz	is type: zwhich is not a valid type   )NNr!   channels_last)r   r   )r   r        z9Input size must be at least 32x32; Received `input_shape=`)g      ?r   r   z|If imagenet weights are being loaded, alpha can be one of `0.75`, `1.0` for non minimalistic or `1.0` for minimalistic only.   z`input_shape` is undefined or non-square, or `rows` is not 224. Weights for input shape (224, 224) will be loaded as the default.)shape)tensorr&      g      ?g?g      )scaleoffset   )r    r    sameFConv)kernel_sizestridespaddinguse_biasnameMbP?+?zConv/BatchNormaxisepsilonmomentumr3      Conv_1r/   r1   r2   r3   zConv_1/BatchNormT)keepdimsConv_2r   Logitsr/   r1   r3   Predictions)
activationr3   avgavg_poolr3   maxmax_poolMobilenetV3z{}{}_224_{}_float_minimalistic weights_mobilenet_v3_z.h5z_no_top_v2.h5r   )cache_subdir	file_hash)&tfiogfileexists
ValueErrorr   is_keras_tensorr   get_source_inputstypeimage_data_format	int_shapeloggingwarninglayersInputrelu
hard_swish	RescalingConv2DBatchNormalization_depthGlobalAveragePooling2DDropoutFlattenr   validate_activation
ActivationGlobalMaxPooling2Dr   ModelformatstrWEIGHTS_HASHESr   get_fileBASE_WEIGHT_PATHload_weights) stack_fnlast_point_chinput_shapealpha
model_typeminimalisticinclude_topweightsinput_tensorclassespoolingdropout_rateclassifier_activationinclude_preprocessingis_input_t_tensorrowscolsrow_axiscol_axis	img_inputchannel_axiskernelrB   se_ratioxlast_conv_chinputsmodel
model_name	file_namerM   weights_paths                                    e/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/applications/mobilenet_v3.pyMobileNetV3r      s     )))RU[-?-?-H-H)* !(	* *
 
 	
 *D* '* *
 
 	
 <#;	 ' 7 E E 	 	 	
$+$;1,??% %!!     $ H373E3EH H   "!	  	(**.>>>$\2215QGG$= (3= =
 #,\::= =   H $\2215QGG$='2= = #,\::	= =   H *'   |7		#L1111 	 	 	 \""+  	 "<00 	.(**.>>>(66q9(66q9 $o(66q9(66q9#T1o|3% ""o55#((#(x Dx D 
 
$))tbyy  
 
 	
 *
	[(( )2   4<<43;;O)   LL{L33		&|44 	%LLLII$I1337GGG11RL 

A @;t<<Q??
 	 	 	 		 		A 	!!4%>N 	" 	 			 		A 	
1AFJ11A'+A..|<q@AAL s{{}u455 	 	 	 		 		A 	!!4%>P 	" 	 			 		A 	
1A >))4)88;;MM  
 
   JqMM!|,,Q//AMMF  
 

  NNQ*+@'JJJ,=  
 

  e--:->>qAAAA))z)::1==A .|<< L)CDDDE *(//<?RU
 

  	6/*<uDI&z215II/*<NI&z215I!*y(!	
 
 
 	<((((		7###Ls6   "A7 7
C&B)(C),CCC%F: :+G%z#keras.applications.MobileNetV3Smallc                 F    fd}t          |d| d||||||||	|
          S )Nc           
         fd}t          | d |d          dd|t          d          } t          | d |d          ddd t          d          } t          | d	 |d          ddd t          d          } t          | d
 |d          |d||d          } t          | d |d          |d||d
          } t          | d |d          |d||d          } t          | d |d          |d||d          } t          | d |d          |d||d          } t          | d |d          |d||d          } t          | d |d          |d||d          } t          | d |d          |d||d          } | S )Nc                 (    t          | z            S Nra   drr   s    r   depthz1MobileNetV3Small.<locals>.stack_fn.<locals>.depth      !e)$$$    r   r,   r!   r    r   g      @   gUUUUUU@   (   r:   r)   0      `      	   
   _inverted_res_blockr\   r   r   rB   r   r   rr   s        r   ro   z"MobileNetV3Small.<locals>.stack_fn  s   	% 	% 	% 	% 	%  1eeBiiAxqII9eeBiiAtT1MM9eeBiiAtT1MMq%%))VQ*a
 
  q%%))VQ*a
 
  q%%))VQ*a
 
  q%%))VQ*a
 
  q%%))VQ*a
 
  q%%))VQ*a
 
  q%%))VQ*a
 
  q%%))VQ*b
 
 r   i   smallr   rq   rr   rt   ru   rv   rw   rx   ry   rz   r{   r|   ro   s    `          r   MobileNetV3Smallr     s[        B   r   z#keras.applications.MobileNetV3Largec                 F    fd}t          |d| d||||||||	|
          S )Nc           
         fd}t          | d |d          ddd t          d          } t          | d |d          ddd t          d          } t          | d |d          ddd t          d          } t          | d |d	          |d|t          d          } t          | d |d	          |d|t          d          } t          | d |d	          |d|t          d
          } t          | d |d          ddd |d          } t          | d |d          ddd |d          } t          | d |d          ddd |d          } t          | d |d          ddd |d          } t          | d |d          dd||d          } t          | d |d          dd||d          } t          | d |d          |d||d          } t          | d |d          |d||d          } t          | d |d          |d||d          } | S )Nc                 (    t          | z            S r   r   r   s    r   r   z1MobileNetV3Large.<locals>.stack_fn.<locals>.depth  r   r   r   r,   r!   r   r   r   r    r   r)   r:   P   g      @r   gffffff@r   r   p   r                  r   r   s        r   ro   z"MobileNetV3Large.<locals>.stack_fn  sS   	% 	% 	% 	% 	%  1eeBiiAtT1EE1eeBiiAtT1EE1eeBiiAtT1EE1eeBiiHdANN1eeBiiHdANN1eeBiiHdANN1eeBiiAtZKK3b		1az1MM3b		1az1MM3b		1az1MMq%%**aHj"
 
  q%%**aHj"
 
  q%%**fa:r
 
  q%%**fa:r
 
  q%%**fa:r
 
 r   i   r   r   r   s    `          r   MobileNetV3Larger     sZ        >   r   r   rE   r   c                 D    t                                          |           S r   rZ   ReLUr   s    r   r\   r\   )  s    ;;==r   c                 R    t                              d          | dz             dz  S )Ng      @g      @gUUUUUU?r   r   s    r   hard_sigmoidr   -  s%    ;;sAG$$	22r   c                 b    t                                          | t          |           g          S r   )rZ   Multiplyr   r   s    r   r]   r]   1  s%    ??aa1222r   r   c                 |    ||}t          |t          | |dz  z             |z  |z            }|d| z  k     r||z  }|S )Nr    g?)rF   int)vdivisor	min_valuenew_vs       r   ra   ra   <  sR    		3q7Q;//7:WDEEEsQwLr   c                    t                              d|dz             |           }t                              t          ||z            dd|dz             |          }t                              |dz   	          |          }t                              |dd|d
z             |          }t          |          }t                              |dz   	          | |g          }|S )NTzsqueeze_excite/AvgPool)r=   r3   r   r-   zsqueeze_excite/Convr@   zsqueeze_excite/RelurE   zsqueeze_excite/Conv_1zsqueeze_excite/Mul)rZ   rb   r_   ra   r   r   r   )r   filtersr   prefixr   s        r   	_se_blockr   F  s   %%F%== 	& 	 		 	A 	w!""++	 	 	 	
 		 		A 	"7788;;A--	 	 	 	
 		 		A 	QAV&::;;VQKHHAHr   c           	         t          j                    dk    rdnd}| }	d}
t          j        |           |         }|rtd| d}
t                              t          ||z            ddd|
d	z   
          |           } t                              |dd|
dz             |           }  ||           } |dk    r:t                              t          j	        | |          |
dz             |           } t          
                    |||dk    rdndd|
dz             |           } t                              |dd|
dz             |           }  ||           } |r"t          | t          ||z            ||
          } t                              |ddd|
dz   
          |           } t                              |dd|
dz             |           } |dk    r.||k    r(t                              |
dz             |	| g          } | S )Nr   r   r(   zexpanded_conv/expanded_conv_/r-   Fexpandr<   r4   r5   zexpand/BatchNormr6   r    zdepthwise/pad)r1   r3   valid	depthwise)r0   r1   r2   r3   zdepthwise/BatchNormprojectzproject/BatchNormAddrE   )r   rV   rW   rZ   r_   ra   r`   ZeroPadding2Dr   correct_padDepthwiseConv2Dr   r   )r   	expansionr   r/   strider   rB   block_idr   shortcutr   	infilterss               r   r   r   \  s     1337GGG11RLHF!!$$\2I -(---MM9y())("  
 
   %%,,	 & 
 

   JqMM{{  ".q+>>/) ! 
 
   	 A++7k! 	 	 	 		 		A 	!!++	 	" 	 	
 		 		A 	
1A Ja	I 566&IIi 	 	 	 		 		A 	!!))	 	" 	 	
 		 		A {{yG++JJFUNJ++XqM::Hr   z0keras.applications.mobilenet_v3.preprocess_inputc                     | S )a  A placeholder method for backward compatibility.

    The preprocessing logic has been included in the mobilenet_v3 model
    implementation. Users are no longer required to call this method to
    normalize the input data. This method does nothing and only kept as a
    placeholder to align the API surface between old and new version of model.

    Args:
      x: A floating point `numpy.array` or a `tf.Tensor`.
      data_format: Optional data format of the image tensor/array. Defaults to
        None, in which case the global setting
        `tf.keras.backend.image_data_format()` is used (unless you changed it,
        it defaults to "channels_last").{mode}

    Returns:
      Unchanged `numpy.array` or `tf.Tensor`.
     )r   data_formats     r   preprocess_inputr     s	    & Hr   z2keras.applications.mobilenet_v3.decode_predictionsr)   c                 .    t          j        | |          S )N)top)r   decode_predictions)predsr   s     r   r   r     s    ,U<<<<r   )Nr   r   FTr   Nr   Nr   r   T)Nr   FTr   Nr   Nr   r   T)r   Nr   )r)   )$__doc__tensorflow.compat.v2compatv2rN   kerasr   r   keras.applicationsr   keras.layersr   keras.utilsr   r   tensorflow.python.platformr	   rX    tensorflow.python.util.tf_exportr
   rm   rk   rZ   BASE_DOCSTRINGr   r   r   ri   r\   r   r]   ra   r   r   r   r   r   r   r   <module>r      s  " % $ ! ! ! ! ! ! ! ! !             - - - - - - + + + + + + " " " " " " # # # # # # = < < < < < 9 9 9 9 9 9 Q ))+ 6 
			gZ 
#v v v vr 344
#= = = 54=@ 344
#; ; ; 54;| *006H0II  )006H0II    3 3 33 3 3     ,@ @ @F @AA   BA* BCC= = = DC= ,>F    r   