3
w\ZdC                 @   s  d dl Z d dljZd dljjZd dlZd dlZddiZG dd dej	Z
G dd dej	ZG dd	 d	ej	ZG d
d dej	ZG dd dej	ZG dd dej	ZG dd dej	ZG dd dej	ZG dd dej	ZG dd dej	Zd3ddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zed/krd dl Z e Z!e Z"e!j#e" ej$d0 e j%e!d1 e j%e"d2 ee!Z&dS )4    Nimagenetz?http://webia.lip6.fr/~cadene/Downloads/inceptionv4-97ef9c30.pthc                   s&   e Zd Zd fdd	Zdd Z  ZS )BasicConv2dr   c                sL   t t| j  tj|||||dd| _tj|dddd| _tjdd| _	d S )NF)kernel_sizestridepaddingbiasgMbP?r   T)epsmomentumaffine)inplace)
superr   __init__nnConv2dconvBatchNorm2dbnReLUrelu)self	in_planes
out_planesr   r   r   )	__class__ e/data/vision/torralba/deepscene/small-projects/TRN-pytorch-pose/model_zoo/inceptionv4/pytorch_load.pyr      s    zBasicConv2d.__init__c             C   s"   | j |}| j|}| j|}|S )N)r   r   r   )r   xr   r   r   forward   s    


zBasicConv2d.forward)r   )__name__
__module____qualname__r   r   __classcell__r   r   )r   r   r      s   r   c                   s$   e Zd Z fddZdd Z  ZS )Mixed_3ac                s4   t t| j  tjddd| _tddddd| _d S )N      )r   @   `   )r   r   )r   r!   r   r   	MaxPool2dmaxpoolr   r   )r   )r   r   r   r      s    zMixed_3a.__init__c             C   s(   | j |}| j|}tj||fd}|S )N   )r'   r   torchcat)r   r   x0x1outr   r   r   r       s    

zMixed_3a.forward)r   r   r   r   r   r    r   r   )r   r   r!      s   r!   c                   s$   e Zd Z fddZdd Z  ZS )Mixed_4ac          
      s~   t t| j  tjtdddddtddddd| _tjtdddddtddd
ddd	tdddddd	tddddd| _d S )N   r$   r(   )r   r   r%   r"      r   )r   r   r   )r(   r0   )r   r"   )r0   r(   )r"   r   )r"   r"   )r   r.   r   r   
Sequentialr   branch0branch1)r   )r   r   r   r   (   s    zMixed_4a.__init__c             C   s(   | j |}| j|}tj||fd}|S )Nr(   )r2   r3   r)   r*   )r   r   r+   r,   r-   r   r   r   r   7   s    

zMixed_4a.forward)r   r   r   r   r   r    r   r   )r   r   r.   &   s   r.   c                   s$   e Zd Z fddZdd Z  ZS )Mixed_5ac                s4   t t| j  tddddd| _tjddd| _d S )N   r"   r#   )r   r   )r   )r   r4   r   r   r   r   r&   r'   )r   )r   r   r   r   ?   s    zMixed_5a.__init__c             C   s(   | j |}| j|}tj||fd}|S )Nr(   )r   r'   r)   r*   )r   r   r+   r,   r-   r   r   r   r   D   s    

zMixed_5a.forward)r   r   r   r   r   r    r   r   )r   r   r4   =   s   r4   c                   s$   e Zd Z fddZdd Z  ZS )Inception_Ac          
      s   t t| j  tddddd| _tjtdddddtdddddd| _tjtdddddtddddddtdddddd| _tjtj	ddddd	tddddd| _
d S )
Ni  r%   r(   )r   r   r$   r"   )r   r   r   F)r   r   count_include_pad)r   r6   r   r   r2   r   r1   r3   branch2	AvgPool2dbranch3)r   )r   r   r   r   L   s    zInception_A.__init__c             C   s@   | j |}| j|}| j|}| j|}tj||||fd}|S )Nr(   )r2   r3   r8   r:   r)   r*   )r   r   r+   r,   x2x3r-   r   r   r   r   `   s    



