
    /jW                        d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlZ	d dl
Z
d dlmZ ddlmZ  G d de          ZdS )	    )annotationsN)Path)LOGGER   )BaseBackendc                  6     e Zd ZdZdd fdZddZddZ xZS )TensorFlowBackenda&  Google TensorFlow inference backend supporting multiple serialization formats.

    Loads and runs inference with Google TensorFlow models in SavedModel, GraphDef (.pb), TFLite (.tflite), and Edge TPU
    formats. Handles quantized model dequantization and task-specific output formatting.
    Fsaved_modelweight
str | Pathdevicetorch.devicefp16boolformatstrc                    |dv sJ d| d            || _         t                                          |||           dS )a  Initialize the Google TensorFlow backend.

        Args:
            weight (str | Path): Path to the SavedModel directory, .pb file, or .tflite file.
            device (torch.device): Device to run inference on.
            fp16 (bool): Whether to use FP16 half-precision inference.
            format (str): Model format, one of "saved_model", "pb", "tflite", or "edgetpu".
        >   pbtfliteedgetpur
   zUnsupported TensorFlow format: .N)r   super__init__)selfr   r   r   r   	__class__s        g/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/nn/backends/tensorflow.pyr   zTensorFlowBackend.__init__   sU     CCCCEpgmEpEpEpCCC.....    returnNonec                	   ddl | j        dk    rt          j        d| d           j                            |          | _        t          |          dz  }|                                r0ddl	m
} |                     |                    |                     dS dS | j        dk    rQt          j        d| d	           dd
lm} fd}                                                                }t!          |d          5 }|                    |                                           ddd           n# 1 swxY w Y    ||d ||                    | _        	 t)          t          |                                          j                            t          |          j         d                    }ddl	m
} |                     |                    |                     dS # t2          $ r Y dS w xY w	 ddlm}m}	 d| _        n8# t<          $ r+ ddl | _        j        j        j        j         j        }	}Y nw xY w| j        dk    rtC          | j"                  #                    d          r| j"        dd         nd}
t          j        d| d|
dd          d           ddddtI          j%                             } |tC          |           |	|d|
i          g          | _&        tO          j"        d          | _"        n)t          j        d| d             ||!          | _&        | j&        (                                 | j&        )                                | _*        | j&        +                                | _,        	 t[          j.        |d"          5 }|/                                d         }|                    |          0                    d#          }|d$k    r(|                     tc          j2        |                     n'|                     tg          j4        |                     ddd           dS # 1 swxY w Y   dS # tZ          j5        tl          tn          tb          j8        f$ r Y dS w xY w)%zLoad a Google TensorFlow model in SavedModel, GraphDef, TFLite, or Edge TPU format.

        Args:
            weight (str | Path): Path to the model file or directory.
        r   Nr
   zLoading z' for TensorFlow SavedModel inference...zmetadata.yaml)YAMLr   z% for TensorFlow GraphDef inference...)
gd_outputsc                     j         j                             fdg           }|j        j        }|                    j                            ||          j                            ||                    S )zXWrap a TensorFlow frozen graph for inference by pruning to specified input/output nodes.c                 F    j         j                             d          S )N )name)compatv1import_graph_def)gdtfs   r   <lambda>zITensorFlowBackend.load_model.<locals>.wrap_frozen_graph.<locals>.<lambda>>   s     ry|7T7TUW^`7T7a7a r   )r'   r(   wrap_functiongraphas_graph_elementprunenestmap_structure)r*   inputsoutputsxger+   s   `    r   wrap_frozen_graphz7TensorFlowBackend.load_model.<locals>.wrap_frozen_graph<   so    IL../a/a/a/a/aceffW-wwrw44R@@"'BWBWXZ\cBdBdeeer   rbzx:0)r3   r4   z_saved_model*/metadata.yaml)Interpreterload_delegater   tpu   z:0z on device r   z* for TensorFlow Lite Edge TPU inference...zlibedgetpu.so.1zlibedgetpu.1.dylibzedgetpu.dll)LinuxDarwinWindowsr   )options)
model_pathexperimental_delegatescpuz! for TensorFlow Lite inference...)rA   rzutf-8zmetadata.json)9
tensorflowr   r   infor
   loadmodelr   existsultralytics.utilsr!   apply_metadata#ultralytics.utils.export.tensorflowr"   Graphas_graph_defopenParseFromStringreadfrozen_funcnextresolveparentrglobstemStopIterationtflite_runtime.interpreterr9   r:   r+   ImportErrorliteexperimentalr   r   
