
    of                     $   d dl Z d dlZd dlZd dlmZ ej                            d            ej        e          Z	d dl
Z
d dlT d dlT d dlmZ d dlmZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ 	 d dlZn# e$ r dZY nw xY w 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&d Z'edk    r e j(                    Z)e)*                    de+dd           e)*                    ddd           e)*                    dd d!"           e),                                Z- ee-j.                  e-_.         e              ee-j/                  Z/ e&e-j.                  0                    e/          Z1e12                                 e-j3        r7 e
j4        d#d$d%d%          0                    e/          Z5 e1e5d&'          Z6dS dS dS )(    N)deepcopyz./)*)check_anchor_order)make_divisible
check_fileset_logging)time_synchronizedfuse_conv_and_bn
model_info	scale_imginitialize_weightsselect_device	copy_attr)
SigmoidBinc                   X     e Zd ZdZdZdZdZdZd
 fd	Zd Z	e
dd            Zd	 Z xZS )DetectNFP    c                     t          t                                                      | _        |dz    _        t          |           _        t          |d                   dz   _        t          j	        d          g j        z   _
        t          j        |                                                               j        dd          }                     d|                                d|                                                     j        ddddd                     t                                fd|D                        _        d S )	N   r         anchorsanchor_gridc              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   NnnConv2dnona.0xselfs     #/var/www/html/yolov7/models/yolo.py	<genexpr>z"Detect.__init__.<locals>.<genexpr>(   <      NNaryyDGdg,=qAANNNNNN    )superr   __init__ncr!   lennlr"   torchzerosgridtensorfloatviewregister_buffercloner   
ModuleListmr&   r-   r   cha	__class__s   `    r'   r,   zDetect.__init__   s   fd$$&&&q&g,,gaj//Q&[^^$tw.	L!!''))..twA>>Y***]AGGIINN47Ar1aQR,S,STTTNNNN2NNNNNr*   c                    g }| xj         | j        z  c_         t          | j                  D ]L} | j        |         ||                   ||<   ||         j        \  }}}}||                             || j        | j        ||          	                    ddddd          
                                ||<   | j         s| j        |         j        dd         ||         j        dd         k    r<|                     ||                              ||         j                  | j        |<   ||                                         }t           j                                        s]|dddf         dz  dz
  | j        |         z   | j        |         z  |dddf<   |dddf         dz  dz  | j        |         z  |dddf<   n|                    dd| j        dz   fd          \  }	}
}|	d| j        |         z  z  | j        |         | j        |         dz
  z  z   }	|
dz  d| j        |         j        z  z  }
t!          j        |	|
|fd          }|                    |                    |d	| j                             N| j         r|}nq| j        rt!          j        |d          }nT| j        r|                     |          }|f}n4| j        rt!          j        |d          }nt!          j        |d          |f}|S 
Nr   r         r   .       @      ?r   trainingexportranger/   r9   shaper5   r"   r!   permute
contiguousr2   
_make_gridtodevicesigmoidr0   onnxis_in_onnx_exportstrider   splitr-   datacatappendend2endinclude_nmsconvertconcatr&   r%   zibs_nynxyxywhconfouts                r'   forwardzDetect.forward*   s   $tw 	2 	2A46!9QqT??AaDaDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaD= 29Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaLaDLLNNz3355 5#$S!A#X;#3c#9DIaL#HDKXYN"ZAc1Q3hK#$S!A#X;?q"84;KA;N"NAc1Q3hKK#$77Aq$'A++>#B#BLBDrDKN23t{1~STX[I[7\]BqA(8(;(@$@AB	2r4.!44AB00111= 
	'CC\ 	')Aq//CC 	'QA%CC[ 	')Aq//CC9Q??A&C
r*      c                     t          j        t          j        |          t          j        |           g          \  }}t          j        ||fd                              dd|| df                                          S Nr   r   r0   meshgridarangestackr5   r4   r`   r_   yvxvs       r'   rK   zDetect._make_gridO   i    b!1!15<3C3C DEEB{B8Q'',,aBA->??EEGGGr*   c                    t          j        |d          }|d d d d d df         }|d d d d ddf         }|d d d d dd f         }||z  }t          j        g dg dg dg dgt           j        |j                  }||z  }||fS 	Nr   rA   r   )r   r   r   r   )r   r   r   r   )      r   rC   r   )r   rt   r   rC   )dtyperM   r0   rT   r3   float32rM   r&   r[   boxrd   scoreconvert_matrixs         r'   rX   zDetect.convertT       IaOO111bqbkAAAqs|!!!QQQ(|||\\\CTCTCTVgVgVg&h1623(< < < 	~U|r*   r   r   r   rg   rg   )__name__
__module____qualname__rQ   rF   rV   rW   rY   r,   rf   staticmethodrK   rX   __classcell__r=   s   @r'   r   r      s        FFGKF
O 
O 
O 
O 
O 
O# # #J H H H \H
 
 
 
 
 
 
r*   r   c                   d     e Zd ZdZdZdZdZdZd fd	Zd Z	d Z
d Zedd
            Zd Z xZS )IDetectNFr   r   c                 T    t          t                                                      | _        |dz    _        t          |           _        t          |d                   dz   _        t          j	        d          g j        z   _
        t          j        |                                                               j        dd          }                     d|                                d|                                                     j        ddddd                     t                                fd|D                        _        t                               d	 |D                        _        t                                fd
