o
    Ďi@}                     @   s  d Z ddlZddlZddlZddlZddlZddl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 ee Zejd ZeeejvrXejee e dkrieejee ZddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z% dd	l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 dd
l4m5Z5m6Z6 e dkZ7dd Z8dd Z9e9e.dfddZ:e9e.dfddZ;e9e.dfddZ<e9e.dfddZ=e9e.dfddZ>e9dd e.d!fd"d#Z?e9d d d$d$d%d&d e.d'fd(d)Z@e9e.d*fd+d,ZAe9e.d-fd.d/ZBe9e.d0fd1d2ZCe9e.d3fd4d5ZDd6d7 ZEe6 ed8 d9ddd:d;d<d d d d d d d d=d dd d d$d$d%d&fd>d?ZFdEd@dAZGdBdC ZHeIdDkrdeH  dS dS )Faa
  
Export a YOLOv5 PyTorch model to other formats. TensorFlow exports authored by https://github.com/zldrobit

Format                      | `export.py --include`         | Model
---                         | ---                           | ---
PyTorch                     | -                             | yolov5s.pt
TorchScript                 | `torchscript`                 | yolov5s.torchscript
ONNX                        | `onnx`                        | yolov5s.onnx
OpenVINO                    | `openvino`                    | yolov5s_openvino_model/
TensorRT                    | `engine`                      | yolov5s.engine
CoreML                      | `coreml`                      | yolov5s.mlmodel
TensorFlow SavedModel       | `saved_model`                 | yolov5s_saved_model/
TensorFlow GraphDef         | `pb`                          | yolov5s.pb
TensorFlow Lite             | `tflite`                      | yolov5s.tflite
TensorFlow Edge TPU         | `edgetpu`                     | yolov5s_edgetpu.tflite
TensorFlow.js               | `tfjs`                        | yolov5s_web_model/
PaddlePaddle                | `paddle`                      | yolov5s_paddle_model/

Requirements:
    $ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime openvino-dev tensorflow-cpu  # CPU
    $ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime-gpu openvino-dev tensorflow  # GPU

Usage:
    $ yolov5 export --weights yolov5s.pt --include torchscript onnx openvino engine coreml tflite ...

Inference:
    $ yolov5 detect --weights yolov5s.pt                 # PyTorch
                                 yolov5s.torchscript        # TorchScript
                                 yolov5s.onnx               # ONNX Runtime or OpenCV DNN with --dnn
                                 yolov5s_openvino_model     # OpenVINO
                                 yolov5s.engine             # TensorRT
                                 yolov5s.mlmodel            # CoreML (macOS-only)
                                 yolov5s_saved_model        # TensorFlow SavedModel
                                 yolov5s.pb                 # TensorFlow GraphDef
                                 yolov5s.tflite             # TensorFlow Lite
                                 yolov5s_edgetpu.tflite     # TensorFlow Edge TPU
                                 yolov5s_paddle_model       # PaddlePaddle

TensorFlow.js:
    $ cd .. && git clone https://github.com/zldrobit/tfjs-yolov5-example.git && cd tfjs-yolov5-example
    $ npm install
    $ ln -s ../../yolov5/yolov5s_web_model public/yolov5s_web_model
    $ npm start
    N)Path)optimize_for_mobileWindows)attempt_load)ClassificationModelDetectDetectionModelSegmentationModel)
LoadImages)LOGGERProfilecheck_datasetcheck_img_sizecheck_requirementscheck_version
check_yamlcolorstr	file_sizeget_default_args
print_argsurl2file	yaml_save)select_devicesmart_inference_modeDarwinc                  C   s^   g dg dg dg dg dg dg dg dg d	g d
g dg dg} t j| g ddS )N)PyTorch-.ptTT)TorchScripttorchscript.torchscriptTT)ONNXonnx.onnxTT)OpenVINOopenvino_openvino_modelTF)TensorRTengine.engineFT)CoreMLcoreml.mlmodelTF)zTensorFlow SavedModelsaved_model_saved_modelTT)zTensorFlow GraphDefpb.pbTT)zTensorFlow Litetflitez.tfliteTF)zTensorFlow Edge TPUedgetpuz_edgetpu.tfliteFF)zTensorFlow.jstfjs
_web_modelFF)PaddlePaddlepaddle_paddle_modelTT)FormatArgumentSuffixCPUGPU)columns)pd	DataFramex rB   I/home/jeff/fluffinator/venv/lib/python3.10/site-packages/yolov5/export.pyexport_formatsP   s   rD   c                    s   t   fdd}|S )Nc               
      s    d }z7t  }| i |\}}W d    n1 sw   Y  t| d|jdd| dt|dd ||fW S  ty] } zt| d|jdd|  W Y d }~d	S d }~ww )
