[190ca4]: / __pycache__ / export.cpython-37.pyc

Download this file

283 lines (278 with data), 31.4 kB

B

¢—eª¤ã@sødZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
ZddlZddlmZeeƒ ¡ZejdZeeƒejkr°ej eeƒ¡e ¡dkrÒeej ee ¡¡ƒZddlmZddlm Z m!Z!m"Z"m#Z#ddl$m%Z%dd	l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3dd
l4m5Z5m6Z6e ¡dkZ7Gdd
„d
ej8j9ƒZ:dd„Z;dd„Z<e<e.dƒfdd„ƒZ=e<e.dƒfdd„ƒZ>e<e.dƒfdd„ƒZ?e<e.dƒfdd„ƒZ@e<e.dƒfdd „ƒZAe<d!d"e.d#ƒfd$d%„ƒZBe<d"d"d&d&d'd(d"e.d)ƒfd*d+„ƒZCe<e.d,ƒfd-d.„ƒZDe<e.d/ƒfd0d1„ƒZEe<e.d2ƒfd3d4„ƒZFe<e.d5ƒfd6d7„ƒZGd8d9„ZHe.d:ƒfd;d<„ZIe6ƒed=ed>d?d@dAdBd"d"d"d"d"d"d"d"dCd"d!d"d"d&d&d'd(fdDdE„ƒZJdKdFdG„ZKdHdI„ZLeMdJkrôeKƒZNeLeNƒdS)Lag

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:
    $ python export.py --weights yolov5s.pt --include torchscript onnx openvino engine coreml tflite ...

Inference:
    $ python detect.py --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ÚDarwincs$eZdZ‡fdd„Zdd„Z‡ZS)ÚiOSModelcsbtƒ ¡|j\}}}}||_|j|_||kr:d||_n$t d|d|d|d|g¡|_dS)Ngð?)ÚsuperÚ__init__ÚshapeÚmodelÚncÚ	normalizeÚtorchÚtensor)ÚselfrÚimÚbÚcÚhÚw)Ú	__class__©ú5/home/iml/Desktop/Talha/YOLOV5_Model/yolov5/export.pyrRs
