
    g+                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m	Z	m
Z
 d dlmZ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mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+Z+d dl,Z,d Z-d dl.Z. e.j^                  d      Z0e0jc                  dde2ddd       e0jc                  dde2ddd       e0jc                  dddd        e0jc                  d!dd        e0jc                  d"d#e2d$%       e0jc                  d&e2d%       e0jc                  d'd(e3d)d*+       e0jc                  d,d-e3d.d/+       e0jc                  d0e3d1d2+       e0jc                  d3e3d4d5+       e0jc                  d6e4d7d8+       e0jc                  d9e3 e3d:      d8+       e0jc                  d;ddd<=       e0jc                  d>e3d?d@+       e0jc                  dAdddB=       e0jc                  dCe2ddD+       e0jc                  dEe2ddF+       e0jc                  dGe3dHdI+       e0jc                  dJe3d dK+       e0jc                  dLdddM=       e0jc                  dNdddO=       e0jc                  dPdddQ=       e0jc                  dRdddS=       e0jc                  dTdddU=       e0jc                  dVdddW=       e0jc                  dXdddY=       e0jc                  dZe3d[d\+       e0jc                  d]ddd^=       e0jc                  d_ddd`=       e0jc                  dae3 e3d:      db+       e0jc                  dcdddd=       e0jc                  dedfddg=       e0jc                  dhdfddi=       dj Z5dndkZ6dl Z7dodmZ8y)p    N)partial)tqdmtrange)	rearrangerepeat)
functional)KittiDataset)
Co3DNoCams)WalkingTours)PokemonRooms)RealEstate10k)DatasetRealEstate10k)Tanks)ImageFolder)DAVIS)LLFF)Mipc                     t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S | j	                         S c c}}w N)
isinstancedictitemsto_gpucuda)obkvs      0/home/cameronsmith/repos/flowmap++/args_setup.pyr   r      s?    
2t@T<A6!9<cZ\ZaZaZcc<s   Azsimple training job)descriptionz-nz--name Fzwandb training name)typedefaultrequiredhelpz-cz--init_ckptzIFile for checkpoint loading. If folder specific, will use latest .pt filez-oz--online
store_true)r"   actionz--viserz-dz	--datasethydrant)r!   r"   z	--imgpathz-bz--batch_size   z,number of videos/sequences per training step)r!   r"   r$   z-vz	--vid_len   z*video length or number of images per batchz--n_workersd   z number of workers per dataloaderz--until_savei  z number of steps until model savez--lrg-C6?zlearning ratez--n_train_stepsg    חAz	--overfitz$Whether to overfit on a single scene)r"   r&   r$   z--until_img2   z%Number of steps until image summary. z--load_savezVWhether to load the previously saved data if overfitting (to avoid running flow again)z--seq_queryz#co3d sequency query for overfittingz
--categoryzco3d category overfittingz--n_render_raysi   zNum rays to volume renderz--n_skipz@Number of frames to skip between adjacent frames in dataloader. z--depth_varzKWhether to use depth-as-variable optimization instead of network finetuningz	--gm_flowz&Whether to use gm_flow instead of raftz--midas_invertzIWhether to interpret model output as disparity (for directly using midas)z--use_gt_intrinsicszZWhether to use GT intrinsics instead of predicting them. Useful for pretraining scene rep.z--point_trackzWhether to use point trackingz--pixelSplatz8Whether to use pixelSplat rendering for photometric lossz--scratch_netzIWhether to turn off the midas weight prior and use a network from scratchz--n_samples@   zNumber of samples along rayz--export_poseszExport poses when overfittingz--evalz"whether to train or run evaluationz--n_evalzNumber of eval samples to runz
--save_indzewhether to save out each individual image (in rendering images) or just save the all-trajectory imagez--save_imgsTz-whether to save out the all-trajectory imagesz--plot_posesz,whether to save out the all-trajectory posesc                     t        | d      S )Nz... c x y -> ... (x y) c)r   xs    r   <lambda>r0   G   s    9Q9:     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   r0   r0   H   s2    9S)Cabajc#((SU,Y[J\F]r pqr r1   c           
      f   d }i }d| v r'| d   j                         j                         dz  |d<   d| v rt        j                  t	        |d   d|d   j                  d      	      t	        |d   d