|D                        _        d S )Nr   r   r   r   r   r   r   c              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   r   r#   s     r'   r(   z#IDetect.__init__.<locals>.<genexpr>r   r)   r*   c              3   4   K   | ]}t          |          V  d S N	ImplicitAr$   r%   s     r'   r(   z#IDetect.__init__.<locals>.<genexpr>t   (      99	!999999r*   c              3   P   K   | ] }t          j        j        z            V  !d S r   	ImplicitMr!   r"   r$   r^   r&   s     r'   r(   z#IDetect.__init__.<locals>.<genexpr>u   4      II	$'DG*; < <IIIIIIr*   )r+   r   r,   r-   r!   r.   r/   r"   r0   r1   r2   r3   r4   r5   r6   r7   r   r8   r9   iaimr:   s   `    r'   r,   zIDetect.__init__h   s`   gt%%'''q&g,,gaj//Q&[^^$tw.	L!!''))..twA>>Y***]AGGIINN47Ar1aQR,S,STTTNNNN2NNNNN--99b99999--IIIIbIIIIIr*   c                 H   g }| xj         | j        z  c_         t          | j                  D ]} | j        |          | j        |         ||                             ||<    | j        |         ||                   ||<   ||         j        \  }}}}||                             || j	        | j
        ||                              ddddd                                          ||<   | j         s| j        |         j        dd         ||         j        dd         k    r<|                     ||                              ||         j                  | j        |<   ||                                         }|dddf         dz  dz
  | j        |         z   | j        |         z  |dddf<   |dddf         dz  dz  | j        |         z  |dddf<   |                    |                    |d	| j
                             | j         r|nt+          j        |d          |fS r?   )rE   rF   rG   r/   r9   r   r   rH   r5   r"   r!   rI   rJ   r2   rK   rL   rM   rN   rQ   r   rU   r0   rT   )	r&   r%   r[   r\   r]   r^   r_   r`   ra   s	            r'   rf   zIDetect.forwardw   s   $tw 	2 	2A46!9ZTWQZ!--..AaD471:ad##AaDaDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaD= 29Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaLaDLLNN ac{R/#5	!DTUV#qs( ac{Q14t7G7JJ#qs(B00111M;qq	!Q';;r*   c                    g }| xj         | j        z  c_         t          | j                  D ]L} | j        |         ||                   ||<   ||         j        \  }}}}||                             || j        | j        ||          	                    ddddd          
                                ||<   | j         s| j        |         j        dd         ||         j        dd         k    r<|                     ||                              ||         j                  | j        |<   ||                                         }t           j                                        s]|dddf         dz  dz
  | j        |         z   | j        |         z  |dddf<   |dddf         dz  dz  | j        |         z  |dddf<   n|                    dd| j        dz   fd          \  }	}
}|	d| j        |         z  z  | j        |         | j        |         dz
  z  z   }	|
dz  d| j        |         j        z  z  }
t!          j        |	|
|fd          }|                    |                    |d	| j                             N| j         r|}nq| j        rt!          j        |d          }nT| j        r|                     |          }|f}n4| j        rt!          j        |d          }nt!          j        |d          |f}|S r?   rD   rZ   s                r'   fuseforwardzIDetect.fuseforward   s   $tw 	2 	2A46!9QqT??AaDaDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaD= 29Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaLaDLLNNz3355 5#$S!A#X;#3c#9DIaL#HDKXYN"ZAc1Q3hK#$S!A#X;?q"84;KA;N"NAc1Q3hKK#$77Aq$'A++>#B#BLBDrDKN23t{1~STX[I[7\]BqA(8(;(@$@AB	2r4.!44AB00111= 
	'CC\ 	')Aq//CC 	'QA%CC[ 	')Aq//CC9Q??A&C
r*   c           
      h   t          d           t          t          | j                            D ]}| j        |         j        j        \  }}}}| j        |         j        j        \  }}}}| j        |         xj        t          j
        | j        |         j                            ||          | j        |         j                            ||                                        d          z  c_        t          t          | j                            D ]}| j        |         j        j        \  }}}}| j        |         xj        | j        |         j                            |          z  c_        | j        |         xj        | j        |         j                            dd          z  c_        d S )NzIDetect.fuser   r   printrG   r.   r9   weightrH   r   implicitbiasr0   matmulreshapesqueezer   	transposer&   r\   c1c2r^   c1_c2_s          r'   fusezIDetect.fuse   sv   ns46{{## 	| 	|Aq	(.IBr!A71:.4LCQqF1INNel46!9+;+C+CBr+J+J47ST:K^KfKfgjknKoKoppxxyz{{{NNN s46{{## 	C 	CA,2JBr1QF1INNdgaj199"===NNF1I
 3 = =a B BB	C 	Cr*   rg   c                     t          j        t          j        |          t          j        |           g          \  }}t          j        ||fd                              dd|| df                                          S ri   rj   rn   s       r'   rK   zIDetect._make_grid   rq   r*   c                    t          j        |d          }|d d d d d df         }|d d d d ddf         }|d d d d dd f         }||z  }t          j        g dg dg dg dgt           j        |j                  }||z  }||fS rs   rv   rx   s         r'   rX   zIDetect.convert   r|   r*   r}   r~   r   r   r   rQ   rF   rV   rW   rY   r,   rf   r   r   r   rK   rX   r   r   s   @r'   r   r   a   s        FFGKFJ J J J J J< < <*$ $ $LC C C H H H \H
 
 
 
 
 
 
r*   r   c                   F     e Zd ZdZdZd fd	Zd Zedd
            Z xZ	S )	IKeypointNFr   r      Tc                     t          t                                                      | _        | _        | _        |dz    _        d j        z   _         j         j        z    _        t          |           _
        t          |d                   dz   _        t          j        d          g j
        z   _        d _        t          j        |                                                               j
        dd          }                     d|                                d	|                                                     j
        ddddd                     t*                               fd
