본문 바로가기

Error 해결 및 유용한 방법들

MMdetection에서 Mask2Former Error 해결

mmdetection에서 Mask2Former를 사용시 train에는 문제가 없지만, validation시 즉 평가시 out of memory가 발생

https://github.com/open-mmlab/mmdetection/issues/9424

 

cuda out of memory when testing Mask2Former model · Issue #9424 · open-mmlab/mmdetection

Prerequisite I have searched Issues and Discussions but cannot get the expected help. I have read the FAQ documentation but cannot get the expected help. The bug has not been fixed in the latest ve...

github.com

해당 문제는 Mask2Former가 이미지에서 많은 수의 개체를 감지할 때 발생 즉, Object라고 판단되는 것들의 감지가 많은 경우에 발생 메모리 부족 에러가 발생

 

error가 발생하는 py 파일

 

/workspace/lib/mmdetection-3.0.0/mmdet/models/seg_heads/panoptic_fusion_heads/maskformer_fusion_head.py

 

해당 위치에서 메모리 부족 에러가 발생한다 따라서 수정이 필요 !!

170 번째 라인 !! 

mask_scores_per_image = (mask_pred.sigmoid() *
                                    mask_pred_binary).flatten(1).sum(1) / (
                                        mask_pred_binary.flatten(1).sum(1) + 1e-6)

 

다음 같이 수정 

try:
	mask_scores_per_image = (mask_pred.sigmoid() *
    						 mask_pred_binary).flatten(1).sum(1) / (
                             					mask_pred_binary.flatten(1).sum(1) + 1e-6)
except:
	mask_pred = mask_pred.to("cpu")
    mask_pred_binary = mask_pred_binary.to("cpu")
    mask_pred_binary = mask_pred_binary.to("cpu")

    mask_scores_per_image = (mask_pred.sigmoid() *
                             mask_pred_binary).flatten(1).sum(1) / (
                                        mask_pred_binary.flatten(1).sum(1) + 1e-6)
            
    mask_scores_per_image = mask_scores_per_image.to(torch.device("cuda"))