Paper Title
Authors (Affliates)
[paper][blog][code][project]
•
Dataset: SpaceNet6
Overall Flow
•
Content
Detailed Flow
Dynamic_Copy_paste
특정 클래스 (query_cat)
코드 전체 보기
# 이미지와 label을 2장 겹쳐놓은 것을 반으로 나눔
images_sup, paste_imgs = torch.chunk(images_sup, 2, dim=1)
labels_sup, paste_labels = torch.chunk(labels_sup, 2, dim=1)
for idx, batch in enumerate(zip(paste_labels, images_sup, labels_sup)):
paste_label, image_sup, label_sup = batch
Python
복사
image_sup[0]
label_sup
paste_img[0]
paste_label
# torch.unique(paste_label) = [0,1,255]
alpha = torch.zeros_like(paste_label).int()
for cat in query_cat: # query_cat = [0]
alpha = alpha.__or__((paste_label == cat).int())
alpha = (alpha > 0).int()
Python
복사
alpha
•
Tensor.__or__((condition).int()) 는 처음 보는데, bitwise 연산이라고 한다.
간단한 텐서를 정의해 실험을 해봤다.
compose_img = (1 - alpha) * image_sup + alpha * paste_img
compose_label = (1 - alpha) * label_sup + alpha * paste_label
...
return compose_imgs, compose_labels
Python
복사
덮어쓰기 연산.
compose_img
compose_label
•
즉, paste_img 에서 alpha의 하얀 부분대로 오려 image_sup에 덮어씌워 준 것이다.
•
SAR 영상에 적용을 해보니 상당히 난해하다.
acm: Adaptive Cutmix
UNSUPERVISED 기반이므로 어느정도 학습이 된 후 따라가야 할듯
코드: acm
코드: generate_cutmix_mask
코드: generate_cutmix
코드: update_cutmix_bank
Consistency loss
with torch.no_grad():
if acp or acm or sample:
category_entropy = cal_category_confidence(
preds_student_super[0].detach(),
preds_student_unsup[0].detach(),
labels_super,
preds_teacher_unsup,
num_classes
)
# perform momentum update :: category_entropy = tensor([0.4116, 0.6009]) | class_momentum = 0.999 (Hyperparameter)
class_criterion = class_criterion * class_momentum + category_entropy * (1 - class_momentum)
...
elif sample: # True
loss_consistency1 = criterion_consistency(preds_student_super[0], confid_teacher_super, output_teacher_super, class_criterion[0])
loss_consistency2 = criterion_consistency(preds_student_unsup[0], confid_teacher_unsup, output_teacher_unsup, class_criterion[0])
loss_consistency = loss_consistency1 + loss_consistency2
Python
복사
코드: cal_category_confidence