
    h]g                        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mZ d dlm	Z
 d dlm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mZ d dlZd dlmZ d dlmZmZmZmZmZm Z  d d	l!m"Z" d dl#Z#d dl$Z$d
 Z%ddZ&d Z'd Z(d Z)ddZ*d Z+d Z,d Z- G d dej\                        Z/ G d dej\                        Z0 G d dej\                        Z1 G d dej\                        Z2 G d dej\                        Z3y)    N)nn)	rearrangerepeat)
functional)deepcopy)cm)tqdm)CallableListOptionalTuple	GeneratorDict)defaultdictc                     t        | d      S )Nz... c x y -> ... (x y) c)r   xs    7/home/cameronsmith/repos/canon_controll3r/our_models.py<lambda>r      s    9Q :;     c           	      f    t        | d|"t        | j                  d      dz              S |      S )Nz... (x y) c -> ... c x yg      ?r   )r   intsize)srcr   s     r   r   r      s2    Y-Gijir3sxxXZ|`cOdKez xyz r   c                 d    t        j                  | t        j                  | ddgf         fd      S )N.r   )torchcat	ones_liker   s    r   r   r      s)    		1eooaaSk:;R@ r   c                 .    | dd df   d| ddd f   z   z  S )N.r   gh㈵> r   s    r   r   r      s&    !C"H+#rs(!34 r   c                 @    t        j                  | |dz  dz
  ||      S )N      )modepadding_mode)Fgrid_sampler   ypadr&   s       r   r   r      s    AMM1a!eaidY\$] r   c                     t        | j                        dk(  rt        | |||      S t        | j                  dd      |j                  dd      ||      j	                  d| j                  d d       S )N   r   r%   r$   )lenshape
grid_samp_flatten	unflattenr*   s       r   r   r      s    WZ[\[b[bWcghWhAq#d9S nxyz  zC  zC  DE  GH  zI  KL  KT  KT  UV  XY  KZ  [^  _c  od  on  on  op  rs  ry  ry  z|  {|  r}  o~ r   c                 B    t        t        j                  d||             S )Nb...cij,b...ckj->b...cki)unhomr   einsum)crdsKs     r   r   r      s    %-GD QR r   c           	      d    t        t        j                  d|t        |             dd df   |      S )Nr5   .   )projectr   r7   hom)r8   posesr9   s      r   r   r      s6    gu||4NPUWZ[_W`'abegihigibi'jlmn r   c                 b    | t        j                  t        |             j                  |          S N)r   randpermr/   tor   s    r   r   r      s#    AennSV,//23 r   c                   ,     e Zd Zd fd	Zdi fdZ xZS )!CanonRobotTrajPredTransfEuclideanNc                    t         |           || _        t        d       d}t	        |dd      | _        d}t        j                  t        j                  |dz   ddd	      t        j                  d
      t        j                  dddd	      t        j                  d
      t        j                  dddd	      t        j                  d
      t        j                  ddd            | _
        t        j                  |dd      | _        t        j                  |dd      | _        t        j                  |dd      | _        t        j                  |dd      | _        	 t        j                   j#                  d       ddlm} dd l}t        d       d}|j+                  d||      j-                         | _        | j.                  j0                  | _        t        d        |dd|dddd      j-                         | _        t        d       t        j                  t        j                  dddd	      t        j                  d
      t        j                  dddd	      t        j                  d
      t        j                  dddd	      t        j                  d
      t        j                  ddd            | _
        y )Nloading modelr   r;      Tin_chout_dimuse_first_pool@   r%   paddinginplace   zold/)DiTz
first dino    )freeze_weightsnum_patches_xnum_patches_yznow viti           r$   )in_channelsout_channelswidthdepthhidden_sizemax_num_imagesPzdone laoding dit model   )super__init__argsprint	ResnetFPNimg_encr   
SequentialConv2dReLU	hires_outfg_mapseg_maplink_mapcam_mapsyspathappendditrR   feature_extractorsSpatialDinocudafeature_extractorfeature_dimvit)selfrd   ch_in
latent_dimrR   rt   	patch_res	__class__s          r   rc   z*CanonRobotTrajPredTransfEuclidean.__init__"   s6   	o uatL
IIebj"aC"''Z^J_IIb"aC"''Z^J_IIb"aC"''Z^J_IIb"a8	:
 		*a3		*dA6		*a3		*a3HHOOF#%,I%7%C%CTXhq  BK%C  &L  &Q  &Q  &SD"#55AAD)#YVWehyz~  B  G  G  IDH*+]]BIIiQPQ,RTVT[T[dhTi "		"b!Q ?277[_K` "		"b!Q ?277[_K` "		"a 35DNr   c           	         | j                  t        j                  t        j                  |d   |d   fd      j                  dd      dd      d	      j                  dd
      }| j                  |d       d d df   }t        j                  ||d   j                  d      j                  dd  d      }| j                  t        j                  |d   |d   j                  d      |gd            }|d|iz  S )N	canon_imgtarg_imgr%   r      r   bilinearr&   T