Nprefixu    export success ✅ .1fzs, saved as  ( MB)u    export failure ❌ zs: )NN)r   r   infotr   	Exception)argskwargsrE   dtfmodele
inner_args
inner_funcrB   rC   
outer_funcf   s   ,
ztry_export.<locals>.outer_func)r   )rT   rU   rB   rR   rC   
try_exportb   s   rV   zTorchScript:c           	      C   s   t d| dtj d |d}tjj| |dd}|jtt	| j
| jd}dt|i}|r@t|jt||d	 |d fS |jt||d	 |d fS )
N
z starting export with torch ...r    Fstrict)shapestridenamesz
config.txt)_extra_files)r   rI   torch__version__with_suffixjittracer[   intmaxr\   r]   jsondumpsr   _save_for_lite_interpreterstrsave)	rP   imfileoptimizerE   rO   tsdextra_filesrB   rB   rC   export_torchscriptt   s   
rq   zONNX:c                 C   s  t d dd l}td| d|j d |d}t| tr#ddgndg}	|rQd	d
dddi}t| trEd
dd|d< d
ddd|d< nt| trQd
dd|d< t	jj
|rZ|  n| |ra| n||d|dd	g|	|pld d	 ||}
|j|
 tt| j| jd}| D ]\}}|
j }|t||_|_q||
| |rz7t	j }t |rdnddf dd l}t| d|j d ||
\}
}|sJ d||
| W ||
fS  ty } zt| d|  W Y d }~||
fS d }~ww ||
fS )Nzonnx>=1.12.0r   rW   z starting export with onnx rX   r#   output0output1imagesbatchheightwidth)r         anchors)r      mask_height
mask_widthFT)verboseopset_versiondo_constant_foldinginput_namesoutput_namesdynamic_axesr\   r]   zonnxruntime-gpuonnxruntimezonnx-simplifier>=0.4.1z" simplifying with onnx-simplifier zassert check failedz simplifier failure: )r   r"   r   rI   r`   ra   
isinstancer	   r   r_   exportcpuloadcheckercheck_modelrd   re   r\   r]   itemsmetadata_propsaddri   keyvaluerj   cudais_availableonnxsimsimplifyrK   )rP   rk   rl   opsetdynamicr   rE   r"   rO   r   
model_onnxro   kvmetar   r   checkrQ   rB   rB   rC   export_onnx   s\   





r   z	OpenVINO:c                 C   s   t d dd lm} td| d|j d t| ddtj	 }d| 
d	 d
| d|r1dnd }tj| dtjd tt|| 
dj | |d fS )Nzopenvino-devr   rW   z starting export with openvino rX   r   r&   zmo --input_model r#   z --output_dir z --data_type FP16FP32T)r   env.yaml)r   openvino.inference_engineinference_enginer   rI   r`   ri   replaceossepra   
subprocessrunsplitenvironr   r   name)rl   metadatahalfrE   ierO   cmdrB   rB   rC   export_openvino   s   $r   zPaddlePaddle:c                 C   s   t d dd l}ddlm} td| d|j d t|ddt	j
 }|| |d	|gd
 tt||dj | |d fS )N)paddlepaddlex2paddler   )pytorch2paddlerW   z starting export with X2Paddle rX   r   r7   rc   )modulesave_dirjit_typeinput_examplesr   )r   r   x2paddle.convertr   r   rI   r`   ri   r   r   r   r   r   ra   r   )rP   rk   rl   r   rE   r   r   rO   rB   rB   rC   export_paddle   s   r   zCoreML:c                 C   s   t d dd l}td| d|j d |d}tjj| |dd}|j	||j
d	|jd
g ddgd}	|r9dn|r=dnd\}
}|
dk rttrmt  tjdtd |jjj|	|
|}	W d    n1 sgw   Y  nt| d |	| ||	fS )Ncoremltoolsr   rW   z" starting export with coremltools rX   r,   FrY   imagegp?)r   r   r   )r[   scalebias)inputs)   
kmeans_lut)   linear)    Nr   ignore)categoryz2 quantization only supported on macOS, skipping...)r   r   r   rI   r`   ra   r_   rb   rc   convert	ImageTyper[   MACOSwarningscatch_warningsfilterwarningsDeprecationWarningmodelsneural_networkquantization_utilsquantize_weightsprintrj   )rP   rk   rl   int8r   rE   ctrO   rn   ct_modelbitsmoderB   rB   rC   export_coreml   s"   
$

