Files
tiny_object_detection/tests/test_torch.py
T
u52f85420 04bf90c09b feat: 导入 IRSTD 研究代码与文档(小目标检测)
- 新增 irstd 核心包、scripts、tests、configs
- 新增研究文档:literature_review / mathematical_analysis / novelty_matrix / experiment_plan / research_decision / research_log / manuscript_outline
- 新增 evidence、results 数据与审计产物
- 新增 pyproject.toml、requirements、.gitignore
2026-11-01 10:10:33 +00:00

19 lines
1021 B
Python

import unittest,importlib.util
AVAILABLE=importlib.util.find_spec('torch') is not None
@unittest.skipUnless(AVAILABLE,'PyTorch is unavailable; gradient/training tests NOT executed')
class TorchTests(unittest.TestCase):
def test_shapes_and_gradient(self):
import torch
from irstd.models import TinyUNet,segmentation_loss
model=TinyUNet();x=torch.randn(1,1,17,19);y=torch.zeros_like(x);y[:,:,8,9]=1
for name in ['bce','dice','bce_dice','focal','iou']:
model.zero_grad();z=model(x);self.assertEqual(z.shape,x.shape)
loss=segmentation_loss(z,y,name);loss.backward();self.assertTrue(torch.isfinite(loss))
self.assertTrue(all(torch.isfinite(p.grad).all() for p in model.parameters()))
def test_gate_gradients(self):
import torch
from irstd.models import gate_loss
s=torch.tensor([0.,0.],requires_grad=True)
loss,upper=gate_loss(s,torch.tensor([1.,0.]),torch.tensor([4.,1.]),1.,.1)
loss.backward();self.assertLess(s.grad[0],0);self.assertGreater(s.grad[1],0);self.assertAlmostEqual(upper.item(),1.)