autoresizer   r$   r   
points_camdimpoints_link)rw   r(   interpolater   stackr2   r3   ry   squeezer0   rk   r   rz   model_input
track_idxsout
dino_featsvit_outfeat_uppointmaps           r   forwardz)CanonRobotTrajPredTransfEuclidean.forwardO   s4   ++Q]]5;;T_H`almwaxGyz{;|  <E  <E  FG  HI  <J  KT  Zd  .e  qu+  w  A  A  BC  DJ  K
((J-ac2 --K(@(H(H(K(Q(QRTRU(V\fg>>599k,.GT_H`HhHhijHkmt-u{|#}%x  	r   r@   __name__
__module____qualname__rc   r   __classcell__r~   s   @r   rD   rD   !   s    #5Z 04 r   rD   c                        e Zd Zd fd	Zdi fdZdi fdZdi fdZdi fdZdi fdZdi fdZdi fd	Zdi fd
Z xZS )"CanonRobotTrajPredTransfEuclidean_Nc                    t         |           || _        t        d       t	        ddd      | _        d}t        j                  t        j                  dddd      t        j                  d	      t        j                  dddd      t        j                  d	      t        j                  dddd      t        j                  d	      t        j                  ddd            | _
        t        j                  ddd      | _        t        j                  dd
d      | _        t        j                  ddd      | _        t        j                  ddd      | _        	 y )NrF   r%   r;   TrH   rL      rM   rO      )rb   rc   rd   re   rf   rg   r   rh   ri   rj   rk   rl   rm   obj_mapro   rs   rR   rt   ru   rv   rw   rx   ry   rp   rq   rr   moge.model.v1	MoGeModelfrom_pretrainedmoge)	rz   rd   r|   rR   rt   r}   rp   r   r~   s	           r   rc   z+CanonRobotTrajPredTransfEuclidean_.__init__]   s
   	 	o qatT
 IIgr1a@rwwW[G\IIb"a;rwwW[G\IIb"a;rwwW[G\IIb"a0	2
 iiAq)yyT1-yyQ*yyQ*  r   c                 r   |d   j                  d      }| j                  |      }| j                  t        j                  |t        j                  ||d   j                  dd  d      fd            }|| j                  |      j                  d      | j                  |      | j                  |      dz  S )Nr   r%   r   r   r   r   )segscam_pointmapobj_pointmap)r   rg   rk   r   r   r(   r   r0   rm   softmaxro   r   )rz   r   r   r   r   	img_featsfull_res_featss          r   r   z*CanonRobotTrajPredTransfEuclidean_.forward   s    z*2215LL(,			8Q]]9U`akUlUrUrsusvUw  ~H  >I  3J  KL  )M  N $^ < D D D K(,^(D(,^(D  	r   c                 &   |d   j                  d      }|j                  dd  \  }}||z  }||z  }ddg\  }	}
t        |	d|
|	z
  z  z         }| j                  |d   j                  d      |dz        }||d   |d   |d   j	                         d	z  S )
Nr   r%   r   i  i	        ?r$   r   r   r   r   )r   r0   r   r   sigmoid)rz   r   r   r   imageoriginal_heightoriginal_widthareaaspect_ratio
min_tokens
max_tokens
num_tokensmoge_outs                r   forward_z+CanonRobotTrajPredTransfEuclidean_.forward_   s     J'//2*/++bc*:'/%7"&
Juj1H&IIJ
))K
3;;A>z1}Mx{HQKYabcYdYlYlYnqqqr   c                    | j                  t        j                  |d   d d df   dd      d      }| j                  |d d d f   d       d d df   }t        j                  ||d   j	                  d      j
                  d	d  d      }| j                  t        j                  |d   j	                  d      |gd
            }|| j                  |      | j                  |      | j                  |      j                         dz  S )Nr   r   r   r   r   Tr   r%   r   r   r   )rw   r(   r   ry   r   r0   rk   r   r   ro   r   rm   r   )rz   r   r   r   r   r   r   
hires_feats           r   r   z+CanonRobotTrajPredTransfEuclidean_.forward_   s    ++Q]];z;RSTUVSV;WXagq-r  C+  E
((Jqv.5ac: --J(?(G(G(J(P(PQSQT(U[ef^^UYYJ0G0O0OPQ0RT[/\bc%df
$(LL$<$(LL$< LL4<<>  	r   c           	         | j                  t        j                  t        j                  |d   |d   fd      j                  dd      dd      d	      j                  dd
      }| j                  |d       d d df   }t        j                  ||d   j                  d      j                  dd  d      }| j                  t        j                  |d   j                  d      |gd            }|d|iz  S )Nr   r   r%   r   r   r   r   Tr   r   r   r   r   )rw   r(   r   r   r   r2   r3   ry   r   r0   rk   r   s           r   r   z+CanonRobotTrajPredTransfEuclidean_.forward_   s&    ++Q]]599kR\F]^iju^vEwxy;z  <C  <C  DE  FG  <H  IR  Xb  .c  os+  u      @A  BH  I
((J-ac2 --K(@(H(H(K(Q(QRTRU(V\fg>>599k+.F.N.Nq.QSZ-[ab#cez8...r   c                     | j                   j                  t        j                  |d   j	                  d      |d   j	                  d      fd      d      }|d|iz  S )Nr   r%   r   T)upsampler   )rg   forward_oneviewr   r   r   rz   r   r   r   r   s        r   r   z+CanonRobotTrajPredTransfEuclidean_.forward_   sz    <<//K
<S<[<[\]<^_jkv_w__  AB  `C  <D  EF  2G  SW/  Xz8...r   c                     | j                   j                  |d   j                  d      |d   j                  d            }|d|iz  S )Nr   r%   r   r   )rg   two_viewr   r   s        r   r   z+CanonRobotTrajPredTransfEuclidean_.forward_   sJ    <<((+k*B*J*J1*MkZdNeNmNmnoNprz8...r   c                 X   |d   d d df   t        j                  t        |d               j                         d}|d   d d df   t        j                  t        |d               j                         d}| j	                  ||      }|d   d   j                  dddd      }|d	|iz  S )
Nr   r   )imginstancer   r%   pts3d_in_other_viewr;   r$   r   )r   aranger/   rv   dust3rpermute)rz   r   r   r   view1view2
dust3r_outr   s           r   r   z+CanonRobotTrajPredTransfEuclidean_.forward_   s     -ac2ell3{[eOfKg>h>m>m>op -ac2ell3{[eOfKg>h>m>m>op;;uU+
A45==a!AF H
 
 	
r   c           	      \   | j                  t        j                  |d   |d   fd            }t        t	        j
                  |j                  dd      dd      j                  d|j                  d d             j                  d      \  }}| j                  D ]  } |||      } t        j                  |d d df   t	        j
                  t        |d	      |j                  d