r      Fz	TensorRT:c	              
      sx  |j jdks
J dzdd l}	W n ty)   t dkr#tddd dd l}	Y nw |	jd dkrR| jd	 j	}
d
d |
D | jd	 _	t
| ||d|| |
| jd	 _	nt|	jddd t
| ||d|| |d}td| d|	j d | sJ d| |d}|	|	jj}|r|	jjj|_|	|}| }|d d> |_dt|	jj> }|| |	 |}|t|std|  fddt  j!D } fddt  j"D }|D ]}t| d|j# d|j$ d|j%  q|D ]}t| d|j# d|j$ d|j%  q|rS|j$d dkr t&| d |' }|D ]'}|(|j#dg|j$dd  R t)d|j$d d  g|j$dd  R |j$ q&|*| t| d!|j+ra|rad"nd# d$|  |j+rw|rw|,|	j-j. |/ |2}t0|d%}|1|2  W d    n1 sw   Y  W d    |d fS W d    |d fS 1 sw   Y  |d fS )&Nr   zLexport running on CPU but must be on GPU, i.e. `python export.py --device 0`r   Linuxznvidia-tensorrtz*-U --index-url https://pypi.ngc.nvidia.com)cmds7c                 S   s(   g | ]}|d ddddddf qS ).Nr{   rB   ).0arB   rB   rC   
<listcomp>   s   ( z!export_engine.<locals>.<listcomp>   z8.0.0T)hardr#   rW   z starting export with TensorRT rX   zfailed to export ONNX file: r)   r{      zfailed to load ONNX file: c                       g | ]}  |qS rB   )	get_inputr   inetworkrB   rC   r         c                    r   rB   )
get_outputr   r   rB   rC   r     r   z input "z" with shape z	 output "uF    WARNING ⚠️ --dynamic model requires maximum --batch-size argumentrx   z building FPr   r   z engine as wb)3devicetypetensorrtrK   platformsystemr   r`   rP   anchor_gridr   r   ra   r   rI   existsLoggerINFOSeverityVERBOSEmin_severityBuildercreate_builder_configmax_workspace_sizerd   NetworkDefinitionCreationFlagEXPLICIT_BATCHcreate_network
OnnxParserparse_from_fileri   RuntimeErrorrange
num_inputsnum_outputsr   r[   dtypewarningcreate_optimization_profile	set_shapere   add_optimization_profileplatform_has_fast_fp16set_flagBuilderFlagr   build_engineopenwrite	serialize)rP   rk   rl   r   r   r   	workspacer~   rE   trtgridr"   rO   loggerbuilderconfigflagparserr   outputsinpoutprofiler(   rJ   rB   r   rC   export_engine   sl   



((L
,*r  d   ?      ?zTensorFlow SavedModel:c              	      s  zdd l }W n ty%   tdtj rdntrdnd  dd l }Y nw ddlm} ddl	m
} td| d	|j d
 t|dd}t|j^}}}|| j| | j|d}||g||R }|||||||	}|jjg ||R |r|d n|d}|||||||	}|jj||dd_  |
rj|dd |fS |jd jjd j}|fdd}| |}|| |! }| fdd|g|_"|"| |j#j||t$|jdr|j#j%ddn|j#% d |fS )Nr   
tensorflow z-macosz-cpu!convert_variables_to_constants_v2)TFModelrW   ! starting export with tensorflow rX   r   r.   )cfgrP   ncimgsz)r[   
batch_size)r   r  Ftf)save_formatc                        | S NrB   r@   keras_modelrB   rC   <lambda>V      z$export_saved_model.<locals>.<lambda>c                    s   r
 | d d S  | S )Nr   rB   r@   )frozen_functf_nmsrB   rC   r0  Z  s    z2.6)experimental_custom_gradients)options)&r   rK   r   r_   r   r   r   0tensorflow.python.framework.convert_to_constantsr#  yolov5.models.tfr$  r   rI   r`   ri   r   listr[   yamlr'  zerospredictkerasInputModel	trainablesummaryrj   
