본문 바로가기

Python/Data 처리

폴더 안에 있는 데이터 분리 (훈련용, 검증용으로 분리)

프로그래머스 과제 테스트를 하다가 주어진 train 폴더 안에 있는 이미지 데이터를 train, validaton으로 나누고 싶었다.

참조한 블로그 :

https://lovedh.tistory.com/entry/python-split-folders로-이미지-데이터-분리하기-trainvaltest

 

python split-folders로 이미지 데이터 분리하기 (train/val/test)

이미지 데이터셋은 보통 한 폴더 안에 몽땅 담겨 있습니다. 딥러닝 네트워크를 학습하고 평가 및 검증하기 위해선 이 데이터를 분리해야 하는데요. 그럴 때 유용한 python 라이브러리가 있습니다.

lovedh.tistory.com

 

import splitfolders  #pip install split-folders

splitfolders.ratio(train_dir,output="train_val",seed=1337, ratio=(.8,.2))
)

#splitfolders.ratio(
                    #"나누고 싶은 폴더 경로" or 변수로 저장했으면 변수로,
                    #output="나눈 결과물 담을 폴더명",seed=1337(임의),
                    #ratio=(.8,.2)
)
#ratio 를 2개로 나누면 train, validation으로 나눠지고,
#ratio 를 3개로 나누면  train,validation,test로 나뉜다.



splitfolders.fixed(train_dir,output="train_val",seed=1337, fixed=(200,50)
#ratio와 같음.

#비율로 나누고 싶을 땐 ratio,
#정해진 갯수로 나누고 싶을 땐 fixed

하지만 split-folders를 적용하기 위해서는 데이터의 디렉터리 구조가 다음과 같아야 한다.

즉 각  폴더 안에 있는 데이터들을 나누고 싶을 때 사용 하면 된다.

train/
	dog/
    	img1.jpg
        img2.jpg
	elephant/
    	img1.jpg
        img2.jpg
        ...
        
    ...

 


결과는 다음과 같아진다.

train_val/
	train/
        dog/
            img4.jpg
            img34.jpg # 순서대로 나눠지지 않고 무작위로 나뉘어진다.	
        elephant/
            img45.jpg
            img89.jpg
            ...
        ...
	val/
    	 dog/
            img5.jpg
            img56.jpg 
        elephant/
            img56.jpg
            img102.jpg
            ...
        ...

splitfolders.ratio, splitfolders.fixed 기억하기!