ziOSModel.__init__cCs:| |¡d ¡ dd|jfd¡\}}}||||jfS)Nréé)rÚsqueezeÚsplitr r!)r$ÚxÚxywhÚconfÚclsr+r+r,Úforward^s(ziOSModel.forward)Ú__name__Ú
__module__Ú__qualname__rr5Ú
__classcell__r+r+)r*r,rPsrcCs¬dddddgdddddgdd	d
ddgddd
ddgdddddgdddddgdddddgdddddgdddddgddd ddgd!d"d#ddgd$d%d&ddgg}tj|d'd(d)d*d+gd,S)-NÚPyTorchÚ-z.ptTÚTorchScriptÚtorchscriptz.torchscriptÚONNXÚonnxz.onnxÚOpenVINOÚopenvinoÚ_openvino_modelFÚTensorRTÚenginez.engineÚCoreMLÚcoremlz.mlmodelzTensorFlow SavedModelÚsaved_modelÚ_saved_modelzTensorFlow GraphDefÚpbz.pbzTensorFlow LiteÚtflitez.tflitezTensorFlow Edge TPUÚedgetpuz_edgetpu.tflitez
TensorFlow.jsÚtfjsÚ
_web_modelÚPaddlePaddleÚpaddleÚ
_paddle_modelÚFormatÚArgumentÚSuffixÚCPUÚGPU)Úcolumns)ÚpdÚ	DataFrame)r1r+r+r,Úexport_formatscsrYcstˆƒ‰‡‡fdd„}|S)Nc
s¢ˆd}yTtƒ}ˆ||Ž\}}WdQRXt |›d|jd›d|›dt|ƒd›d¡||fStk
rœ}z"t |›d|jd›d|›¡d	Sd}~XYnXdS)
NÚprefixu export success ✅ z.1fzs, saved as z (z MB)u export failure ❌ zs: )NN)rrÚinfoÚtrÚ	Exception)ÚargsÚkwargsrZÚdtÚfrÚe)Ú
inner_argsÚ
inner_funcr+r,Ú
outer_funcys,ztry_export.<locals>.outer_func)r)rdrer+)rcrdr,Ú
try_exportusrfzTorchScript:c	Cs”t d|›dtj›d¡| d¡}tjj||dd}|jtt	|j
ƒƒ|jdœ}dt 
|¡i}|rzt|ƒjt|ƒ|d	n|jt|ƒ|d	|dfS)
NÚ
z starting export with torch z...z.torchscriptF)Ústrict)rÚstrideÚnamesz
config.txt)Ú_extra_files)rr[r"Ú__version__Úwith_suffixÚjitÚtracerÚintÚmaxrirjÚjsonÚdumpsrÚ_save_for_lite_interpreterÚstrÚsave)	rr%ÚfileÚoptimizerZraÚtsÚdÚextra_filesr+r+r,Úexport_torchscript‡s
r|zONNX:cCstdƒddl}t d|›d|j›d¡t| d¡ƒ}t|tƒrJddgndg}	|r¦d	d
ddd
œi}t|tƒrŽd
ddœ|d<d
ddd
œ|d<nt|t	ƒr¦d
ddœ|d<t
jj|r¸| ¡n||rÆ| ¡n||d|dd	g|	|pÜdd	| 
|¡}
|j |
¡tt|jƒƒ|jdœ}x2| ¡D]&\}}
|
j ¡}|t|
ƒ|_|_qW| |
|¡|rúylt
j ¡}t|rldnddfƒddl}t |›d|j›d¡| |
¡\}
}|s²tdƒ‚| |
|¡Wn8tk
rø}zt |›d|›¡Wdd}~XYnX||
fS)Nzonnx>=1.12.0rrgz starting export with onnx z...z.onnxÚoutput0Úoutput1ÚimagesÚbatchÚheightÚwidth)rééÚanchors)rr.Úmask_heightÚ
mask_widthFT)ÚverboseÚ
opset_versionÚdo_constant_foldingÚinput_namesÚoutput_namesÚdynamic_axes)rirjzonnxruntime-gpuÚonnxruntimezonnx-simplifier>=0.4.1z" simplifying with onnx-simplifier zassert check failedz simplifier failure: ) rr?rr[rlrurmÚ
isinstancer	rr"ÚexportÚcpuÚloadÚcheckerZcheck_modelrprqrirjÚitemsÚmetadata_propsÚaddÚkeyÚvaluervÚcudaÚis_availableÚonnxsimÚsimplifyÚAssertionErrorr])rr%rwÚopsetÚdynamicrœrZr?rarŒÚ
model_onnxrzÚkÚvÚmetar™r›Úcheckrbr+r+r,Úexport_onnx—sR




&r¥z	OpenVINO:csVtdƒddlm}ddlm}t d|›d|j›d¡t|ƒ 	|j
dtj›¡}| 
d¡}	tt|ƒ| 
d	¡jƒ}
|rtd
ƒddl}ddl‰ddlm}ddlm‰|ƒ}
|
 |	¡}ˆjd
œ‡fdd„‰d‡fdd„	}‡fdd„}||ƒ}| ||¡}|j|||jjd}n|j|	|jd|d}| ||
¡tt|ƒ| 
d¡j|ƒ|dfS)Nzopenvino-dev>=2023.0r)Úmorgz starting export with openvino z...rBz.onnxz.xmlznncf>=2.4.0)ÚCore)Úcreate_dataloader)Úimagecs.| ˆj¡}|d}|jdkr*ˆ |d¡}|S)Ngào@r„r)ÚastypeÚfloat32ÚndimÚexpand_dims)r©Úinput_tensor)Únpr+r,Úprepare_input_tensoräs

z-export_openvino.<locals>.prepare_input_tensorÚtrainé€r-c
s4t|ƒ}t|ƒ}ˆ|||ddddd|dd}|S)Nr.é gà?F)ÚimgszÚ
batch_sizeriÚpadÚ
single_clsÚrectÚworkersr)rr
)Ú	yaml_pathÚtaskr´r¹Z	data_yamlÚdataÚ
dataloader)r¨r+r,Úgen_dataloaderìsz'export_openvino.<locals>.gen_dataloadercs|d ¡}ˆ|ƒ}|S)aB
            Quantization transform function. Extracts and preprocess input data from dataloader item for quantization.
            Parameters:
               data_item: Tuple with data item produced by DataLoader during iteration
            Returns:
                input_tensor: Input data for quantization
            r)Únumpy)Z	data_itemÚimgr®)r°r+r,Útransform_fnûsz%export_openvino.<locals>.transform_fn)Úpresetr?)Ú
