a
    Tqe/                  
   @   s  d Z ddlZddlZddlZejejeZe	dsHejeZq0eejvr^ej
e ddlmZmZ dd Zdd Zd	d
 ZedkrddlZddlmZ ddlmZ ejddZejddedddd ejdeddd eee Zej dkrdej!v rdnde_ de_"de_#de_$de_%de_&de_'d e_(de_)ej"ej#ej#d ej$ej%ej&ej'ej(ej)d!	e_*e+d"e_+eej,ej+d#Z-e.d$j,ej+d#Z/e-e/Z0e01 D ]\Z2Z3e4d%5e2e36  qe4d&5ee- dS )'aG  
# -*- coding: utf-8 -*-
-----------------------------------------------------------------------------------
# Author: Nguyen Mau Dung
# DoC: 2020.08.09
# email: nguyenmaudung93.kstn@gmail.com
-----------------------------------------------------------------------------------
# Description: utils functions that use for model
    Nsfa)resnet
fpn_resnetc                 C   s   z| j d}t|d }W n   tY n0 d| j v rZtd tj|| j| j| j	d}n8d| j v rtd t
j|| j| j| j	d}ndsJ d	|S )
z'Create model based on architecture name_r   z.using ResNet architecture with feature pyramid)
num_layersheads	head_convimagenet_pretrainedr   zusing ResNet architectureFzUndefined model backbone)archsplitint
ValueErrorprintr   Zget_pose_netr   r	   r
   r   )configsZ
arch_partsr   model r   I/home/opencvuniv/work/pranav/ADAS_2_LIDAR/SFA3D/sfa/models/model_utils.pycreate_model   s"    


r   c                 C   s>   t | dr$tdd | j D }ntdd |  D }|S )z/Count number of trained parameters of the modelmodulec                 s   s   | ]}|j r| V  qd S Nrequires_gradnumel.0pr   r   r   	<genexpr>1       z%get_num_parameters.<locals>.<genexpr>c                 s   s   | ]}|j r| V  qd S r   r   r   r   r   r   r   3   r   )hasattrsumr   
parameters)r   num_parametersr   r   r   get_num_parameters.   s    
r#   c                 C   s   |j r|jd urptj|j | |j t|j|j |_t|j|j d |j |_tj	j
j| |jgd} q|   tj	j
| } n6|jd urtj|j | |j} ntj	|  } | S )N   )
device_ids)distributedgpu_idxtorchcuda
set_devicer   
batch_sizeZngpus_per_nodenum_workersnnparallelDistributedDataParallelDataParallel)r   r   r   r   r   make_data_parallel8   s    

r1   __main__)summary)EasyDictzRTM3D Implementation)descriptionz-az--archZ	resnet_18ARCHz"The name of the model architecture)typedefaultmetavarhelpz--head_convr   zmconv layer channels for output head0 for no conv layer-1 for default setting: 64 for resnets and 256 for dla.)r7   r8   r:   Zdla   @            r$   )	Zhm_mcZhm_verZvercoorZcenoffZveroffdimrotdepthwhzcuda:1)device)r$   r=      rE   zhm_name: {}, hm_out size: {}znumber of parameters: {})7__doc__ossysr(   pathdirnamerealpath__file__src_direndswithappendmodelsr   r   r   r#   r1   __name__argparseZtorchsummaryr3   easydictr4   edictArgumentParserparseradd_argumentstrr   vars
parse_argsr   r	   r   num_classesZnum_vertexesnum_center_offsetZnum_vertexes_offsetZnum_dimensionZnum_rotZ	num_depthZnum_whr   rD   tor   randnsample_inputoutputitemsZhm_nameZhm_outr   formatsizer   r   r   r   <module>   sf   