TensorSpecr   r  functionget_concrete_functionModule__call__r-   r   SaveOptions)rP   rk   rl   r   r3  agnostic_nmstopk_per_classtopk_all	iou_thres
conf_thresr<  rE   r*  r#  r$  rO   r)  chr(  tf_model_r   r  specmtfmrB   )r2  r/  r3  rC   export_saved_model/  sJ   $"

rR  zTensorFlow GraphDef:c                    s   dd l }ddlm} td| d|j d |d}| fdd}||	 j
d j j
d j}||}|j  |jj|jt|j|jd	d
 |d fS )Nr   r"  rW   r%  rX   r0   c                    r,  r-  rB   r@   r.  rB   rC   r0  l  r1  zexport_pb.<locals>.<lambda>F)graph_or_graph_deflogdirr   as_text)r   r6  r#  r   rI   r`   ra   rB  rC  rA  r   r[   r  graphas_graph_defiowrite_graphri   parentr   )r/  rl   rE   r*  r#  rO   rP  r2  rB   r.  rC   	export_pbc  s   
"
r[  zTensorFlow Lite:c                    s.  dd l }td| d|j d t|j^}	}
}t|dd}|jj	
| }|jjjg|j_|jg|j_|jjjg|_|ryddlm ttt|d |d	d
  fdd|_|jjjg|j_g |j_|j|_|j|_d|_t|dd}|s}|r|jj|jjj  |! }t"|d#| |d fS )Nr   rW   r%  rX   r   z-fp16.tflite)representative_dataset_gentrainF)img_sizeautoc                      s    ddS )Nr  )ncalibrB   rB   datasetr\  rB   rC   r0    s    zexport_tflite.<locals>.<lambda>T-int8.tfliter   )$r   r   rI   r`   r8  r[   ri   r   liteTFLiteConverterfrom_keras_modelOpsSetTFLITE_BUILTINStarget_specsupported_opsfloat16supported_typesOptimizeDEFAULToptimizationsr7  r\  r
   r   r   representative_datasetTFLITE_BUILTINS_INT8uint8inference_input_typeinference_output_typeexperimental_new_quantizerappendSELECT_TF_OPSr   r  r  )r/  rk   rl   r   datanmsrG  rE   r*  r)  rL  r(  rO   	convertertflite_modelrB   ra  rC   export_tflitet  s.   r|  z	Edge TPU:c           	      C   s  d}d}t  dksJ d| tj| dddjdkrHtd	| d
|  tjdddjdk}dD ]}tj|r=|n|ddddd q5tj|ddddj	 
 d }td	| d| d t| dd}t| dd}d| j d| }tj|
 dd |d fS )Nzedgetpu_compiler --versionz'https://coral.ai/docs/edgetpu/compiler/r   z$export only supported on Linux. See z >/dev/nullT)shellr   rW   z< export requires Edge TPU compiler. Attempting install from zsudo --version >/dev/null)zOcurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -zecho "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.listzsudo apt-get updatez%sudo apt-get install edgetpu-compilerzsudo r!  )r}  r   )r}  capture_outputr   r   z( starting export with Edge TPU compiler rX   r   z-int8_edgetpu.tfliterc  z'edgetpu_compiler -s -d -k 10 --out_dir r   )r   )r   r   r   r   
returncoder   rI   r   stdoutdecoder   ri   rZ  )	rl   rE   r   help_urlsudocverrO   f_tflrB   rB   rC   export_edgetpu  s   " r  zTensorFlow.js:c           
      C   s   t d dd l}td| d|j d t| dd}| d}| d	}d
| d| }t	|
  t| }t|d}tdd|}	||	 W d    |d fS 1 s[w   Y  |d fS )Ntensorflowjsr   rW   z# starting export with tensorflowjs rX   r   r4   r0   z/model.jsonzttensorflowjs_converter --input_format=tf_frozen_model --output_node_names=Identity,Identity_1,Identity_2,Identity_3 r   wz{"outputs": {"Identity.?.?": {"name": "Identity.?.?"}, "Identity.?.?": {"name": "Identity.?.?"}, "Identity.?.?": {"name": "Identity.?.?"}, "Identity.?.?": {"name": "Identity.?.?"}}}z{"outputs": {"Identity": {"name": "Identity"}, "Identity_1": {"name": "Identity_1"}, "Identity_2": {"name": "Identity_2"}, "Identity_3": {"name": "Identity_3"}}})r   r  r   rI   r`   ri   r   ra   r   r   r   r   	read_textr  resubr  )