|d   j                  d      	            }t        j                  t	        |d   d|d   j                  d      	      |z  | d   |z  d      dz  |d<   d| v rMt        j                  | d   j                  dd      t        | d         j                  dd      d      dz  |d<   t        j                  d|d   d   i|       t        j                  d|d   d   i|       d|v r>t        j                  d|d   d   i|       t        j                  d |d   d   i|       t        |       |S )!Nc           
          t        j                  t        t        |             D cg c]  }| |d d ||   j	                         f    c}      S c c}w r   )torchstackrangelenlong)r/   yis      r   r0   zloss_fn.<locals>.<lambda>L   s:    u{{c!f#N1Aa!A$))+o$6#NO #Ns   "A	res_depthg?zmetrics/res_depth_regtrack_reprojspred_visibilityzb t k -> b k t s 1r(   )szb t k -> b k s t 1pred_trackszb t p c -> b p s t cg-C6*?)deltag    >Azmetrics/tracks_errflow_from_posegɿg?	flow_inp_giUMu>g    8|Azmetrics/flow_from_posezest/fx
intrinsics)r   r   r   r   )stepzest/fy)r   r   r(   r(   gt_intrinsicszref/fxzref/fy)squaremeanr9   minimumr   r5   F
huber_lossclipch_secwandblogprint)	model_outgtmodel_inputmodelrI   rayslossesvis_masks           r   loss_fnr\   J   s!   ODF i)KBXB_B_BaBfBfBhimBm'> ?)#vk2C&DEY\ghy\z\\  AB  ]C   D%k2C&DEY\ghy\z\\  AB  ]C   DE%&\\&]9STjmx  zK  nL  nQ  nQ  RS  nT  3U  V^  3^2;O2LX2U\`&bbe&f#$9$W`aqWrWwWwx{|~WTZ[dep[qTrTwTwx{|~T  GNJP QTJTf-E&F 
IIx\27;<$G	IIx\27;<$G+%		8[9'BCN		8[9'BCN	&MMr1   c                     t         j                          t        j                         }t	        j
                         }t        d|         j                  dk(  r j                  dv rd _         j                  dk(  r! j                  dv r j                  sd _         j                  rd _
         j                  dk(  rd _        t        j                  d	d
 j                  rdnd j                  d      }t        j                   j#                  d       d|_        t        |j$                         t'        j(                  |j$                  d       t        j*                  t&        j,                  j/                  |j$                  d             t        j*                  t&        j,                  j/                  |j$                  d             d j                  vr: j                  dv r_t1         j2                  dz    j                  dk(  rdn j                  dk(  rdnd j                  | j4                   j6                        nˉ j                  dk(  r(t9        dd j2                  dz   | j                        n j                  d k(  r0t;         j<                   j2                  dz    j                  !      nU j                  d"k(  r0t?         j<                   j2                  dz    j                  !      nd# j                  v rBtA        d$ j2                  dz    j                   j                  jC                  d%      d&   '      nd( j                  v rBtE        d$ j2                  dz    j                   j                  jC                  d%      d   '      nvd) j                  v rBtG        d$ j2                  dz    j                   j                  jC                  d%      d&   '      n&tI        d j2                  dz   d*| j                  +      gnbt9        d j2                  dz   |d,      tI        d j2                  dz   |d-      t1         j2                  dz   d. j                  vrdndd|/      g|_         fd0|_%        tM        jN                         jQ                         |_)         j                  t&        j,                  jU                  t&        j,                  jW                   j                              r j                  n_tY        t[        jZ                  t&        j,                  j/                   j                  d1            t&        j,                  j\                  2      }|jR                  j_                  ta        jb                  |      d3   d45        |_2        ||_         jf                  rtg        jh                         |_5        |S )6Nzuser=r   )
realestate
re10khires	   )10catr'      bestz3/home/camsmith/logs/full_render_test_alldata_hires/cameronsmithbusinessbiasingonlinedisabledz
/tmp/wandb)entityprojectmodenamedir.z/tmpT)exist_okzcheckpoint*zvideo*all)r'   ra   allcatr(   r'   ra   
      )num_trgtnum_catn_skipval	seq_querycategoryr^      )imslnum_ctxt_viewsnum_query_viewsrv   ru   dog)pathrs   ru   davistanks)\   ry   _)low_resrs   ru   scenellffmip)L      )num_contextrs   r   rv   ru   )rz   r|   rv   ru   )r   rs   rv   ru   small)rs   rt   ru   rv   c           
          t        t        j                  j                  j	                  | j
                  t        j                  j                         z  t        j                  j
                        dd            S )NT)
