agyeong / Image_segmentation

Semantic Image Segmentation
1 stars 0 forks source link

모델 성능 개선 - Cut mix #11

Open agyeong opened 3 years ago

agyeong commented 3 years ago

Cut mix를 어떻게 하느냐에 따라서 성능 비교를 해볼까요? 현재 cut mix 구조는 아래 코드와 같습니다.

def cutmix(image_x, image_y, size_x, size_y):
    w, h = image_x.shape[0], image_x.shape[1]

    # 복사할 이미지 랜덤 선택
    cxs, cys = random.randint(0, w-size_x), random.randint(0, h-size_y) # copy x start / copy y start
    cxe, cye = cxs + size_x, cys + size_y # copy x end / copy y end

    # 붙여넣을 위치
    xs, ys = random.randint(0, w-size_x), random.randint(0, h-size_y) 
    xe, ye = xs + size_x, ys + size_y

    result_x = image_x.copy()
    result_y = image_y.copy()
    result_x[xs:xe, ys:ye] = image_x[cxs:cxe, cys:cye]
    result_y[xs:xe, ys:ye] = image_y[cxs:cxe, cys:cye]

    return result_x, result_y

간단하게 요약하자면, 변수가 총 2개 있습니다.

  1. cut mix 후 생성된 새로운 이미지 개수
  2. cut mix 사이즈

기존 cutmix와 다른 점

original cutmix는 img1의 특정 부분을 img2에 붙여넣음. 제가 만든 코드는 img1의 특정 부분을 img1에 붙여넣는 형태.... 어떤 방법이 나을지 비교 필요해보임.

추가 아이디어

랜덤하게 이미지를 cut mix 하는 것이 아니라, class 값이 적은 픽셀 위주로 cut mix 진행 여러 이미지에서 class 적은 픽셀값만 모아서 새로운 이미지를 생성

yooso0731 commented 3 years ago

cut mix 적용하는 거 너무 좋아요!!

음.. size_x, size_y를 우리가 정하는 게 조금 어려울 것 같네요.. 여러 번 돌리면서 성능 확인해봐야 할 것도 같고요. 아예 복사할 이미지 사이즈까지 랜덤하게 정하도록 하는 건 어떨까요?

그냥 일차원적인 제 생각으로는 복사해서 붙여넣을 이미지가 원본 이미지의 절반 이상은 차지하면 좋지 않을 것 같으니

size_x, size_y =  random.randint(0, w/2),  random.randint(0, h/2)

이런 식으로요!

붙여넣는 위치를 클래스 많은 곳(도로, 하늘 등)에 놓는 것도... 가능하다면 좋을 것 같습니다!