
    Yh                     R    d dl Z d dlmZ d dlmc mZ  G d dej                  ZdS )    Nc                   ^     e Zd Z fdZd Zd ZddZd Zd Zd	 Z	d
 Z
d ZddZd Z xZS )PSS_Lossc                     t          t          |                                            d| _        t	          d|z   dz             | _        d S )Ngư>zself._loss)superr   __init__epseval	criterion)selfcls_loss	__class__s     q/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/easyocr/DBNet/decoders/pss_loss.pyr   zPSS_Loss.__init__   sC    h&&(((g07:;;    c                     t          j        ||z  |z            }t          j        ||z            t          j        ||z            z   | j        z   }dd|z  |z  z
  }|dk    rt          ||           |S )N          @)torchsumr	   print)r   predgtmintersectionunionlosss          r   	dice_losszPSS_Loss.dice_loss   sv    yb++	$q&!!EIbdOO3dh>3|#E))!88,&&&r   c                    |dk    |dk    z  }|dk    |dk    z  }|                                                                                                 }|                                                                                                 }|dk    s	||dz  k     r|                     |||          S t	          |dz            }||         }||         }	t          j        |	d          \  }
}|
d |         }|                                }|j        	                    d           |
                                }|                                }|j        	                    d           |
                                }t          j        ||f          }t          j        ||f          }t          j        ||z            }t          j        |          t          j        |          z   | j        z   }dd|z  |z  z
  }|S )	Nr   r   g      @   T)
descendingg      ?r   )floatr   itemr   intr   sortclonedatafill_detachcatr	   )r   r   r   r   	pos_index	neg_indexpos_numneg_numpos_predneg_predneg_sort_sampled_neg_predpos_gtneg_gttpredtgtr   r   r   s                       r   dice_ohnm_losszPSS_Loss.dice_ohnm_loss   s   1Wa(	1Wa(	//##''))..00//##''))..00a<<7WS[00>>$A...'!)nnGIHIH*X$???KHa'1^^%%FKc"""]]__F%++--FKa   ]]__FIx)9:;;E)VV,--C 9US[11LIe$$uy}}4tx?Es\)E11Dr         ?333333?c                    |dk                                     }|dk                                     }||z  t          j        d|j        z
  |          z  d|z
  |z  t          j        |j        |          z  z   }t	          j        |||d          }	t          j        |	|z            | j        |                                z   z  }
|
dz  }
|
S )Nr   r   noneweight	reduction
   )r!   r   powr&   Fbinary_cross_entropyr   r	   )r   r   r   r   alphagammapos_maskneg_maskmasklr   s              r   
focal_losszPSS_Loss.focal_loss.   s    !G??$$!G??$$X~Ia	k5))*+,U7+Yty%00+11 "4DFKKKy1~~tx/0
r   c                 \   |                                 \  }}}t          j        |          dk    sJ ||                                         }||                                         }|dk                                    }	|	                                d|	z
                                                                  z  d|	z
                                  |	                                                                z  z   }||	                     d          z  }t          j	        |||d          }
|
S )Nr   r   r   )r>   )
sizer   maxbytesqueezer!   r   r"   rA   rB   )r   r   r   r   nhw	pos_neg_p	pos_neg_trE   r   s              r   wbce_orig_losszPSS_Loss.wbce_orig_loss9   s    ))++1a	"""""N	qvvxxL	N++--NNH113388:::\  ""X\\^^%8%8%:%::;q!!"%iAOOOr   c                 b   |dk                                     |z  }|dk                                     |z  }||                                z  |                                z  |z   }t          j        |||d          }t	          j        |          |                                | j        z   z  }|S )Nr   r   r;   r<   )r!   r   rA   rB   r   r	   )	r   r   r   r   rE   rF   rG   rH   r   s	            r   	wbce_losszPSS_Loss.wbce_lossE   s    !G??$$Q&!G??$$Q& (,,..(8<<>>9HD"4DFKKKy||QUUWWTX-.r   c                 t    t          j        |||d          }||                                | j        z   z  }|S )Nr   r<   )rA   rB   r   r	   )r   r   r   r   rH   r   s         r   bce_losszPSS_Loss.bce_lossO   s9    "4AGGG!%%''$("#r   c                 f    |                      |||          |                     |||          z   dz  S Nr   )r   rX   r   r   r   r   s       r   dice_bce_losszPSS_Loss.dice_bce_lossT   s2    tR++dmmD"a.H.HHCOOr   c                 f    |                      |||          |                     |||          z   dz  S rZ   )r7   rX   r[   s       r   dice_ohnm_bce_losszPSS_Loss.dice_ohnm_bce_lossW   s5    ##D"a004==r13M3MMQTTTr   shrinkc           	         |dk    r|                      |||          }|S |dk    ro|                      ||d d d dd d d d f         |          }|d d dd d d d f         }t          j        |d          \  }}||                     |||          z  }|S |dk    r|                      |d d d dd d d d f         |d d d dd d d d f         |          }	|d d dd d d d f         }t          j        |d          \  }}|	|                     |||          z  }	|                     |d d dd d d d f         |d d dd d d d f         |          }
|	|
fS t	          d|          S )Nr_   pss   r   both   zgt_type [%s] is not implemented)get_lossr   rL   r   NotImplementedError)r   r   r   rG   gt_typer   g_gg_pr1   pss_lossshrink_losss              r   forwardzPSS_Loss.forwardZ   s   h==r400DK==r!!!RaRAAA+==DQQQ111aaaZ.CYtQ''FCDNN3T222DK}}T!!!RaRAAA+%6111bqb!!!QQQ;NNHQQQ111aaaZ.CYtQ''FCsC666H..QQQ111aaaZ "QQQ111aaaZ.$8 8K[((&'H'RRRr   c                     t          j        d          }t          |                    d                    D ]<}||                     |d d |d d d d f         |d d |d d d d f         |          z  }=|S )Ng        r   )r   tensorrangerK   r   )r   r   r   rG   r   inds         r   re   zPSS_Loss.get_losso   s    |B1&& 	O 	OCDNN43111#5r!!!S!!!QQQ,7GNNNDDr   )r8   r9   )r_   )__name__
__module____qualname__r   r   r7   rI   rT   rV   rX   r\   r^   rl   re   __classcell__)r   s   @r   r   r      s        < < < < <
    4	 	 	 	
 
 
    
P P PU U US S S S*      r   r   )r   torch.nnnntorch.nn.functional
functionalrA   Moduler    r   r   <module>r{      s{                   n n n n nry n n n n nr   