model_nameÚ	frameworkÚcompress_to_fp16z.yaml)r±r²r-)rÚopenvino.runtimeÚruntimeÚopenvino.toolsr¦rr[rlruÚreplaceÚsuffixÚosÚseprmrÚnameÚnncfr¿r§Úutils.dataloadersr¨Ú
read_modelÚndarrayÚDatasetÚquantizeZQuantizationPresetZMIXEDÚ
convert_modelÚstemÚ	serializer)rwÚmetadataÚhalfÚint8r¼rZÚovr¦raÚf_onnxÚf_ovrÎr§ÚcoreZ
onnx_modelr¾rÁÚdsZquantization_datasetÚov_modelr+)r¨r¯r°r,Úexport_openvinoÏs2

ràz
PaddlePaddle:cCs‚tdƒddl}ddlm}t d|›d|j›d¡t|ƒ ddt	j
›¡}|||d	|gd
tt|ƒ| 
d¡j|ƒ|dfS)N)ÚpaddlepaddleÚx2paddler)Úpytorch2paddlergz starting export with X2Paddle z...z.ptrPro)ÚmoduleÚsave_dirÚjit_typeÚinput_examplesz.yaml)rrâÚx2paddle.convertrãrr[rlrurÉrËrÌrrrmrÍ)rr%rwr×rZrârãrar+r+r,Ú
export_paddlesrézCoreML:c
	Csötdƒddl}t d|›d|j›d¡| d¡}|rBt||ƒ}tjj	||dd}	|j
|	|jd	|jd
dddgdgd}
|r‚d
n
|rŠdnd\}}|dkrät
rÖt ¡(tjdtd|jjj |
||¡}
WdQRXnt|›dƒ|
 |¡||