zInception_A.forward)r   r   r   r   r   r    r   r   )r   r   r6   J   s   r6   c                   s$   e Zd Z fddZdd Z  ZS )Reduction_Ac          	      sj   t t| j  tddddd| _tjtdddddtddddddtdd	ddd| _tjddd
| _	d S )Ni  r"   r#   )r   r   r5   r(      )r   r   r      )r   )
r   r=   r   r   r2   r   r1   r3   r&   r8   )r   )r   r   r   r   j   s    zReduction_A.__init__c             C   s4   | j |}| j|}| j|}tj|||fd}|S )Nr(   )r2   r3   r8   r)   r*   )r   r   r+   r,   r;   r-   r   r   r   r   v   s
    


zReduction_A.forward)r   r   r   r   r   r    r   r   )r   r   r=   h   s   r=   c                   s$   e Zd Z fddZdd Z  ZS )Inception_Bc                s   t t| j  tddddd| _tjtdddddtdddddd
tdddddd
| _tjtdddddtdddddd
tdddddd
tdddddd
tdddddd
| _tjtj	d	ddddtddddd| _
d S )Ni   i  r(   )r   r   r5   r>   r0   r   r"   )r   r   r   r?   F)r   r   r7      )r(   r0   )r   r"   )r0   r(   )r"   r   )r0   r(   )r"   r   )r(   r0   )r   r"   )r0   r(   )r"   r   )r(   r0   )r   r"   )r   r@   r   r   r2   r   r1   r3   r8   r9   r:   )r   )r   r   r   r      s    zInception_B.__init__c             C   s@   | j |}| j|}| j|}| j|}tj||||fd}|S )Nr(   )r2   r3   r8   r:   r)   r*   )r   r   r+   r,   r;   r<   r-   r   r   r   r      s    



zInception_B.forward)r   r   r   r   r   r    r   r   )r   r   r@   }   s   r@   c                   s$   e Zd Z fddZdd Z  ZS )Reduction_Bc          
      s   t t| j  tjtdddddtddddd| _tjtdddddtdddddd
tdddddd
tddddd| _tjddd| _	d S )Ni   r5   r(   )r   r   r"   r#   r?   r0   r   )r   r   r   i@  )r   )r(   r0   )r   r"   )r0   r(   )r"   r   )
r   rB   r   r   r1   r   r2   r3   r&   r8   )r   )r   r   r   r      s    zReduction_B.__init__c             C   s4   | j |}| j|}| j|}tj|||fd}|S )Nr(   )r2   r3   r8   r)   r*   )r   r   r+   r,   r;   r-   r   r   r   r      s
    


zReduction_B.forward)r   r   r   r   r   r    r   r   )r   r   rB      s   rB   c                   s$   e Zd Z fddZdd Z  ZS )Inception_Cc                s   t t| j  tddddd| _tddddd| _tdddddd| _tdddddd| _tddddd| _tdd	dddd| _	td	d
dddd| _
td
ddddd| _td
ddddd| _tjtjdddddtddddd| _d S )Ni   r?   r(   )r   r   i  r"   r   )r   r   r   i  i   F)r   r   r7   )r(   r"   )r   r(   )r"   r(   )r(   r   )r"   r(   )r(   r   )r(   r"   )r   r(   )r(   r"   )r   r(   )r"   r(   )r(   r   )r   rC   r   r   r2   	branch1_0
branch1_1a
branch1_1b	branch2_0	branch2_1	branch2_2
branch2_3a
branch2_3br   r1   r9   r:   )r   )r   r   r   r      s    zInception_C.__init__c             C   s   | j |}| j|}| j|}| j|}tj||fd}| j|}| j|}| j|}	| j	|	}
| j
|	}tj|
|fd}| j|}tj||||fd}|S )Nr(   )r2   rD   rE   rF   r)   r*   rG   rH   rI   rJ   rK   r:   )r   r   r+   Zx1_0Zx1_1aZx1_1br,   Zx2_0Zx2_1Zx2_2Zx2_3aZx2_3br;   r<   r-   r   r   r   r      s    









zInception_C.forward)r   r   r   r   r   r    r   r   )r   r   rC      s   rC   c                   s&   e Zd Zd fdd	Zdd Z  ZS )InceptionV4  c                s   t t| j  tjtdddddtdddddtddddddt t t t	 t	 t	 t	 t
 t t t t t t t t t t t tjdd	d