rl   rE   r3   rO   f_pbf_jsonr   rf   jsubstrB   rB   rC   export_tfjs  s0   




r  c              	   C   s>  t t ddlm} ddlm} ddlm} td}t|d}|	t
| W d    n1 s3w   Y  | }| }	|j|	_|	g|_| }
| g|
_| g| |
_|
g|_|d}||||jj | }|j| }|| |t
|g |  |  W d    d S 1 sw   Y  d S )Nr   )flatbuffers)r   )metadata_schema_py_generatedz/tmp/meta.txtr  )
contextlibsuppressImportErrortflite_supportr  r   r  r   r  r  ri   ModelMetadataTAssociatedFileTr   associatedFilesSubGraphMetadataTTensorMetadataTinputTensorMetadataoutputTensorMetadatasubgraphMetadatar   FinishPackMetadataPopulatorMETADATA_FILE_IDENTIFIEROutputwith_model_fileload_metadata_bufferload_associated_filespopulateunlink)rl   r   r  r  	_metadata_metadata_fbtmp_filemeta_f
model_meta
label_filesubgraphbmetadata_buf	populatorrB   rB   rC   add_tflite_metadata  s2   


"r  data/coco128.yaml
yolov5s.ptr{   r   )r   r"   r   c           5         s0  t   }ttrdd v rd d|d u r!|d u r!d}n|d ur'|}dd D tt d dd  }fdd|D }t|tksTJ d	 d
| |\}}}}}}} }!}"}#}$tt	|
drmt|n|}%t|}|r|jdks|sJ d|rJ dt||ddd|t|dkrdnd9 }|
r|jdksJ dttj  fdd|D }tj|dg|R  |}&   D ]\}'}(t|(tr||(_||(_d|(_qtdD ]})|&}*q|r|s|&  }&tt|*tr|*d n|*j}+ttjjd},t dt!d d|% d|+ dt"|%dd	 dgt| }-t#j$dtj%j&d |rEt'|&|%|
\|-d< })|rWt(|&|%|||||\|-d< })|s]|rjt)|&|%|||\|-d< })|rwt*|%|,|\|-d< })|rt+|&|%||\|-d < })t,|| |!|"|#fr|!r|#rJ d!tt-rJ d"t./ |&|%||p|p|#|p|#|||||	d#\|-d$< }.| s|#rt0|.|%\|-d%< })|!s|"rt1|.|&|%|p|"| ||d&\|-d'< })|"rt2|%\|-d(< })t3|-d( p|-d' |,t|.j4d) |#rt5|%\|-d*< })|$rt6|&|%|,\|-d+< })d,d |-D }-t,|-rfd-d.t-t7t8fD \}/}0}1|0|1 M }0t|1rDd/n|/rId0nd}2|rQd1nd}3|/rXd2n|1r]d3nd}4t d4t   | dd5t!d6|%j9:  d7|0rxd8nd9 d:|-d;  d<|3 d=|-d;  d<|3 d>|-d;  d?|4 d@ |-S )AN,r   )  r  c                 S   s   g | ]}|  qS rB   )lowerr   rA   rB   rB   rC   r         zrun.<locals>.<listcomp>r9   r{   c                    s   g | ]}| v qS rB   rB   r  )includerB   rC   r     r  zERROR: Invalid --include z , valid --include arguments are )zhttp:/zhttps:/r   z;--half only compatible with GPU export, i.e. use --device 0zV--half not compatible with --dynamic, i.e. use either --half or --dynamic but not bothT)r   inplacefuserx   zB--optimize not compatible with cuda devices, i.e. use --device cpuc                    s   g | ]}t | qS rB   )r   r  )gsrB   rC   r   $  r   ry   r   rW   zPyTorch:z starting from z with output shape rG   rF   rH   r!  r   )actionr   r   zOTFLite and TF.js models must be exported separately, please pass only one type.z;ClassificationModel export to TF formats not yet supported.)r3  rG  rH  rI  rJ  rK  r<        )rx  ry  rG     r   )r  	   
   c                 S   s   g | ]}|rt |qS rB   )ri   r  rB   rB   rC   r   _  s    c                 3   s    | ]}t  |V  qd S r-  )r   r  )rP   rB   rC   	<genexpr>a  s    zrun.<locals>.<genexpr>segmentclassify--halfuZ   # WARNING ⚠️ ClassificationModel not yet supported for PyTorch Hub AutoShape inferenceuX   # WARNING ⚠️ SegmentationModel not yet supported for PyTorch Hub AutoShape inferencez