batch_sizenum_workersshuffle
pin_memory)
iterr9   utilsdata
DataLoaderr   r   device_countmin	n_workers)datasetargss    r   r0   zmake_run.<locals>.<lambda>   sz    $u{{/?/?/J/J7_c_n_notoyoy  pG  pG  pI  `I@CDNNSWSbSb@clp  }A 0K 0B +C r1   z*.pt)keymodel_state_dictF)strict)6parser
parse_argsargparse	NamespacegetpassgetuserrT   ru   r   overfitr   	init_ckptrR   initrf   rk   runlog_codesave_dirosmakedirssaver~   joinr
   vid_lenrw   rx   r   r   imgpathr   r   splitr   r   r	   get_dataloadermodelsFlowMapr   rX   isfile
expandusermaxglobgetctimeload_state_dictr9   loadr   viserViserServerviser_server)r   rv   selfuserr   	ckpt_files   `     r   make_runr   l   s   T"DD??D	E$.{{A~$,,*EESTt{{{A~$,,*==dll`aTXT_||AT^~~v/bdn
 **29VZVaVa(gqw{  xA  xA  HR  TC	IIsDM	$--KKt,	JJrww||DMM=9:	JJrww||DMM845  %DLL8 vz  vB  vB  Fb  vb ",T\\!^QUQ]Q]_hQhAtx  uA  uA  CJ  uJnp  PR-1[[S4>>cgcpcp"r SW  S_  S_  co  SomQ`d`l`lmn`ntw  CG  CN  CN  'Ouy  vB  vB  FK  vKkt||T\\Z[^eiepep&qoso{o{  @G  pGet||TU~_c_j_j&k ho  sw  s  s  he[_[g[ghi[itxtt  HL  HT  HT  HZ  HZ  [^  H_  `b  Hc  'd QW  [_  [g  [g  Qgd8T\\RS^^b^i^iquq}q}  rD  rD  EH  rI  JK  rL  'M fk  os  o{  o{  f{chY]YeYefgYgrvr}r}  FJ  FR  FR  FX  FX  Y\  F]  ^`  Fa  'b&2q$,,WX.ainqy}  zE  zE  'F
 )63PTP\P\]^P^dgpq(r(4DLLYZN_bjk(l(2DLLNY`hlhthtYtSUz{  DE  JM  )N?P 	LCD %**,DJ~~!&(ggnnRWW5G5G5W&XDNN^abfbkbklnlslslxlxy}  zH  zH  IO  mP  cQ  WY  W^  W^  Wg  Wg  _h	

""5::i#89K#LTY"ZDIDJzz++-Kr1   r   )NF)9r   randomtimer   sysnumpynp	functoolsr   r   r   einopsr   r   torch.nnr   rN   rR   r9   r   vis_scripts
data.KITTIr	   	data.co3dr
   data.walking_toursr   data.pokemon_roomsr   data.realestate10k_dataior   data.re10k_hiresr   data.tanks2r   data.image_folderr   
data.davisr   	data.LLFFr   data.mipr   r   r   r   r   ArgumentParserr   add_argumentstrr4   floatrQ   ch_fstr\   r    r1   r   <module>r      s         # $     #   + + 3 1  )      c 	 	 	 -B	C   DBK`  a   DSu  S^   _   DU<  H   Iu\  B   D3y  A   Kc"  5   Dc!Ao  p   D3q>j  k   Ms3<^  _   NC=_  `   Fd  H   %3s3x_  U   K|Io  p   MB<c  d   M5  Ld   e   MD>c  d   Ls4=X  Y   %CB]  ^   JS8z  {   M5  LY   Z   K|Iq  r   $eL  OZ   [   )5  Tp   q   OU<Ml  m   NE,  MG   H   OU<  NY   Z   MB<Y  Z   $eLNm  n   HeLFj  k   JSS?^  _   L%  Kr   s   M4Jy  z   NDKy  z	:	r D/r1   