|D                        _        t*                              d |D                        _        t*                               fd|D                        _         j        ^ j        r,t*                               fd|D                        _        n+t*                               fd|D                        _        | _        d S )Nr   r@   r   r   r   Fr   r   r   c              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   )r   r    no_detr"   r#   s     r'   r(   z%IKeypoint.__init__.<locals>.<genexpr>   s<      RR!ryyDK$',A1EERRRRRRr*   c              3   4   K   | ]}t          |          V  d S r   r   r   s     r'   r(   z%IKeypoint.__init__.<locals>.<genexpr>   r   r*   c              3   P   K   | ] }t          j        j        z            V  !d S r   )r   r   r"   r   s     r'   r(   z%IKeypoint.__init__.<locals>.<genexpr>   s4      MMQ	$+*? @ @MMMMMMr*   c              3     K   | ]}t                               t          ||d           t          ||          t          ||d           t          ||          t          ||d           t          ||          t          ||d           t          ||          t          ||d           t          ||          t          ||d           t                               |j        j        z  d                    V  dS )r@   )kr   N)r   
SequentialDWConvConvr    no_kptr"   r#   s     r'   r(   z%IKeypoint.__init__.<locals>.<genexpr>   s      +r +r jk MM&A*;*;*;T!AYY*0A*;*;*;T!QZZ*0A*;*;*;T!AYY*0A*;*;*;T!QZZ*0A*;*;*;T!QZZ*0A*;*;*;RYYq$+X\X_J_ab=c=ce e+r +r +r +r +r +rr*   c              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   )r   r    r   r"   r#   s     r'   r(   z%IKeypoint.__init__.<locals>.<genexpr>   s=      *^*^VW299Qdg8Mq+Q+Q*^*^*^*^*^*^r*   )r+   r   r,   r-   nkptdw_conv_kptr   r   r!   r.   r/   r"   r0   r1   r2   	flip_testr3   r4   r5   r6   r7   r   r8   r9   r   r   m_kptinplace)	r&   r-   r   r   r;   r   r   r<   r=   s	   `       r'   r,   zIKeypoint.__init__   s#   i'')))	&!V	k+dk)g,,gaj//Q&[^^$tw.	L!!''))..twA>>Y***]AGGIINN47Ar1aQR,S,STTTRRRRrRRRRR--99b99999--MMMM"MMMMM9  	_]] +r +r +r +r oq+r +r +r r r

  ]]*^*^*^*^[]*^*^*^^^
r*   c                 	   g }| xj         | j        z  c_         t          | j                  D ]}| j        | j        dk    rH | j        |          | j        |          | j        |         ||                                       ||<   nwt          j	         | j        |          | j        |          | j        |         ||                                        | j
        |         ||                   fd          ||<   ||         j        \  }}}}||                             || j        | j        ||                              ddddd                                          ||<   ||         dd df         }||         ddd f         }	| j         s | j        |         j        dd         ||         j        dd         k    r<|                     ||                              ||         j                  | j        |<   | j        |         dddf         }
| j        |         dddf         }| j        dk    r||                                         }n|                                }| j        rG|dddf         d	z  d
z
  | j        |         z   | j        |         z  }|dddf         dz  dz  | j        |                             d| j        ddd          z  }| j        dk    r|	dd d df         d	z  d
z
  |
                    ddddd          z   | j        |         z  |	ddd df<   |	ddd df         d	z  d
z
  |                    ddddd          z   | j        |         z  |	ddd df<   |	ddd df                                         |	ddd df<   t          j	        |||ddd f         |	fd          }n|dddf         d	z  d
z
  | j        |         z   | j        |         z  }|dddf         dz  dz  | j        |         z  }| j        dk    rR|ddd f         d	z  d
z
  | j        |                             dddd| j        f          z   | j        |         z  |ddd f<   t          j	        |||ddd f         fd          }|                    |                    |d| j                             | j         r|nt          j	        |d          |fS )Nr   r   )axisr@   rA   r   .   rB   rC   r   r   dim)rE   rF   rG   r/   r   r   r9   r   r0   rT   r   rH   r5   r"   r!   rI   rJ   r2   rK   rL   rM   rN   r   rQ   r   repeatrU   )r&   r%   r[   r\   r]   r^   r_   r`   x_detx_kpt
kpt_grid_x
kpt_grid_yra   rb   rc   s                  r'   rf   zIKeypoint.forward   s   $tw 1	2 1	2Ay DIqLL!twqz)$&)JDGAJqt,<,<"="=>>!y*$'!*YTVAYztwqz!A$7G7G-H-H"I"I=4:VW=YZ[\Y]K^K^!_fghhh!aDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaDaDbqbMEaDabbME= &29Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaL!Yq\#qs(3
!Yq\#qs(3
9>>!AAA< <C1H+*S049Q<?4;q>QBC1H+/a/$2B12E2J2J1dgWXZ[]^2_2__ByA~~,1#sss(Ob,@3,FIZIZ[\]^_`abceIfIf,fjnjuvwjx+xc14a4i(,1#qt!t),<r,AC,G*J[J[\]^_`abcdfJgJg,gkokvwxky+yc14a4i( ,1add+;+C+C+E+Ec14a4i(	2r1S!""W:u"=RHHHAA C1H+*S049Q<?4;q>QBC1H+/a/$2B12EEByA~~&'QRRj2o&;dil>Q>QSTUVWXYZ[_[dRe>f>f&fjnjuvwjx%x#qrr'
	2r1S!""W:"6;;AB00111M;qq	!Q';;r*   rg   c                     t          j        t          j        |          t          j        |           g          \  }}t          j        ||fd                              dd|| df                                          S ri   rj   rn   s       r'   rK   zIKeypoint._make_grid1  rq   r*   )r   r   r   r   TFr~   
r   r   r   rQ   rF   r,   rf   r   rK   r   r   s   @r'   r   r      s        FF           D7< 7< 7<r H H H \H H H H Hr*   r   c                   d     e Zd ZdZdZdZdZdZd fd	Zd Z	d Z
d Zedd
            Zd Z xZS )
