나는 그들의 분할 네트워크를 훈련시키기 위해 "Bootstrapped Cross Entropy Loss"라는 것을 사용하는 몇몇 논문을 읽었습니다. 아이디어는 특히 쉬운 픽셀이 지배적 일 때 학습 성능을 향상시키기 위해 픽셀의 가장 어려운 k % (예 : 15 %)에만 초점을 맞추는 것입니다.
현재 표준 교차 엔트로피를 사용하고 있습니다.
loss = F.binary_cross_entropy(mask, gt)
PyTorch에서 어떻게 이것을 부트 스트랩 버전으로 효율적으로 변환합니까?
종종 우리는 손실에 "준비"기간을 추가하여 네트워크가 먼저 쉬운 지역에 적응하고 더 어려운 지역으로 이동하는 방법을 배울 수 있도록합니다.
이 구현은 k=100
20000 반복 에서 시작하여 계속 된 다음 k=15
다른 50000 반복 을 위해 선형으로 감소합니다 .
class BootstrappedCE(nn.Module):
def __init__(self, start_warm=20000, end_warm=70000, top_p=0.15):
super().__init__()
self.start_warm = start_warm
self.end_warm = end_warm
self.top_p = top_p
def forward(self, input, target, it):
if it < self.start_warm:
return F.cross_entropy(input, target), 1.0
raw_loss = F.cross_entropy(input, target, reduction='none').view(-1)
num_pixels = raw_loss.numel()
if it > self.end_warm:
this_p = self.top_p
else:
this_p = self.top_p + (1-self.top_p)*((self.end_warm-it)/(self.end_warm-self.start_warm))
loss, _ = torch.topk(raw_loss, int(num_pixels * this_p), sorted=False)
return loss.mean(), this_p
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다