startswithplatformsysteminterpretertorchallocate_tensorsget_input_detailsinput_detailsget_output_detailsoutput_detailszipfileZipFilenamelistdecodejsonloadsastliteral_eval
BadZipFileSyntaxError
ValueErrorJSONDecodeError)r   r   metadata_filer!   r"   r7   r*   fr9   r:   r   delegatezfr&   contentsr+   s                  @r   
load_modelzTensorFlowBackend.load_model'   sv    	 ;-''KR6RRRSSS,,V44DJ LL?:M##%% >222222##DIIm$<$<=====> > [D  KP6PPPQQQFFFFFFf f f f f ((**Bfd## -q""16688,,,- - - - - - - - - - - - - - -00E::VX>>ZZZD $LL((**1774<<;L8i8i8ijj! ! 322222##DIIm$<$<=====    eQQQQQQQQ e e e''''-/W-@"'BVBd]	e {i'',/,<,<,G,G,N,NXQRRTXpvpp&*pppqqq%6BVcpqqO%% $/;"6{{,9M(XW]L^,_,_,_+`$ $ $  $l511PvPPPQQQ#.;&#A#A#A --///!%!1!C!C!E!ED"&"2"E"E"G"GD	_VS11 HR;;==+D!wwt}}33G<<H..++DJx,@,@AAAA++C,<X,F,FGGGH H H H H H H H H H H H H H H H H H &ZAUV   sn   (D99D= D=!B	G, ,
G:9G:>H 2IIQ $BQ	<Q 	QQ QQ 'R Rimtorch.Tensorlist[np.ndarray]c                   |                                                                 }| j        dk    r4| j                            |          }t          |t                    s|g}nP| j        dk    r/ddl}|                     |	                    |                    }n|j
        dd         \  }}| j        d         }|d         t          j        t          j        hv }|r,|d	         \  }}	||z  |	z                       |d                   }| j                            |d
         |           | j                                         g }| j        D ]d}
| j                            |
d
                   }|r0|
d	         \  }}	|                    t          j                  |	z
  |z  }|j        dk    r|j
        d         dk    s| j        rr|ddddddgfxx         |z  cc<   |ddddddgfxx         |z  cc<   | j        dk    r4|dddddddfxx         |z  cc<   |dddddddfxx         |z  cc<   ne|ddddgfxx         |z  cc<   |ddddgfxx         |z  cc<   | j        dk    r.|dddddfxx         |z  cc<   |dddddfxx         |z  cc<   |                    |           f| j        dk    ryt5          |d         j
                  dk    rt          t7          |                    }|d         j
        d         dk    r
|d         g}nt          j        |d         d          |d<   d |D             S )a8  Run Google TensorFlow inference with format-specific execution and output post-processing.

        Args:
            im (torch.Tensor): Input image tensor in BHWC format (converted from BCHW by AutoBackend).

        Returns:
            (list[np.ndarray]): Model predictions as a list of numpy arrays.
        r
   r   r   N)r5   r   r<   dtypequantizationindex      pose      segment   )r   r<   r   r   c                n    g | ]2}t          |t          j                  r|n|                                3S  )
isinstancenpndarraynumpy).0r5   s     r   
<listcomp>z-TensorFlowBackend.forward.<locals>.<listcomp>   s5    III!Z2:..=AGGIIIIIr   )rC   r   r   rH   serving_defaultr   listrE   rR   constantshaperd   r   int8int16astyper`   
set_tensorinvokerf   
get_tensorfloat32ndimend2endtaskappendlenreversed	transpose)r   ry   yr+   hwdetailsis_intscale
zero_pointoutputr5   s               r   forwardzTensorFlowBackend.forward{   s    VVXX^^;-''
**2..Aa&& C[D  ####  2;;r?? 33AA8AaC=DAq(+GW%"'28)<<F H$+N$;!z5j:-55gg6FGG''(8"===##%%%A-  $//w@@ D(.~(>%E:"*--
:eCA6Q;;wr{a''4<'!!!QQQA,1,!!!QQQA,1,9..aaaADqDjMMMQ.MMMaaaADqDjMMMQ.MMM!!!aV))!!!aV))9..aaaAgJJJ!OJJJaaaAgJJJ!OJJJ9	!!1Q4:!##!%%tz"~""qTF|AaD,77!IIqIIIIr   )Fr
   )r   r   r   r   r   r   r   r   )r   r   r   r   )ry   rz   r   r{   )__name__
__module____qualname____doc__r   rx   r   __classcell__)r   s   @r   r	   r	      s         / / / / / / /R R R Rh<J <J <J <J <J <J <J <Jr   r	   )
__future__r   rm   rk   r^   rg   pathlibr   r   r   ra   rJ   r   baser   r	   r   r   r   <module>r      s    # " " " " " 



               $ $ $ $ $ $      dJ dJ dJ dJ dJ dJ dJ dJ dJ dJr   