fS)NÚcoremltoolsrrgz" starting export with coremltools z...z.mlmodelF)rhr©gp?)rÚscaleÚbias)Úinputs)éÚ
kmeans_lut)éÚlinear)r³Nr³Úignore)Úcategoryz2 quantization only supported on macOS, skipping...)rrêrr[rlrmrr"rnroÚconvertÚ	ImageTyperÚMACOSÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarningÚmodelsÚneural_networkÚquantization_utilsÚquantize_weightsÚprintrv)
rr%rwrÙrØÚnmsrZÚctraryÚct_modelÚbitsÚmoder+r+r,Ú
export_coreml!s"

&
 
rr-Fz	TensorRT:c	
sD|jjdkstdƒ‚yddl}	Wn4tk
rTt ¡dkrHtdddddl}	YnX|	jddkr¦|j	d	j
}
d
d„|
Dƒ|j	d	_
t|||d||ƒ|
|j	d	_
n"t|	jd
ddt|||d||ƒ| 
d¡}t d|›d|	j›d¡| ¡std|›ƒ‚| 
d¡}|	 |	jj¡}
|r.|	jjj|
_|	 |
¡}| ¡}|dd>|_dt|	jjƒ>}| |¡‰|	 ˆ|
¡}| t|ƒ¡s’t d|›ƒ‚‡fdd„t!ˆj"ƒDƒ}‡fdd„t!ˆj#ƒDƒ}x4|D],}t |›d|j$›d|j%›d|j&›¡qÈWx4|D],}t |›d|j$›d|j%›d|j&›¡qþW|r¸|j%ddkrTt '|›d¡| (¡}xP|D]H}| )|j$d&|j%dd…˜t*d|j%dd ƒf|j%dd…˜|j%¡qbW| +|¡t |›d!|j,rÔ|rÔd"nd#›d$|›¡|j,r|r| -|	j.j/¡| 0ˆ|¡*}t1|d%ƒ}| 2| 3¡¡WdQRXWdQRX|dfS)'Nr‘zLexport running on CPU but must be on GPU, i.e. `python export.py --device 0`rÚLinuxznvidia-tensorrtz*-U --index-url https://pypi.ngc.nvidia.com)ÚcmdsÚ7éÿÿÿÿcSs(g|] }|ddd…dd…dd…f‘qS).Nr.r+)Ú.0Úar+r+r,ú
<listcomp>Gsz!export_engine.<locals>.<listcomp>éz8.0.0T)Úhardz.onnxrgz starting export with TensorRT z...zfailed to export ONNX file: z.enginer.ézfailed to load ONNX file: csg|]}ˆ |¡‘qSr+)Ú	get_input)r
Úi)Únetworkr+r,rascsg|]}ˆ |¡‘qSr+)Ú
get_output)r
r)rr+r,rbsz input "z" with shapeÚ z	 output "uF WARNING ⚠️ --dynamic model requires maximum --batch-size argumentrƒz building FPrðr³z engine as Úwb)r.)4ÚdeviceÚtyperÚtensorrtr]ÚplatformÚsystemrrlrÚanchor_gridr¥rrmrr[ÚexistsÚLoggerÚINFOÚSeverityÚVERBOSEÚmin_severityÚBuilderÚcreate_builder_configÚmax_workspace_sizerpÚNetworkDefinitionCreationFlagÚEXPLICIT_BATCHÚcreate_networkÚ
OnnxParserÚparse_from_fileruÚRuntimeErrorÚrangeÚ
num_inputsÚnum_outputsrÍrÚdtypeÚwarningÚcreate_optimization_profileÚ	set_shaperqÚadd_optimization_profileÚplatform_has_fast_fp16Úset_flagÚBuilderFlagÚFP16Úbuild_engineÚopenÚwriterÖ)rr%rwrØrŸrœÚ	workspacerˆrZÚtrtÚgridr?raÚloggerÚbuilderÚconfigÚflagÚparserríÚoutputsÚinpÚoutÚprofilerDr\r+)rr,Ú
export_engine:s`




,
,
H
,"rFédgÍÌÌÌÌÌÜ?gÐ?zTensorFlow SavedModel:c	syddl}Wn@tk
rLtdtj ¡r.dn
tr6dnd›ƒddl}YnXddlm}
ddl	m
}t d|›d	|j
›d
¡|j
dkr¦d}t d
|j
›d|›¡t|ƒ dd¡}t|jƒ^}}}||j||j|d}| |f||f˜¡}| |ˆ|||||	¡}|jj||f˜|rdn|d}| |ˆ|||||	¡}|jj||d‰dˆ_ˆ ¡|
rnˆj|ddn | ˆjdjˆjdj¡}| ‡fdd„¡}|  |¡}|
|ƒ‰| !¡}| ‡‡fdd„|g¡|_"| "|¡|j#j||t$|j
dƒr|j#j%ddn|j# %¡d|ˆfS)NrÚ
tensorflowÚz-macosz-cpu)Ú!convert_variables_to_constants_v2)ÚTFModelrgz! starting export with tensorflow z...z2.13.1z2https://github.com/ultralytics/yolov5/issues/12489u WARNING ⚠️ using Tensorflow z? > 2.13.1 might cause issue when exporting the model to tflite z.ptrH)Úcfgrr r´)rrµ)rírBFÚtf)Zsave_formatcsˆ|ƒS)Nr+)r1)Úkeras_modelr+r,Ú<lambda>¤óz$export_saved_model.<locals>.<lambda>csˆrˆ|ƒdd…Sˆ|ƒS)Nr-r+)r1)Úfrozen_funcÚtf_nmsr+r,rO¨rPz2.6)Zexperimental_custom_gradients)Úoptions)&rHr]rr"r™ršröÚ0tensorflow.python.framework.convert_to_constantsrJÚ	models.tfrKrr[rlrurÉÚlistrÚyamlr ÚzerosÚpredictÚkerasÚInputÚModelZ	trainableÚsummaryrvÚ
TensorSpecrír.ÚfunctionÚget_concrete_functionÚModuleÚ__call__rGrZSaveOptions)rr%rwrŸrRÚagnostic_nmsÚtopk_per_classÚtopk_allÚ	iou_thresÚ
conf_thresrZrZrMrJrKZ
helper_urlrarµÚchr´Ztf_modelÚ_rírBÚspecÚmÚtfmr+)rQrNrRr,Úexport_saved_modelxsH$
 

(rmzTensorFlow GraphDef:cs¤ddl}ddlm}t d|›d|j›d¡| d¡}| ‡fdd„¡}| | 	ˆj
djˆj
dj¡¡}||ƒ}|j
 ¡|jj|j
t|jƒ|jd	d
|dfS)Nr)rJrgz! starting export with tensorflow z...z.pbcsˆ|ƒS)Nr+)r1)rNr+r,rOºrPzexport_pb.<locals>.<lambda>F)Úgraph_or_graph_defÚlogdirrÍÚas_text)rHrTrJrr[rlrmr_r`r^rírr.ÚgraphÚas_graph_defÚioÚwrite_graphruÚparentrÍ)rNrwrZrMrJrarkrQr+)rNr,Ú	export_pb±s
"
rvzTensorFlow Lite:c	s<ddl}	t d|›d|	j›d¡t|jƒ^}
}}t|ƒ dd¡}
|	jj	 
|¡}|	jjjg|j
_|	jg|j
_|	jjjg|_|rüddlm‰ttt|ƒƒd|d	d
‰‡‡fdd„|_|	jjjg|j
_g|j
_|	j|_|	j|_d
|_|rìd
|_t|ƒ dd¡}
|s|r|j
j  |	jjj!¡| "¡}t#|
dƒ $|¡|
dfS)Nrrgz! starting export with tensorflow z...z.ptz-fp16.tflite)Úrepresentative_dataset_genr±F)Úimg_sizeÚautocsˆˆddS)NrG)Zncalibr+r+)Údatasetrwr+r,rOÓrPzexport_tflite.<locals>.<lambda>Tz-int8.tfliter)%rHrr[rlrVrrurÉÚliteZTFLiteConverterZfrom_keras_modelZOpsSetZTFLITE_BUILTINSZtarget_specZ
supported_opsÚfloat16Zsupported_typesZOptimizeÚDEFAULTZ
optimizationsrUrwr
r
rZrepresentative_datasetZTFLITE_BUILTINS_INT8Úuint8Zinference_input_typeZinference_output_typeZexperimental_new_quantizerZ!_experimental_disable_per_channelÚappendZ
SELECT_TF_OPSrôr8r9)rNr%rwrÙÚ
per_tensorr¼rrcrZrMrµrhr´raÚ	converterÚtflite_modelr+)rzrwr,Ú
export_tfliteÂs2rƒz	Edge TPU:c		Csd}d}t ¡dks"td|›ƒ‚tj|›dddjdkr”t d	|›d
|›¡tjdddjdk}x,dD]$}tj|r||n
| d
d¡dddqlWtj|ddddj	 
¡ ¡d}t d	|›d|›d¡t|ƒ dd¡}t|ƒ dd¡}tjddddddt|j
ƒ|gdd|dfS)Nzedgetpu_compiler --versionz'https://coral.ai/docs/edgetpu/compiler/rz$export only supported on Linux. See z > /dev/null 2>&1T)Úshellrrgz< export requires Edge TPU compiler. Attempting install from zsudo --version >/dev/null)zOcurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -z€echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.listzsudo apt-get updatez%sudo apt-get install edgetpu-compilerzsudo rI)r„r¤)r„Úcapture_outputr¤r	z( starting export with Edge TPU compiler z...z.ptz-int8_edgetpu.tflitez-int8.tfliteZedgetpu_compilerz-sz-dz-kÚ10z	--out_dir)r¤)rrrÚ
subprocessÚrunÚ
returncoderr[rÉÚstdoutÚdecoder0ruru)	rwrZÚcmdÚhelp_urlÚsudor'ÚverraZf_tflr+r+r,Úexport_edgetpuäs.$ rzTensorFlow.js:c	CsÈtdƒddl}t d|›d|j›d¡t|ƒ dd¡}| d¡}|›d	}d
d|rZdnd
dt|ƒt|ƒg}tj	dd„|Dƒddt
|ƒ ¡}t|dƒ}	t
 dd|¡}
