불러온 이미지에 RandomResizedCrop을 적용하기 위한 함수를 생성합니다.

    def show_images(imgs, num_rows, num_cols, scale=2):
        aspect_ratio = imgs[0].shape[0]/imgs[0].shape[1] ------ 확장할 이미지의 크기 조정
        figsize = (num_cols * scale, num_rows * scale * aspect_ratio)
        _, axes = plt.subplots(num_rows, num_cols, figsize=figsize)
        for i in range(num_rows):
            for j in range(num_cols):
                axes[i][j].imshow(imgs[i * num_cols + j].asnumpy())
                axes[i][j].axes.get_xaxis().set_visible(False) ------ x축 전체를 숨김
                axes[i][j].axes.get_yaxis().set_visible(False) ------ y축 전체를 숨김
        plt.subplots_adjust(hspace=0.1, wspace=0)
        return axes
    
    def apply(img, aug, num_rows=2, num_cols=4, scale=3):
        Y = [aug(img) for _ in range(num_rows * num_cols)] ------다양한 샘플을 얻기 위해 여러 번 데이터 확장 적용
        show_images(Y, num_rows, num_cols, scale)

    RandomResizedCrop이 적용된 이미지를 출력합니다.

    shape_aug = transforms.RandomResizedCrop(size=(200, 200),
                                             scale=(0.1, 1),
                                             ratio=(0.5, 2))
    apply(example_image, shape_aug)

    이때 RandomResizedCrop에 적용된 파라미터는 다음과 같습니다.

    size: 출력할 크기를 200×200으로 조정합니다.

    scale: 면적 비율을 0.1~1(10~100%) 범위 내에서 무작위로 자릅니다.

    ratio: 면적의 너비와 높이 비율을 0.5~2 범위 내에서 무작위로 조절합니다.

    즉, ratio를 통해 너비와 비율을 조절한 후 scale을 통해 자르고, 최종적으로 출력할 size로 조정됩니다.

    그림 5-32는 RandomResizedCrop이 적용된 이미지를 보여 줍니다.

    ▲ 그림 5-32 RandomResizedCrop이 적용된 이미지

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.