
    3g0,                     &   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                  dGe2dddH       e0jc                  dIe3dJdK+       e0jc                  dLe3d 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                  dZddd[=       e0jc                  d\e3d]d^+       e0jc                  d_ddd`=       e0jc                  dadddb=       e0jc                  dce3 e3d:      dd+       e0jc                  dedddf=       e0jc                  dgdhddi=       e0jc                  djdhddk=       dl Z5dpdmZ6dn Z7dqdoZ8y)r    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      A/home/cameronsmith/repos/refactor_flowmap_and_splat/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--splat_srczsplat src pt filez--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   H   s    9Q9:     c           	      f    t        | d|"t        | j                  d      dz              S |      S )Nz... (x y) c -> ... c x y      ?r.   )r   intsize)srcr/   s     r   r0   r0   I   s2    9S)Cabajc#((SU,Y[J\F]r pqr r1   c           
      P   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|       |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>M   s:    u{{c!f#N1Aa!A$))+o$6#NO #Ns   "A	res_depthr4   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meanr:   minimumr   r6   F
huber_lossclipch_secwandblog)	model_outgtmodel_inputmodelrJ   rayslossesvis_masks           r   loss_fnr\   K   sB   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  BH  IR  S^  I_  B`  Be  Be  fi  jl  Bm  t{  J}  ~A  JAf-E&F
 
IIx\27;<$G	IIx\27;<$G+%		8[9'BCN		8[9'BCN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              |_        ||_         j2                  rt3        j4                         |_         j8                  |S d j                  vr: j                  dv r_t;         j<                  dz    j                  dk(  rdn j                  dk(  rdnd j                  | j>                   j@                        nˉ j                  dk(  r(tC        dd j<                  dz   | j                        n j                  d k(  r0tE         jF                   j<                  dz    j                  !      nU j                  d"k(  r0tI         jF                   j<                  dz    j                  !      nd# j                  v rBtK        d$ j<                  dz    j                   j                  jM                  d%      d&   '      nd( j                  v rBtO        d$ j<                  dz    j                   j                  jM                  d%      d   '      nvd) j                  v rBtQ        d$ j<                  dz    j                   j                  jM                  d%      d&   '      n&tS        d j<                  dz   d*| j                  +      gnbtC        d j<                  dz   |d,      tS        d j<                  dz   |d-      t;         j<                  dz   d. j                  vrdndd|/      g|_         fd0|_*        tW        jX                         j[                         |_.         j                  t&        j,                  j_                  t&        j,                  ja                   j                              r j                  n_tc        te        jd                  t&        j,                  j/                   j                  d1            t&        j,                  jf                  2      }|j\                  ji                  tk        jl                  |      d3   d45       |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)
iterr:   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)7parser
parse_argsargparse	Namespacegetpassgetuserprintru   r   overfitr   	init_ckptrS   initrf   rk   runlog_codesave_dirosmakedirssaver~   joinr   viserViserServerviser_server	splat_srcr
   vid_lenrw   rx   r   r   imgpathr   r   splitr   r   r	   get_dataloadermodelsFlowMapr   rX   isfile
expandusermaxglobgetctimeload_state_dictr:   load)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DIDJzzU%6%6%84$~~!$;  %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Kr1   r   )NF)9r   randomtimer   sysnumpynp	functoolsr   r   r   einopsr   r   torch.nnr   rO   rS   r:   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strr5   floatrR   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   MD%M`  a   %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B0r1   