
    &Vf[                     $   d dl 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dZ	 	 	 	 	 	 	 	 	 	 	 	 d.dZ ed          	 	 	 	 	 	 	 	 	 	 	 d/d            Z ed          	 	 	 	 	 	 	 	 	 	 	 d/d            Ze                    d           e_        e                    d!           e_        d" Zd# Zd$ Zd0d&Zd' Zd( Z ed)          d1d*            Z ed+          d2d-            Zej        j        e_        dS )3    N)backend)layers)keras_export)imagenet_utils)
Functional)operation_utils)
file_utilszJhttps://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
`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.
        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 backend-native 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 model instance.
      ?largeFTimagenet  皙?softmaxc           
         |dv s&t          j        |          st          d|           |dk    r|r|	dk    rt          d|	           ||	 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|r{t          j                    dk    r2|j	        d	         |d	         k    rt          d
| d|j	                   nC|j	        d         |d	         k    rt          d| d|j	                   nt          d|d          ||	 t          j        |           n.# t          $ r! t          d|dt          |          d          w xY wt          j        |          rVt          j                    dk    r |j	        d         }|j	        d         }d||f}n|j	        d	         }|j	        d         }||df}||t          j                    dk    rd}n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d            |t          j        |!          }n-t          j        |          st          j        ||"          }n|}t          j                    dk    rd	nd#}|rd}t          }d }nd$}t          }d%}|}|r t          j        d&d'(          |          } t          j        d)dd*d+d,d-.          |          } t          j        |d/d0d12          |          } ||          } | ||||          }t'          |j	        |         d3z            }|dk    rt'          ||z            } t          j        |d	d+d,d45          |          } t          j        |d/d0d62          |          } ||          }|r t          j        d78          |          } t          j        |d	d+d7d95          |          } ||          }|d:k    r t          j        |          |          } t          j        |	d	d+d;<          |          } t          j                    |          }t/          j        ||            t          j        |d=>          |          }nI|
d?k    r t          j        d@A          |          }n$|
dBk    r t          j        dCA          |          }|t          j        |          }n|}t7          ||dD|z   A          }|dk    rdE                    ||rdFndGt;          |                    }|rdH|z   dIz   }t<          |         d:         }ndH|z   dJz   }t<          |         d	         }t          j        |t@          |z   dK|L          }|!                    |           n||!                    |           |S )MN>   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   zfIf using `weights="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   zxWhen backend.image_data_format()=channels_first, input_shape[1] must equal input_tensor.shape[1].  Received input_shape=z, input_tensor.shape=   zGinput_shape[1] must equal input_tensor.shape[2].  Received input_shape=zinput_tensor specified: zis not a keras tensorz	is type: zwhich is not a valid type   channels_last)NNr    )r    NN)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.)
stacklevel)shape)tensorr&      g      ?g?g      )scaleoffset   )r   r   sameFconv)kernel_sizestridespaddinguse_biasnameMbP?+?conv_bnaxisepsilonmomentumr3      conv_1r/   r1   r2   r3   	conv_1_bnT)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.h5models)cache_subdir	file_hash)"r	   exists
ValueErrorr   is_keras_tensorr   get_source_inputstypeimage_data_formatr&   warningswarnr   Inputrelu
hard_swish	RescalingConv2DBatchNormalization_depthGlobalAveragePooling2DDropoutFlattenr   validate_activation
ActivationGlobalMaxPooling2Dr   formatstrWEIGHTS_HASHES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kernelrD   se_ratioxlast_conv_chinputsmodel
model_name	file_namerP   weights_paths                                    `/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/applications/mobilenet_v3.pyMobileNetV3r      s     )))Z->w-G-G)* !(	* *
 
 	
 *D* '* *
 
 	
 <#;	 ' 7 E E 	 	 	
$+$;#5lCC% %!!     $ H373E3EH H   "!	  	(**.>>>%a(KN::$0 (30 0
 (-0 0   ;  %a(KN::$0'20 0 (-	0 0   ; *'   |7		#L1111 	 	 	 \""+  	 "<00 	.(**.>>>#)!,#)!, $o#)!,#)!,#T1o|3$&&/99)KK)K ""o55#((#(x Dx D 
 
$))tbyy  
 
 	
 *
	[(( )2   4<<43;;M)     L{333		&|44 	%LLLLII$I1337GGG11RL 

A @<F;t<<<Q??	
	 	 	 		 		A	!4%i	 	 			 		A 	
1AFJ11A!',/!344L s{{}u455		 	 	 		 		A	!4%k	 	 			 		A 	
1A >8F)4888;;
FM
 
 
   JqMM!,|,,Q//A
FMF
 
 

  FNQ*+@'JJJ
F,=
 
 

  e>-:>>>qAAAA:)z:::1==A  2<@@ vq}z'ABBBE *(//<?RU
 

  	6/*<uDI&z215II/*<NI&z215I!*y(!	
 
 
 	<((((		7###Ls6   A' '
C2&BC,CC
C!E6 6+F!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r_   dro   s    r   depthz1MobileNetV3Small.<locals>.stack_fn.<locals>.depth      !e)$$$    r   r,   r    r   r   g      @   gUUUUUU@   (   r;   r)   0      `      	   
   _inverted_res_blockrZ   r   r   rD   r   r   ro   s        r   rl   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   rn   ro   rq   rr   rs   rt   ru   rv   rw   rx   ry   rl   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   rl   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   rG   r   c                 :     t          j                    |           S r   r   ReLUr   s    r   rZ   rZ     s    6;==r   c                 H     t          j        d          | dz             dz  S )Ng      @g      @gUUUUUU?r   r   s    r   hard_sigmoidr     s%    6;sAG$$	22r   c                 <     t          j        d          |           S )Nr[   )r   rd   r   s    r   r[   r[     s    *6\**1---r   r   c                 |    ||}t          |t          | |dz  z             |z  |z            }|d| z  k     r||z  }|S )Nr   g?)rH   int)vdivisor	min_valuenew_vs       r   r_   r_   )  sR    		3q7Q;//7:WDEEEsQwLr   c                     t          j        d|dz             |           } t          j        t          ||z            dd|dz             |          } t          j        |dz   	          |          } t          j        |dd|d
