
     #ho                        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    1/home/cameronsmith/repos/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                   8     e Zd Zd fd	Zdi 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                   d
||||g      | _        y )Nloading modelr;      Tin_chout_dimuse_first_pool@   r%   paddinginplace   )super__init__argsprint	ResnetFPNimg_encr   
SequentialConv2dReLU	hires_outfg_mapseg_maplink_mapcam_mapmlp_helpersmake_netjoint_encodersyspathappendditDiTfeature_extractorsSpatialDinocudafeature_extractorfeature_dimvit)selfrT   ch_in
latent_dimrg   rh   	patch_res	__class__s          r   rS   z*CanonRobotTrajPredTransfEuclidean.__init__"   s)   	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(112jJWa2bcr   c                    t        j                  t        j                  t        j                  |d   j	                  d            t        j                  |d   j	                  d                        d    j                  t        |d         ddd      j                  |d         dz  dz  dz
  }t        j                  |d   j                  d      |fd      }| j                  |      }| j                  t        j                  |t        j                  ||d   j                  dd  d      fd            }|| j                  |d	z        j!                  d
      | j#                  |      | j%                  |      dz  S )Nimgr   r   r$      r%   bilinearr&   rG   dim)segs
points_campoints_link)r   stackmeshgridaranger   expandr/   rB   r   squeezerW   r[   r(   interpolater0   r]   softmaxr_   r^   )rn   model_input
track_idxsoutpos_emb	hires_inp	img_featsfull_res_featss           r   forwardz)CanonRobotTrajPredTransfEuclidean.forwardQ   s   ENN5<<E8J8O8OPR8S+T[/44R89; <<@BBH&[Y^M_I`acdfgiBjkmkmnyz  oA  lB  CDD EHH IJJII{5199!<WEaH	LL)-	
 		Iq}}YWbchWiWoWoprpsWt  {E  @F  3G  HI  )J  K $^A-= > F F1 F M'+||N'C'+}}^'D  	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   }ddlm	}  |        t        j                  ||d   j                  d      j                  dd  d      }| j                  t        j                  |d   j                  d      |gd            }|d   j                  d      }	| j                  |	      }
ddlm	}  |        | j                  t        j                  |	t        j                  |
|d   j                  dd  d      fd            }|| j                  |dz        j                  d      | j!                  |      | j#                  |      dz  S )Ntarg_img	canon_imgr%   r      r   rv   rw   T
autoresizer   r$   )	set_tracer   rx   rG   )rz   pointmap_campointmap_link)rk   r(   r   r   r   r2   r3   rm   pdbr   r   r0   r[   rW   r]   r   r_   r^   )rn   r   r   r   
dino_featsvit_outpdb_feat_uppointmapr   r   r   s               r   forward_z*CanonRobotTrajPredTransfEuclidean.forward_b   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 z*2215LL(,	)$&		8Q]]9U`akUlUrUrsusvUw  ~H  >I  3J  KL  )M  N $^A-= > F F1 F M)-n)E)-~)F  	r   r@   __name__
__module____qualname__rS   r   r   __classcell__rr   s   @r   rD   rD   !   s!    %6^ 04 " 15" 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      )rR   rS   rT   rU   rV   rW   r   rX   rY   rZ   r[   r\   r]   obj_mapr_   rf   rg   rh   ri   rj   rk   rl   rm   rc   rd   re   moge.model.v1	MoGeModelfrom_pretrainedmoge)	rn   rT   rp   rg   rh   rq   rc   r   rr   s	           r   rS   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   rv   rw   rx   )rz   cam_pointmapobj_pointmap)r   rW   r[   r   r   r(   r   r0   r]   r   r_   r   )rn   r   r   r   r   r   r   s          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   rz   )r   r0   r   r   sigmoid)rn   r   r   r   imageoriginal_heightoriginal_widthareaaspect_ratio
min_tokens
max_tokens
num_tokensmoge_outs                r   r   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   rv   rw   Tr   r%   r   rx   r   )rk   r(   r   rm   r   r0   r[   r   r   r_   r   r]   r   )rn   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   rv   rw   Tr   r   r   rx   r   )rk   r(   r   r   r   r2   r3   rm   r   r0   r[   )rn   r   r   r   r   r   r   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   )rW   forward_oneviewr   r   r   rn   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   )rW   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   )rt   instancer   r%   pts3d_in_other_viewr;   r$   r   )r   r   r/   rj   dust3rpermute)rn   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   )   r   rv   rw   r$   r   r   r   )rW   r   r   ch_secr(   r   r2   r3   r0   unbindcross_attnsch_fstpointmap_decoder   )
rn   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   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%      	   )rR   rS   rT   rV   rW   r   	Embeddingglobal_emb_latent
ModuleListranger`   
CrossAttn_r   ra   traj_decode)rn   rT   rp   n_timestepsn_layer_transf_rr   s         r   rS   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   rW   r   weightr   r/   r   r   r   geometryrot_trans_to_trisr   r}   korniaconversionseuler_from_quaternionrotation_matrix_to_quaternionrotation_6d_to_matrixmodel_outputr   )rn   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   rW   r   r   r   r/   r   r   )rn   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   )ru   r      <   )rR   rS   rT   torchvision.modelsmodelsresnet18r   rX   listchildrenresnetra   	traj_pred)rn   rT   r  r
  rr   s       r   rS   z)CanonRobotTrajPredResnetBaseline.__init__O  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
  rT   noncanonr   r  r3   )rn   r   r   r   latentpreds         r   r   z(CanonRobotTrajPredResnetBaseline.forwardZ  s    [		HZHZ)@`opqrstqtuv~~  @B  C  K  K  LN  O~~f%//6: 
 
 	
