
    J/-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 Z,d dl-Z- e-j\                  d      Z/e/ja                  dde1ddd       e/ja                  dde1ddd       e/ja                  dddd        e/ja                  d!d"e1d#$       e/ja                  d%e1d$       e/ja                  d&d'e2d(d)*       e/ja                  d+d,e2d-d.*       e/ja                  d/e2d0d1*       e/ja                  d2e2d3d4*       e/ja                  d5e3d6d7*       e/ja                  d8e2 e2d9      d7*       e/ja                  d:ddd;<       e/ja                  d=e2d>d?*       e/ja                  d@dddA<       e/ja                  dBe1ddC*       e/ja                  dDe1ddE*       e/ja                  dFe2dGdH*       e/ja                  dIe2d dJ*       e/ja                  dKdddL<       e/ja                  dMdddN<       e/ja                  dOdddP<       e/ja                  dQdddR<       e/ja                  dSdddT<       e/ja                  dUdddV<       e/ja                  dWdddX<       e/ja                  dYe2dZd[*       e/ja                  d\ddd]<       e/ja                  d^ddd_<       e/ja                  d`e2 e2d9      da*       e/ja                  dbdddc<       e/ja                  dddeddf<       e/ja                  dgdeddh<       di Z4dmdjZ5dk Z6dndlZ7y)o    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      //home/cameronsmith/repos/flowcams/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-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   F   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   G   s2    9S)Cabajc#((SU,Y[J\F]r pqr r1   c                 <   d }i }d| v r'| d   j                         j                         dz  |d<   d| v r| 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>K   s:    u{{c!f#N1Aa!A$))+o$6#NO #Ns   "A	res_depthg?zmetrics/res_depth_regpoint_track_lossg      $@zmetrics/tracks_errflow_from_posegɿg?	flow_inp_giUMu>)deltag    .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meanF
huber_lossclipch_secwandblogprint)	model_outgtmodel_inputmodelrF   rayslossess          r   loss_fnrW   I   sM   ODF i)KBXB_B_BaBfBfBhimBm'> ?Y&yQcGdehGh/C(D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                 l    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        ||_        |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'   r\   allcatr(   r'   r\   
      )num_trgtnum_catn_skipval	seq_querycategoryrY      )imslnum_ctxt_viewsnum_query_viewsrq   rp   dog)pathrn   rp   davistanks)\   rt   _)low_resrn   rp   scenellffmip)L      )num_contextrn   r   rq   rp   )ru   rw   rq   rp   )r   rn   rq   rp   small)rn   ro   rp   rq   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)3parser
parse_argsargparse	NamespacegetpassgetuserrP   rp   r   overfitr   	init_ckptrN   initra   rf   runlog_codesave_dirosmakedirssavery   joinr
   vid_lenrr   rs   r   r   imgpathr   r   splitr   r   r	   get_dataloadermodelsFlowMapr   rT   isfile
expandusermaxglobgetctimeload_state_dictr9   loadr   )r   rq   selfuserr   	ckpt_files   `     r   make_runr   k   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Kr1   r   )NF)8r   randomtimer   sysnumpynp	functoolsr   r   r   einopsr   r   torch.nnr   rJ   rN   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   ArgumentParserr   add_argumentstrr4   floatrM   ch_fstrW   r    r1   r   <module>r      s         # $     #   + + 3 1  )     c 	 	 	 -B	C   DBK`  a   DSu  S^   _   DU<  H   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   