z             |          }t          |          } t          j        |dz   	          | |g          }|S )NTsqueeze_excite_avg_pool)r?   r3   r   r-   squeeze_excite_convrB   squeeze_excite_relurG   squeeze_excite_conv_1squeeze_excite_mul)r   r`   r]   r_   r   r   Multiply)r   filtersr   prefixr   s        r   	_se_blockr   3  s   	%F%>>	 	 		 	A	w!""++		 	 	
 		 		A 	9"77888;;A	--		 	 	
 		 		A 	QA;V&::;;;VQKHHAHr   c           	         t          j                    dk    rdnd}| }	d}
| j        |         }|rjd| d}
 t          j        t          ||z            ddd|
dz   	          |           }  t          j        |d
d|
dz             |           }  ||           } |dk    r5 t          j        t          j	        | |          |
dz             |           }  t          j
        |||dk    rdndd|
dz             |           }  t          j        |d
d|
dz             |           }  ||           } |r"t          | t          ||z            ||
          }  t          j        |ddd|
dz   	          |           }  t          j        |d
d|
dz             |           } |dk    r)||k    r# t          j        |
dz             |	| g          } | S )Nr   r   r(   expanded_conv__r-   Fexpandr=   r4   r5   	expand_bnr7   r   depthwise_pad)r1   r3   valid	depthwise)r0   r1   r2   r3   depthwise_bnproject
project_bnaddrG   )r   rV   r&   r   r]   r_   r^   ZeroPadding2Dr   correct_padDepthwiseConv2Dr   Add)r   	expansionr   r/   strider   rD   block_idr   shortcutr   	infilterss               r   r   r   I  s     1337GGG11RLHF%I -(---
FM9y())("
 
 
  
F%+%	
 
 

   JqMM{{
F ".q+>>/)
 
 
  	 A++7k!	 	 	 		 		A	!n$		 	 	
 		 		A 	
1A Ja	I 566&II	i	 	 	 		 		A	!l"		 	 	
 		 		A {{yG+++FJFUN+++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 tensor.
        data_format: Optional data format of the image tensor/array.
            `None` means the global setting
            `keras.config.image_data_format()` is used
            (unless you changed it, it uses `"channels_last"`).
            Defaults to `None`.

    Returns:
        Unchanged `numpy.array` or 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)   )rW   	keras.srcr   r   keras.src.api_exportr   keras.src.applicationsr   keras.src.modelsr   keras.src.opsr   keras.src.utilsr	   rj   rh   BASE_DOCSTRINGr   r   r   rf   __doc__rZ   r   r[   r_   r   r   r   r   r   r   r   <module>r      s                - - - - - - 1 1 1 1 1 1 ' ' ' ' ' ' ) ) ) ) ) ) & & & & & & Q ))+ 8i^ 
#y y y yx 344
#= = = 54=@ 344
#; ; ; 54;| *006H0II  )006H0II    3 3 3. . .     ,@ @ @F @AA   BA, BCC= = = DC= ,>F    r   