+
    UV-j²'  ã                   óh  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt RRRRRR	/ R
RbRRbRRbRRbR^bRRbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RFOR"R#./C/R$RR%RR&R	/ R
RbRRbRRbRR'bR^bRRbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RFOR"R#./C/R(RR)RR*R	/ R
RbRR+bRRbRR,bR^bRRbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RFOR"R#./C/R-RR.RR/R	/ R
RbRRbRRbRR0bR^bR^dbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RGOR"R#.R1RR2^ /C/R3RR4RR5R	/ R
RbRRbRRbRR6bR^bRRbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RGOR"R#.R1RR2^*R7^/C/R8RR9RR:R	/ R
RbRRbRRbRR;bR^bRRbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RGOR"R#.R1RR2^4R7^/C/R<RR=RR>R	/ R
RbRRbRRbRR?bR^bRRbR^ZbR^bR^bR^bR^bR^bR^bRRbRRbRRbR RbR!. RGOR"R#.R1RR2^@R7^/C//t	R@ RA lt
RB RC ltRD t]RE8X  d
   ]! 4        R# R# )Ha„  Convert RF-DETR PyTorch checkpoints to MLX safetensors format.

Downloads official weights directly from Roboflow's GCS bucket.
Requires only torch + safetensors for conversion (no rfdetr package).

Usage:
    python -m mlx_vlm.models.rfdetr.convert --variant base --output ./rfdetr-base-mlx
    python -m mlx_vlm.models.rfdetr.convert --variant seg-small --output ./rfdetr-seg-small-mlx
N)ÚPath)ÚurlretrieveÚbaseÚurlz;https://storage.googleapis.com/rfdetr/rf-detr-base-coco.pthÚfilenamezrf-detr-base.pthÚconfigÚ
model_typezrf-detrÚencoderÚdinov2_windowed_smallÚ
hidden_dimé   Ú
resolutioni0  Ú
dec_layersÚnum_queriesé,  Únum_classesÚ
patch_sizeÚnum_windowsÚ
group_detrÚ	sa_nheadsÚ	ca_nheadsÚdec_n_pointsÚ	two_stageTÚbbox_reparamÚlite_refpoint_refineÚ
layer_normÚout_feature_indexesÚprojector_scaleÚP4ÚsmallzLhttps://storage.googleapis.com/rfdetr/small_coco/checkpoint_best_regular.pthzrf-detr-small.pthi   Úlargez7https://storage.googleapis.com/rfdetr/rf-detr-large.pthzrf-detr-large.pthÚdinov2_windowed_baseiÀ  z	seg-smallz:https://storage.googleapis.com/rfdetr/rf-detr-seg-s-ft.pthzrf-detr-seg-small.pti€  ÚsegmentationÚpositional_encoding_sizez	seg-largez:https://storage.googleapis.com/rfdetr/rf-detr-seg-l-ft.pthzrf-detr-seg-large.ptiø  Úseg_num_blocksz
seg-xlargez;https://storage.googleapis.com/rfdetr/rf-detr-seg-xl-ft.pthzrf-detr-seg-xl.ptip  zseg-2xlargez<https://storage.googleapis.com/rfdetr/rf-detr-seg-2xl-ft.pthzrf-detr-seg-2xl.pti   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )é   r   ÚdestÚreturn©Ústr)Úformats   "Ún/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/rfdetr/convert.pyÚ__annotate__r-   Ð   s!   € ÷ ñ ”3ð œcð ¤cñ ó    c                ó  € \         P                  P                  V4      '       d   \        RV 24       V# \        RV  R24       \	        W4       \        RV R\         P                  P                  V4      R,          R R24       V# )	zDownload file with progress.z  Using cached z  Downloading z...z  Saved to ú (ç    €„.Aú.1fú MB))ÚosÚpathÚexistsÚprintr   Úgetsize)r   r'   s   &&r,   Ú	_downloadr9   Ð   ss   € ä	‡w�w‡~�~�d×ÒÜ� ˜vÐ&Ô'ØˆÜ	ˆN˜3˜%˜sÐ
#Ô$Ü�ÔÜ	ˆK˜�v˜R¤§¡§¡°Ó 5¸Õ ;¸CÐ@ÀÐ
EÔFØ€Kr.   c                ó0   € V ^8„  d   QhR\         R\         /# )r&   ÚvariantÚ
output_dirr)   )r+   s   "r,   r-   r-   Û   s   € ÷ Pñ P”Sð P¤cñ Pr.   c                 ó  €  ^ RI p^ RIHp V \        9  dT   \	        RV  24       \	        RRP                  \        P                  4       4       24       \
        P                  ! ^4       \        V ,          pVR,          p\        P                  P                  R	4      p\        P                  ! VR
