
    Ngf                     :    d dl Z d dlmZ d	dZd	dZd	dZd
dZdS )    N)	OmegaConfc           	         	 t          j                    }|pd}| z
  dz   } fdt          |          D             		fd}	fd}t          j        |          }g |_        t          |dz
   dz
  d          D ]_}|j                            | ||           ||dz             g|d           	|                             t          |                     `t           dz   |dz             D ]a}|j                            | ||           ||dz
            gz   |d           	|                             t          |                     b|S )zBiFPN config.
    Adapted from https://github.com/google/automl/blob/56815c9986ffd4b508fe1d68508e268d129715c1/efficientdet/keras/fpn_configs.py
    fastattn   c                     i | ]	}|z   |g
S  r   .0i	min_levels     T/var/www/html/ai-engine/env/lib/python3.11/site-packages/effdet/config/fpn_config.py
<dictcomp>z bifpn_config.<locals>.<dictcomp>   !    >>>q	As>>>    c                      |          d         S Nr   levelnode_idss    r   <lambda>zbifpn_config.<locals>.<lambda>       (5/""5 r   c                     |          S Nr   r   s    r   r   zbifpn_config.<locals>.<lambda>       (5/ r   r   
feat_levelinputs_offsetsweight_methodr   createrange	itertoolscountnodesappendnext)
r   	max_levelr   p
num_levelslevel_last_idlevel_all_idsid_cntr   r   s
   `        @r   bifpn_configr.      s    	A!/ZMY&*J>>>>E*,=,=>>>H5555M1111M_Z((FAG9q=)a-44 ) )	,}Q//q1u1E1EF*
 
 	 	 	
 	4<<((((9q=)a-00 ) )	+mA..--A2F2F1GG*
 
 	 	 	
 	4<<((((Hr   c                    	 t          j                    }|pd}| z
  dz   } fdt          |          D             		fd}t          j        |          }g |_        t          | dz
  d          D ]s}||k    r ||           ||dz             gn ||          g}|j                            |||d           	|                             t          |                     tt           |dz             D ]s}| k    r ||           ||dz
            gn ||          g}|j                            |||d           	|                             t          |                     t|S )zPAN FPN config.

    This defines FPN layout from Path Aggregation Networks as an alternate to
    BiFPN, it does not implement the full PAN spec.

    Paper: https://arxiv.org/abs/1803.01534
    r   r   c                     i | ]	}|z   |g
S r   r   r	   s     r   r   z!panfpn_config.<locals>.<dictcomp>5   r   r   c                      |          d         S r   r   r   s    r   r   zpanfpn_config.<locals>.<lambda>6   r   r   r   r   r    )
r   r(   r   r)   r*   r+   r-   r   offsetsr   s
   `        @r   panfpn_configr3   )   s    	A!/ZMY&*J>>>>E*,=,=>>>H5555M_Z((FAG9i!mR00 ) )>?9nn==##]]1q5%9%9::S`S`abScScRd	%*
 
 	 	 	
 	4<<((((9i!m,, ) )>?9nn==##]]1q5%9%9::S`S`abScScRd	%*
 
 	 	 	
 	4<<((((Hr   c           	          t          j                    }|pd}d}| z
  dz   } fdt          |          D             fd}fd}fd}t          j        |          }	g |_        t          |dz
   dz
  d          D ]_}
|j                            |
 ||
           ||
dz             g|d           |
                             t          |	                     `|                             |         d                    t           dz   |          D ]a}
|j                            |
 ||
           ||
dz
            gz   |d           |
                             t          |	                     b|}
|j                            |
 ||
          g ||
dz
            gz   |d           |
                             t          |	                                                             d                    t           dz   |dz   d          D ]v}
|j                            |
 ||
          |
 dz   k    r ||
dz
            n ||
dz
            g|d           |
                             t          |	                     w                                        d                    t          |dz
   d          D ]u}
|j                            |
|
         d	         g|
         d         gz    ||
dz             gz   |d           |
                             t          |	                     v }
|j                            |
|
         d	         g ||
dz             gz   |d           |
                             t          |	                     |                             |         d                    t           |dz             D ]b}
|j                            |
|
         d
         |
         d         g|d           |
                             t          |	                     c|S )a  A dynamic quad fpn config that can adapt to different min/max levels.

    It extends the idea of BiFPN, and has four paths:
        (up_down -> bottom_up) + (bottom_up -> up_down).

    Paper: https://ieeexplore.ieee.org/document/9225379
    Ref code: From contribution to TF EfficientDet
    https://github.com/google/automl/blob/eb74c6739382e9444817d2ad97c4582dbe9a9020/efficientdet/keras/fpn_configs.py
    r   r   c                     i | ]	}|z   |g
S r   r   r	   s     r   r   z qufpn_config.<locals>.<dictcomp>_   r   r   c                      |          d         S r   r   r   s    r   r   zqufpn_config.<locals>.<lambda>`   r   r   c                     |          S r   r   r   s    r   r   zqufpn_config.<locals>.<lambda>a   r   r   c                      |          d         S )Nr   r   r   s    r   r   zqufpn_config.<locals>.<lambda>b   s    8E?1#5 r   r   r   r         r    )r   r(   r   r)   quad_methodr*   r+   r,   level_first_idr-   r   r   s   `          @r   qufpn_configr=   Q   s    	A!/ZMKY&*J>>>>E*,=,=>>>H5555M1111M5555N_Z((FAG9q=)a-44 ) )	,}Q//q1u1E1EF*
 
 	 	 	
 	4<<((((Yx	2267779q=),, ) )	+mA..--A2F2F1GG*
 
 	 	 	
 	4<<((((AGNN)>!,,-q1u1E1E0FF&    
 QKtF||$$$Yx	2267779q=)a-33 ) )	q!!1	A;M;M==Q#7#7#7SaSabcfgbgShShj*	
 
 	 	 	 	4<<((((Yx	2267779q=)R00 ) )	'{1~.(1+b/1BBmmTUXYTYFZFZE[[*
 
 	 	 	
 	4<<((((AGNN#A;q>*mmAE.B.B-CC&    
 QKtF||$$$Yx	226777 9i!m,, ) )	'{1~x{1~>(
 
 	 	 	
 	4<<((((Hr         c                    | sd} t          ||d          t          ||d          t          ||d          t          ||d          t          ||d          t          ||d          t          ||d          d}||          S )Nbifpn_fasum)r   r(   r   attnr   )	bifpn_sum
bifpn_attnrA   pan_sumpan_fa	qufpn_sumqufpn_fa)r.   r3   r=   )fpn_namer   r(   name_to_configs       r   get_fpn_configrL      s     !IZ_```"Y)[abbb 9	Ycddd 9	Y^___)yXbccc!IZ_``` 9	Ycddd N (##r   r   )r>   r?   )r#   	omegaconfr   r.   r3   r=   rL   r   r   r   <module>rN      s                    F% % % %PX X X Xv$ $ $ $ $ $r   