rueki

CutMix 실습하기 본문

python

CutMix 실습하기

륵기 2021. 5. 7. 00:01
728x90
반응형

 

import os
import numpy as np
import random
import cv2
import matplotlib.pyplot as plt

image_path = '../cutmix/data/'
index_len = len(os.listdir(image_path))
image_list = os.listdir(image_path)

image = load_image(image_path, 10)
image_size = image.shape[0]

def load_image(path, index):
    image = cv2.imread(os.path.join(path, image_list[index]), cv2.IMREAD_COLOR)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB).astype(np.float32)
    image /= 255.0

    return image


def cutmix(path,index, imsize):
    w, h = imsize, imsize
    s = imsize // 2

    # 중앙값 랜덤하게 잡기
    xc, yc = [int(random.uniform(imsize*0.25, imsize*0.75)) for _ in range(2)] #256 ~ 768
    indexes = [index] + [random.randint(0, index) for _ in range(3)]
	
    #검은색 배경의 임의 이미지 생성 (여기다가 이미지들 붙여넣는 방식) 
    result_img = np.full((imsize, imsize, 3), 1, dtype=np.float32)

    for i, index in enumerate(indexes):
        image = load_image(path, index)

        #top left
        if i == 0:
            x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc  # xmin, ymin, xmax, ymax (large image)
            x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h  # xmin, ymin, xmax, ymax (small image)
        elif i == 1:  # top right
            x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc
            x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h
        elif i == 2:  # bottom left
            x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h)
            x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, max(xc, w), min(y2a - y1a, h)
        elif i == 3:  # bottom right
            x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h)
            x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h)

        result_img[y1a:y2a, x1a:x2a] = image[y1b:y2b, x1b:x2b]

    return result_img





test = cutmix(image_path, 10,image_size)
plt.imshow(test)
plt.show()

 

data : kaggle - wheat detection

 

728x90
반응형

'python' 카테고리의 다른 글

BOJ 1715. 카드 정렬하기 (Priority Queue)  (0) 2022.09.30
이미지 경로 전처리 및 레이블링 코드  (0) 2021.06.06
파이썬 UnderScore  (0) 2021.01.07
Shallow Copy, Deep copy  (0) 2021.01.05
Lambda, reduce, map, filter  (0) 2021.01.05
Comments