- prediction/image/ FastAPI 서버 Docker 환경 구성 - Dockerfile: PyTorch 2.1 + CUDA 12.1 기반 GPU 이미지 - docker-compose.yml: GPU 할당 + 데이터 볼륨 마운트 - requirements.txt: 서버 의존성 목록 - .env.example: 환경변수 템플릿 - DOCKER_USAGE.md: 빌드/실행/API 사용법 문서 - Dockerfile에 .dockerignore 제외 폴더 mkdir -p 추가 - .gitignore: prediction/image 결과물 및 모델 가중치(.pth) 제외 추가 - dbInsert_csv.py, dbInsert_shp.py 삭제 (미사용 DB 로직) - api.py: dbInsert import 및 주석 처리된 DB 호출 코드 제거 - aerialRouter.ts: req.params 타입 오류 수정
79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
# Copyright (c) OpenMMLab. All rights reserved.
|
|
import pytest
|
|
import torch
|
|
|
|
from mmseg.core import OHEMPixelSampler
|
|
from mmseg.models.decode_heads import FCNHead
|
|
|
|
|
|
def _context_for_ohem():
|
|
return FCNHead(in_channels=32, channels=16, num_classes=19)
|
|
|
|
|
|
def _context_for_ohem_multiple_loss():
|
|
return FCNHead(
|
|
in_channels=32,
|
|
channels=16,
|
|
num_classes=19,
|
|
loss_decode=[
|
|
dict(type='CrossEntropyLoss', loss_name='loss_1'),
|
|
dict(type='CrossEntropyLoss', loss_name='loss_2')
|
|
])
|
|
|
|
|
|
def test_ohem_sampler():
|
|
|
|
with pytest.raises(AssertionError):
|
|
# seg_logit and seg_label must be of the same size
|
|
sampler = OHEMPixelSampler(context=_context_for_ohem())
|
|
seg_logit = torch.randn(1, 19, 45, 45)
|
|
seg_label = torch.randint(0, 19, size=(1, 1, 89, 89))
|
|
sampler.sample(seg_logit, seg_label)
|
|
|
|
# test with thresh
|
|
sampler = OHEMPixelSampler(
|
|
context=_context_for_ohem(), thresh=0.7, min_kept=200)
|
|
seg_logit = torch.randn(1, 19, 45, 45)
|
|
seg_label = torch.randint(0, 19, size=(1, 1, 45, 45))
|
|
seg_weight = sampler.sample(seg_logit, seg_label)
|
|
assert seg_weight.shape[0] == seg_logit.shape[0]
|
|
assert seg_weight.shape[1:] == seg_logit.shape[2:]
|
|
assert seg_weight.sum() > 200
|
|
|
|
# test w.o thresh
|
|
sampler = OHEMPixelSampler(context=_context_for_ohem(), min_kept=200)
|
|
seg_logit = torch.randn(1, 19, 45, 45)
|
|
seg_label = torch.randint(0, 19, size=(1, 1, 45, 45))
|
|
seg_weight = sampler.sample(seg_logit, seg_label)
|
|
assert seg_weight.shape[0] == seg_logit.shape[0]
|
|
assert seg_weight.shape[1:] == seg_logit.shape[2:]
|
|
assert seg_weight.sum() == 200
|
|
|
|
# test multiple losses case
|
|
with pytest.raises(AssertionError):
|
|
# seg_logit and seg_label must be of the same size
|
|
sampler = OHEMPixelSampler(context=_context_for_ohem_multiple_loss())
|
|
seg_logit = torch.randn(1, 19, 45, 45)
|
|
seg_label = torch.randint(0, 19, size=(1, 1, 89, 89))
|
|
sampler.sample(seg_logit, seg_label)
|
|
|
|
# test with thresh in multiple losses case
|
|
sampler = OHEMPixelSampler(
|
|
context=_context_for_ohem_multiple_loss(), thresh=0.7, min_kept=200)
|
|
seg_logit = torch.randn(1, 19, 45, 45)
|
|
seg_label = torch.randint(0, 19, size=(1, 1, 45, 45))
|
|
seg_weight = sampler.sample(seg_logit, seg_label)
|
|
assert seg_weight.shape[0] == seg_logit.shape[0]
|
|
assert seg_weight.shape[1:] == seg_logit.shape[2:]
|
|
assert seg_weight.sum() > 200
|
|
|
|
# test w.o thresh in multiple losses case
|
|
sampler = OHEMPixelSampler(
|
|
context=_context_for_ohem_multiple_loss(), min_kept=200)
|
|
seg_logit = torch.randn(1, 19, 45, 45)
|
|
seg_label = torch.randint(0, 19, size=(1, 1, 45, 45))
|
|
seg_weight = sampler.sample(seg_logit, seg_label)
|
|
assert seg_weight.shape[0] == seg_logit.shape[0]
|
|
assert seg_weight.shape[1:] == seg_logit.shape[2:]
|
|
assert seg_weight.sum() == 200
|