
    nfQ                        d dl Z d dl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c 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mZmZmZmZ d d	lmZmZ d d
l m!Z! ddZ" G d dej#                  Z$ G d dej#                  Z% G d dej#                  Z& G d dej#                  Z' G d dej#                  Z( G d dej#                  Z) G d dej#                  Z* G d dej#                  Z+ G d dej#                  Z, G d dej#                  Z-dd"Z. G d# d$ej#                  Z/ G d% d&ej#                  Z0 G d' d(ej#                  Z1 G d) d*ej#                  Z2 G d+ d,ej#                  Z3 G d- d.ej#                  Z4 G d/ d0e4          Z5 G d1 d2ej#                  Z6 G d3 d4ej#                  Z7 G d5 d6e7          Z8 G d7 d8e0          Z9 G d9 d:ej#                  Z: G d; d<ej#                  Z; G d= d>ej#                  Z< G d? d@e:          Z= G dA dBe;          Z> G dC dDe<          Z? G dE dFe=          Z@ G dG dHe>          ZA G dI dJe?          ZB G dK dLe:          ZC G dM dNe;          ZD G dO dPe<          ZE G dQ dRej#                  ZF G dS dTej#                  ZG G dU dVej#                  ZH G dW dXe3          ZI G dY dZe:          ZJ G d[ d\e;          ZK G d] d^e<          ZL G d_ d`e4          ZM G da dbe=          ZN G dc dde>          ZO G de dfe?          ZP G dg dhe5          ZQ G di dje@          ZR G dk dleA          ZS G dm dneB          ZT G do dpej#                  ZU G dq drej#                  ZV G ds dtej#                  ZW G du dvej#                  ZX G dw dxej#                  ZY G dy dzej#                  ZZ G d{ d|ej#                  Z[ G d} d~ej#                  Z\ G d d          Z] G d dej#                  Z^d Z_ G d dej#                  Z` G d dej#                  Za G d dej#                  Zb G d dej#                  Zc G d dej#                  Zdd Zed Zf G d dej#                  Zg G d dej#                  Zh G d dej#                  Zi G d dej#                  Zj G d dej#                  Zk G d dej#                  Zl G d dej#                  Zmd Znd Zo G d dej#                  Zp G d dej#                  Zq G d dej#                  Zr G d dej#                  Zs G d dej#                  ZtdS )    N)copy)Path)DeformConv2d)Image)amp	letterbox)non_max_suppressionmake_divisiblescale_coordsincrement_path	xyxy2xywh)
color_listplot_one_box)time_synchronizedc                 V    |&t          | t                    r| dz  nd | D             }|S )N   c                     g | ]}|d z  S r    .0xs     %/var/www/html/yolov7/models/common.py
<listcomp>zautopad.<locals>.<listcomp>   s    .A.A.A!qAv.A.A.A    )
isinstanceint)kps     r   autopadr!      s7    y C((AAFF.A.Aq.A.A.AHr   c                   &     e Zd Zd fd	Zd Z xZS )MPr   c                     t          t          |                                            t          j        ||          | _        d S )Nkernel_sizestride)superr#   __init__nn	MaxPool2dm)selfr   	__class__s     r   r)   zMP.__init__   s7    b$  """!A666r   c                 ,    |                      |          S Nr,   r-   r   s     r   forwardz
MP.forward#       vvayyr   r   __name__
__module____qualname__r)   r3   __classcell__r.   s   @r   r#   r#      sL        7 7 7 7 7 7      r   r#   c                   &     e Zd Zd fd	Zd Z xZS )SP      c                     t          t          |                                            t          j        |||dz            | _        d S )Nr   r&   r'   padding)r(   r<   r)   r*   r+   r,   )r-   r   sr.   s      r   r)   zSP.__init__(   s=    b$  """!AqAvFFFr   c                 ,    |                      |          S r0   r1   r2   s     r   r3   z
SP.forward,   r4   r   r=   r>   r5   r:   s   @r   r<   r<   '   sR        G G G G G G      r   r<   c                   $     e Zd Z fdZd Z xZS )ReOrgc                 V    t          t          |                                            d S r0   )r(   rF   r)   r-   r.   s    r   r)   zReOrg.__init__1   s%    eT##%%%%%r   c                     t          j        |dd d dd d df         |ddd dd d df         |dd d ddd df         |ddd ddd df         gd          S N.r   r>   )torchcatr2   s     r   r3   zReOrg.forward4   s    y!C1cccM*Ac14a41n,=qccc14a4?PRSTWYZY]\]Y]_`_cbc_cTcRdeghiiir   r5   r:   s   @r   rF   rF   0   sN        & & & & &j j j j j j jr   rF   c                   &     e Zd Zd fd	Zd Z xZS )Concatr>   c                 d    t          t          |                                            || _        d S r0   )r(   rN   r)   dr-   	dimensionr.   s     r   r)   zConcat.__init__9   s*    fd$$&&&r   c                 6    t          j        || j                  S r0   )rK   rL   rP   r2   s     r   r3   zConcat.forward=   s    yDF###r   r>   r5   r:   s   @r   rN   rN   8   sL             $ $ $ $ $ $ $r   rN   c                   &     e Zd Zd fd	Zd Z xZS )Chuncatr>   c                 d    t          t          |                                            || _        d S r0   )r(   rV   r)   rP   rQ   s     r   r)   zChuncat.__init__B   *    gt%%'''r   c                     g }g }|D ]J}|                     d| j                  \  }}|                    |           |                    |           Kt          j        ||z   | j                  S Nr   )chunkrP   appendrK   rL   )r-   r   x1x2xixi1xi2s          r   r3   zChuncat.forwardF   sl     	 	Bxx46**HCIIcNNNIIcNNNNyB'''r   rT   r5   r:   s   @r   rV   rV   A   sL             ( ( ( ( ( ( (r   rV   c                   &     e Zd Zd fd	Zd Z xZS )Shortcutr   c                 d    t          t          |                                            || _        d S r0   )r(   rc   r)   rP   rQ   s     r   r)   zShortcut.__init__Q   s*    h&&(((r   c                 $    |d         |d         z   S )Nr   r>   r   r2   s     r   r3   zShortcut.forwardU   s    tAaDyr   r   r5   r:   s   @r   rc   rc   P   sL                   r   rc   c                   &     e Zd Zd fd	Zd Z xZS )Foldcutr   c                 d    t          t          |                                            || _        d S r0   )r(   rh   r)   rP   rQ   s     r   r)   zFoldcut.__init__Z   rX   r   c                 H    |                     d| j                  \  }}||z   S rZ   )r[   rP   )r-   r   r]   r^   s       r   r3   zFoldcut.forward^   s$    DF##B"ur   rf   r5   r:   s   @r   rh   rh   Y   sL                   r   rh   c                   ,     e Zd Zd fd	Zd Zd Z xZS )Convr>   NTc           
      z   t          t          |                                            t          j        ||||t          ||          |d          | _        t          j        |          | _        |du rt          j	                    n.t          |t          j                  r|nt          j                    | _        d S )NFgroupsbiasT)r(   rl   r)   r*   Conv2dr!   convBatchNorm2dbnSiLUr   ModuleIdentityact	r-   c1c2r   rB   r    grx   r.   s	           r   r)   zConv.__init__e   s    dD""$$$Ib"aGAqMM!%PPP	.$$ #t27999C9S9S2f##Y[YdYfYfr   c                 x    |                      |                     |                     |                              S r0   )rx   rt   rr   r2   s     r   r3   zConv.forwardk   s*    xx		!--...r   c                 R    |                      |                     |                    S r0   )rx   rr   r2   s     r   fuseforwardzConv.fuseforwardn   s    xx		!%%%r   r>   r>   Nr>   T)r6   r7   r8   r)   r3   r   r9   r:   s   @r   rl   rl   c   sa        h h h h h h/ / /& & & & & & &r   rl   c                   &     e Zd Zd fd	Zd Z xZS )	
RobustConv   r>   NTư>c	           	      8   t          t          |                                            t          |||||||          | _        t          j        ||ddddd          | _        |dk    r)t          j        |t          j
        |          z            nd | _        d S )Nr   rB   r    r|   rx   r>   r   Trn   )r(   r   r)   rl   conv_dwr*   rq   conv1x1	ParameterrK   onesgamma
r-   rz   r{   r   rB   r    r|   rx   layer_scale_init_valuer.   s
            r   r)   zRobustConv.__init__t   s    j$((***Ba1RSAAAyRAqFFFNdghNhNhR\"85:b>>"IJJJnr


r   c                    |                     t          j                  }|                     |                     |                    }| j        0|                    | j                            dddd                    }|S )N)memory_formatr>   )torK   channels_lastr   r   r   mulreshaper2   s     r   r3   zRobustConv.forwardz   sg    DDu2D33LLa)):!dj((B15566Ar   )r   r>   Nr>   Tr   r5   r:   s   @r   r   r   r   sR        s s s s s s      r   r   c                   &     e Zd Zd	 fd	Zd Z xZS )
RobustConv2r      Nr>   Tr   c	           
      :   t          t          |                                            t          |||||||          | _        t          j        ||||dddd          | _        |dk    r)t          j        |t          j
        |          z            nd | _        d S )Nr   r   Tr>   )in_channelsout_channelsr&   r'   rA   rp   dilationro   )r(   r   r)   rl   conv_stridedr*   ConvTranspose2dconv_deconvr   rK   r   r   r   s
            r   r)   zRobustConv2.__init__   s    k4  ))+++ R1Q"#FFF-"2[\ef67dQWX
 
 
 OeghNhNhR\"85:b>>"IJJJnr


r   c                     |                      |                     |                    }| j        0|                    | j                            dddd                    }|S )Nr>   r   )r   r   r   r   r   r2   s     r   r3   zRobustConv2.forward   sW    T..q1122:!dj((B15566Ar   )r   r   Nr>   Tr   r5   r:   s   @r   r   r      sR        s s s s s s      r   r   r>   Tc           
      R    t          | |||t          j        | |          |          S )N)r|   rx   )rl   mathgcd)rz   r{   r   rB   rx   s        r   DWConvr      s)    B1R 0 0c::::r   c                   &     e Zd Zd fd	Zd Z xZS )	GhostConvr>   Tc           	          t          t          |                                            |dz  }t          ||||d ||          | _        t          ||ddd ||          | _        d S )Nr      r>   )r(   r   r)   rl   cv1cv2)	r-   rz   r{   r   rB   r|   rx   c_r.   s	           r   r)   zGhostConv.__init__   sb    i'')))1WB1dAs33B1dB44r   c                     |                      |          }t          j        ||                     |          gd          S Nr>   )r   rK   rL   r   )r-   r   ys      r   r3   zGhostConv.forward   s2    HHQKKy!TXXa[[)1---r   )r>   r>   r>   Tr5   r:   s   @r   r   r      sL        5 5 5 5 5 5. . . . . . .r   r   c                   &     e Zd Zd fd	Zd Z xZS )Stemr>   NTc                    t          t          |                                            t          |dz            }t	          ||dd          | _        t	          ||dd          | _        t	          ||dd          | _        t          j	        
                    dd          | _        t	          d|z  |dd          | _        d S )Nr   r=   r>   )r'   )r(   r   r)   r   rl   r   r   cv3rK   r*   r+   poolcv4
r-   rz   r{   r   rB   r    r|   rx   r   r.   s
            r   r)   zStem.__init__   s    dD""$$$AYYB1%%B1%%B1%%H&&q&33	BAq))r   c           	          |                      |          }|                     t          j        |                     |                     |                    |                     |          fd                    S Nr>   dim)r   r   rK   rL   r   r   r   r2   s     r   r3   zStem.forward   sW    HHQKKxx	488DHHQKK#8#8$))A,,"GQOOOPPPr   r   r5   r:   s   @r   r   r      sS        * * * * * *Q Q Q Q Q Q Qr   r   c                   &     e Zd Zd fd	Zd Z xZS )DownCr>   r   c                 @   t          t          |                                            t          |          }t	          ||dd          | _        t	          ||dz  d|          | _        t	          ||dz  dd          | _        t          j	        ||          | _
        d S )Nr>   r   r=   r%   )r(   r   r)   r   rl   r   r   r   r*   r+   mp)r-   rz   r{   nr   r   r.   s         r   r)   zDownC.__init__   s    eT##%%%WWB1%%BE1a((BE1a((,1Q777r   c                     t          j        |                     |                     |                    |                     |                     |                    fd          S r   )rK   rL   r   r   r   r   r2   s     r   r3   zDownC.forward   sH    y$((488A;;//$''!**1E1EFANNNNr   r>   r   r5   r:   s   @r   r   r      sS        8 8 8 8 8 8O O O O O O Or   r   c                   &     e Zd Zd fd	Zd Z xZS )SPPr   	      c                 (   t          t          |                                            |dz  }t          ||dd          | _        t          |t          |          dz   z  |dd          | _        t          j        d |D                       | _	        d S )Nr   r>   c                 B    g | ]}t          j        |d |dz            S r>   r   r@   r*   r+   r   s     r   r   z SPP.__init__.<locals>.<listcomp>   /    aaaZ[1aSTf U U Uaaar   )
r(   r   r)   rl   r   lenr   r*   
ModuleListr,   r-   rz   r{   r   r   r.   s        r   r)   zSPP.__init__   s    c4!!###1WB1%%c!ffqj)2q!44aa_`aaabbr   c                     |                                |                     t          j        gfd| j        D             z   d                    S )Nc                 &    g | ]} |          S r   r   )r   r,   r   s     r   r   zSPP.forward.<locals>.<listcomp>   s!    (>(>(>!1(>(>(>r   r>   )r   r   rK   rL   r,   r2   s    `r   r3   zSPP.forward   sN    HHQKKxx	1#(>(>(>(>tv(>(>(>">BBCCCr   )r   r5   r:   s   @r   r   r      sY        c c c c c cD D D D D D Dr   r   c                   &     e Zd Zd fd	Zd Z xZS )
BottleneckTr>         ?c                     t          t          |                                            t          ||z            }t	          ||dd          | _        t	          ||dd|          | _        |o||k    | _        d S Nr>   r=   r|   )r(   r   r)   r   rl   r   r   addr-   rz   r{   shortcutr|   er   r.   s          r   r)   zBottleneck.__init__   sq    j$((***a[[B1%%B1***(br   c                     | j         r+||                     |                     |                    z   n'|                     |                     |                    S r0   )r   r   r   r2   s     r   r3   zBottleneck.forward   sE    ,0HOq488DHHQKK(((($((488A;;:O:OOr   Tr>   r   r5   r:   s   @r   r   r      sS        ) ) ) ) ) )P P P P P P Pr   r   c                   &     e Zd Zd fd	Zd Z xZS )ResTr>   r   c                 "   t          t          |                                            t          ||z            }t	          ||dd          | _        t	          ||dd|          | _        t	          ||dd          | _        |o||k    | _        d S r   )	r(   r   r)   r   rl   r   r   r   r   r   s          r   r)   zRes.__init__   s    c4!!###a[[B1%%B1***B1%%(br   c                    | j         r>||                     |                     |                     |                              z   n:|                     |                     |                     |                              S r0   )r   r   r   r   r2   s     r   r3   zRes.forward   sc    6:hcq488DHHTXXa[[112222DHHTXXVZV^V^_`VaVaMbMbDcDccr   r   r5   r:   s   @r   r   r      sS        ) ) ) ) ) )d d d d d d dr   r   c                         e Zd Zd fd	Z xZS )ResXT    r   c                 v    t                                          |||||           t          ||z            }d S r0   )r(   r)   r   r   s          r   r)   zResX.__init__   s6    R1a000a[[r   Tr   r   r6   r7   r8   r)   r9   r:   s   @r   r   r      s=                 r   r   c                   &     e Zd Zd fd	Zd Z xZS )Ghostr=   r>   c                    t          t          |                                            |dz  }t          j        t          ||dd          |dk    rt          ||||d          nt          j                    t          ||ddd                    | _        |dk    r9t          j        t          ||||d          t          ||ddd                    nt          j                    | _
        d S )Nr   r>   F)rx   )r(   r   r)   r*   
Sequentialr   r   rw   rr   rl   r   )r-   rz   r{   r   rB   r   r.   s         r   r)   zGhost.__init__   s    eT##%%%1WM)BAq"9"9EF!VV&RA5"A"A"A"AQSQ\Q^Q^"+BAqe"D"D"DF F	 IJQ fRQu&E&E&E&*2r1aU&C&C&CE E ETVT_TaTa 	r   c                 X    |                      |          |                     |          z   S r0   )rr   r   r2   s     r   r3   zGhost.forward   s#    yy||dmmA....r   rD   r5   r:   s   @r   r   r      sR        b b b b b b/ / / / / / /r   r   c                   &     e Zd Zd fd	Zd Z xZS )SPPCSPCr>   Fr   r   c                    t          t          |                                            t          d|z  |z            }t	          ||dd          | _        t	          ||dd          | _        t	          ||dd          | _        t	          ||dd          | _        t          j
        d |D                       | _        t	          d|z  |dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        d S )Nr   r>   r=   c                 B    g | ]}t          j        |d |dz            S r   r   r   s     r   r   z$SPPCSPC.__init__.<locals>.<listcomp>  r   r   r   )r(   r   r)   r   rl   r   r   r   r   r*   r   r,   cv5cv6cv7
r-   rz   r{   r   r   r|   r   r   r   r.   s
            r   r)   zSPPCSPC.__init__  s    gt%%'''R!__B1%%B1%%B1%%B1%%aa_`aaabbBAq))B1%%BAq))r   c           	         |                      |                     |                     |                              |                     |                     t          j        gfd| j        D             z   d                              }|                     |          }| 	                    t          j        ||fd                    S )Nc                 &    g | ]} |          S r   r   )r   r,   r]   s     r   r   z#SPPCSPC.forward.<locals>.<listcomp>  s!    0G0G0G120G0G0Gr   r>   r   )
r   r   r   r   r   rK   rL   r,   r   r   )r-   r   y1y2r]   s       @r   r3   zSPPCSPC.forward  s    XXdhhtxx{{++,,XXdhhuy"0G0G0G0G0G0G0G)GKKLLMMXXa[[xx	2r(222333r   r>   Fr>   r   r   r5   r:   s   @r   r   r     sL        
* 
* 
* 
* 
* 
*4 4 4 4 4 4 4r   r   c                         e Zd Zd fd	Z xZS )GhostSPPCSPCr>   Fr   r   c           	         t                                          |||||||           t          d|z  |z            }t          ||dd          | _        t          ||dd          | _        t          ||dd          | _        t          ||dd          | _        t          d|z  |dd          | _        t          ||dd          | _	        t          d|z  |dd          | _
        d S )Nr   r>   r=   r   )r(   r)   r   r   r   r   r   r   r   r   r   r   s
            r   r)   zGhostSPPCSPC.__init__  s    RHaA666R!__RQ**RQ**RQ**RQ**QVRA..RQ**QVRA..r   r   r   r:   s   @r   r   r     s=        	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/r   r   c                         e Zd Zd fd	Z xZS )	GhostStemr>   NTc           	      8   t                                          |||||||           t          |dz            }t          ||dd          | _        t          ||dd          | _        t          ||dd          | _        t          d|z  |dd          | _        d S )Nr   r=   r>   )r(   r)   r   r   r   r   r   r   r   s
            r   r)   zGhostStem.__init__*  s    RAq!S111AYYRQ**RQ**RQ**QVRA..r   r   r   r:   s   @r   r   r   (  s=        / / / / / / / / / /r   r   c                   &     e Zd Zd fd	Zd Z xZS )BottleneckCSPAr>   Tr   c                 l   t          t          |                                            t          ||z            t	          |dd          | _        t	          |dd          | _        t	          dz  |dd          | _        t          j	        fdt          |          D              | _        d S )Nr>   r   c           	      8    g | ]}t          d           S       ?r   r   r   _r   r|   r   s     r   r   z+BottleneckCSPA.__init__.<locals>.<listcomp>;  ,     Z Z ZABHa3!G!G!G Z Z Zr   )r(   r   r)   r   rl   r   r   r   r*   r   ranger,   	r-   rz   r{   r   r   r|   r   r   r.   s	       `` @r   r)   zBottleneckCSPA.__init__5  s    nd##,,...a[[B1%%B1%%BAq)) Z Z Z Z Z ZQVWXQYQY Z Z Z[r   c                     |                      |                     |                    }|                     |          }|                     t	          j        ||fd                    S r   r,   r   r   r   rK   rL   r-   r   r   r   s       r   r3   zBottleneckCSPA.forward=  Q    VVDHHQKK  XXa[[xx	2r(222333r   r>   Tr>   r   r5   r:   s   @r   r   r   3  sR        \ \ \ \ \ \4 4 4 4 4 4 4r   r   c                   &     e Zd Zd fd	Zd Z xZS )BottleneckCSPBr>   Fr   c                 f   t          t          |                                            t          |          t	          |dd          | _        t	          dd          | _        t	          dz  |dd          | _        t          j	        fdt          |          D              | _        d S )Nr>   r   c           	      8    g | ]}t          d           S r  r  r  s     r   r   z+BottleneckCSPB.__init__.<locals>.<listcomp>K  r  r   )r(   r  r)   r   rl   r   r   r   r*   r   r  r,   r	  s	       `` @r   r)   zBottleneckCSPB.__init__E  s    nd##,,...WWB1%%B1%%BAq)) Z Z Z Z Z ZQVWXQYQY Z Z Z[r   c                     |                      |          }|                     |          }|                     |          }|                     t	          j        ||fd                    S r   r   r,   r   r   rK   rL   r-   r   r]   r   r   s        r   r3   zBottleneckCSPB.forwardM  T    XXa[[VVBZZXXb\\xx	2r(222333r   r>   Fr>   r   r5   r:   s   @r   r  r  C  sR        \ \ \ \ \ \4 4 4 4 4 4 4r   r  c                   &     e Zd Zd fd	Zd Z xZS )BottleneckCSPCr>   Tr   c                    t          t          |                                            t          ||z            t	          |dd          | _        t	          |dd          | _        t	          dd          | _        t	          dz  |dd          | _        t          j
        fdt          |          D              | _        d S )Nr>   r   c           	      8    g | ]}t          d           S r  r  r  s     r   r   z+BottleneckCSPC.__init__.<locals>.<listcomp>]  r  r   )r(   r  r)   r   rl   r   r   r   r   r*   r   r  r,   r	  s	       `` @r   r)   zBottleneckCSPC.__init__V  s    nd##,,...a[[B1%%B1%%B1%%BAq)) Z Z Z Z Z ZQVWXQYQY Z Z Z[r   c                     |                      |                     |                     |                              }|                     |          }|                     t          j        ||fd                    S r   r   r,   r   r   r   rK   rL   r  s       r   r3   zBottleneckCSPC.forward_  ]    XXdffTXXa[[))**XXa[[xx	2r(222333r   r  r5   r:   s   @r   r  r  T  sR        \ \ \ \ \ \4 4 4 4 4 4 4r   r  c                         e Zd Zd fd	Z xZS )ResCSPAr>   Tr   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r   r  r   r  s     r   r   z$ResCSPA.__init__.<locals>.<listcomp>j  ,     S S SQRXqC!@!@!@ S S Sr   r(   r)   r   r*   r   r  r,   r	  s	       `` @r   r)   zResCSPA.__init__g  k    RHa333a[[ S S S S S S%PQ(( S S STr   r  r   r:   s   @r   r   r   e  G        U U U U U U U U U Ur   r   c                         e Zd Zd fd	Z xZS )ResCSPBr>   Tr   c                     t                                          ||||           t          |          t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r$  r  s     r   r   z$ResCSPB.__init__.<locals>.<listcomp>r  r%  r   r&  r	  s	       `` @r   r)   zResCSPB.__init__o  g    RHa333WW S S S S S S%PQ(( S S STr   r  r   r:   s   @r   r*  r*  m  r(  r   r*  c                         e Zd Zd fd	Z xZS )ResCSPCr>   Tr   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r$  r  s     r   r   z$ResCSPC.__init__.<locals>.<listcomp>z  r%  r   r&  r	  s	       `` @r   r)   zResCSPC.__init__w  r'  r   r  r   r:   s   @r   r/  r/  u  r(  r   r/  c                         e Zd Zd fd	Z xZS )ResXCSPAr>   Tr   r   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r  r$  r  s     r   r   z%ResXCSPA.__init__.<locals>.<listcomp>  r%  r   r&  r	  s	       `` @r   r)   zResXCSPA.__init__  r'  r   r>   Tr   r   r   r:   s   @r   r3  r3  }  r(  r   r3  c                         e Zd Zd fd	Z xZS )ResXCSPBr>   Tr   r   c                     t                                          ||||           t          |          t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r  r$  r  s     r   r   z%ResXCSPB.__init__.<locals>.<listcomp>  r%  r   r&  r	  s	       `` @r   r)   zResXCSPB.__init__  r-  r   r6  r   r:   s   @r   r8  r8    r(  r   r8  c                         e Zd Zd fd	Z xZS )ResXCSPCr>   Tr   r   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r  r$  r  s     r   r   z%ResXCSPC.__init__.<locals>.<listcomp>  r%  r   r&  r	  s	       `` @r   r)   zResXCSPC.__init__  r'  r   r6  r   r:   s   @r   r<  r<    r(  r   r<  c                         e Zd Zd fd	Z xZS )	GhostCSPAr>   Tr   c                     t                                          ||||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc                 0    g | ]}t                    S r   r   r   r  r   s     r   r   z&GhostCSPA.__init__.<locals>.<listcomp>  !     A A A1r2 A A Ar   r&  r	  s	          @r   r)   zGhostCSPA.__init__  b    RHa333a[[ A A A Aa A A ABr   r  r   r:   s   @r   r@  r@    G        C C C C C C C C C Cr   r@  c                         e Zd Zd fd	Z xZS )	GhostCSPBr>   Tr   c                     t                                          ||||||           t          |          t          j        fdt          |          D              | _        d S )Nc                 0    g | ]}t                    S r   rC  rD  s     r   r   z&GhostCSPB.__init__.<locals>.<listcomp>  rE  r   r&  r	  s	          @r   r)   zGhostCSPB.__init__  s^    RHa333WW A A A Aa A A ABr   r  r   r:   s   @r   rI  rI    rG  r   rI  c                         e Zd Zd fd	Z xZS )	GhostCSPCr>   Tr   c                     t                                          ||||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc                 0    g | ]}t                    S r   rC  rD  s     r   r   z&GhostCSPC.__init__.<locals>.<listcomp>  rE  r   r&  r	  s	          @r   r)   zGhostCSPC.__init__  rF  r   r  r   r:   s   @r   rM  rM    rG  r   rM  c                   &     e Zd Zd fd	Zd Z xZS )	ImplicitA        {Gz?c                 >   t          t          |                                            || _        || _        || _        t          j        t          j	        d|dd                    | _
        t          j                            | j
        | j        | j                   d S Nr>   )meanstd)r(   rQ  r)   channelrV  rW  r*   r   rK   zerosimplicitinitnormal_r-   rX  rV  rW  r.   s       r   r)   zImplicitA.__init__  s{    i'')))	U[GQ%B%BCC
DI48DDDDDr   c                     | j         |z   S r0   rZ  r2   s     r   r3   zImplicitA.forward      }q  r   )rR  rS  r5   r:   s   @r   rQ  rQ    R        E E E E E E! ! ! ! ! ! !r   rQ  c                   &     e Zd Zd fd	Zd Z xZS )	ImplicitMr  rS  c                 >   t          t          |                                            || _        || _        || _        t          j        t          j	        d|dd                    | _
        t          j                            | j
        | j        | j                   d S rU  )r(   rc  r)   rX  rV  rW  r*   r   rK   r   rZ  r[  r\  r]  s       r   r)   zImplicitM.__init__  s{    i'')))	UZ7Aq%A%ABB
DI48DDDDDr   c                     | j         |z  S r0   r_  r2   s     r   r3   zImplicitM.forward  r`  r   )r  rS  r5   r:   s   @r   rc  rc    ra  r   rc  c                   J     e Zd Zd fd	Zd Zd Zd	 Zd
 Zd Zd Z	d Z
 xZS )RepConvr=   r>   NTFc	                 t   t          t          |                                            || _        || _        || _        || _        |dk    sJ t          ||          dk    sJ t          ||          |dz  z
  }	|du rt          j	                    n.t          |t          j                  r|nt          j                    | _        |r0t          j        ||||t          ||          |d          | _        d S ||k    r|dk    rt          j        |          nd | _        t          j        t          j        ||||t          ||          |d          t          j        |                    | _        t          j        t          j        ||d||	|d          t          j        |                    | _        d S )Nr=   r>   r   Trn   num_featuresF)r(   rg  r)   deployro   r   r   r!   r*   ru   r   rv   rw   rx   rq   rbr_reparamrs   rbr_identityr   	rbr_denserbr_1x1)r-   rz   r{   r   rB   r    r|   rx   rk  
padding_11r.   s             r   r)   zRepConv.__init__  s   gt%%'''Avvvvq!}}!!!!Q]]Q!V+
 #t27999C9S9S2f##Y[YdYfYf 	!yRAwq!}}QUYZZZD EG"HHQRVWQWQWR!@!@!@!@]aD]	"b!Q1aeLLLB/// DN
 =	2r1aAEJJJB/// DLLLr   c                 2   t          | d          r(|                     |                     |                    S | j        d}n|                     |          }|                     |                     |          |                     |          z   |z             S Nrl  r   )hasattrrx   rl  rm  rn  ro  )r-   inputsid_outs      r   r3   zRepConv.forward  s    4'' 	688D,,V44555$FF&&v..Fxxv..f1E1EENOOOr   c                     |                      | j                  \  }}|                      | j                  \  }}|                      | j                  \  }}||                     |          z   |z   ||z   |z   fS r0   _fuse_bn_tensorrn  ro  rm  _pad_1x1_to_3x3_tensorr-   	kernel3x3bias3x3	kernel1x1bias1x1kernelidbiasids          r   get_equivalent_kernel_biasz"RepConv.get_equivalent_kernel_bias  s    !11$.AA	7!11$,??	7//0ABB&33I>>>Ig&
 	
r   c                 N    |dS t           j                            |g d          S Nr   r>   r>   r>   r>   )r*   
functionalpadr-   r}  s     r   ry  zRepConv._pad_1x1_to_3x3_tensor  s)    1=$$Y===r   c                 .   |dS t          |t          j                  rO|d         j        }|d         j        }|d         j        }|d         j        }|d         j        }|d         j        }nt          |t          j                  sJ t          | d          s| j
        | j        z  }t          j        | j
        |ddft          j                  }	t          | j
                  D ]}
d|	|
|
|z  ddf<   t!          j        |	                              |j        j                  | _        | j        }|j        }|j        }|j        }|j        }|j        }||z                                   }||z                      dddd          }||z  |||z  |z  z
  fS )Nr   r   r   r>   	id_tensorr=   dtyper   )r   r*   r   weightrunning_meanrunning_varrp   epsrs   rs  r   ro   nprY  float32r  rK   
from_numpyr   devicer  sqrtr   r-   branchkernelr  r  r   betar  	input_dimkernel_valueirW  ts                r   rx  zRepConv._fuse_bn_tensor  s   >4fbm,, 	AY%F!!91L )/K1I$E!9>D)-CCfbn555554-- Y ,;	!x%y!Q7rz      t/00 = =A;<LA	M1a!788!&!1,!?!?!B!B6=CW!X!X^F!.L ,KME;D*CS &&((S[!!"aA..z4,"6"<<<<r   c                    |                                  \  }}|                                                                                                |                                                                                                fS r0   )r  detachcpunumpy)r-   r  rp   s      r   repvgg_convertzRepConv.repvgg_convert*  sg    6688MMOO!!''))KKMM%%''
 	
r   c                    |j         |j        z                                   }|j        |j        |j        z  |z  z
  }|j        |z                      dddd          }|j        |z  }t          j                    }t          j	        |j
        |j        |j        |j        |j        |j        |j        d|j        	  	        }t$          j                            |          |_        t$          j                            |          |_        |S )Nr   r>   T	r   r   r&   r'   rA   r   ro   rp   padding_mode)r  r  r  rp   r  r  r   r*   rw   rq   r   r   r&   r'   rA   r   ro   r  rK   r   )r-   rr   rt   rW  rp   r  weightss          r   fuse_conv_bnzRepConv.fuse_conv_bn1  s    ~&,,..w294s::Y_%%b!Q22+/[]]yt'7-1->,0,<%)[(,)-'+{%)-1->@ @ @ h((11H&&t,,	r   c           	         | j         rd S t          d           |                     | j        d         | j        d                   | _        |                     | j        d         | j        d                   | _        | j        j        }t          j        j        	                    | j        j
        g d          }t          | j        t          j                  s*t          | j        t          j        j        j                  rjt          j        | j        | j        ddd| j        d          }|j
        j                            | j        j
        j        j                  |j
        _        |j
        j                                                                        |j
        _        |j
        j                            d           |j
        j                            d           |j
        j                            d	                              d
          |j
        _        |                     || j                  }|j        }t          j        j        	                    |j
        g d          }nbt          j                            t          j        |                    }t          j                            t          j        |                    }t          j                            | j        j
        |z   |z             | j        _
        t          j                            | j        j        |z   |z             | j        _        | j        | _        d| _         | j        	| `d | _        | j        	| `d | _        | j        | `d | _        d S d S )NzRepConv.fuse_repvgg_blockr   r>   r  F)r   r   r&   r'   rA   ro   rp   rR  r  r   r=   T)rk  printr  rn  ro  rp   rK   r*   r  r  r  r   rm  rs   modules	batchnormSyncBatchNormrq   r   r   ro   datar   r  squeezefill_fill_diagonal_	unsqueezer   
zeros_likerl  )r-   rbr_1x1_biasweight_1x1_expandedidentity_conv_1x1bias_identity_expandedweight_identity_expandeds         r   fuse_repvgg_blockzRepConv.fuse_repvgg_blockH  s   ; 	F*+++**4>!+<dnQ>OPP((a$,q/JJ|(#h155dl6I<<<XX t(".99 	cZHY[][e[o[}=~=~ 	c "	 $ 0!%!2 !;!  !  !  ->,D,I,L,LT\M`MeMl,m,m$),=,D,I,Q,Q,S,S,[,[,],]$)$)//444$)88===,=,D,I,S,STU,V,V,`,`ab,c,c$) !% 1 12CTEV W W%6%;"',x':'>'>?P?WYeYeYe'f'f$$ &+X%7%79I,9W9W%Y%Y"',x'9'95;KL_;`;`'b'b$ !& 2 24>3HK^3^ay3y z z#h001D|1SVl1lmm>(! $D<#DL>%!DNNN &%r   )r=   r>   Nr>   TF)r6   r7   r8   r)   r3   r  ry  rx  r  r  r  r9   r:   s   @r   rg  rg    s             >	P 	P 	P
 
 
> > >= = =<
 
 
  .;" ;" ;" ;" ;" ;" ;"r   rg  c                         e Zd Zd fd	Z xZS )RepBottleneckTr>   r   c                     t                                          ||ddd           t          ||z            }t          ||dd|          | _        d S )NTr>   r   )r   r|   r   r=   r   r(   r)   r   rg  r   r   s          r   r)   zRepBottleneck.__init__  sS    R$!s;;;a[[2r1a1---r   r   r   r:   s   @r   r  r    =        . . . . . . . . . .r   r  c                         e Zd Zd fd	Z xZS )RepBottleneckCSPAr>   Tr   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r  r  r  s     r   r   z.RepBottleneckCSPA.__init__.<locals>.<listcomp>  ,     ] ] ]qr2xc!J!J!J ] ] ]r   r&  r	  s	       `` @r   r)   zRepBottleneckCSPA.__init__  n    RHa333a[[ ] ] ] ] ] ]TYZ[T\T\ ] ] ]^r   r  r   r:   s   @r   r  r    G        _ _ _ _ _ _ _ _ _ _r   r  c                         e Zd Zd fd	Z xZS )RepBottleneckCSPBr>   Fr   c                     t                                          ||||           t          |          t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r  r  r  s     r   r   z.RepBottleneckCSPB.__init__.<locals>.<listcomp>  r  r   r&  r	  s	       `` @r   r)   zRepBottleneckCSPB.__init__  sj    RHa333WW ] ] ] ] ] ]TYZ[T\T\ ] ] ]^r   r  r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )RepBottleneckCSPCr>   Tr   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r  r  r  s     r   r   z.RepBottleneckCSPC.__init__.<locals>.<listcomp>  r  r   r&  r	  s	       `` @r   r)   zRepBottleneckCSPC.__init__  r  r   r  r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )RepResTr>   r   c                     t                                          |||||           t          ||z            }t          ||dd|          | _        d S Nr=   r>   r   r  r   s          r   r)   zRepRes.__init__  P    R1a000a[[2r1a1---r   r   r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )
RepResCSPAr>   Tr   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r  r  s     r   r   z'RepResCSPA.__init__.<locals>.<listcomp>  ,     V V VB!s!C!C!C V V Vr   r&  r	  s	       `` @r   r)   zRepResCSPA.__init__  k    RHa333a[[ V V V V V VUSTXX V V VWr   r  r   r:   s   @r   r  r    G        X X X X X X X X X Xr   r  c                         e Zd Zd fd	Z xZS )
RepResCSPBr>   Fr   c                     t                                          ||||           t          |          t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r  r  s     r   r   z'RepResCSPB.__init__.<locals>.<listcomp>  r  r   r&  r	  s	       `` @r   r)   zRepResCSPB.__init__  sg    RHa333WW V V V V V VUSTXX V V VWr   r  r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )
RepResCSPCr>   Tr   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r  r  s     r   r   z'RepResCSPC.__init__.<locals>.<listcomp>  r  r   r&  r	  s	       `` @r   r)   zRepResCSPC.__init__  r  r   r  r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )RepResXTr   r   c                     t                                          |||||           t          ||z            }t          ||dd|          | _        d S r  r  r   s          r   r)   zRepResX.__init__  r  r   r   r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )RepResXCSPAr>   Tr   r   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r  r  s     r   r   z(RepResXCSPA.__init__.<locals>.<listcomp>  ,     W W WR1!D!D!D W W Wr   r&  r	  s	       `` @r   r)   zRepResXCSPA.__init__  k    RHa333a[[ W W W W W WeTUhh W W WXr   r6  r   r:   s   @r   r  r    G        Y Y Y Y Y Y Y Y Y Yr   r  c                         e Zd Zd fd	Z xZS )RepResXCSPBr>   Fr   r   c                     t                                          ||||           t          |          t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r  r  s     r   r   z(RepResXCSPB.__init__.<locals>.<listcomp>  r  r   r&  r	  s	       `` @r   r)   zRepResXCSPB.__init__  sg    RHa333WW W W W W W WeTUhh W W WXr   )r>   Fr   r   r   r:   s   @r   r  r    r  r   r  c                         e Zd Zd fd	Z xZS )RepResXCSPCr>   Tr   r   c                     t                                          ||||           t          ||z            t          j        fdt          |          D              | _        d S )Nc           	      8    g | ]}t          d           S r#  r  r  s     r   r   z(RepResXCSPC.__init__.<locals>.<listcomp>  r  r   r&  r	  s	       `` @r   r)   zRepResXCSPC.__init__  r  r   r6  r   r:   s   @r   r  r    r  r   r  c                   $     e Zd Z fdZd Z xZS )TransformerLayerc                    t                                                       t          j        ||d          | _        t          j        ||d          | _        t          j        ||d          | _        t          j        ||          | _        t          j        ||d          | _	        t          j        ||d          | _
        d S )NFrp   )	embed_dim	num_heads)r(   r)   r*   Linearqr   vMultiheadAttentionmafc1fc2)r-   cr  r.   s      r   r)   zTransformerLayer.__init__  s    1ae,,,1ae,,,1ae,,,'!yIII9Q...9Q...r   c                    |                      |                     |          |                     |          |                     |                    d         |z   }|                     |                     |                    |z   }|S )Nr   )r   r  r   r  r  r  r2   s     r   r3   zTransformerLayer.forward  sd    GGDFF1IItvvayy$&&))44Q7!;HHTXXa[[!!A%r   r5   r:   s   @r   r  r    sG        / / / / /      r   r  c                   $     e Zd Z fdZd Z xZS )TransformerBlockc                 ,   t                                                       d | _        |k    rt          |          | _        t	          j                  | _        t	          j        fdt          |          D              | _	        | _
        d S )Nc                 0    g | ]}t                    S r   )r  )r   r  r{   r  s     r   r   z-TransformerBlock.__init__.<locals>.<listcomp>  s$    !]!]!]a"22y"A"A!]!]!]r   )r(   r)   rr   rl   r*   r  linearr   r  trr{   )r-   rz   r{   r  
num_layersr.   s     `` r   r)   zTransformerBlock.__init__  s    	88RDIiB''-!]!]!]!]!]5Q[K\K\!]!]!]^r   c                    | j         |                      |          }|j        \  }}}}|                    d          }|                    d          }|                    dd          }|                    d          }|                     |          }||z   }|                     |          }|                    d          }|                    dd          }|                    || j	        ||          }|S )Nr   r   r=   )
rr   shapeflattenr  	transposer  r	  r
  r   r{   )r-   r   br  whr    r   s           r   r3   zTransformerBlock.forward  s    9 		!AW
1aIIaLLKKNNKK1IIaLLKKNNEGGAJJKKNNKK1IIa!Q''r   r5   r:   s   @r   r  r    sG                  r   r  c                   &     e Zd Zd fd	Zd Z xZS )Focusr>   NTc           	          t          t          |                                            t          |dz  ||||||          | _        d S )Nr   )r(   r  r)   rl   rr   ry   s	           r   r)   zFocus.__init__  sB    eT##%%%aQ1a55			r   c                     |                      t          j        |dd d dd d df         |ddd dd d df         |dd d ddd df         |ddd ddd df         gd                    S rJ   )rr   rK   rL   r2   s     r   r3   zFocus.forward#  s    yyAc33Q3!m$4aQTT33Q36G3PSPSRSPSUVUYXYUY>IZ\]^acdcgfgcgijimlmim^m\n#oqrsstttr   r   r5   r:   s   @r   r  r    sS        6 6 6 6 6 6
u u u u u u ur   r  c                   &     e Zd Zd fd	Zd Z xZS )SPPFr   c                     t                                                       |dz  }t          ||dd          | _        t          |dz  |dd          | _        t          j        |d|dz            | _        d S )Nr   r>   r   r@   )r(   r)   rl   r   r   r*   r+   r,   r   s        r   r)   zSPPF.__init__*  sp    1WB1%%QAq))!AqAvFFFr   c           
          |                      |          }|                     |          }|                     |          }|                     t          j        ||||                     |          gd                    S r   )r   r,   r   rK   rL   r  s       r   r3   zSPPF.forward1  s`    HHQKKVVAYYVVBZZxx	1b"dffRjj"91==>>>r   )r   r5   r:   s   @r   r  r  (  sR        G G G G G G? ? ? ? ? ? ?r   r  c                   &     e Zd Zd fd	Zd Z xZS )Contractr   c                 V    t                                                       || _        d S r0   r(   r)   gainr-   r  r.   s     r   r)   zContract.__init__:  $    			r   c                 "   |                                 \  }}}}| j        }|                    ||||z  |||z  |          }|                    dddddd                                          }|                    |||z  |z  ||z  ||z            S )Nr   r=   r   r>   r   r   sizer  viewpermute
contiguousr-   r   NCHWrB   s          r   r3   zContract.forward>  s    VVXX
1aIFF1aaAFA..IIaAq!Q''2244vvaQAFAF333r   r   r5   r:   s   @r   r  r  8  L             4 4 4 4 4 4 4r   r  c                   &     e Zd Zd fd	Zd Z xZS )Expandr   c                 V    t                                                       || _        d S r0   r  r   s     r   r)   zExpand.__init__H  r!  r   c                 "   |                                 \  }}}}| j        }|                    |||||dz  z  ||          }|                    dddddd                                          }|                    |||dz  z  ||z  ||z            S )Nr   r   r=   r   r>   r   r#  r(  s          r   r3   zExpand.forwardL  s    VVXX
1aIFF1aAaKA..IIaAq!Q''2244vvaa1fa!eQU333r   r   r5   r:   s   @r   r/  r/  F  r-  r   r/  c                   0     e Zd ZdZdZdZ fdZd Z xZS )NMS      ??Nc                 V    t          t          |                                            d S r0   )r(   r3  r)   rH   s    r   r)   zNMS.__init__Z  s%    c4!!#####r   c                 R    t          |d         | j        | j        | j                  S )Nr   
conf_thres	iou_thresclasses)r
   confiour;  r2   s     r   r3   zNMS.forward]  s%    "1Q4DI[_[ghhhhr   )	r6   r7   r8   r<  r=  r;  r)   r3   r9   r:   s   @r   r3  r3  T  s]        D
CG$ $ $ $ $i i i i i i ir   r3  c                   b     e Zd ZdZdZdZ fdZd Z ej	                    d	d            Z
 xZS )
	autoShaper4  r5  Nc                     t          t          |                                            |                                | _        d S r0   )r(   r?  r)   evalmodel)r-   rB  r.   s     r   r)   zautoShape.__init__g  s2    i'')))ZZ\\


r   c                 $    t          d           | S )Nz'autoShape already enabled, skipping... )r  r-   s    r   	autoshapezautoShape.autoshapek  s    7888r     Fc           	      	    t                      g}t           j                                                  }t	          |t
          j                  r}t          j        |j	        j
        dk              5                       |                    |j	                                      |          ||          cd d d            S # 1 swxY w Y   t	          |t                    rt          |          |fnd|gf\  }}g g g c}}	t          |          D ]\  }
}d|
 }t	          |t                     rYt#          j        t'          j        |                    d          rt-          j        |d          j        n|                    |}}nAt	          |t&          j                  r't#          j        |          t3          |d|          p|}}|	                    t7          |                              d	          j                   |j        d
         dk     r|                    d          }|j         dk    r|d d d d d df         n!t#          j!        |d d d d d f         d          }|j        d d         }|                    |           |tE          |          z                      fd|D                        |||
<    fdt#          j#        d
          "                    d
          D             fd|D             }|dk    rt#          j#        |d
          n|d
         d          }t#          j$        |                    d                    }t          j%        |                              |j	                                      |          dz  }|                    t                                 t          j        |j	        j
        dk              5                       |||          d
         }|                    t                                 tM          | j'         j(         j)                  }tU          |          D ]+}
tW          ||
         d d d df         ||
                    ,|                    t                                 tY          |||	| j-        |j                  cd d d            S # 1 swxY w Y   d S )Nr  )enabledr>   imagehttpT)streamfilenamez.jpgr   r   )r>   r   r   r=   r   c                     g | ]}|z  S r   r   )r   r   r|   s     r   r   z%autoShape.forward.<locals>.<listcomp>  s    ,,,Q1q5,,,r   c           	      x    g | ]6}t          |t          j                                                            7S r   )r   r   r'   maxr   r   r-   s     r   r   z%autoShape.forward.<locals>.<listcomp>  s7    ```.C(9(9$:$:;;```r   c                 @    g | ]}t          |d           d         S )F)	new_shapeautor   r   )r   imshape1s     r   r   z%autoShape.forward.<locals>.<listcomp>  s-    KKKYrV%888;KKKr   )r   r=   r>   r   g     o@r8  r   ).r   nextrB  
parametersr   rK   Tensorr   autocastr  typer   type_aslistr   	enumeratestrr  asarrayr   open
startswithrequestsgetrawgetattrr\   r   with_suffixnamer  r  ndimtilerO  stackascontiguousarrayr  r
   r<  r=  r;  r  r   
Detectionsnames)r-   imgsr$  augmentprofiler  r    r   shape0filesr  rT  frB   r   r   r|   rU  s   `               @@r   r3   zautoShape.forwardo  s      !&&(())dEL)) 	Rahmu&<=== R Rzz$''!("3"3";";A">">QQR R R R R R R R R R R R R R R R (2$'='=N3t99d##Av;4 "Bt__ 	 	EArA"c"" H
5:SUS`S`agShSh.phl2d.K.K.K.O.Onp#q#qrrtvAB,, H
2J(B(B(GaALLa,,V449:::x{Q\\),,!#AAAAqqq"1"H272aaaDj>13M3MB!AMM!AAMM,,,,!,,,---DGG````RXfVWEXEXE\E\]^E_E_```KKKKdKKK!eeBHQNNN1d \!:!:;;Q""18,,44Q77$>	"$$%%%\!(-5"8999 	F 	F

1gw//2AHH&(())) $A$)txY]YefffA1XX = =VQqT!!!RaR%[&)<<<<HH&(()))dAuaQWEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs&   6ACC	C	"CS		SS)rF  FF)r6   r7   r8   r<  r=  r;  r)   rE  rK   no_gradr3   r9   r:   s   @r   r?  r?  a  s        D
CG" " " " "   U]__4F 4F 4F _4F 4F 4F 4F 4Fr   r?  c                   T     e Zd Zd fd	ZddZd Zd Zdd	Zd
 Zd Z	d Z
d Z xZS )rl  Nc                 &    t          t                                                      |d         j        fd|D             }| _        | _        | _        | _        | _        d |D              _	        d t           j        |          D              _        d t           j	        |          D              _        t           j                   _        t           fdt!          d          D                        _        | _        d S )Nr   c                 b    g | ]*t          j        g fd dD             dd          +S )c                 *    g | ]}j         |         S r   )r  )r   r  rT  s     r   r   z2Detections.__init__.<locals>.<listcomp>.<listcomp>  s    @@@abhqk@@@r   )r>   r   r>   r   r  )r  )rK   tensor)r   rT  rP   s    @r   r   z'Detections.__init__.<locals>.<listcomp>  sP    dddY[elI@@@@<@@@I"IbIRSTTTdddr   c                 ,    g | ]}t          |          S r   )r   r   s     r   r   z'Detections.__init__.<locals>.<listcomp>  s    000aYq\\000r   c                     g | ]
\  }}||z  S r   r   r   r   r|   s      r   r   z'Detections.__init__.<locals>.<listcomp>       ;;;1a!e;;;r   c                     g | ]
\  }}||z  S r   r   r|  s      r   r   z'Detections.__init__.<locals>.<listcomp>  r}  r   c              3   V   K   | ]#}|d z            |         z
  dz  j         z  V  $dS )r>   i  Nr   )r   r  r-   timess     r   	<genexpr>z&Detections.__init__.<locals>.<genexpr>  s@      SSQa!euQx/47$&@SSSSSSr   r=   )r(   rl  r)   r  rn  predrm  rr  xyxyxywhzipxyxynxywhnr   r   tupler  r  rB   )
r-   rn  r  rr  r  rm  r  gnrP   r.   s
   `   `   @r   r)   zDetections.__init__  s	   j$((***GNdddd_cddd		

	004000	;;DIr(:(:;;;
;;DIr(:(:;;;
TYSSSSS%PQ((SSSSSr   F c                    t                      }t          t          | j        | j                            D ]"\  }\  }}	d|dz    dt          | j                   d|j        d          d|j        d          d	}
|	|	d d df                                         D ]P}|	d d df         |k                                    }|
| d| j	        t          |                    d	|dk    z   d
z  }
Q|s|s|rR|	D ]O^ }}}| j	        t          |                    d|d}t          ||||t          |          dz                      Pt          |t          j                  r1t          j        |                    t          j                            n|}|r"t'          |
                    d
                     |r |                    | j        |                    |rc| j        |         }|                    t1          |          |z             t'          d|dk    z   d| || j        dz
  k     rdnd| d           |rt          j        |          | j        |<   $d S )Nzimage r>   /z: r   r    r   rB   z, z.2f
   )labelcolorSaved,z to 
)end)r   r]  r  rn  r  r   r  uniquesumrm  r   r   r   r  ndarrayr   	fromarrayastypeuint8r  rstripshowrr  saver   r   r_  )r-   pprintr  r  rendersave_dircolorsr  imgr  r^  r  r   boxr<  clsr  rs  s                     r   displayzDetections.display  s   'DIty(A(ABB 	/ 	/NA{TS1q5SS3ty>>SSSYq\SSCIaLSSSCaaae++-- H HAaaae)..00AaGG$*SVV"4GcQUmGGGGCC Y4 Y6 Y+/ Y YdC#':c#hh#7 D D$ D D D$S#U&STVBWXXXXX;Ec2:;V;V_%/#**RX"6"6777\_C (cjj&&''' (A''' gJqMh!+,,,AF+11a11a$&1*nnssReYaReReReffff /!z#	!)	/ 	/r   c                     |                      d           t          dt          | j                   | j        z             d S )NT)r  zKSpeed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape )r  r  r  rB   r  rD  s    r   r  zDetections.print  sI    D!!!k\abfbh\i\ikknrnttuuuuur   c                 2    |                      d           d S )NT)r  )r  rD  s    r   r  zDetections.show  s    $r   runs/hub/expc                     t          ||dk              }t          |                              dd           |                     d|           d S )Nr  )exist_okT)parentsr  )r  r  )r   r   mkdirr  )r-   r  s     r   r  zDetections.save  sT    !(X5OPPPXTD999$22222r   c                 <    |                      d           | j        S )NT)r  )r  rn  rD  s    r   r  zDetections.render  s    D!!!yr   c                      t                     }d}d}t          g d||||g          D ]>\  } fdt           |          D             }t          ||fd|D                        ?|S )N)xminyminxmaxymax
confidenceclassrg  )xcenterycenterwidthheightr  r  rg  )r  r  r  r  c                 P    g | ]"}fd |                                 D             #S )c           	          g | ]B}|d d         t          |d                   j        t          |d                            gz   CS )Nr   )r   rm  rP  s     r   r   z0Detections.pandas.<locals>.<listcomp>.<listcomp>  sF    QQQ!BQB%3qt99djQqT&;<<QQQr   )tolistrP  s     r   r   z%Detections.pandas.<locals>.<listcomp>  s7    lllVWQQQQahhjjQQQlllr   c                 <    g | ]}t          j        |           S ))columns)pd	DataFrame)r   r   r  s     r   r   z%Detections.pandas.<locals>.<listcomp>  s(    CCCAR\!Q777CCCr   )r   r  re  setattr)r-   newcacbr   ar  s   `     @r   pandaszDetections.pandas  s    4jjJS:::RR<LMM 	E 	EDAqllll[bcgij[k[klllACCCCCCCCDDDD
r   c           
            fdt           j                  D             }|D ],}dD ]'}t          ||t          ||          d                    (-|S )Nc                 x    g | ]6}t          j        |         gj        |         gj        j                  7S r   )rl  rn  r  rm  rB   )r   r  r-   s     r   r   z%Detections.tolist.<locals>.<listcomp>  s<    cccPQZ11
DFKKcccr   )rn  r  r  r  r  r  r   )r  r   r  re  )r-   r   rP   r   s   `   r   r  zDetections.tolist  ss    ccccUZ[_[aUbUbccc 	0 	0AG 0 01gammA.////0r   c                     | j         S r0   r  rD  s    r   __len__zDetections.__len__  s	    vr   )NNN)FFFFr  )r  )r6   r7   r8   r)   r  r  r  r  r  r  r  r  r9   r:   s   @r   rl  rl    s              / / / /0v v v     3 3 3 3
            r   rl  c                   &     e Zd Zd fd	Zd Z xZS )Classifyr>   Nc           
         t          t          |                                            t          j        d          | _        t          j        ||||t          ||          |          | _        t          j	                    | _
        d S )Nr>   )ro   )r(   r  r)   r*   AdaptiveAvgPool2daaprq   r!   rr   Flattenflat)r-   rz   r{   r   rB   r    r|   r.   s          r   r)   zClassify.__init__  sh    h&&((('**Ib"aGAqMM!DDD	JLL			r   c                      t          j         fdt          |t                    r|n|gD             d          }                                          |                    S )Nc                 :    g | ]}                     |          S r   )r  )r   r   r-   s     r   r   z$Classify.forward.<locals>.<listcomp>   s#    PPPqtxx{{PPPr   r>   )rK   rL   r   r\  r  rr   )r-   r   zs   `  r   r3   zClassify.forward  s[    IPPPP*Q2E2E-NQQA3PPPRSTTyy1&&&r   )r>   r>   Nr>   r5   r:   s   @r   r  r    sL        ! ! ! ! ! !' ' ' ' ' ' 'r   r  c                     |j         }|j        |j        z                                   }| ||z                      dddd          z  |j        |j        |z  |z  z
  fS )Nr   r>   )r  r  r  r  r   rp   r  )r  rt   r   rW  s       r   transI_fusebnr    s`    IE>BF"
(
(
*
*Ceck**2q!Q778"'BOV[D[^aDa:aaar   c                   .     e Zd Z	 d fd	Zd Zd Z xZS )	ConvBNr>   r   FNc
           
      L   t                                                       |	t          j                    | _        n|	| _        |r#t          j        |||||||d          | _        d S t          j        |||||||d          | _        t          j        |          | _        d S )NTr   r   r&   r'   rA   r   ro   rp   Fri  )	r(   r)   r*   rw   	nonlinearrq   rr   rs   rt   )r-   r   r   r&   r'   rA   r   ro   rk  r  r.   s             r   r)   zConvBN.__init__  s    []]DNN&DN 	@	kbm-3Wx`fmqs s sDIII 	kbm397U]flsxz z zDIn,???DGGGr   c                     t          | d          r;|                     |                     |                     |                              S |                     |                     |                    S )Nrt   )rs  r  rt   rr   r2   s     r   r3   zConvBN.forward  sX    4 	0>>$''$))A,,"7"7888>>$))A,,///r   c           
         t          | j        j        | j                  \  }}t	          j        | j        j        | j        j        | j        j        | j        j	        | j        j
        | j        j        | j        j        d          }||j        _        ||j        _        |                                 D ]}|                                 |                     d           |                     d           || _        d S )NTr  rr   rt   )r  rr   r  rt   r*   rq   r   r   r&   r'   rA   r   ro   r  rp   rW  detach___delattr__)r-   r  rp   rr   paras        r   switch_to_deployzConvBN.switch_to_deploy$  s    $TY%5tw??yTY%:I_mqmv  nC-1Y-=tyGXcgclcu  C  H  O  VZ[ [ [!	OO%% 	 	DLLNNNN   			r   )r>   r   r>   r>   FN)r6   r7   r8   r)   r3   r  r9   r:   s   @r   r  r    sd        `d@ @ @ @ @ @0 0 0
 
 
 
 
 
 
r   r  c                   >     e Zd Z	 	 	 d
 fd	Zd Zd Zd Zd	 Z xZS )OREPA_3x3_RepConvr>   r   NFc           	         t          t          |                                            |	| _        |
t	          j                    | _        n|
| _        || _        || _        || _	        || _
        ||dz  k    sJ || _        || _        || _        d| _        t	          j        t!          j        |t%          || j
        z            ||                    | _        t          j                            | j        t-          j        d                     | xj        dz  c_        ||k     r=t	          j        t!          j        |t%          || j
        z            dd                    | _        t	          j        t!          j        |t%          || j
        z            dd                    | _        t          j                            | j        d           t          j                            | j        d           | j        j         | j        j         |                     dt!          j        ||                              d|z  |z                       | xj        dz  c_        nt<          | xj        dz  c_        |||k     r|nd|z  }||k    rt	          j        t!          j        |t%          || j
        z            dd                    | _         tC          j        |t%          || j
        z            ddf          }tE          |          D ]#}d|||t%          || j
        z            z  ddf<   $t!          j#        |          $                    | j                   }|                     d|           n{t	          j        t!          j        |t%          || j
        z            dd                    | _%        t          j                            | j%        t-          j        d                     t	          j        t!          j        |t%          || j
        z            ||                    | _&        t          j                            | j&        t-          j        d                     | xj        dz  c_        d}t	          j        t!          j        ||z  d||                    | _'        t	          j        t!          j        |||z  dd                    | _(        t          j                            | j'        t-          j        d                     t          j                            | j(        t-          j        d                     | xj        dz  c_        ||k    r|dk    r| xj        dz  c_        t	          j        t!          j        | j        | j	                            | _)        t	          j*        |          | _+        | ,                                 t          j        -                    | j)        dd d f         d	           t          j        -                    | j)        dd d f         d	           t          j        -                    | j)        dd d f         d
           t          j        -                    | j)        dd d f         d           t          j        -                    | j)        dd d f         d           d S )Nr   r   r  )r  r>   weight_rbr_avg_avgr     r4  rR  r=   r   r   ).r(   r  r)   rk  r*   rw   r  r&   r   r   ro   r'   rA   r   branch_counterr   rK   rX  r   weight_rbr_originr[  kaiming_uniform_r   r  weight_rbr_avg_convweight_rbr_pfir_convr  register_bufferr   r   NotImplementedErrorrY  weight_rbr_1x1_kxk_idconv1r  r  r  r[  weight_rbr_1x1_kxk_conv1weight_rbr_1x1_kxk_conv2weight_rbr_gconv_dwweight_rbr_gconv_pwvectorrs   rt   fre_init	constant_)r-   r   r   r&   r'   rA   r   ro   internal_channels_1x1_3x3rk  r  single_initid_valuer  r  expand_ratior.   s                   r   r)   zOREPA_3x3_RepConv.__init__2  s<    	&&//111[]]DNN&DN&&(+***** !#el<[Y]YdMdIeIegrt  /A  /A  "B  "B
  !749S>> JJJq  L  ')|ELsS^_c_jSjOkOkmnpq4r4r's'sD$(*U\,PST_`d`kTkPlPlnoqr5s5s(t(tD%G$$T%=$EEEG$$T%>#$FFF$))%**  !5uz+{7[7[7_7_`cdo`op{`{7|7|}}}1$ &%q $,7=7L7LRSVaRa%$33.0l5;{TWXcdhdoXoTpTprsuv;w;w.x.xD+xc+dk2I.J.JAq QRRH;'' H HFGAK$; < <<aBCC(22::4;Z[[I  i8888 -/LF_adepquq|e|a}a}  @A  CD  :E  :E  -F  -FD)G$$T%BdiPSnn$UUU(*U\,PSTmnrnyTyPzPz  }H  JU  6V  6V  )W  )W%
  !>$)C.. QQQq #%<[=UWXZegr0s0s#t#t #%<\;WcKcefhi0j0j#k#k 
  !9TYs^^ LLL
  !9TYs^^ LLLq ;&&6Q;;1$l5<0CTEV#W#WXX...
$+ad+T222
$+ad+T222
$+ad+S111
$+ad+S111
$+ad+S11111r   c                    t          j        | j        | j        | j                  }| j        dz  }t	          | j                  D ]}t	          d          D ]}t	          d          D ]r}||k     r4t          j        t
          j        |dz   z  |dz   z  dz            ||||f<   <t          j        t
          j        |dz   z  |dz   |z
  z  dz            ||||f<   s|                     d|           d S )Nr   r=   r   r>   weight_rbr_prior)	rK   rX  r   r&   r  r   cospir  )r-   prior_tensorhalf_fgr  r  r  s         r   r  zOREPA_3x3_RepConv.fre_init  s   |D$5t7GIYZZ#A%t()) 	Z 	ZA1XX Z Zq Z ZA7{{04!C%!A#9Nq9P0Q0QQ1W--04!C%!A#g+9VWX9X0Y0YQ1W--	ZZ 	/>>>>>r   c                    t          j        d| j        | j        dd d f                   }t          j        dt          j        d| j        | j                  | j        dd d f                   }t          j        dt          j        d| j        | j                  | j        dd d f                   }d }t          | d          r"| j	        | j
        z                                   }n1t          | d          r| j                                        }nt          | j        }| j        dk    r| j        }|                                \  }}|                                \  }	}
}}|                    |t%          ||z            |          }|                    |t%          |	|z            |
||          }t          j        d	||                              |	|||          }nt          j        d
||          }t          j        d|| j        dd d f                   }|                     | j        | j        | j                  }t          j        d|| j        dd d f                   }||z   |z   |z   |z   }|S )Nzoihw,o->oihwr   zoihw,hw->oihwr>   zoihw,ohw->oihwr   r  r  zgti,gothw->goihwzti,othw->oihwr=   r   )rK   einsumr  r  r  r  r  r  rs  r  r  r  r  r  r  ro   r$  r%  r   	dwsc2fullr  r  r   )r-   r  weight_rbr_avgweight_rbr_pfirr  r  r|   r  igotgr  r  weight_rbr_1x1_kxkweight_rbr_gconvr  s                   r   
weight_genzOREPA_3x3_RepConv.weight_gen  s   !L9OQUQ\]^`a`a`a]aQbccnel?TXTlnr  oF  7G  7G  IM  IT  UV  XY  XY  XY  UY  IZ  [  [,~u|DTVZVoqu  rG  8H  8H  JN  JU  VW  YZ  YZ  YZ  VZ  J[  \  \#' 4566 	&(,(G$.(X'a'a'c'c$$T566 	&'+'D'L'L'N'N$$%%#'#@ ;??A,1133EAr27799KAr1a'?'D'DQAaCRT'U'U$'?'D'DQAaCRTVWYZ'['[$!&.@BZ\t!u!u!z!z{|  A  CD  FG  "H  "H!&o?WYq!r!r"\.:LdkZ[]^]^]^Z^N_``>>$*BDD\^b^noo <8H$+VWYZYZYZVZJ[\\"^36HH?Z]mmr   c                    |                                 \  }}}}|                                 \  }}	}	}	t          ||z            }
t          ||z            }|                    ||
|||          }|                                                    |||
          }t	          j        d||          }|                    ||||          S )Nzgtihw,ogt->ogihw)r$  r   r%  r  rK   r  )r-   	weight_dw	weight_pwro   r  r  r  r  r  r  r  r  
weight_dscs                r   r  zOREPA_3x3_RepConv.dwsc2full  s    nn&&2q!^^%%
1a6]]6	NNNN62r1a88	%%'',,Q;;	\"4iKK
q!Q***r   c           	          |                                  }t          j        ||d | j        | j        | j        | j                  }|                     |                     |                    S )N)rp   r'   rA   r   ro   )	r
  Fconv2dr'   rA   r   ro   r  rt   )r-   rt  r  outs       r   r3   zOREPA_3x3_RepConv.forward  sd    ""hvvDdleier{  |G  H  H  H~~dggcll+++r   )r>   r   r>   r>   NFNF)	r6   r7   r8   r)   r  r
  r  r3   r9   r:   s   @r   r  r  0  s         :;+/;@P2 P2 P2 P2 P2 P2f? ? ?" " "H
+ 
+ 
+, , , , , , ,r   r  c            
       p     e Zd Zdddddddd ej                    f	 fd	Zd Zd Zd Zd	 Z	d
 Z
d Z xZS )RepConv_OREPAr=   r>   rY  Fc                 4   t          t          |                                            |	| _        || _        || _        || _        || _        || _        || _        |dk    sJ |dk    sJ ||dz  z
  }|t          j
                    | _        n|| _        |
r$t          | j        | j        dz            | _        nt          j
                    | _        |	r.t          j        | j        | j        |||||d|	  	        | _        d S | j        | j        k    r |dk    rt          j        | j                  nd | _        t%          | j        | j        ||||d	          | _        t)          | j        | j        d|||d	          | _        t-          d
| j                   d S )Nr=   r>   r      )internal_neuronsTr  ri  )r   r   r&   r'   rA   ro   r   zRepVGG Block, identity = )r(   r  r)   rk  ro   r   r   rA   r   r*   rw   nonlinearitySEBlockserq   rl  rs   rm  r  rn  r  ro  r  )r-   rz   r{   r   rB   rA   r   ro   r  rk  use_ser  rp  r.   s                r   r)   zRepConv_OREPA.__init__  s   mT""++--- Avvvv!||||qAv%
 "D )D 	$d/$BSWYBYZZZDGGkmmDG 	B!yT5ETXTest}~.5QW^bq}     D RVQbfjfvQvQv{|  AB  |B  |BD<L M M M M  HLD.4;KZ^Zkyz  DE  OV  _e  pq  r  r  rDN!d.>TM^lmvw  BL  U[  fg  h  h  hDL-t/@AAAAAr   c                    t          | d          r;|                     |                     |                     |                              S | j        d}n|                     |          }|                     |          }|                     |          }|}||z   |z   }|                     |                     |                    S rr  )rs  r  r  rl  rm  rn  ro  )r-   rt  ru  out1out2out3r  s          r   r3   zRepConv_OREPA.forward  s    4'' 	H$$TWWT-=-=f-E-E%F%FGGG$FF&&v..F~~f%%||F##TkD   ...r   c                    | j                                         }| j        j        j        }| j         j        j        | j         j        j        | j         j        j        z                                   z  	                    dddd          
                                }| j        j        j        | j        j        j        | j        j        j        z                                   z  	                    dddd          
                                }|dz                                  |d d d d ddddf         dz                                  z
  }|d d d d ddddf         |z  ||z  z   }|dz  |dz  |dz  z   z                                  }||z   S )Nr   r>   r   )rn  r
  ro  rr   r  rt   r  r  r  r   r  r  )r-   K3K1t3t1l2_loss_circle	eq_kernell2_loss_eq_kernels           r   get_custom_L2zRepConv_OREPA.get_custom_L2
  s   ^&&((\%n&4>+<+H4>K\K`+`*f*f*h*hirrsuwxz{}~  G  G  I  Ilo$)Dt|GZ)Z(`(`(b(bcllmoqrtuwxyy  A  A  C  C'Bqqq!!!QqS!A#~,>!,C+H+H+J+JJqqq!!!QqS!A#~&+b2g5	&!^rQwq/@AFFHH >11r   c                     |                      | j                  \  }}|                      | j                  \  }}|                      | j                  \  }}||                     |          z   |z   ||z   |z   fS r0   rw  rz  s          r   r  z(RepConv_OREPA.get_equivalent_kernel_bias  s    !11$.AA	7!11$,??	7//0ABB&466yAAAHLgX_N_bhNhhhr   c                 X    |dS t           j        j                            |g d          S r  )rK   r*   r  r  r  s     r   ry  z$RepConv_OREPA._pad_1x1_to_3x3_tensor  s,    18&**9iii@@@r   c                 x   |dS t          |t          j                  st          |t                    r|                                }n)t          |t
                    r|j        j        }nt          |j	        j
        }|j	        j        }|j	        j        }|j	        j        }|j	        j        }nt          | d          s| j        | j        z  }t#          j        | j        |ddft"          j                  }	t)          | j                  D ]}
d|	|
|
|z  ddf<   t+          j        |	                              |j        j                  | _        | j        }|j
        }|j        }|j        }|j        }|j        }||z                                   }||z                      dddd          }||z  |||z  |z  z
  fS )Nr  r  r=   r  r>   r   )r   r*   rs   r  r
  r  rr   r  r  rt   r  r  rp   r  rs  r   ro   r  rY  r  r  rK   r  r   r  r  r  r   r  s                r   rx  zRepConv_OREPA._fuse_bn_tensor!  s   >4&".11 	&"344 ***,,FF++ *+))!91L )/KI$E9>D)-CC4-- Y ,;	!x)99a(KSUS]^^^t/00 = =A;<LA	M1a!788!&!1,!?!?!B!B6=CW!X!X^F!.L ,KME;D*CS &&((S[!!"aA..z4,"6"<<<<r   c           
         t          | d          rd S t          d           |                                 \  }}t          j        | j        j        | j        j        | j        j        | j        j	        | j        j
        | j        j        | j        j        d          | _        || j        j        _        || j        j        _        |                                 D ]}|                                 |                     d           |                     d           t          | d          r|                     d           d S d S )Nrl  zRepConv_OREPA.switch_to_deployTr  rn  ro  rm  )rs  r  r  r*   rq   rn  r   r   r&   r'   rA   r   ro   rl  r  r  rp   rW  r  r  )r-   r  rp   r  s       r   r  zRepConv_OREPA.switch_to_deployA  sA   4'' 	F/000668891KZ^ZhZu151KTXTbTi-1^-CdnNenrn|  oD  KOP P P (.$%)"OO%% 	 	DLLNNNN%%%###4(( 	-^,,,,,	- 	-r   )r6   r7   r8   r*   ru   r)   r3   r(  r  ry  rx  r  r9   r:   s   @r   r  r    s        !"aQqW^gluz  GN  GI  GN  GP  GP "B "B "B "B "B "BJ/ / /6	2 	2 	2i i iA A A= = =@- - - - - - -r   r  c                   (     e Zd Zd fd	ZddZ xZS )WindowAttentionTNrR  c                 8   t                                                       || _        || _        || _        ||z  }|p|dz  | _        t          j        t          j	        d|d         z  dz
  d|d         z  dz
  z  |                    | _
        t          j        | j        d                   }	t          j        | j        d                   }
t          j        t          j        |	|
g                    }t          j        |d          }|d d d d d f         |d d d d d f         z
  }|                    ddd                                          }|d d d d dfxx         | j        d         dz
  z  cc<   |d d d d dfxx         | j        d         dz
  z  cc<   |d d d d dfxx         d| j        d         z  dz
  z  cc<   |                    d          }|                     d|           t          j        ||dz  |          | _        t          j        |          | _        t          j        ||          | _        t          j        |          | _        t          j                            | j
        d	
           t          j        d          | _        d S )Ng      r   r   r>   r   relative_position_indexr=   r  rS  )rW  r   )r(   r)   r   window_sizer  scaler*   r   rK   rY  relative_position_bias_tablearangerj  meshgridr  r&  r'  r  r  r  qkvDropout	attn_dropproj	proj_dropr[  r\  Softmaxsoftmax)r-   r   r1  r  qkv_biasqk_scaler8  r:  head_dimcoords_hcoords_wcoordscoords_flattenrelative_coordsr0  r.   s                  r   r)   zWindowAttention.__init__Y  s   &")#1T!1
 -/LK[^+a/AA4F4JKYWW-Y -Y) < 0 344< 0 344U^Xx,@AABBvq11(AAAt4~aaaqqqj7QQ)11!Q::EEGG111a   D$4Q$7!$;;   111a   D$4Q$7!$;;   111a   A(8(;$;a$??   "1"5"5b"9"968OPPP9S#'999I..Ic3''	I..
9sCCCzb)))r   c                 :   |j         \  }}}|                     |                              ||d| j        || j        z                                ddddd          }|d         |d         |d         }	}}|| j        z  }||                    dd          z  }
| j        | j        	                    d                   	                    | j
        d         | j
        d         z  | j
        d         | j
        d         z  d          }|                    ddd                                          }|
|                    d          z   }
||j         d         }|
	                    ||z  || j        ||          |                    d                              d          z   }
|
	                    d| j        ||          }
|                     |
          }
n|                     |
          }
|                     |
          }
	 |
|	z                      dd                              |||          }nG#  |
                                |	z                      dd                              |||          }Y nxY w|                     |          }|                     |          }|S )Nr=   r   r   r>   r   r   )r  r6  r   r  r&  r2  r  r3  r0  r%  r1  r'  r  r<  r8  halfr9  r:  )r-   r   maskB_r)  r*  r6  r  r   r  attnrelative_position_biasnWs                r   r3   zWindowAttention.forward{  sn   7Aqhhqkk!!"aDNA<OPPXXYZ\]_`bcefgga&#a&#a&a1
NAKKB'''!%!B4C_CdCdegChCh!i!n!nQ$"21"55t7G7JTM]^_M`7`bd"f "f!7!?!?1a!H!H!S!S!U!U,66q999AB99R2Xr4>1a@@4>>RSCTCTC^C^_`CaCaaD99RA66D<<%%DD<<%%D~~d##	D$$Q**222q!<<AA	Dq++Aq1199"aCCAAAIIaLLNN1s   ;.H* *AI.)TNrR  rR  r0   r5   r:   s   @r   r.  r.  W  sR         *  *  *  *  *  *D               r   r.  c                   8     e Zd Zddej        df fd	Zd Z xZS )MlpNrR  c                    t                                                       |p|}|p|}t          j        ||          | _         |            | _        t          j        ||          | _        t          j        |          | _        d S r0   	r(   r)   r*   r  r  rx   r  r7  dropr-   in_featureshidden_featuresout_features	act_layerrQ  r.   s         r   r)   zMlp.__init__  u    #2{)8[9[/::9;;9_l;;Jt$$			r   c                     |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|S r0   r  rx   rQ  r  r2   s     r   r3   zMlp.forward  R    HHQKKHHQKKIIaLLHHQKKIIaLLr   r6   r7   r8   r*   ru   r)   r3   r9   r:   s   @r   rN  rN    sZ        48tWYW^eg % % % % % %      r   rN  c                    | j         \  }}}}||z  dk    s
J d            |                     |||z  |||z  ||          } |                     dddddd                                                              d|||          }|S )	Nr   z1feature map h and w can not divide by window sizer>   r=   r   r   r   r   r  r%  r&  r'  r   r1  Br+  r,  r*  windowss          r   window_partitionra    s    JAq!Q{?a!T	q!{"Kk1A;PQRRAii1aAq))4466;;B[Z[\\GNr   c                    t          | j        d         ||z  |z  |z  z            }|                     |||z  ||z  ||d          }|                    dddddd                                                              |||d          }|S Nr   r   r>   r=   r   r   r   r   r  r%  r&  r'  r`  r1  r+  r,  r_  r   s         r   window_reverserf        GM!A 3k ABCCAQ[(!{*:KVXYYA			!Q1a##..0055aArBBAHr   c            
       T     e Zd Zddddddddej        ej        f
 fd	Zd Zd	 Z xZ	S )
SwinTransformerLayerr  r         @TNrR  c           	         t                                                       || _        || _        || _        || _        || _        d| j        cxk    r| j        k     sn J d             ||          | _        t          || j        | j        f||||	|          | _	        |
dk    rt          |
          nt          j                    | _         ||          | _        t          ||z            }t!          ||||          | _        d S )Nr    shift_size must in 0-window_size)r1  r  r=  r>  r8  r:  rR  rS  rT  rV  rQ  )r(   r)   r   r  r1  