R7       \        P                  P                  WdR,          4      p\	        R4       \        VR,          V4       \	        R4       XP                  VRRR7      pVR,          p	\	        R\!        V	4       R24       V	P#                  4        U
Uu/ uF  w  r«RV
 2VbK  	  pp
p\%        V4      pVP'                  R
R
R7       \	        R4       VR,          pX! V\)        V4      4       \	        RV RVP+                  4       P,                  R,          R R24       VR,          p\/        VR4      ;_uu_ 4       p\0        P2                  ! VV^R 7       RRR4       \	        RV 24       RR!. R3OR". R4O/R#R$R%//p\/        VR&,          R4      ;_uu_ 4       p\0        P2                  ! VV^R 7       RRR4       \	        R'4       ^ RIHp ^R(IHp ^R)IHp VPA                  V4      pV! V4      pVP                  \)        V4      4      pVPC                  V4      pVPE                  \G        VP#                  4       4      4       VR*,          pV! VPH                  PK                  ^VV^34      4      pVPM                  VR+,          4       \	        R,VR+,          PN                   24       \	        R-4       \	        R.V R/24       \	        R04       \	        R1V R224       R#   \         d1    \	        R4       \	        R4       \
        P                  ! ^4        ELÄi ; iu upp
i   + '       g   i     ELÔ; i  + '       g   i     EL�; i)5é    N)Ú	save_filez5Error: torch and safetensors required for conversion.z  pip install torch safetensorszUnknown variant: zAvailable: z, r   z~/.cache/rfdetr-mlxT)Úexist_okr   zStep 1: Download checkpointr   zStep 2: Extract weightsÚcpuF)Úmap_locationÚweights_onlyÚmodelz  z tensors extractedzmodel.)Úparentsr@   zStep 3: Save MLX formatzmodel.safetensorsr0   r1   r2   r3   zconfig.jsonÚw)ÚindentÚ
image_meanÚ	image_stdÚpost_process_configÚ
num_selectr   zpreprocessor_config.jsonzStep 4: Verify MLX loading)ÚModelConfig)ÚModelr   Úpred_logitsz  Forward pass OK: z
Done! Load with:z  config = json.load(open('z'))z.  model = Model(ModelConfig.from_dict(config))z2  model.load_weights(list(Model.sanitize(mx.load('z')).items())))g
×£p=
ß?gÉv¾Ÿ/Ý?g–C‹lçûÙ?)gZd;ßOÍ?gyé&1¬Ì?gÍÌÌÌÌÌÌ?)(ÚtorchÚsafetensors.torchr?   ÚImportErrorr7   ÚsysÚexitÚMODEL_VARIANTSÚjoinÚkeysr4   r5   Ú
expanduserÚmakedirsr9   ÚloadÚlenÚitemsr   Úmkdirr*   ÚstatÚst_sizeÚopenÚjsonÚdumpÚmlx.coreÚcorer   rL   ÚrfdetrrM   Ú	from_dictÚsanitizeÚload_weightsÚlistÚrandomÚnormalÚevalÚshape)r;   r<   rO   r?   Úinfor   Ú	cache_dirÚpth_pathÚckptÚ
state_dictÚkÚvÚprefixedÚoutput_pathÚweights_pathÚconfig_pathÚfÚpreprocessor_configÚmxrL   rM   ÚmcrD   ÚweightsÚ	sanitizedÚresÚoutputss   &&                         r,   Úconvertr€   Û   so  € ðÛÝ/ð ”nÔ$ÜÐ! ' Ð+Ô,Ü�˜DŸI™I¤n×&9Ñ&9Ó&;Ó<Ð=Ð>Ô?Ü�Š�Œä˜'Õ"€DØ�(�^€Fô —‘×"Ñ"Ð#8Ó9€IÜ‡K‚K�	 DÕ)Ü�w‰w�|‰|˜I¨JÕ'7Ó8€HÜ	Ð'Ô)Üˆd�5�k˜8Ô$ô 
Ð#Ô%Ø�:‰:�h¨UÀˆ:ÓG€DØ�g•€JÜ	ˆBŒs�:‹ÐÐ1Ð
2Ô3ð -7×,<Ñ,<Ô,>Ô?Ñ,>¡D A�&˜˜�˜a’Ñ,>€HÑ?ô �zÓ"€KØ×Ñ˜d¨TÐÔ2ä	Ð#Ô%ØÐ!4Õ4€LÙˆhœ˜LÓ)Ô*Ü	ˆBˆ|ˆn˜B˜|×0Ñ0Ó2×:Ñ:¸SÕ@ÀÐEÀTÐ
JÔKà Õ-€KÜ	ˆk˜3×	Ô	 1Ü�	Š	�&˜! AÕ&÷ 
 ä	ˆBˆ{ˆmÐ
Ôð 	ØÒ/ØÒ.ð
ð 	 ¨cÐ2ðÐô 
ˆkÐ6Õ6¸×	<Ô	<ÀÜ�	Š	Ð% q°Õ3÷ 
=ô 
Ð&Ô(Ýå#Ýà	×	Ñ	˜vÓ	&€BÙ�"‹I€EØ�g‰g”c˜,Ó'Ó(€GØ—‘˜wÓ'€IØ	×Ñ”t˜IŸO™OÓ-Ó.Ô/à
�Õ
€CÙ�B—I‘I×$Ñ$ a¨¨c°1Ð%5Ó6Ó7€GØ‡G�GˆG�MÕ"Ô#Ü	Ð ¨Õ 6× <Ñ <Ð=Ð
>Ô?ä	ÐÔ Ü	Ð'¨ }°CÐ
8Ô9Ü	Ð:Ô<Ü	Ø
<¸\¸NÈ-ÐXöøôU ô ÜÐEÔFÜÐ/Ô0Ü�Š��ðüó6 @÷ 
 ×	Ð	ú÷ 
=×	<Ð	<ús/   ‚
N ÅOÇ5OÉO.Î7OÏOÏO+	Ï.O?	c                  ó  € \         P                  ! R R7      p V P                  RR\        \        P                  4       4      RR7       V P                  RRRR	7       V P                  4       p\        VP                  VP                  4       R
# )zConvert RF-DETR weights to MLX)Údescriptionz	--variantr   zModel variant)ÚdefaultÚchoicesÚhelpz--outputTzOutput directory)Úrequiredr…   N)
ÚargparseÚArgumentParserÚadd_argumentrh   rT   rV   Ú
parse_argsr€   r;   Úoutput)ÚparserÚargss     r,   ÚmainrŽ   .  sx   € Ü×$Ò$Ð1QÔR€FØ
×ÑØØÜ”^×(Ñ(Ó*Ó+Øð	 ô ð ×Ñ˜
¨TÐ8JÐÔKØ×ÑÓ€DÜˆD�L‰L˜$Ÿ+™+Ö&r.   Ú__main__)r&   é   é   é   )é   é   é	   é   )Ú__doc__r‡   r`   r4   rR   Úpathlibr   Úurllib.requestr   rT   r9   r€   rŽ   Ú__name__© r.   r,   Ú<module>rœ      sZ  ðñó Û Û 	Û 
Ý Ý &ð ØÐLØÐ&Øð 
Ø˜)ð
àÐ.ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vñ'
ðð2 ØÐ]ØÐ'Øð 
Ø˜)ð
àÐ.ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vñ'
ðð2 ØÐHØÐ'Øð 
Ø˜)ð
àÐ-ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vñ'
ðð2 ØÐKØÐ*Øð 
Ø˜)ð
àÐ.ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vØ˜DØ&¨ñ+
ðð6 ØÐKØÐ*Øð 
Ø˜)ð
àÐ.ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vØ˜DØ&¨Ø˜añ-
ðð8 ØÐLØÐ'Øð 
Ø˜)ð
àÐ.ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vØ˜DØ&¨Ø˜añ-
ðð8 ØÐMØÐ(Øð 
Ø˜)ð
àÐ.ð
ð ˜#ð
ð ˜#ð	
ð
 ˜!ð
ð ˜3ð
ð ˜2ð
ð ˜"ð
ð ˜1ð
ð ˜"ð
ð ˜ð
ð ˜ð
ð ˜Að
ð ˜ð
ð ˜Dð
ð  # Dð!
ð" ˜$ð#
ð$ "¢=Ø ˜vØ˜DØ&¨Ø˜añ-
ðð{€õ|õPòf
'ð ˆzÔÙ†Fñ r.   