본문 바로가기
archive.tar

[Keras] Image Data Generator 이미지 갯수 늘리기

by 냉동만두 2017. 4. 16.

설명


자신이 갖고 있는 원본 사진에 변형을 주어 학습할 데이터를 증가 시킨다.

Keras preprocessing 중 ' ImageDataGenerator ' 기술을 사용한다. Keras Doc 에서는 모델 훈련 중간에 이미지 변형 작업을 하지만,

이런 방법을 사용하면 이미지 데이터 세트를 따로 만들 수 있어, 사용하는 언어, 작성된 학습 스크립트, 딥러닝 프레임워크에 독립적이다.

한 Label(Class)당 원본 이미지가 부족할 때 이 스크립트를 사용하면 도움이 된다.

오류 처리와 좀 더 편하게 쓰기 위해 계속 수정 하고 있다 ~


테스트 환경 (2017.5.26 수정)


Python 3.5, Python 2.7 

Windows 7, Ubuntu16 환경에서 테스트 완료 !


멀티 코어 활용


Python 의 프로세스 풀을 사용하여 코어 갯수만큼 프로세스가 생성된다.

스크립트에는 시스템의 코어 갯수를 자동으로 입력 시키지만 원한다면 갯수를 지정할 수 있다.

예를 들어, 작업관리자(시스템 감시)에서 자신의 CPU가 4개로 나온다면 프로세스가 4개 실행된다. 각각의 프로세스는 이미지 생성 및 저장을 한다.

코어가 많을 수록 작업 시간은 대폭 단축된다.

< 4개의 프로세스가 동시 작업>


사용법


전체 스크립트 상단에 자신의 환경에 맞게 설정할 수 있는 부분이 있다

상단 변수들을 자신에 맞게 수정 후 사용하면 된다

만약, output 폴더에 미리 만들어진 폴더(input 폴더 하위에 같은 이름의 폴더)가 있다면

데이터의 중복이나 덮어쓰기가 되므로 오류 처리 없이 종료 된다,


INPUT_DIR = 원본 이미지 세트의 폴더 경로. * 주의할 점 : 경로 끝에 '/'가 꼭 들어가야 한다 !!! 안그러면 오류 !

OUTPUT_DIR = 생성된 폴더와 사진이 저장될 경로. * 주의할 점 : 경로 끝에 '/'가 꼭 들어가야 한다 !!! 안그러면 오류 !

IMAGE_FORMAT = 새로운 이미지 포맷.

FILE_NAME = 새로운 이미지 파일 앞에 이름을 추가할 수 있음

IMAGE_SIZE = 새로운 이미지 크기

END_POINT = 한개의 원본 이미지당 새로 생성할 이미지 갯수.

ex) ' END_POINT = 100 ' 원본 이미지가 10개일때 새로 생성될 이미지는 1000개

P_NUM = 만들어질 프로세스의 갯수. 코어 갯수와 동일하다. 4 Core 2 Thread의 CPU라면 8개의 프로세스가 생성 !


전체 스크립트 (2017.5.26 수정)


https://github.com/pipy201/study/tree/master/ImageGenerator


간단하지만 스크립트 만들기 위해 진짜 생각 많이 했다... :(

멀티 코어 활용 때문에 더 많은 고민이 필요했다...