d  d      fd      }t        | j                  t        |            |j                  d
            }	|d|	iz  S )Nr   r   r%   r   )rX   rX   r   r   r$   rX   r   r   )rg   r   r   ch_secr(   r   r2   r3   r0   unbindcross_attnsch_fstpointmap_decoder   )
rz   r   r   r   r   tokens_targtokens_canonattn
comb_featsr   s
             r   r   z+CanonRobotTrajPredTransfEuclidean_.forward_   sJ    LL%))[-D[Q\E],^_`"ac	"(y7H7H17MeYc)d)n)nopqz  rA  rA  BD  CD  rE  *F  #G  #N  #N  OP  #Q L $$SDT+l5SlS YY	!A#f\RS>TU^UdUdegehUioy0z{|}~
$..vj/AB:??SUCVWH
 
 	
r   r@   r   r   r   rc   r   r   r   r   s   @r   r   r   \   sk    1Nf 04 	 15" r" 15"   15" 	/ 15" / 15" / 15" 
* 15" 
r   r   c                   8     e Zd Zd fd	Zdi fdZdi fdZ xZS )%CanonRobotTrajPredTransfBaselineNaiveNc           	      h   t         |           || _        t        dd      | _        d}d}t        j                  ||      | _        d}t        j                  t        |      D cg c]  }t        j                  ||       c}      | _        t        j                  ||||dg      | _        y c c}w )Nr;   T)rI   rK      r%      	   )rb   rc   rd   rf   rg   r   	Embeddingglobal_emb_latent
ModuleListrangemlp_helpers
CrossAttn_r   make_nettraj_decode)rz   rd   r|   n_timestepsn_layer_transf_r~   s         r   rc   z.CanonRobotTrajPredTransfBaselineNaive.__init__   s    	 !q>
!#k:!F==afguav)w\]+*@*@J*W)wx&//JzR\]^0_` *xs   &B/c                    t        | j                  |d   d d df               }| j                  j                  d    j	                  t        |      dd      }| j                  D ]  } |||      } | j                  |      j                  d      }|dd df   |ddd f   }	}t        j                  |	|      d   }
|d|
iz  S )N	start_imgr   r   r%   .r;   	pred_tris)r   rg   r   weightexpandr/   r   r   r   geometryrot_trans_to_trisr   r   korniaconversionseuler_from_quaternionrotation_matrix_to_quaternionrotation_6d_to_matrixmodel_outputr   )rz   r   r   r   
img_tokensmotion_tokensr   	pred_trajtransrottransf_tris	rot_eulers               r   r   z-CanonRobotTrajPredTransfBaselineNaive.forward  s     DLL[)A!A#)FGH
..55d;BB3z?SUVXY $$TDd:m6TmT $$]3;;A>	CF#Ys12v%6c..s59!<[
 
 	
r   c                 2   t        | j                  |d   d d df               }| j                  j                  d    j	                  t        |      dd      }| j                  D ]  } |||      } | j                  |      }||dd df   |ddd f   dz  S )Nr   r   r   .r;   )
pred_transpred_rot)r   rg   r   r   r   r/   r   r   )rz   r   r   r   r   r   r   r   s           r   r   z.CanonRobotTrajPredTransfBaselineNaive.forward_  s     DLL[)A!A#)FGH
..55d;BB3z?SUVXY $$TDd:m6TmT $$]3	'BQB/%c!"f-
 
 	
r   r@   r   r   s   @r   r   r      s"    a  04 |. 15" 
r   r   c                   ,     e Zd Zd fd	Zdi fdZ xZS ) CanonRobotTrajPredResnetBaselineNc                     t         |           || _        dd lm} |j                  d      }t        j                  t        |j                               d d  | _
        t        g d      | _        y )Nr   T)