|	 |
¡WdQRX|dfS)NÚtensorflowjsrrgz# starting export with tensorflowjs z...z.ptrMz.pbz/model.jsonZtensorflowjs_converterz--input_format=tf_frozen_modelz--quantize_uint8rIz=--output_node_names=Identity,Identity_1,Identity_2,Identity_3cSsg|]}|r|‘qSr+r+)r
Úargr+r+r,rszexport_tfjs.<locals>.<listcomp>T)r¤r)zµ{"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"}}})rr‘rr[rlrurÉrmr‡rˆrÚ	read_textr8ÚreÚsubr9)rwrÙrZrLraÚf_pbZf_jsonr^rrÚjZsubstr+r+r,Úexport_tfjss*



r˜c
Cst t¡ddlm}ddlm}ddlm}tdƒ}t|dƒ}| 	t
|ƒ¡WdQRX| ¡}| ¡}	|j
|	_
|	g|_| ¡}
| ¡g|
_| ¡g||
_|
g|_| d¡}| | |¡|jj¡| ¡}|j |¡}
|
 |¡|
 t
|ƒg¡|
 ¡| ¡WdQRXdS)Nr)Úflatbuffers)r×)Úmetadata_schema_py_generatedz
/tmp/meta.txtr))Ú
contextlibÚsuppressÚImportErrorÚtflite_supportr™r×ršrr8r9ruÚ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)rwr×r-r™Ú	_metadataÚ_metadata_fbÚtmp_fileZmeta_fÚ
model_metaÚ
label_fileÚsubgraphr&Úmetadata_bufÚ	populatorr+r+r,Úadd_tflite_metadata&s.