| _tjd|| _d S )Nr"       r#   )r   r   r(   r$   )r   r   r      F)r7   i   )r   rL   r   r   r1   r   r!   r.   r4   r6   r=   r@   rB   rC   r9   featuresLinearclassif)r   num_classes)r   r   r   r      s4    zInceptionV4.__init__c             C   s*   | j |}|j|jdd}| j|}|S )Nr   r(   )rP   viewsizerR   )r   r   r   r   r   r     s    

zInceptionV4.forward)rM   )r   r   r   r   r   r    r   r   )r   r   rL      s   rL   Tc             C   s"   t  }| r|jtjtd  |S )Nr   )rL   load_state_dict	model_zooload_url
model_urls)
pretrainedmodelr   r   r   inceptionv4  s    r]   c             C   s   t jd| d d}tj|d f  jdddd| |d	 < | |d	  jd}tj|| |d
 < tj|d f  | |d < tj|d f  | |d < tj|d f  | |d < |j  d S )Nzdump/InceptionV4/z.h5rweightsr"   r#   r   r(   z.conv.weightz
.bn.weightbetaz.bn.biasmeanz.bn.running_meanvarz.bn.running_var)h5pyFiler)   
from_numpypermuterV   onesclose)
state_dictname_pthname_tfh5fr   r   r   r   load_conv2d  s    &rm   c             C   sX   t jd| d d}tj|d f  j | |d < tj|d f  | |d < |j  d S )Nzdump/InceptionV4/z.h5r^   r_   z.weightbiasesz.bias)rc   rd   r)   re   trh   )ri   rj   rk   rl   r   r   r   load_linear  s    rp   c             C   s|   t | |d |d  t | |d |d  t | |d |d  t | |d |d  t | |d	 |d
  t | |d |d  d S )Nz
.branch0.0z/Branch_0/Conv2d_0a_1x1z
.branch0.1z/Branch_0/Conv2d_1a_3x3z
.branch1.0z/Branch_1/Conv2d_0a_1x1z
.branch1.1z/Branch_1/Conv2d_0b_1x7z
.branch1.2z/Branch_1/Conv2d_0c_7x1z
.branch1.3z/Branch_1/Conv2d_1a_3x3)rm   )ri   rj   rk   r   r   r   load_mixed_4a_7a!  s    rq   c             C   s   t | |d |d  t | |d |d  t | |d |d  t | |d |d  t | |d	 |d
  t | |d |d  t | |d |d  d S )Nz.branch0z/Branch_0/Conv2d_0a_1x1z
.branch1.0z/Branch_1/Conv2d_0a_1x1z
.branch1.1z/Branch_1/Conv2d_0b_3x3z
.branch2.0z/Branch_2/Conv2d_0a_1x1z
.branch2.1z/Branch_2/Conv2d_0b_3x3z
.branch2.2z/Branch_2/Conv2d_0c_3x3z
.branch3.1z/Branch_3/Conv2d_0b_1x1)rm   )ri   rj   rk   r   r   r   load_mixed_5)  s    rr   c             C   s   t | |d |d  t | |d |d  t | |d |d  t | |d |d  t | |d	 |d
  t | |d |d  t | |d |d  t | |d |d  t | |d |d  t | |d |d  d S )Nz.branch0z/Branch_0/Conv2d_0a_1x1z
.branch1.0z/Branch_1/Conv2d_0a_1x1z
.branch1.1z/Branch_1/Conv2d_0b_1x7z
.branch1.2z/Branch_1/Conv2d_0c_7x1z
.branch2.0z/Branch_2/Conv2d_0a_1x1z
.branch2.1z/Branch_2/Conv2d_0b_7x1z
.branch2.2z/Branch_2/Conv2d_0c_1x7z
.branch2.3z/Branch_2/Conv2d_0d_7x1z
.branch2.4z/Branch_2/Conv2d_0e_1x7z
.branch3.1z/Branch_3/Conv2d_0b_1x1)rm   )ri   rj   rk   r   r   r   load_mixed_62  s    rs   c             C   s   t | |d |d  t | |d |d  t | |d |d  t | |d |d  t | |d	 |d
  t | |d |d  t | |d |d  t | |d |d  t | |d |d  t | |d |d  d S )Nz.branch0z/Branch_0/Conv2d_0a_1x1z