pretrainedr   )rY   r   rW   <   )rb   rc   rd   torchvision.modelsmodelsresnet18r   rh   listchildrenresnetr   	traj_pred)rz   rd   r
  r  r~   s       r   rc   z)CanonRobotTrajPredResnetBaseline.__init__/  sZ    	 	,D1mmT&//*;%<Sb%AB!"45r   c                     | j                  || j                  j                  sdnd   d d df         j                  d      j                  d      }| j	                  |      j                  dd      }|d|iz  S )Ncanon_pc_filtered_imgstart_img_imgr   r   )   r;   r   )r  rd   noncanonr   r  r3   )rz   r   r   r   latentpreds         r   r   z(CanonRobotTrajPredResnetBaseline.forward:  s    [		HZHZ)@`opqrstqtuv~~  @B  C  K  K  LN  O~~f%//6: 
 
 	
r   r@   r   r   s   @r   r  r  .  s    	6 04 
r   r  c                   N     e Zd Z	 	 	 	 	 	 	 	 	 	 	 d fd	ZddZddZddZ xZS )rf   c                 Z   t         |           dd}|| _        || _         ||	      }t	        d|d        t        t        j                  |      ||      | _        |
dk7  rt        j                  |
| j                  j                  j                  j                  d   | j                  j                  j                  | j                  j                  j                  | j                  j                  j                   | j                  j                  j"                        | j                  _        t        j$                         | j                  _        t        j$                         | j                  _        g d|   | _        || _        || _        || _        || _        | j5                  d	t7        j8                  d
d
d
d
      d       | j5                  dt7        j8                  dt6        j:                        d       t        j$                  t        j                  | j*                  dd
            | _        t        j>                  ddddd|ffD cg c]  \  }}t        j                  ||d
       c}}      jA                         | _!        t        j>                  dddd|fD cg c]  }t        j                  ||d
       c}      jA                         | _"        t        j                  |