IAuxDetectNFr   r   c                     t          t                                                      | _        |dz    _        t          |           _        t          |d                   dz   _        t          j	        d          g j        z   _
        t          j        |                                                               j        dd          }                     d|                                d|                                                     j        ddddd                     t                                fd|d  j                 D                        _        t                                fd	| j        d          D                        _        t                               d
 |d  j                 D                        _        t                                fd|d  j                 D                        _        d S )Nr   r   r   r   r   r   r   c              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   r   r#   s     r'   r(   z&IAuxDetect.__init__.<locals>.<genexpr>H  s<      XXaryyDGdg,=qAAXXXXXXr*   c              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   r   r#   s     r'   r(   z&IAuxDetect.__init__.<locals>.<genexpr>I  s<      YYq		!TWtw-> B BYYYYYYr*   c              3   4   K   | ]}t          |          V  d S r   r   r   s     r'   r(   z&IAuxDetect.__init__.<locals>.<genexpr>K  s(      CC	!CCCCCCr*   c              3   P   K   | ] }t          j        j        z            V  !d S r   r   r   s     r'   r(   z&IAuxDetect.__init__.<locals>.<genexpr>L  s4      SS	$'DG*; < <SSSSSSr*   )r+   r   r,   r-   r!   r.   r/   r"   r0   r1   r2   r3   r4   r5   r6   r7   r   r8   r9   m2r   r   r:   s   `    r'   r,   zIAuxDetect.__init__>  s   j$((***q&g,,gaj//Q&[^^$tw.	L!!''))..twA>>Y***]AGGIINN47Ar1aQR,S,STTTXXXX2htwh<XXXXX--YYYYBtwxxLYYYYY--CCb$'lCCCCC--SSSSb$'lSSSSSr*   c                    g }| xj         | j        z  c_         t          | j                  D ]} | j        |          | j        |         ||                             ||<    | j        |         ||                   ||<   ||         j        \  }}}}||                             || j	        | j
        ||                              ddddd                                          ||<    | j        |         ||| j        z                      ||| j        z   <   ||| j        z                                || j	        | j
        ||                              ddddd                                          ||| j        z   <   | j         s| j        |         j        dd         ||         j        dd         k    r<|                     ||                              ||         j                  | j        |<   ||                                         }t&          j                                        s]|dddf         dz  dz
  | j        |         z   | j        |         z  |dddf<   |dddf         dz  dz  | j        |         z  |dddf<   n|                    dd| j        dz   fd          \  }	}
}|	d| j        |         z  z  | j        |         | j        |         dz
  z  z   }	|
dz  d| j        |         j        z  z  }
t'          j        |	|
|fd          }|                    |                    |d	| j
                             | j         r|n#t'          j        |d          |d | j                 fS r?   )rE   rF   rG   r/   r9   r   r   rH   r5   r"   r!   rI   rJ   r   r2   rK   rL   rM   rN   r0   rO   rP   rQ   r   rR   r-   rS   rT   rU   )r&   r%   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   s               r'   rf   zIAuxDetect.forwardN  s/   $tw 	2 	2A46!9ZTWQZ!--..AaD471:ad##AaDaDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaD%471:a$'	l33AaiLQtwY<,,R$'2rJJRRSTVWYZ\]_`aallnnAaiL= 29Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaLaDLLNNz3355 5#$S!A#X;#3c#9DIaL#HDKXYN"ZAc1Q3hK#$S!A#X;?q"84;KA;N"NAc1Q3hKK#$77Aq$'A++>#B#BLBDrDKN23t{1~STX[I[7\]BqA(8(;(@$@AB	2r4.!44AB00111MEqq	!Q8DG8'EEr*   c           	         g }| xj         | j        z  c_         t          | j                  D ]7} | j        |         ||                   ||<   ||         j        \  }}}}||                             || j        | j        ||          	                    ddddd          
                                ||<   | j         s| j        |         j        dd         ||         j        dd         k    r<|                     ||                              ||         j                  | j        |<   ||                                         }t           j                                        s]|dddf         dz  dz
  | j        |         z   | j        |         z  |dddf<   |dddf         dz  dz  | j        |         z  |dddf<   nu|dddf         dz  dz
  | j        |         z   | j        |         z  }	|dddf         dz  dz  | j        |         j        z  }
t!          j        |	|
|ddd f         fd	          }|                    |                    |d	| j                             9| j         r|}nq| j        rt!          j        |d          }nT| j        r|                     |          }|f}n4| j        rt!          j        |d          }nt!          j        |d          |f}|S r?   )rE   rF   rG   r/   r9   rH   r5   r"   r!   rI   rJ   r2   rK   rL   rM   rN   r0   rO   rP   rQ   r   rS   rT   rU   rV   rW   rX   rY   )r&   r%   r[   r\   r]   r^   r_   r`   ra   rb   rc   re   s               r'   r   zIAuxDetect.fuseforwardl  s   $tw 	2 	2A46!9QqT??AaDaDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaD= 29Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaLaDLLNNz3355 <#$S!A#X;#3c#9DIaL#HDKXYN"ZAc1Q3hK#$S!A#X;?q"84;KA;N"NAc1Q3hKKC1H+*S049Q<?4;q>QBC1H+/a/$2B12E2JJB	2r1S!""W:"6;;AB00111= 
	'CC\ 	')Aq//CC 	'QA%CC[ 	')Aq//CC9Q??A&C
r*   c           
      h   t          d           t          t          | j                            D ]}| j        |         j        j        \  }}}}| j        |         j        j        \  }}}}| j        |         xj        t          j
        | j        |         j                            ||          | j        |         j                            ||                                        d          z  c_        t          t          | j                            D ]}| j        |         j        j        \  }}}}| j        |         xj        | j        |         j                            |          z  c_        | j        |         xj        | j        |         j                            dd          z  c_        d S )NzIAuxDetect.fuser   r   r   r   s          r'   r   zIAuxDetect.fuse  sw      s46{{## 	| 	|Aq	(.IBr!A71:.4LCQqF1INNel46!9+;+C+CBr+J+J47ST:K^KfKfgjknKoKoppxxyz{{{NNN s46{{## 	C 	CA,2JBr1QF1INNdgaj199"===NNF1I
 3 = =a B BB	C 	Cr*   rg   c                     t          j        t          j        |          t          j        |           g          \  }}t          j        ||fd                              dd|| df                                          S ri   rj   rn   s       r'   rK   zIAuxDetect._make_grid  rq   r*   c                    t          j        |d          }|d d d d d df         }|d d d d ddf         }|d d d d dd f         }||z  }t          j        g dg dg dg dgt           j        |j                  }||z  }||fS rs   rv   rx   s         r'   rX   zIAuxDetect.convert  r|   r*   r}   r~   r   r   s   @r'   r   r   7  s        FFGKFT T T T T T F F F<# # #JC C C H H H \H
 
 
 
 
 
 