r   r@   )r   r   r   rS   r   r   r   s   @r   r   r   N  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 )rV   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   r  r   ru   i   r  r%   F)
persistentlatent_scalingr$   )dtyperL   )r   r  )r  rL   )rL   rL   r  )r   r  rL   rL   r;   r   r   r   )r       )*rR   rS   feature_scalerK   rU   getattrtorchvisionr  modelr   rY   conv1r   r0   kernel_sizestriderN   r'   rX   fcavgpoollatent_size
num_layersindex_interpindex_paddingupsample_interpregister_bufferr   emptyfloat32r   r   rj   combs_1combs_2last_conv_upr`   ra   aux_inject_netsr   r   r   )rn   backboner  r4  r5  r6  r7  r*  rK   r!  rI   rJ   r$  r#  d1d2dfr   rr   s                      r   rS   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   )	rn   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   rv   r   Tscale_factorr&   align_cornersrecompute_scale_factorr;   nearest r   rw   r   )r/   r0   r2   rG  r3   r*  r(   r   r-  r.  maxpoolbn1relure   r4  rK   layer1layer2layer3layer4r5  r   r   r>  r   r   r   r   r<  r;  r=  )	rn   r   rE  r   
aux_latentrO  	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   rv   r   TrM  r;   rQ  r   )r&   rO  rx   r   g       @)r/   r0   r2   r3   r*  r(   r   r-  r.  rV  rW  re   r4  rK   rU  rX  rY  rZ  r[  r5  r   r7  r   r   r  r'  r   )rn   r   rG  rE  rO  r]  r^  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.   rv   borderrv   r   Tr  r;   rL   r@   )NFN)r   r   r   rS   r   r   r   r   r   s   @r   rV   rV   d  s>     "T^l8,f1%r   rV   r@   )rb  rv   )4r   r,  r   r   r  einopsr   r   matplotlib.pyplotpyplotplttorch.nnr   r(   numpynprc   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   rV   r"   r   r   <module>rv     s        $  $        C C #  
<	z@4]
 	
Rn
3Y		 YvW
 W
r8
BII 8
r
ryy 
,D%		 D%r   