shift_size	mlp_rationorm1r.  rJ  DropPathr*   rw   	drop_pathnorm2r   rN  mlp)r-   r   r  r1  rn  ro  r=  r>  rQ  r8  rr  rV  
norm_layermlp_hidden_dimr.   s                 r   r)   zSwinTransformerLayer.__init__  s    	"&$"
 DO6666d&6666668Z666Z__
#d.0@AYIQUW W W	 1:B),,,BKMMZ__
S9_--3R[bfgggr   c           	         t          j        d||df          }t          d| j                   t          | j         | j                   t          | j         d           f}t          d| j                   t          | j         | j                   t          | j         d           f}d}|D ]}|D ]}||d d ||d d f<   |dz  }t          || j                  }	|	                    d| j        | j        z            }	|	                    d          |	                    d          z
  }
|
                    |
dk    t          d                                        |
dk    t          d                    }
|
S Nr>   r   r   r   g      YrR  
rK   rY  slicer1  rn  ra  r%  r  masked_fillfloatr-   r+  r,  img_maskh_slicesw_slicescntr  r  mask_windows	attn_masks              r   create_maskz SwinTransformerLayer.create_mask     ;1a|,,!d..//4++do-=>>4?*D113 !d..//4++do-=>>4?*D113  	 	A  '*Aq!!!$q ($2BCC#((T-=@P-PQQ **1--0F0Fq0I0II	)))q.%--HHTTU^bcUcejkneoeopp	r   c                    |j         \  }}}}d}t          ||          | j        k     s|| j        z  dk    s|| j        z  dk    rOd}| j        || j        z  z
  | j        z  }| j        || j        z  z
  | j        z  }t          j        |d|d|f          }|j         \  }}	}
}|
|z  }|                    dddd                                                              |||	          }| j        dk    r/| 	                    |
|          
                    |j                  }nd }|}|                     |          }|                    ||