r*   r   c                   F     e Zd ZdZdZd
 fd	Zd Zedd	            Z xZ	S )IBinNFr   r      c                 :    t          t                                                      | _        | _        t           j        dd           _        t           j        dd           _        |dz    j                                        z    j                                        z    _	        t          |           _        t          |d                   dz   _        t          j        d          g j        z   _        t          j        |                                                               j        dd          }                     d	|                                d
|                                                     j        ddddd                     t*                               fd|D                        _        t*                              d |D                        _        t*                               fd|D                        _        d S )Ng        g      @)	bin_countminmaxr@   r   r   r   r   r   r   c              3   j   K   | ]-}t                               |j        j        z  d           V  .dS r   r   r#   s     r'   r(   z IBin.__init__.<locals>.<genexpr>  r)   r*   c              3   4   K   | ]}t          |          V  d S r   r   r   s     r'   r(   z IBin.__init__.<locals>.<genexpr>  r   r*   c              3   P   K   | ] }t          j        j        z            V  !d S r   r   r   s     r'   r(   z IBin.__init__.<locals>.<genexpr>  r   r*   )r+   r   r,   r-   r   r   w_bin_sigmoidh_bin_sigmoid
get_lengthr!   r.   r/   r"   r0   r1   r2   r3   r4   r5   r6   r7   r   r8   r9   r   r   )r&   r-   r   r;   r   r<   r=   s   `     r'   r,   zIBin.__init__  s   dD""$$$"'$.csSSS'$.csSSSq&))++,.2.@.K.K.M.MN g,,gaj//Q&[^^$tw.	L!!''))..twA>>Y***]AGGIINN47Ar1aQR,S,STTTNNNN2NNNNN--99b99999--IIIIbIIIIIr*   c           	         d| j         _        d| j        _        g }| xj        | j        z  c_        t          | j                  D ][} | j        |          | j        |         ||                             ||<    | j	        |         ||                   ||<   ||         j
        \  }}}}||                             || j        | j        ||                              ddddd                                          ||<   | j        s| j        |         j
        dd         ||         j
        dd         k    r<|                     ||                              ||         j                  | j        |<   ||                                         }|dddf         dz  d	z
  | j        |         z   | j        |         z  |dddf<   | j                             |ddd
f                   | j        |         d         z  }	| j                            |dd
df                   | j        |         d         z  }
|	|d<   |
|d<   t1          j        |dddf         |ddd f         fd          }|                    |                    |d|j
        d                              ]| j        r|nt1          j        |d          |fS )NTr   r   r@   rA   r   .rB   rC      .r   .   .r   ).r   ).r@   r   r   )r   use_fw_regressionr   rE   rF   rG   r/   r9   r   r   rH   r5   r"   r!   rI   rJ   r2   rK   rL   rM   rN   rQ   rf   r   r0   rT   rU   )r&   r%   r[   r\   r]   r^   r_   r`   ra   pwphs              r'   rf   zIBin.forward  s    04,/3, $tw 	6 	6A46!9ZTWQZ!--..AaD471:ad##AaDaDJMB2rQ499R$'2r::BB1aAqQQ\\^^AaD= 69Q<%ac*adj1o==#'??2r#:#:#=#=adk#J#JDIaLaDLLNN ac{R/#5	!DTUV#qs( '//#qt)==@PQR@STZ@[['//#r"u*>>AQRSATU[A\\ &	&	Iqac{Ac233hK8bAAAB44555M;qq	!Q';;r*   rg   c                     t          j        t          j        |          t          j        |           g          \  }}t          j        ||fd                              dd|| df                                          S ri   rj   rn   s       r'   rK   zIBin._make_grid  rq   r*   )r   r   r   r   r~   r   r   s   @r'   r   r     s        FFJ J J J J J.(< (< (<T H H H \H H H H Hr*   r   c                   r     e Zd Zd fd	ZddZddZddZdd	Zdd
ZddZ	d Z
d ZddZd ZddZ xZS )Modelyolor-csp-c.yamlr@   Nc                 j   t          t          |                                            d| _        t	          |t
                    r|| _        nedd l}t          |          j        | _	        t          |          5 }|                    ||j                  | _        d d d            n# 1 swxY w Y   | j                            d|          x}| j        d<   |rF|| j        d         k    r5t                              d| j        d          d|            || j        d<   |r4t                              d|            t!          |          | j        d	<   t#          t%          | j                  |g
          \  | _        | _        d t+          | j        d                   D             | _        | j        d         }t	          |t.                    rdt1          j        fd|                     t1          j        d|                    D                       |_        t;          |           |xj        |j                            ddd          z  c_        |j        | _        |                                   t	          |tB                    rdt1          j        fd|                     t1          j        d|                    D                       |_        t;          |           |xj        |j                            ddd          z  c_        |j        | _        |                                   t	          |tD                    rdt1          j        fd|                     t1          j        d|                    d d         D                       |_        t;          |           |xj        |j                            ddd          z  c_        |j        | _        | #                                 t	          |tH                    rdt1          j        fd|                     t1          j        d|                    D                       |_        t;          |           |xj        |j                            ddd          z  c_        |j        | _        | %                                 t	          |tL                    rdt1          j        fd|                     t1          j        d|                    D                       |_        t;          |           |xj        |j                            ddd          z  c_        |j        | _        | '                                 tQ          |            |                                  t                              d           d S )NFr   )Loaderr;   r-   zOverriding model.yaml nc=z	 with nc=z+Overriding model.yaml anchors with anchors=r   )r;   c                 ,    g | ]}t          |          S r   )str)r$   r\   s     r'   