.branch1_0z/Branch_1/Conv2d_0a_1x1z.branch1_1az/Branch_1/Conv2d_0b_1x3z.branch1_1bz/Branch_1/Conv2d_0c_3x1z
.branch2_0z/Branch_2/Conv2d_0a_1x1z
.branch2_1z/Branch_2/Conv2d_0b_3x1z
.branch2_2z/Branch_2/Conv2d_0c_1x3z.branch2_3az/Branch_2/Conv2d_0d_1x3z.branch2_3bz/Branch_2/Conv2d_0e_3x1z
.branch3.1z/Branch_3/Conv2d_0b_1x1)rm   )ri   rj   rk   r   r   r   load_mixed_7>  s    rt   c              C   st  i } t | ddd t | ddd t | ddd t | dd	d t| d
dd t | ddd t| ddd t| ddd t| ddd t| ddd t | ddd t | ddd t | ddd t | ddd t| ddd t| d d!d t| d"d#d t| d$d%d t| d&d'd t| d(d)d t| d*d+d t| d,d-d t| d.d/d t| d0d1d t| d2d3d t| d4d5d | S )6Nz
features.0Conv2d_1a_3x3)rj   rk   z
features.1Conv2d_2a_3x3z
features.2Conv2d_2b_3x3zfeatures.3.convzMixed_3a/Branch_1/Conv2d_0a_3x3z
features.4r.   zfeatures.5.convzMixed_5a/Branch_0/Conv2d_1a_3x3z
features.6Mixed_5bz
features.7Mixed_5cz
features.8Mixed_5dz
features.9ZMixed_5ezfeatures.10.branch0zMixed_6a/Branch_0/Conv2d_1a_3x3zfeatures.10.branch1.0zMixed_6a/Branch_1/Conv2d_0a_1x1zfeatures.10.branch1.1zMixed_6a/Branch_1/Conv2d_0b_3x3zfeatures.10.branch1.2zMixed_6a/Branch_1/Conv2d_1a_3x3zfeatures.11Mixed_6bzfeatures.12Mixed_6czfeatures.13Mixed_6dzfeatures.14Mixed_6ezfeatures.15ZMixed_6fzfeatures.16ZMixed_6gzfeatures.17ZMixed_6hzfeatures.18Mixed_7azfeatures.19Mixed_7bzfeatures.20Mixed_7czfeatures.21ZMixed_7drR   Logits)rm   rq   rr   rs   rt   rp   )ri   r   r   r   loadK  s8    r   c             C   s   | j   ddlm} |jd}tjdddd}tj||d< |jdd |jdd | jtj	j
|}tjdd	}tj|d
 f  }|j  tjjj|}ttj|j| |S )Nr   )misczlena_299.pngr(   i+  r"   r#   zdump/InceptionV4/Logits.h5r^   r-   )evalscipyr   imreadr)   zerosre   
transpose_r   autogradVariablerc   rd   rh   r   
functionalsoftmaxprintdistdata)r\   r   imginputsoutputsrl   
outputs_tfr   r   r   testx  s    
r   c                sb   t jd  d d}tj|d f  jdd jdd |j   fdd	}| j| d S )
Nzdump/InceptionV4/z.h5r^   relu_outr(   r"   r#   c                s   t  tj|j d S )N)r   r)   r   r   )r   inputoutput)name	output_tfr   r   	test_dist  s    ztest_conv2d.<locals>.test_dist)rc   rd   r)   re   r   rh   register_forward_hook)moduler   rl   r   r   )r   r   r   test_conv2d  s    r   c             C   s|   t | jd |d  t | jd |d  t | jd |d  t | jd |d  t | jd |d  t | jd	 |d
  d S )Nr   z/Branch_0/Conv2d_0a_1x1r(   z/Branch_0/Conv2d_1a_3x3z/Branch_1/Conv2d_0a_1x1z/Branch_1/Conv2d_0b_1x7r#   z/Branch_1/Conv2d_0c_7x1r"   z/Branch_1/Conv2d_1a_3x3)r   r2   r3   )r   r   r   r   r   test_mixed_4a_7a  s    r   __main__zmkdir -p savezsave/inceptionv4.pthzsave/inceptionv4_state.pth)T)'r)   torch.nnr   torch.utils.model_zooutilsrX   ossysrZ   Moduler   r!   r.   r4   r6   r=   r@   rB   rC   rL   r]   rm   rp   rq   rr   rs   rt   r   r   r   r   r   rc   r\   ri   rW   systemsaver   r   r   r   r   <module>   sF   
!*%


	-