||	          }| j        dk    r&t          j        || j         | j         fd          }n|}t          || j                  }|                    d	| j        | j        z  |	          }|                     ||
          }|                    d	| j        | j        |	          }t#          || j        |
|          }| j        dk    r$t          j        || j        | j        fd          }n|}|                    ||
|z  |	          }||                     |          z   }||                     |                     |                     |                              z   }|                    ddd                                                              d	|	|
|          }|r|d d d d d |d |f         }|S NFr   Tr   r=   r>   r   )shiftsdimsr   )rH  )r  minr1  r  r  r&  r'  r%  rn  r  r   r  rp  rK   rollra  rJ  rf  rr  rt  rs  r-   r   r  H_W_Paddingpad_rpad_br_  r*  r+  r,  Lr  r   	shifted_x	x_windowsattn_windowss                     r   r3   zSwinTransformerLayer.forward  s   w1b"r2;;)))R$2B-BA-E-EdN^I^`aIaIaG%T-=(==AQQE%T-=(==AQQEa!UAu-..A W
1aEIIaAq!!,,..33Aq!<< ?Q((A..11!(;;IIIJJqMMFF1aA ?Q
1t.>@P-QX^___III %Y0@AA	NN2t'7$:J'JANN	 yyy;; $((T-=t?OQRSS"<1A1aHH	 ?Q
9dot-OV\]]]AAAFF1a!eQ t~~a(((txx

166777IIaA))++00Q1== 	"!!!QQQSbS.!Ar   )
r6   r7   r8   r*   ru   	LayerNormr)   r  r3   r9   r:   s   @r   ri  ri    s~        34t"PR^`7r|h h h h h h2  ,< < < < < < <r   ri  c                   &     e Zd Zd fd	Zd Z xZS )SwinTransformerBlockr  c                     t                                                       d | _        |k    rt          |          | _        t	          j        fdt          |          D              | _        d S )Nc           	      R    g | ]#}t          |d z  dk    rdnd z            $S r   r   )r   r  r1  rn  )ri  r   r  r{   r  r1  s     r   r   z1SwinTransformerBlock.__init__.<locals>.<listcomp>8  sa     &q &q &qYZ ';rYdo23a%1**AA;RSCS'U 'U 'U &q &q &qr   r(   r)   rr   rl   r*   r   r  blocksr-   rz   r{   r  r  r1  r.   s     `` `r   r)   zSwinTransformerBlock.__init__1      	88RDI m &q &q &q &q &q &q^cdn^o^o&q &q &q rr   c                 h    | j         |                      |          }|                     |          }|S r0   rr   r  r2   s     r   r3   zSwinTransformerBlock.forward;  -    9 		!AKKNNr   )r  r5   r:   s   @r   r  r  0  R        r r r r r r      r   r  c                   &     e Zd Zd fd	Zd Z xZS )STCSPAr>   Tr   c                 B   t          t          |                                            t          ||z            }t	          ||dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        |dz  }t          ||||          | _	        d S Nr>   r   r   )
r(   r  r)   r   rl   r   r   r   r  r,   
r-   rz   r{   r   r   r|   r   r   r  r.   s
            r   r)   zSTCSPA.__init__D  s    fd$$&&&a[[B1%%B1%%BAq))"H	%b"i;;r   c                     |                      |                     |                    }|                     |          }|                     t	          j        ||fd                    S r   r  r  s       r   r3   zSTCSPA.forwardN  r  r   r  r5   r:   s   @r   r  r  B  sL        < < < < < <4 4 4 4 4 4 4r   r  c                   &     e Zd Zd fd	Zd Z xZS )STCSPBr>   Fr   c                 <   t          t          |                                            t          |          }t	          ||dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        |dz  }t          ||||          | _	        d S r  )