<listcomp>z"Model.__init__.<locals>.<listcomp>  s    ===c!ff===r*   r      c                 0    g | ]}|j         d          z  S rH   r$   r%   ss     r'   r   z"Model.__init__.<locals>.<listcomp>  #    $e$e$eQ_$e$e$er*   r   c                 0    g | ]}|j         d          z  S r   r   r   s     r'   r   z"Model.__init__.<locals>.<listcomp>   r   r*   c                 0    g | ]}|j         d          z  S r   r   r   s     r'   r   z"Model.__init__.<locals>.<listcomp>(  s#    $i$i$iQ_$i$i$ir*   rA   c                 0    g | ]}|j         d          z  S r   r   r   s     r'   r   z"Model.__init__.<locals>.<listcomp>1  r   r*   c                 0    g | ]}|j         d          z  S r   r   r   s     r'   r   z"Model.__init__.<locals>.<listcomp>9  r   r*    ))r+   r   r,   traced
isinstancedictyamlPathname	yaml_fileopenload
SafeLoadergetloggerinforoundparse_modelr   modelsaverG   namesr   r0   r3   rf   r1   rQ   r   r   r5   _initialize_biasesr   r   _initialize_aux_biasesr   _initialize_biases_binr   _initialize_biases_kptr   )
r&   cfgr;   r-   r   r  fr9   r   r=   s
           @r'   r,   zModel.__init__  s`   eT##%%%c4   	ADIIKKK!#YY^DNc Aa IIaI@@	A A A A A A A A A A A A A A A  $y}}T2666TYt_ 	!"	$''KKRDIdORRbRRSSS DIdO 	2KKOgOOPPP#(>>DIi  +HTY,?,?RD I I I
DI==eDIdO&<&<===
 JrNa   	&A|$e$e$e$edll5;WXZ\^_abKcKc>d>d$e$e$effAHq!!!IIr1a000II(DK##%%%a!! 	&A|$e$e$e$edll5;WXZ\^_abKcKc>d>d$e$e$effAHq!!!IIr1a000II(DK##%%%a$$ 	*A|$i$i$i$idll5;WXZ\^_abKcKc>d>degfgeg>h$i$i$ijjAHq!!!IIr1a000II(DK'')))a 	*A|$e$e$e$edll5;WXZ\^_abKcKc>d>d$e$e$effAHq!!!IIr1a000II(DK'')))a## 	*A|$e$e$e$edll5;WXZ\^_abKcKc>d>d$e$e$effAHq!!!IIr1a000II(DK''))) 	4   		Bs   :"B((B,/B,Fc           	      L   |r|j         dd          }g d}g d}g }t          ||          D ]\  }}	t          |	r|                    |	          n||t	          | j                                                            }
|                     |
          d         }|dd dfxx         |z  cc<   |	dk    r|d         |d	         z
  |d	<   n|	d
k    r|d         |d         z
  |d<   |                    |           t          j
        |d          d fS |                     ||          S )Nr   )r   g(\?gq=
ףp?)Nr@   N)gsr   .rA   r   r   r@   r   r   )rH   zipr   flipintrQ   r   forward_oncerU   r0   rT   )r&   r%   augmentprofileimg_sizer   r  ra   sifixiyis               r'   rf   zModel.forwardE  s8    	1wrss|HAAAa)) 	 	BR6qvvbzzzQs4;??CTCT?U?UVVV&&r**1-37r!77!)!r&z!9BvJJ1WW!)!r&z!9BvJ9Q??D(($$Q000r*   c                   	 g g c	}| j         D ]}|j        dk    r;t          |j        t                    r	|j                 n	fd|j        D             t	          | d          sd| _        | j        rWt          |t                    s?t          |t                    s*t          |t                    st          |t                    r na|r,t          |t          t          t          t          f          }t          r:t          j        ||r                                nfd          d         dz  dz  nd}t          d	          D ]#} ||r                                n           $t                      }t          d	          D ]#} ||r                                n           $|                    t                      |z
  d
z             t#          d||j        |d         |j        fz              |          	                    |j        | j        v rnd            |rt#          dt-          |          z             S )Nr   c                 0    g | ]}|d k    rn|         S )r   r   )r$   jr%   ra   s     r'   r   z&Model.forward_once.<locals>.<listcomp>]  s*    8]8]8]TUa2gg1Q48]8]8]r*   r  F)inputsverboser   g    eAr   
   d   z%10.1f%10.0f%10.1fms %-40sz%.1fms total)r  r  r  r   hasattrr  r   r   r   r   r   thopr#  copyrG   r	   rU   r   nptyper\   r  sum)