Export complete (zs)
Results saved to boldz
Detect:          yolov5 detectr;  z --weights r   r   z'
Validate:        yolov5 val --weights z'
Python:          model = yolov5.load('z')  z$
Visualize:       https://netron.app);timer   r8  r   tuplerD   sumlenr   ri   
startswithr   r   r   r   rd   re   r\   r_   r:  toevalnamed_modulesr   r  r   r   r  r   r[   r]   r   rI   r   r   r   r   rb   TracerWarningrq   r  r   r   r   anyr   rR  r   r[  r|  r  r  r  r  r   r   r	   rZ  resolve)5rx  weightsr(  imgr)  r   r  r   r  r<  rm   r   r   r   r   r~   r  ry  rG  rH  rI  rJ  rK  rJ   fmtsflagsrb   r"   xmlr(   r+   r-   r/   r1   r2   r3   r6   rl   rk   r   rP  rN  yr[   r   rO   s_modelclsdetsegdirhsrB   )r  r  rP   rC   r     s   $

.$"



r   c              	   C   s  t  }|jdttd dd |jddtddd	 |jd
dddtddgdd	 |jdtddd |jdddd |jdddd |jdddd |jdddd |jdddd |jd dd!d |jd"dd#d |jd$dd%d |jd&td'd(d |jd)dd*d |jd+td,d-d |jd.dd/d |jd0dd1d |jd2td3d4d |jd5td3d6d |jd7td8d9d |jd:td;d<d |jd=dd>gd?d@ | r| dA n| }t	t
| |S )BNz--datar  zdataset.yaml path)r   defaulthelpz	--weights+r  zmodel.pt path(s))nargsr   r  r  z--imgszz--imgz
--img-sizer  zimage (h, w)z--batch-sizer{   z
batch sizez--devicer   z%cuda device, i.e. 0 or 0,1,2,3 or cpu)r  r  r  
store_truezFP16 half-precision export)r  r  z	--inplacez set YOLOv5 Detect() inplace=Truez--keraszTF: use Kerasz
--optimizez TorchScript: optimize for mobilez--int8zCoreML/TF INT8 quantizationz	--dynamiczONNX/TF/TensorRT: dynamic axesz
--simplifyzONNX: simplify modelz--opset   zONNX: opset versionz	--verbosezTensorRT: verbose logz--workspacer   zTensorRT: workspace size (GB)z--nmszTF: add NMS to modelz--agnostic-nmszTF: add agnostic NMS to modelz--topk-per-classr  z!TF.js NMS: topk per class to keepz
--topk-allz'TF.js NMS: topk for all classes to keepz--iou-thresr  zTF.js NMS: IoU thresholdz--conf-thresr  zTF.js NMS: confidence thresholdz	--includer   z[torchscript, onnx, openvino, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle)r  r  r  r   )argparseArgumentParseradd_argumentri   ROOTrd   floatparse_known_args
parse_argsr   vars)knownr  optrB   rB   rC   	parse_optp  s>   r  c                  C   s>   t  } t| jtr| jn| jgD ]| _tdi t|  qd S )NrB   )r  r   r  r8  r   r  )r  rB   rB   rC   main  s    r  __main__)F)J__doc__r  r  rf   r   r   r  r   sysr  r   pathlibr   pandasr>   r_   torch.utils.mobile_optimizerr   __file__r  FILEparentsr  ri   pathrv  r   relpathcwdyolov5.models.experimentalr   yolov5.models.yolor   r   r   r	   yolov5.utils.dataloadersr
   yolov5.utils.generalr   r   r   r   r   r   r   r   r   r   r   r   r   yolov5.utils.torch_utilsr   r   r   rD   rV   rq   r   r   r   r   r  rR  r[  r|  r  r  r  r   r  r  __name__rB   rB   rB   rC   <module>   s   -
<7=3! 
!