|d
      jA                         | _#        t        j>                  g dd d d   D cg c]  }tI        jJ                  d|z   ||g       c}      | _&        t        j>                  tO        d      D cg c]  }tI        jP                  dd       c}      | _)        y c c}}w c c}w c c}w c c}w )Nc                 :   | dk(  r(t        j                  t        j                  dd      }|S | dk(  r(t        j                  t        j                  dd      }|S | dk(  r&t        j                  t        j
                  |      }|S | dk(  rd}|S t        d	| z        )
ax  Return a normalization layer
            Parameters:
                norm_type (str) -- the name of the normalization layer: batch | instance | none
            For BatchNorm, we use learnable affine parameters and track running statistics (mean/stddev).
            For InstanceNorm, we do not use learnable affine parameters. We do not track running statistics.
            batchT)affinetrack_running_statsr   FgroupnoneNz%normalization layer [%s] is not found)	functoolspartialr   BatchNorm2dInstanceNorm2d	GroupNormNotImplementedError)	norm_typegroup_norm_groups
norm_layers      r   get_norm_layerz*ResnetFPN.__init__.<locals>.get_norm_layerU  s     G#&..NN4T
  j(&..%%e
  g%&..r||=NO
  f$!

  *;iG r   zUsing torchvisionencoder)r  r'  r;   r   )r'   )r   rL   rW   r   rY   i   r  r%   F)
persistentlatent_scalingr$   )dtyperL   )r   rW   )rW   rL   )rL   rL   rW   )r   rW   rL   rL   r;   r   r   r   )r   rS   )*rb   rc   feature_scalerK   re   getattrtorchvisionr
  modelr   ri   conv1r   r0   kernel_sizestriderN   r'   rh   fcavgpoollatent_size
num_layersindex_interpindex_paddingupsample_interpregister_bufferr   emptyfloat32r   r   rv   combs_1combs_2last_conv_upr   r   aux_inject_netsr   r   r   )rz   backboner  r7  r8  r9  r:  r-  rK   r%  rI   rJ   r(  r'  d1d2dfr   r~   s                      r   rc   zResnetFPN.__init__E  s    		2 +,#I.
!8Y7:W[//:j]gh
A:!yy

  ''--a0

  ,,

  ''

  ((!ZZ--:: DJJ 

]]_

7
C$(*.Xu{{1aA'>5Qekk!5==Ae 	 	
 ==IId&&A.
 }})T\]delnpqxmyIz%{2ryyR';%{|  B  B  D}}C2bQXCY%ZaryyAq'9%Z[``b))E7A6;;=!}}YjkomokoYp-qTUk.B.BCE!A;.O-qr==SXYZS[)\a+*@*@S*I)\] &|%Z .r)\s   !N
'N$"N#.N(c                    | j                  |      }| j                  |      }t        |d         }t        |d         }| j                  D ]  } |||      } t        ||d   j	                  d            |d<   | j                  ||      S )Nr   r   )latents)r   r   r   r   r   )	rz   r   additional_viewcustom_sizelatent_xlatent_additionaltoken_xtoken_additionalr   s	            r   r   zResnetFPN.two_view  s    %%a(..?x|$ 1" 56$$ND5Eg0NgNGHRL$5$5b$9:##Ah#77r   c                 0	   t        |j                        dkD  r: | |j                  dd      t              j	                  d|j                  d d       S | j
                  dk7  rFt        j                  || j
                  | j
                  dkD  rdnd| j
                  dkD  rdnd d	      }||g}| j                  j                  |      }| j                  j                  |      }| j                  j                  |      }| j                  j                  |      }|j                  |       | j                  dkD  rS| j                  r| j                  j                  |      }| j                  j!                  |      }|j                  |       | j                  dkD  r,| j                  j#                  |      }|j                  |       | j                  d
kD  r,| j                  j%                  |      }|j                  |       | j                  dkD  r,| j                  j'                  |      }|j                  |       |s|S | j(                  dk(  rd nd}|d   j                  dd  }t+        t        |            D ]~  }t-         | j.                  |   t1        t3        j4                  t        j                  |||   j                  dd  d      ||   fd                  ||   j7                  d            ||<     | j8                  d    | j:                  d   t        j                  |d   |d   j                  dd  d            |d   z   j                               } | j8                  d    | j:                  d   t        j                  ||d   j                  dd  d            |d   z   j                               } | j8                  d
    | j:                  d
   t        j                  ||d   j                  dd  d            |d   z   j                               } | j8                  d    | j:                  d   t        j                  ||d   j                  dd  d            | j=                  |d         z   j                               }|S )Nr.   r   r%   r$   r   r   r   Tscale_factorr&   align_cornersrecompute_scale_factorr;   nearest r   r   r   )r/   r0   r2   rJ  r3   r-  r(   r   r0  r1  maxpoolbn1relurr   r7  rK   layer1layer2layer3layer4r8  r   r   rA  r   r   r   r   r?  r>  r@  )	rz   r   rH  r   