r(   r  r)   r   rl   r   r   r   r  r,   r  s
            r   r)   zSTCSPB.__init__V  s    fd$$&&&WWB1%%B1%%BAq))"H	%b"i;;r   c                     |                      |          }|                     |          }|                     |          }|                     t	          j        ||fd                    S r   r  r  s        r   r3   zSTCSPB.forward`  r  r   r  r5   r:   s   @r   r  r  T  sL        < < < < < <4 4 4 4 4 4 4r   r  c                   &     e Zd Zd fd	Zd Z xZS )STCSPCr>   Tr   c                 p   t          t          |                                            t          ||z            }t	          ||dd          | _        t	          ||dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        |dz  }t          ||||          | _
        d S r  )r(   r  r)   r   rl   r   r   r   r   r  r,   r  s
            r   r)   zSTCSPC.__init__i  s    fd$$&&&a[[B1%%B1%%B1%%BAq))"H	%b"i;;r   c                     |                      |                     |                     |                              }|                     |          }|                     t          j        ||fd                    S r   r  r  s       r   r3   zSTCSPC.forwardt  r  r   r  r5   r:   s   @r   r  r  g  sL        < < < < < <4 4 4 4 4 4 4r   r  c                   F     e Zd Zdddddgf fd	Zd
dZdefdZd	 Z xZS )WindowAttention_v2TrR  r   c           
      $
   t                                                       || _        || _        || _        || _        t          j        t          j	        dt          j
        |ddf          z            d          | _        t          j        t          j        ddd          t          j        d          t          j        d|d	                    | _        t          j        | j        d
         dz
   | j        d
         t          j                  }t          j        | j        d         dz
   | j        d         t          j                  }	t          j        t          j        ||	g                                        ddd
                                                              d
          }
|d
         d
k    rG|
d d d d d d d
fxx         |d
         dz
  z  cc<   |
d d d d d d dfxx         |d         dz
  z  cc<   nP|
d d d d d d d
fxx         | j        d
         dz
  z  cc<   |
d d d d d d dfxx         | j        d         dz
  z  cc<   |
dz  }
t          j        |
          t          j        t          j        |
          dz             z  t5          j        d          z  }
|                     d|
           t          j        | j        d
                   }t          j        | j        d                   }t          j        t          j        ||g                    }t          j        |d          }|d d d d d f         |d d d d d f         z
  }|                    ddd
                                          }|d d d d d
fxx         | j        d
         dz
  z  cc<   |d d d d dfxx         | j        d         dz
  z  cc<   |d d d d d
fxx         d| j        d         z  dz
  z  cc<   |                    d          }|                     d|           t          j        ||dz  d	          | _        |rWt          j        t          j        |                    | _         t          j        t          j        |                    | _!        nd | _         d | _!        t          j"        |          | _#        t          j        ||          | _$        t          j"        |          | _%        t          j&        d          | _'        d S )Nr  r>   Trequires_gradr   i   r  )inplaceFr   r  r  r  relative_coords_tabler   r0  r=   r   )(r(   r)   r   r1  pretrained_window_sizer  r*   r   rK   logr   logit_scaler   r  ReLUcpb_mlpr4  r  rj  r5  r&  r'  r  signlog2absr  r  r  r  r6  rY  q_biasv_biasr7  r8  r9  r:  r;  r<  )r-   r   r1  r  r=  r8  r:  r  relative_coords_hrelative_coords_wr  r@  rA  rB  rC  rD  r0  r.   s                    r   r)   zWindowAttention_v2.__init__  s/    	&&<#"<	"uz9aQRBS7T7T2T(U(Ueijjj }RYq#D%A%A%A%'WT%:%:%:%'YsIE%J%J%JL L
 "L4+;A+>+B)CTEUVWEX`e`mnnn!L4+;A+>+B)CTEUVWEX`e`mnnn %N--/ 0 0!1 !118Aq1A1A**,,yyYZ|| 	 "!$q((!!!!QQQ1*---2H2Ka2OP---!!!!QQQ1*---2H2Ka2OP----!!!!QQQ1*---$2B12E2IJ---!!!!QQQ1*---$2B12E2IJ---" %
+@ A AEJI+,,s2E4 E4 !468gajj!A 	46KLLL < 0 344< 0 344U^Xx,@AABBvq11(AAAt4~aaaqqqj7QQ)11!Q::EEGG111a   D$4Q$7!$;;   111a   D$4Q$7!$;;   111a   A(8(;$;a$??   "1"5"5b"9"968OPPP9S#'666 	,u{3'7'788DK,u{3'7'788DKKDKDKI..Ic3''	I..zb)))r   Nc                 >   |j         \  }}}d }| j        :t          j        | j        t          j        | j        d          | j        f          }t          j        || j        j	        |          }|
                    ||d| j        d                              ddddd	          }|d         |d         |d         }
}	}t          j        |d
          t          j        |	d
                              dd          z  }t          j        | j        t          j        t          j        d                                                              }||z  }|                     | j                                      d| j                  }|| j                            d                                       | j        d         | j        d         z  | j        d         | j        d         z  d          }|                    ddd                                          }dt          j        |          z  }||                    d          z   }||j         d         }|                    ||z  || j        ||          |                    d                              d          z   }|                    d| j        ||          }|                     |          }n|                     |          }|                     |          }	 ||
z                      dd          
                    |||          }nG#  |                                |
z                      dd          
                    |||          }Y nxY w|                     |          }|                      |          }|S )NFr  )inputr  rp   r=   r   r   r   r>   r   r   rF  g      Y@)rO  r  )!r  r  rK   rL   r  r  r  r	  r6  r  r   r  r&  	normalizer  clampr  r  ry  expr  r  r%  r0  r1  r'  sigmoidr  r<  r8  rG  r9  r:  )r-   r   rH  rI  r)  r*  r=  r6  r  r   r  rJ  r  r3  rK  rL  s                   r   r3   zWindowAttention_v2.forward  sA   7Aq;"y$+u/?[`/a/a/acgcn!oppHhQtxXFFFkk"aDNB77??1aANNa&#a&#a&a1 A2&&&QB)?)?)?)I)I"b)Q)QQk$"2	%,yBYBY8Z8Z[[[__aak!'+||D4N'O'O'T'TUWY]Yg'h'h$!=d>Z>_>_`b>c>c!d!i!iQ$"21"55t7G7JTM]^_M`7`bd"f "f!7!?!?1a!H!H!S!S!U!U!#em4J&K&K!K,66q999AB99R2Xr4>1a@@4>>RSCTCTC^C^_`CaCaaD99RA66D<<%%DD<<%%D~~d##	D$$Q**222q!<<AA	Dq++Aq1199"aCCAAAIIaLLNN1s   =.L, ,AM0returnc                 F    d| j          d| j         d| j         d| j         S )Ndim=, window_size=z, pretrained_window_size=, num_heads=)r   r1  r  r  rD  s    r   