r&   r%   r#  dtr9   cor^   tra   s
    `       @r'   r!  zModel.forward_onceY  s`   B2 	6 	6Asbyy(c22]AacFF8]8]8]8]8]YZY\8]8]8]4** "!{ a(( Jq',B,B jQRT^F_F_ cmnoqzc{c{ E 	Pq67J"EFFcgnDL,@AFFHHHq+BERRRSTUX[[^___mnr , ,AA!*affhhh++++%''r , ,AA!*affhhh++++		,..2c9:::2ar"vqv5NNOOO!AHH!#**QQ5555 	,.3r77*+++r*   c           	      \   | j         d         }t          |j        |j                  D ]\  }}|j                            |j        d          }|j        d d dfxx         t          	                    dd|z  dz  z            z  cc<   |j        d d dd fxx         |%t          	                    d|j
        dz
  z            n(t          j	        ||                                z            z  cc<   t          j                            |                    d          d	
          |_        d S Nr   rA        r   r   333333?Gz?Trequires_gradr  r  r9   rQ   r   r5   r"   rS   mathlogr-   r0   r5  r   	Parameterr&   cfr9   mir   bs         r'   r  zModel._initialize_biasesy      JrNah'' 	I 	IEBQT2&&AF111a4LLLDHHQ#'a%7888LLLF111abb5MMMbjTXXcQTD[&9:::eiXZ]_]c]c]e]eXeNfNffMMMh((4(HHBGG		I 	Ir*   c           	      b   | j         d         }t          |j        |j        |j                  D ]\  }}}|j                            |j        d          }|j        d d dfxx         t          
                    dd|z  dz  z            z  cc<   |j        d d dd fxx         |%t          
                    d|j        dz
  z            n(t          j
        ||                                z            z  cc<   t          j                            |                    d          d	
          |_        |j                            |j        d          }|j        d d dfxx         t          
                    dd|z  dz  z            z  cc<   |j        d d dd fxx         |%t          
                    d|j        dz
  z            n(t          j
        ||                                z            z  cc<   t          j                            |                    d          d	
          |_        d S r;  )r  r  r9   r   rQ   r   r5   r"   rS   rC  rD  r-   r0   r5  r   rE  )r&   rG  r9   rH  mi2r   rI  b2s           r'   r  zModel._initialize_aux_biases  s    JrNac1422 	K 	KJBQQT2&&AF111a4LLLDHHQ#'a%7888LLLF111abb5MMMbjTXXcQTD[&9:::eiXZ]_]c]c]e]eXeNfNffMMMh((4(HHBGqtR((BGAAAqDMMMTXXa37q.&8999MMMGAAAqrrENNNrzdhhsadTk':;;;uyY[^`^d^d^f^fYfOgOggNNNx))"''"++T)JJCHH	K 	Kr*   c           	      ^   | j         d         }|j        }t          |j        |j                  D ]|\  }}|j                            |j        d          }|d d ddd|dz   ff         j        }d|z  dz   }|d d d |f         xj        t          
                    d|dz   dz
  z            z  c_        |d d |f         xj        t          
                    d	d
|z  dz  z            z  c_        |d d |dz   d f         xj        |%t          
                    d|j        dz
  z            n(t          j
        ||                                z            z  c_        ||d d ddd|dz   ff         _        t          j                            |                    d          d          |_        ~d S )Nr   r   r   r   r@   rA   r>  r?  r<  r=  Tr@  )r  r   r  r9   rQ   r   r5   r"   rS   rC  rD  r-   r0   r5  r   rE  )	r&   rG  r9   bcrH  r   rI  oldobj_idxs	            r'   r  zModel._initialize_biases_bin  s    JrN[ah'' 	I 	IEBQT2&&AAAA!Abd|O$)Cd1fGaaa'kN488C26D=,A#B#BBaaajM$((1aA~+=">">>aaa'!)o##
txxqtd{0C'D'D'DX]XabdgigmgmgogoboXpXpp##&)Aaaa!Aa1o#h((4(HHBGG	I 	Ir*   c           	      \   | j         d         }t          |j        |j                  D ]\  }}|j                            |j        d          }|j        d d dfxx         t          	                    dd|z  dz  z            z  cc<   |j        d d dd fxx         |%t          	                    d|j
        dz
  z            n(t          j	        ||                                z            z  cc<   t          j                            |                    d          d	
          |_        d S r;  rB  rF  s         r'   r  zModel._initialize_biases_kpt  rJ  r*   c                    | j         d         }|j        D ]}|j                                                            |j        d          j        }t          d|j        j	        d         g|d d         
                    d                                          |dd          
                                R z             d S )Nr   z4%6g Conv2d.bias:%10.3g%10.3g%10.3g%10.3g%10.3g%10.3gr   r   )r  r9   r   detachr5   r"   Tr   r   rH   meantolist)r&   r9   rH  rI  s       r'   _print_biaseszModel._print_biases  s    JrN# 	u 	uB  %%adB//1A49K8saPRQRPRejjYZmmNbNbNdNd8sfghihjhjfkfpfpfrfr8s8sstttt	u 	ur*   c                 h   t          d           | j                                        D ]}t          |t                    r|                                 ,t          |t                    r|                                 Vt          |          t          u rLt          |d          r<t          |j        |j                  |_        t          |d           |j        |_        t          |t"          t$          f          r |                                 |j        |_        |                                  | S )NzFusing layers... bn)r   r  modulesr  RepConvfuse_repvgg_blockRepConv_OREPAswitch_to_deployr4  r   r0  r
   convrZ  delattrr   rf   r   r   r   r  r&   r9   s     r'   r   z