aux_latentrR  	latent_szi	up_latents	            r   r   zResnetFPN.forward_oneview  s   qww<!D1a+$F$P$PQRTUT[T[\^]^T_$``$qt/A/A#'#5#5#;Z_c_q_qtw_wW[  ~B  [_aA?cG

  #A

""1%A

q!A

"ANN1"&&

**1-AJJ%%a(q!"JJ%%a(q!"JJ%%a(q!"JJ%%a(q!G^ !% 1 1Z ?TAJ$$RS)	 s7|$  	JA6:Q$:N:Nq:QRXY^YbYbdedqdqr|  ~E  FG  ~H  ~N  ~N  OQ  OR  ~S  Yc  ed  el  mn  eo  dp  qr  Zs  St  ;u  v}  ~  v@  vE  vE  FH  vI  4Jgaj  	J#DLLOodll1oammGBKPWXZP[PaPabdbePflv6w&x  zA  BD  zE  'E  &K  &K  &M  O	#DLLOodll1oammIgVXkN_N_`b`cNdjt6u&v  zA  BD  zE  'E  &K  &K  &M  O	#DLLOodll1oammIgVXkN_N_`b`cNdjt6u&v  zA  BD  zE  'E  &K  &K  &M  O	#DLLOodll1oammIgVXkN_N_`b`cNdjt6u&vy}  zK  zK  LS  TV  LW  zX  'X  &^  &^  &`  b	r   c                 Z   t        |j                        dkD  r6 | |j                  dd      |      j                  d|j                  d d       S | j                  dk7  rFt        j                  || j                  | j                  dkD  rdnd| j                  dkD  rdnd d	      }g }| j                  j                  |      }| j                  j                  |      }| j                  j                  |      }|j                  |       | j                  dkD  rS| j                  r| j                  j                  |      }| j                  j                  |      }|j                  |       | j                  dkD  r,| j                  j!                  |      }|j                  |       | j                  d
kD  r,| j                  j#                  |      }|j                  |       | j                  dkD  r,| j                  j%                  |      }|j                  |       | j&                  dk(  rd nd}|d   j                  dd  }t)        t        |            D ]/  }t        j                  ||   ||n|| j*                  |      ||<   1 t-        j.                  |d      | _        | j0                  j                  d   | j2                  d<   | j0                  j                  d   | j2                  d<   | j2                  | j2                  dz
  z  dz  | _        | j5                  | j0                        S )Nr.   r   r%   r$   r   r   r   TrP  r;   rT  r   )r&   rR  r   r   g       @)r/   r0   r2   r3   r-  r(   r   r0  r1  rY  rZ  rr   r7  rK   rX  r[  r\  r]  r^  r8  r   r:  r   r   r  r+  r   )rz   r   rJ  rH  rR  r`  ra  s          r   r   zResnetFPN.forward  s   qww<!		!Q5??1772A;OO$!//#'#5#5#;Z&*&8&83&>dD'+A JJQJJNN1JJOOAq??Q""JJ&&q)

!!!$ANN1??Q

!!!$ANN1??Q

!!!$ANN1??Q

!!!$ANN1 $ 1 1Z ?TAJ$$RS)	s7|$ 	A
(0	k))+	GAJ	 iiQ/!%!2!22!6A!%!2!22!6A"11T5H5H15LMPSSxx$$r   )resnet34Tr.   r   borderr   r   Tr  r;   rL   r@   )NFN)r   r   r   rc   r   r   r   r   r   s   @r   rf   rf   D  s>     "T^l8,f1%r   rf   r@   )re  r   )4r   r/  r   r   r  einopsr   r   matplotlib.pyplotpyplotplttorch.nnr   r(   numpynprp   randomtimeoscopyr   
matplotlibr   wandbr	   typingr
   r   r   r   r   r   collectionsr   r   r   r   r   r=   r6   r1   	grid_sampr<   warpshuffleModulerD   r   r   r  rf   r"   r   r   <module>ry     s        $  $        C C #  
<	z@4]
 	
Rn
39		 9vW
 W
r8
BII 8
r
ryy 
,D%		 D%r   