extra_reprzWindowAttention_v2.extra_repr  sS    cdh c cd.> c c)-)Dc cRVR`c c 	cr   c                     d}||| j         z  dz  | j         z  z  }|| j        |z  | j         | j        z  z  |z  z  }|| j        |z  |z  | j         | j        z  z  z  }||| j         z  | j         z  z  }|S )Nr   r=   )r   r  )r-   r)  flopss      r   r  zWindowAttention_v2.flops  s    TX!DH,,!#tx4>'ABQFF!#a'48t~+EFFTX((r   r0   )	r6   r7   r8   r)   r3   r^  r  r  r9   r:   s   @r   r  r  ~  s        =AR[])*A9* 9* 9* 9* 9* 9*v' ' ' 'RcC c c c c      r   r  c                   8     e Zd Zddej        df fd	Zd Z xZS )Mlp_v2NrR  c                    t                                                       |p|}|p|}t          j        ||          | _         |            | _        t          j        ||          | _        t          j        |          | _        d S r0   rP  rR  s         r   r)   zMlp_v2.__init__  rW  r   c                     |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|S r0   rY  r2   s     r   r3   zMlp_v2.forward  rZ  r   r[  r:   s   @r   r  r    sZ        48tWYW^eg % % % % % %      r   r  c                     | j         \  }}}}|                     |||z  |||z  ||          } |                     dddddd                                                              d|||          }|S )Nr   r>   r=   r   r   r   r   r]  r^  s          r   window_partition_v2r    sx    JAq!Q	q!{"Kk1A;PQRRAii1aAq))4466;;B[Z[\\GNr   c                    t          | j        d         ||z  |z  |z  z            }|                     |||z  ||z  ||d          }|                    dddddd                                                              |||d          }|S rc  rd  re  s         r   window_reverse_v2r    rg  r   c            
       f     e Zd Zdddddddej        ej        df
 fd	Zd Zd Zd	e	fd
Z
d Z xZS )SwinTransformerLayer_v2r   r   rj  TrR  c           
         t                                                       || _        || _        || _        || _        || _        d| j        cxk    r| j        k     sn J d             ||          | _        t          || j        | j        f||||||f          | _	        |	dk    rt          |	          nt          j                    | _         ||          | _        t          ||z            }t!          |||
|          | _        d S )Nr   rl  )r1  r  r=  r8  r:  r  rR  rm  )r(   r)   r   r  r1  rn  ro  rp  r  rJ  rq  r*   rw   rr  rs  r   r  rt  )r-   r   r  r1  rn  ro  r=  rQ  r8  rr  rV  ru  r  rv  r.   s                 r   r)   z SwinTransformerLayer_v2.__init__  s     	"&$"
 DO6666d&6666668Z666Z__
&d.0@AYd$:<R#SU U U	
 1:B),,,BKMMZ__
S9_--c>U^eijjjr   c           	         t          j        d||df          }t          d| j                   t          | j         | j                   t          | j         d           f}t          d| j                   t          | j         | j                   t          | j         d           f}d}|D ]}|D ]}||d d ||d d f<   |dz  }t          || j                  }	|	                    d| j        | j        z            }	|	                    d          |	                    d          z
  }
|
                    |
dk    t          d                                        |
dk    t          d                    }
|
S rx  ry  r}  s              r   r  z#SwinTransformerLayer_v2.create_mask5  r  r   c                     |j         \  }}}}d}t          ||          | j        k     s|| j        z  dk    s|| j        z  dk    rOd}| j        || j        z  z
  | j        z  }| j        || j        z  z
  | j        z  }t          j        |d|d|f          }|j         \  }}	}
}|
|z  }|                    dddd                                                              |||	          }| j        dk    r/| 	                    |
|          
                    |j                  }nd }|}|                    ||
||	          }| j        dk    r&t          j        || j         | j         fd          }n|}t          || j                  }|                    d	| j        | j        z  |	          }|                     ||
          }|                    d	| j        | j        |	          }t!          || j        |
|          }| j        dk    r$t          j        || j        | j        fd          }n|}|                    ||
|z  |	          }||                     |                     |                    z   }||                     |                     |                     |                              z   }|                    ddd                                                              d	|	|
|          }|r|d d d d d |d |f         }|S r  )r  r  r1  r  r  r&  r'  r%  rn  r  r   r  rK   r  r  rJ  r  rr  rp  rs  rt  r  s                     r   r3   zSwinTransformerLayer_v2.forwardK  s   w1b"r2;;)))R$2B-BA-E-EdN^I^`aIaIaG%T-=(==AQQE%T-=(==AQQEa!UAu-..A W
1aEIIaAq!!,,..33Aq!<< ?Q((A..11!(;;IIIFF1aA ?Q
1t.>@P-QX^___III (	43CDD	NN2t'7$:J'JANN	 yyy;; $((T-=t?OQRSS%lD4DaKK	 ?Q
9dot-OV\]]]AAAFF1a!eQt~~djjmm444 tzz$((1++66777IIaA))++00Q1== 	"!!!QQQSbS.!Ar   r  c                 f    d| j          d| j         d| j         d| j         d| j         d| j         S )Nr  z, input_resolution=r  r  z, shift_size=z, mlp_ratio=)r   input_resolutionr  r1  rn  ro  rD  s    r   r  z"SwinTransformerLayer_v2.extra_repr  sv    kdh k k43H k kVZVd k k".k k=A_k kZ^Zhk k 	kr   c                 (   d}| j         \  }}|| j        |z  |z  z  }||z  | j        z  | j        z  }||| j                            | j        | j        z            z  z  }|d|z  |z  | j        z  | j        z  | j        z  z  }|| j        |z  |z  z  }|S )Nr   r   )r  r   r1  rJ  r  ro  )r-   r  r+  r,  rL  s        r   r  zSwinTransformerLayer_v2.flops  s    $1A!!UT%%(88diood&69I&IJJJJQTX%04>AAA!!r   )r6   r7   r8   r*   ru   r  r)   r  r3   r^  r  r  r9   r:   s   @r   r  r    s        342r7r|TUk k k k k k6  ,: : :xkC k k k k      r   r  c                   &     e Zd Zd fd	Zd Z xZS )SwinTransformer2Blockr   c                     t                                                       d | _        |k    rt          |          | _        t	          j        fdt          |          D              | _        d S )Nc           	      R    g | ]#}t          |d z  dk    rdnd z            $S r  )r  r  s     r   r   z2SwinTransformer2Block.__init__.<locals>.<listcomp>  sb     &q &q &qYZ '>"PYgr23a%1**AA;RSCS'U 'U 'U &q &q &qr   r  r  s     `` `r   r)   zSwinTransformer2Block.__init__  r  r   c                 h    | j         |                      |          }|                     |          }|S r0   r  r2   s     r   r3   zSwinTransformer2Block.forward  r  r   )r   r5   r:   s   @r   r  r    r  r   r  c                   &     e Zd Zd fd	Zd Z xZS )ST2CSPAr>   Tr   c                 B   t          t          |                                            t          ||z            }t	          ||dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        |dz  }t          ||||          | _	        d S r  )
r(   r  r)   r   rl   r   r   r   r  r,   r  s
            r   r)   zST2CSPA.__init__  s    gt%%'''a[[B1%%B1%%BAq))"H	&r2y!<<r   c                     |                      |                     |                    }|                     |          }|                     t	          j        ||fd                    S r   r  r  s       r   r3   zST2CSPA.forward  r  r   r  r5   r:   s   @r   r  r    sL        = = = = = =4 4 4 4 4 4 4r   r  c                   &     e Zd Zd fd	Zd Z xZS )ST2CSPBr>   Fr   c                 <   t          t          |                                            t          |          }t	          ||dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        |dz  }t          ||||          | _	        d S r  )
r(   r  r)   r   rl   r   r   r   r  r,   r  s
            r   r)   zST2CSPB.__init__  s    gt%%'''WWB1%%B1%%BAq))"H	&r2y!<<r   c                     |                      |          }|                     |          }|                     |          }|                     t	          j        ||fd                    S r   r  r  s        r   r3   zST2CSPB.forward  r  r   r  r5   r:   s   @r   r  r    sL        = = = = = =4 4 4 4 4 4 4r   r  c                   &     e Zd Zd fd	Zd Z xZS )ST2CSPCr>   Tr   c                 p   t          t          |                                            t          ||z            }t	          ||dd          | _        t	          ||dd          | _        t	          ||dd          | _        t	          d|z  |dd          | _        |dz  }t          ||||          | _
        d S r  )r(   r  r)   r   rl   r   r   r   r   r  r,   r  s
            r   r)   zST2CSPC.__init__  s    gt%%'''a[[B1%%B1%%B1%%BAq))"H	&r2y!<<r   c                     |                      |                     |                     |                              }|                     |          }|                     t          j        ||fd                    S r   r  r  s       r   r3   zST2CSPC.forward  r  r   r  r5   r:   s   @r   r  r    sL        = = = = = =4 4 4 4 4 4 4r   r  r0   )r>   r>   T)ur   r   pathlibr   r  r  r  r  rb  rK   torch.nnr*   torch.nn.functionalr  r  torchvision.opsr   PILr   
torch.cudar   utils.datasetsr	   utils.generalr
   r   r   r   r   utils.plotsr   r   utils.torch_utilsr   r!   rv   r#   r<   rF   rN   rV   rc   rh   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r*  r/  r3  r8  r<  r@  rI  rM  rQ  rc  rg  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  r3  r?  rl  r  r  r  r  r  r.  rN  ra  rf  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s                                         ( ( ( ( ( (             $ $ $ $ $ $ f f f f f f f f f f f f f f 0 0 0 0 0 0 0 0 / / / / / /
                 j j j j jBI j j j$ $ $ $ $RY $ $ $( ( ( ( (bi ( ( (    ry       bi   & & & & &29 & & &            ")   "; ; ; ;

. 
. 
. 
. 
.	 
. 
. 
.Q Q Q Q Q29 Q Q Q O O O O OBI O O OD D D D D") D D D
P 
P 
P 
P 
P 
P 
P 
Pd d d d d") d d d    3   / / / / /BI / / /&4 4 4 4 4bi 4 4 4(/ / / / /7 / / // / / / / / / /4 4 4 4 4RY 4 4 4 4 4 4 4 4RY 4 4 4"4 4 4 4 4RY 4 4 4"U U U U Un U U UU U U U Un U U UU U U U Un U U UU U U U Uw U U UU U U U Uw U U UU U U U Uw U U UC C C C C C C CC C C C C C C CC C C C C C C C
! 
! 
! 
! 
!	 
! 
! 
!
! 
! 
! 
! 
!	 
! 
! 
!"t" t" t" t" t"bi t" t" t"n. . . . .J . . ._ _ _ _ _ _ _ __ _ _ _ _ _ _ __ _ _ _ _ _ _ _. . . . .S . . .X X X X X X X XX X X X X X X XX X X X X X X X. . . . .d . . .Y Y Y Y Y( Y Y YY Y Y Y Y( Y Y YY Y Y Y Y( Y Y Y    ry   "    ry   Bu u u u uBI u u u? ? ? ? ?29 ? ? ? 4 4 4 4 4ry 4 4 44 4 4 4 4RY 4 4 4
i 
i 
i 
i 
i") 
i 
i 
iCF CF CF CF CF	 CF CF CFLM M M M M M M M`
' 
' 
' 
' 
'ry 
' 
' 
'"b b b         RY      DV, V, V, V, V,	 V, V, V,pH- H- H- H- H-BI H- H- H-^D D D D Dbi D D DL    ")   &    m m m m m29 m m m`    29   $4 4 4 4 4RY 4 4 4$4 4 4 4 4RY 4 4 4&4 4 4 4 4RY 4 4 4.u u u u u u u un    RY   &        bi   D    BI   $4 4 4 4 4bi 4 4 4$4 4 4 4 4bi 4 4 4&4 4 4 4 4bi 4 4 4 4 4r   