Model.fuse  s	   !"""##%% 	* 	*A!W%% *##%%%%A}-- 	*""$$$$aDWQ%5%5)!&!$774   M		A455 *M			r*   Tc                    t          | j        d                   t          u }|ry|swt          d           t                      }d|_        | j        d         j        dz   |_        | j                            d|j        z  |           |                                  n'|s%|r#t          d           | j        d d         | _        | S )Nr   zAdding NMS... r   z%s)r	  modulezRemoving NMS... )r4  r  NMSr   r  r\   
add_moduleeval)r&   modepresentr9   s       r'   nmsz	Model.nms  s    tz"~&&#- 		) 		)"###AAC*R."Q&ACJ!!tacz!!<<<IIKKKK 	)' 	)$%%%CRCDJr*   c                 h    t          d           t          |           }t          || dd           |S )NzAdding autoShape... )r  r-   hypr  rQ   r   )includeexclude)r   	autoShaper   rb  s     r'   	autoshapezModel.autoshape  s:    $%%%dOO!T#KUWXXXXr*   r=  c                 (    t          | ||           d S r   )r   )r&   r-  r$  s      r'   r  z
Model.info  s    4(+++++r*   )r   r@   NN)FF)Fr   )T)Fr=  )r   r   r   r,   rf   r!  r  r  r  r  rX  r   rj  rp  r  r   r   s   @r'   r   r     s%       F F F F F FP1 1 1 1(   @I I I IK K K KI I I II I I Iu u u  &     , , , , , , , ,r*   r   c                  X   t                               ddz             | d         | d         | d         | d         f\  }}}}t          |t                    rt	          |d                   dz  n|}||d	z   z  }g g d
         }
}	}t          | d         | d         z             D ]\  \  }}t          t                    rt                    nt                    D ]6\  }}	 t          |t                    rt          |          n||<   0#  Y 4xY w|dk    r t          t          ||z            d          n|}g t          j        t          t          t          t          t           t"          t$          t&          t(          t*          t,          t.          t0          t2          t4          t6          t8          t:          t<          t>          t@          tB          tD          tF          tH          tJ          tL          tN          tP          tR          tT          tV          tX          tZ          t\          t^          t`          tb          td          tf          th          tj          tl          tn          tp          tr          tt          tv          tx          tz          t|          t~          t          R v r	|         d         }
}|
|k    rt          |
|z  d          }
||
gdd          t&          t,          t.          t<          t>          t@          tD          tF          tH          tL          tN          tP          tT          tV          tX          t\          t^          t`          td          tf          th          tl          tn          tp          tt          tv          tx          t|          t~          t          fv rB                    d|           d}nt          jC        u r|         gnkt          u rt          fd|D                       }
nEt          u rt          fd|D                       }
nt          u r|d                  }
nt          u r|         dz  }
nt          t          t          t          t          fv rvN                    fd|D                        t          d         t                    r9t          t          d         dz                      gt	          |          z  d<   nYt          u r|         dz  }
nDt          u r|         d         dz  z  }
n&t          u r|         d         dz  z  }
n|         }
|dk    r(t          jT        fdt          |          D              n  }t                    dd         U                    dd          }t          d |V                                D                       }|||f\  |_W        |_X        |_Y        |_Z        t                               d||||fz             |	[                    fdt          |t                    r|gn|D                        |N                    |           dk    rg N                    |
           t          jT        | t          |	          fS )Nz
%3s%18s%3s%10s  %-40s%-30s)r  fromnparamsrd  	argumentsr   r-   depth_multiplewidth_multipler   r   r   r   backboneheadr   r<  c                      g | ]
}|         S r   r   r$   r%   r;   s     r'   r   zparse_model.<locals>.<listcomp>      '''be'''r*   c                      g | ]
}|         S r   r   r|  s     r'   r   zparse_model.<locals>.<listcomp>  r}  r*   c                      g | ]
}|         S r   r   r|  s     r'   r   zparse_model.<locals>.<listcomp>  s    ***1A***r*   rA   c                     g | ]}  S r   r   )r$   r^   argsr9   s     r'   r   zparse_model.<locals>.<listcomp>#  s    888!QQX888r*   r   z	__main__.r  c                 6    g | ]}|                                 S r   )numelr   s     r'   r   zparse_model.<locals>.<listcomp>%  s     555!''))555r*   z%3s%18s%3s%10.0f  %-40s%-30sc              3   .   K   | ]}|d k    |z  V  dS )r   Nr   )r$   r%   r\   s     r'   r(   zparse_model.<locals>.<genexpr>(  s+      QQabAEQQr*   )]r  r  r  listr.   	enumerater   rg  r   r  r   r    r   
RobustConvRobustConv2r   	GhostConvr\  r^  DownCSPPSPPFSPPCSPCGhostSPPCSPC	MixConv2dFocusStem	GhostStem	CrossConv
BottleneckBottleneckCSPABottleneckCSPBBottleneckCSPCRepBottleneckRepBottleneckCSPARepBottleneckCSPBRepBottleneckCSPCResResCSPAResCSPBResCSPCRepRes
RepResCSPA
RepResCSPB
RepResCSPCResXResXCSPAResXCSPBResXCSPCRepResXRepResXCSPARepResXCSPBRepResXCSPCGhost	GhostCSPA	GhostCSPB	GhostCSPCSwinTransformerBlockSTCSPASTCSPBSTCSPCSwinTransformer2BlockST2CSPAST2CSPBST2CSPCr   insertBatchNorm2dConcatr5  ChuncatShortcutFoldcutr   r   r   r   r   rU   r   rG   ReOrgContractExpandr   replace
parametersr\   r  r4  r3  extendsorted)dr;   r   r-   gdgwr"   r!   layersr  r   r  rt  r+  r<   r   m_r9  r3  r  r\   r9   s    `                 @@@r'   r  r    s)   
KK.1ccdddI,$3C1DaHXFYYGRR#-gt#<#<	I#gaj//Q

'B	rAvB2r"v"DF'*&	(ABB E E?Aq!T!!S))0DGGGqdOO 	 	DAq%/3%7%7>$q'''QQ%&UUCa"fq!!! 
C 
CD 
C* 
Ck 
C6 
C9 
Cg 
CWd 
Cfk 
C
C
C#
C%1
C3<
C>C
CEI
CKT
CV_
C
C+
C-;
C=K
C 
C !2
C 4E
C GX
C 	
C 	
C  '	
C )0	
C
 
C
 $
C
 &0
C
 2<
C 
C  
C "*
C ,4
C 
C &
C (3
C 5@
C 
C "
C $-
C /8
C &
C (.
C 06
C 8>
C '
C )0
C 29
C ;B
C 
C 
C 
C UDGBRxx#BGQ//&T!""X&DUG\#^^&(9;LgwZx +{	9VVgw	0 	0 	0 Aq!!!".  qE7DD&[[''''Q'''((BB'\\''''Q'''((BB(]]AaDBB'\\A!BB67Ji@@@KK*******+++$q'3'' >d1gk 2 2334s1vv=Q%ZZABB(]]AaA%BB&[[A$q'Q,&BBAB=>UUR]88888uQxx888994FF1R4L  b1155R]]__55566%&1b["bdBGRU2aAr1d5KKLLLQQQQ:a+=+=$DQCC1QQQQQQb66B
		"=&!6$<<//s   ,)DD__main__z--cfgr   z
model.yaml)r4  defaulthelpz--devicer  z%cuda device, i.e. 0 or 0,1,2,3 or cpu)r  r  z	--profile
store_truezprofile model speed)actionr  r   r@   r=  T)r#  )7argparseloggingsysr2  r   pathrU   	getLoggerr   r  r0   models.commonmodels.experimentalutils.autoanchorr   utils.generalr   r   r   utils.torch_utilsr	   r
   r   r   r   r   r   
utils.lossr   r1  ImportErrorr   Moduler   r   r   r   r   r   r  ArgumentParserparseradd_argumentr   
parse_argsoptr  rM   rL   r  trainr#  randimgra   r   r*   r'   <module>r     s     



          		8	$	$      ! ! ! ! / / / / / / A A A A A A A A A A                  ! ! ! ! ! !KKKK   DDDG G G G GRY G G GTn n n n nbi n n nbbH bH bH bH bH	 bH bH bHJw w w w w w w wtHH HH HH HH HH29 HH HH HHVa, a, a, a, a,BI a, a, a,HM0 M0 M0` z$X$&&F
c3ELYYY

B5\]]]
L?TUUU




Cj!!CGKMMM]3:&&F E#'NNf%%E	KKMMM
{ %ejAsC((++F33E#t$$$! % %s   2A7 7B B