r¹zCoreML Pipeline:c"	Cs¢ddl}ddlm}t|›d|j›dƒt|jƒ\}}	}
}t ¡}| ¡}
t	|
j
jƒ\}}t 
¡dkr¢| d||
f¡}| d|i¡}||jj||jj}}n0t|djƒ}|d|d	d
f|ddf}}|
j
jdjjj|
j
jdjjj}}|\}}t|ƒ|ks$tt|ƒ›d|›ƒ‚||jjjdd…<||jjjdd…<t|
j
ƒ|j |
¡}|jj ¡}d
|_x`t d	ƒD]T}|j!j
j| "¡}|j
j #¡|j
j| $|¡|j
j #¡|j
j| $|¡qzWd
|j
jd_d|j
jd_|dg}x†t d	ƒD]z}|j
j|jj}|j%j& #¡d|j%j&d_'d|j%j&d_(|j%j& #¡|||j%j&d_'|||j%j&d_(|jdd…=qW|j)}|j|_*|j|_+d
|_,d|_-d|_.d|_/d|_0d|_1d|j2_3|j4j5 6| 7¡¡|j |¡}|jj8j9d|jj: ;d||¡fd|jj: <¡fd|jj: <¡fgd
dgd} |  =|¡|  =|¡| j>j
jd $|j!j
jd "¡¡| j>j
jd $|j!j
jd "¡¡| j>j
jd $|j!j
jd "¡¡d
| j>_d| j>j
j?_@d| j>j
j?_Ad| j>j
j?_Bd| j>j
j?_C| j>j
j?jD Ed F| 7¡¡tG|j0ƒtG|j1ƒdœ¡| Hd¡}!|j | j>¡}d|jId<d|j0›d|jId<d |j1›d|jId<d!|jJd
<d"|jJd<| K|!¡t|›d#t ¡|d$›d%|!›d&tL|!ƒd'›d(ƒdS))Nr)ÚImagez$ starting pipeline with coremltools z...rÚRGBr©r.rƒér-z names found for nc=Ú
confidenceÚcoordinatesr	ÚiouThresholdÚconfidenceThresholdgÍÌÌÌÌÌÜ?gÐ?Tr„)Úinput_featuresÚoutput_featuresz%https://github.com/ultralytics/yolov5zglenn.jocher@ultralytics.comz9https://github.com/ultralytics/yolov5/blob/master/LICENSEú,)ÚclassesÚ
iou_thresholdZconfidence_thresholdz.mlmodelzInput imagez,(optional) IOU Threshold override (default: ú)z3(optional) Confidence Threshold override (default: u?Boxes × Class confidence (see user-defined metadata "classes")u7Boxes × [x, y, width, height] (relative to image size)z pipeline success (z.2fz
s), saved as z (z.1fz MB))MrêÚPILrºrÿrlrVrÚtimeÚget_specÚiterÚdescriptionÚoutputrrÚnewrYrÍÚtupleÚinputrÚ	imageTyper‚rÚlenrÚmultiArrayTyperûÚMLModelÚprotoÚ	Model_pb2r\ÚspecificationVersionr+Ú_specÚSerializeToStringr–ÚParseFromStringÚ
shapeRangeÚ
sizeRangesÚ
lowerBoundÚ
upperBoundÚnonMaximumSuppressionÚconfidenceInputFeatureNameÚcoordinatesInputFeatureNameÚconfidenceOutputFeatureNameÚcoordinatesOutputFeatureNameÚiouThresholdInputFeatureNameÚ#confidenceThresholdInputFeatureNamer¿rÀÚpickTopÚperClassÚstringClassLabelsÚvectorÚextendÚvaluesÚpipelineÚPipelineÚ	datatypesÚArrayÚDoubleÚ	add_modelrjr×Z
versionStringÚshortDescriptionÚauthorÚlicenseÚuserDefinedÚupdateÚjoinrurmÚinput_descriptionÚoutput_descriptionrvr)"rr%rwrjÚyrZrrºrµrhr(r)r\rjÚout0Úout1rÀrDÚ
out0_shapeÚ
out1_shapeÚsÚnxÚnyÚnar Únms_specrÚdecoder_outputÚoutput_sizesÚma_typerÚ	nms_modelrërar+r+r,Úpipeline_coremlGsž"&$


"""




rzdata/coco128.yamlz
yolov5s.pt)i€i€r.r‘)r=r?r
c6s.t ¡}dd„ˆDƒ‰ttƒddd…ƒ}‡fdd„|Dƒ}t|ƒtˆƒksbtdˆ›d|›ƒ‚|\}}}}}}} }!}"}#}$tt|ƒ d¡r”t	|ƒn|ƒ}%t
|ƒ}|rÈ|jd	ks¼|s¼td
ƒ‚|rÈtdƒ‚t||ddd
‰|t|ƒdkrêdnd9}|	r
|jd	ks
tdƒ‚t
tˆjƒƒ‰‡fdd„|Dƒ}tj|df|žŽ |¡}&ˆ ¡x4ˆ ¡D](\}'}(t|(tƒrT||(_||(_d|(_qTWxtdƒD]})ˆ|&ƒ}*qŠW|rº|sº|& ¡ˆ ¡}&‰tt|*tƒrÐ|*dn|*jƒ}+t
tˆjƒƒˆjdœ},t dt dƒ›d|%›d|+›dt!|%ƒd›d	¡dgt|ƒ}-t"j#dtj$j%d|rXt&ˆ|&|%|	ƒ\|-d<})|r|t'ˆ|&|%|||
||ƒ\|-d<})|sˆ|r¢t(ˆ|&|%|||
ƒ\|-d<})|rÀt)|%|,||
|ƒ\|-d<})|røt*ˆ|&|%|
||ƒ\|-d<}.|røt+|.|&|%ˆj|*ƒt,|| |!|"|#fƒr|!r |#r tdƒ‚tˆt-ƒr4td ƒ‚t.ˆ /¡|&|%||pP|pP|#|pX|#|||||d!\|-d"<}/| s||#rŽt0|/|%ƒ\|-d#<})|!sš|"røt1|/|&|%|
pª|"||||d$\|-d%<})|"rÖt2|%ƒ\|-d&<})t3|-d&pè|-d%|,t|/j4ƒd'|#rt5|%|
ƒ\|-d(<})|$r,t6ˆ|&|%|,ƒ\|-d)<})d*d„|-Dƒ}-t,|-ƒr*‡fd+d,„t-t7t8fDƒ\}0}1}2|1|2M}1t|2rxd-n|0r‚d.ndƒ}3|r’d/nd}4|0r d0n|2rªd1nd}5t d2t ¡|d›d3t d4|%j9 :¡ƒ›d5|3|1râd6nd7›d8|-d9›d:|4›d;|3d<›d8|-d9›d:|4›d=|-d9›d>|5›d?¡|-S)@NcSsg|]}| ¡‘qSr+)Úlower)r
r1r+r+r,rÝszrun.<locals>.<listcomp>rRr.csg|]}|ˆk‘qSr+r+)r
r1)Úincluder+r,rßszERROR: Invalid --include z , valid --include arguments are )zhttp:/zhttps:/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ÚfuserƒzB--optimize not compatible with cuda devices, i.e. use --device cpucsg|]}t|ˆƒ‘qSr+)r)r
r1)Úgsr+r,ròsr„r)rirjrgzPyTorch:z starting from z with output shape z (z.1fz MB)rIrò)Ú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.)rRrcrdrerfrgrZr¼é)r¼rrcérî)r-é	é
cSsg|]}|rt|ƒ‘qSr+)ru)r
r1r+r+r,r6sc3s|]}tˆ|ƒVqdS)N)r)r
r1)rr+r,ú	<genexpr>8szrun.<locals>.<genexpr>ÚsegmentÚclassifyz--halfuZ# WARNING ⚠️ ClassificationModel not yet supported for PyTorch Hub AutoShape inferenceuX# WARNING ⚠️ SegmentationModel not yet supported for PyTorch Hub AutoShape inferencez
Export complete (zs)
Results saved to Úboldz
Detect:          python z	detect.pyz
predict.pyz --weights r	rz
Validate:        python zval.pyzJ
PyTorch Hub:     model = torch.hub.load('ultralytics/yolov5', 'custom', 'z')  z$
Visualize:       https://netron.app);rÈrÎrYÚsumrÑrrruÚ
startswithrrrrrprqrir"rXÚtoÚevalÚ
named_modulesrrr
rŸrr+rØrrjrr[rrr÷rùrnÚ
TracerWarningr|rFr¥ràrrÚanyrrmr‘rvrƒrr¹rBr˜rérr	ruÚresolve)6r¼Úweightsr´rµrr	rØr
rZrxrÙr€rŸrœržrˆr:rrcrdrerfrgr\ÚfmtsÚflagsrnr?ÚxmlrDrFrGrIrJrKrLrOrwr%r¡rkrirùrr×rarÚs_modelr4ÚdetÚsegÚdirr(rþr+)rr	rr,rˆÂs®$."


|rˆc	CsÎt ¡}|jdttddd|jddttddd	|jd
dddtd
d
gdd	|jdtddd|jdddd|jdddd|jdddd|jdddd|jdddd|jd dd!d|jd"dd#d|jd$dd%d|jd&dd'd|jd(td)d*d|jd+dd,d|jd-td.d/d|jd0dd1d|jd2dd3d|jd4td5d6d|jd7td5d8d|jd9td:d;d|jd<td=d>d|jd?dd@gdAdB|r¶| ¡dCn| ¡}t	t
|ƒƒ|S)DNz--datazdata/coco128.yamlzdataset.yaml path)rÚdefaultÚhelpz	--weightsú+z
yolov5s.ptzmodel.pt path(s))Únargsrr&r'z--imgszz--imgz
--img-sizei€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'z--halfÚ
store_truezFP16 half-precision export)r
r'z	--inplacez set YOLOv5 Detect() inplace=Truez--kerasz
TF: use Kerasz
--optimizez TorchScript: optimize for mobilez--int8z$CoreML/TF/OpenVINO INT8 quantizationz--per-tensorzTF per-tensor quantizationz	--dynamiczONNX/TF/TensorRT: dynamic axesz
--simplifyzONNX: simplify modelz--opsetézONNX: opset versionz	--verbosezTensorRT: verbose logz--workspacer-zTensorRT: workspace size (GB)z--nmszTF: add NMS to modelz--agnostic-nmszTF: add agnostic NMS to modelz--topk-per-classrGz!TF.js NMS: topk per class to keepz
--topk-allz'TF.js NMS: topk for all classes to keepz--iou-thresgÍÌÌÌÌÌÜ?zTF.js NMS: IoU thresholdz--conf-thresgÐ?zTF.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_argumentruÚROOTrpÚfloatÚparse_known_argsÚ
parse_argsrÚvars)ZknownrAÚoptr+r+r,Ú	parse_optGs>r5cCs8x2t|jtƒr|jn|jgD]|_tft|ƒŽqWdS)N)rrrVrˆr3)r4r+r+r,Úmainis"r6Ú__main__)F)OÚ__doc__r,r›rrrËrr”r‡ÚsysrÈr÷ÚpathlibrÚpandasrWr"Útorch.utils.mobile_optimizerrÚ__file__rÚFILEÚparentsr/ruÚpathrrÚrelpathÚcwdÚmodels.experimentalrÚmodels.yolorrrr	rÏr
Ú
utils.generalrrr
rrrrrrrrrrÚutils.torch_utilsrrröÚnnrarrYrfr|r¥ràrérrFrmrvrƒrr˜r¹rrˆr5r6r6r4r+r+r+r,Ú<module>-s²
<7B=- !!{m
"