Skip to content
Back to skills

Focal Loss

ASecurity

Alpha-weighted focal loss that down-weights easy examples to focus training on hard, misclassified pixels in imbalanced segmentation tasks.

  • 61 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
developmentpythongit

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill focal-loss --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Focal Loss?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Focal Loss
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-focal-loss/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-focal-loss)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cv-focal-loss
description: >
  Alpha-weighted focal loss that down-weights easy examples to focus training on hard, misclassified pixels in imbalanced segmentation tasks.
---
# Focal Loss

## Overview

Focal loss addresses extreme class imbalance in segmentation (e.g., defects covering <1% of pixels). Standard BCE treats all pixels equally, so the loss is dominated by easy negatives. Focal loss adds a modulating factor `(1-p_t)^gamma` that suppresses the contribution of well-classified examples. With `gamma=2`, a pixel classified at 0.9 confidence contributes 100x less loss than one at 0.5. Combined with alpha-weighting for positive/negative balance, focal loss typically improves recall on rare classes by 5-15%.

## Quick Start

```python
import torch
import torch.nn as nn
import torch.nn.functional as F

class FocalLoss(nn.Module):
    def __init__(self, alpha=0.8, gamma=2.0):
        super().__init__()
        self.alpha = alpha
        self.gamma = gamma

    def forward(self, inputs, targets):
        inputs = torch.sigmoid(inputs).view(-1)
        targets = targets.view(-1)
        bce = F.binary_cross_entropy(inputs, targets, reduction='none')
        p_t = inputs * targets + (1 - inputs) * (1 - targets)
        focal_weight = self.alpha * (1 - p_t) ** self.gamma
        return (focal_weight * bce).mean()

# Usage
criterion = FocalLoss(alpha=0.8, gamma=2.0)
loss = criterion(logits, masks)
```

## Workflow

1. Apply sigmoid to raw logits
2. Compute per-pixel binary cross-entropy
3. Compute modulating factor `(1-p_t)^gamma` to down-weight easy examples
4. Scale by alpha for positive/negative class balance
5. Average over all pixels

## Key Decisions

- **Gamma**: 2.0 is standard; higher (3-5) for extreme imbalance, lower (0.5-1) for mild
- **Alpha**: 0.8 gives more weight to positives (minority class); tune on validation
- **vs BCE**: Use focal when positive pixels are <5% of total; BCE is fine for balanced masks
- **Combining**: Can add to Dice loss for a focal-dice hybrid

## References

- [Loss Function Library - Keras & PyTorch](https://www.kaggle.com/code/bigironsphere/loss-function-library-keras-pytorch)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…