본문 바로가기
Notes

OpenCV, Keras를 이용하여 폴더내의 데이터 읽어오기

by Yonghip 2022. 6. 19.

이미지 task에서 Data augmentation은 성능 향상에 큰 도움을 줄 수 있다.

따라서 기존에도 Keras의 ImageDataGenerator을 사용하여 간단한 방법으로 이미지를 증강시켰다.

하지만 이 방법은 모델 학습, 평가 시마다 이미지를 읽어와 원하는 size에 맞추어 resize를 한 다음에 진행하기에 이미지의 크기가 클 때 시간이 오래 걸린다.

이를 방지하기 위하여 이미지를 resize하여 다시 저장한 다음 추가적인 이미지 처리 라이브러리를 이용하여 증강시켜야 한다.

프로젝트를 진행하며 여기까지는 생각이 닿았는데 라벨 폴더 별로 나누어진 이미지를 resize하여 다시 라벨 값에 맞추어 분류하는 법은 따로 알지 못했고 잘 정리된 코드 역시 없었기에 직접 구현하여 코드를 공유한다.

 

OpenCV를 이용하여 라벨 폴더별로 데이터 가져오기

먼저 필요한 라이브러리를 import 한다.

 

가져올 데이터는 아래의 폴더에 저장되어 있다.

 

 

 

os.path.join()을 이용하여 이미지 폴더 경로를 지정하여 주었다.

 

 

폴더 별로 상위 4개의 이미지를 확인한 결과 라벨 분류가 제대로 된 걸 알 수 있다.(사실 보기엔 전부 비슷해 보이긴 하다.)

 

폴더별로 이미지를 가져와 넘파이 배열로 만들기

지정된 경로에서 이미지가 잘 받아와 지는 걸 확인했으므로 이를 전부 받아와 하나의 넘파이 배열로 만들면 된다.

이때 주의할 점으로 이미지 하나를 받아올 때마다 사이즈를 바꿔서 저장해서 기존 이미지에서 resize된 이미지를 가져와야 한다. 또한 openCV를 사용하는 경우 BGR채널로 가져오게 되는데 이를 보기 좋게 RGB로 바꾸어 주는 것이 좋다.

 

 

기존의 이미지에서 (60, 60)의 크기로 일관된 사이즈의 넘파이 배열로 가져온 다음 저장하였다.

 

file = joblib.load("파일경로")

저장된 pkl 파일은 위 코드와 같은 방식으로 가져올 수 있다.

 

 

 

이미지를 랜덤하게 16개 그려본 결과 큰 문제없이 reize되었다는걸 확인할 수 있다.

Keras 역시 채널 변환이 없다는 점을 제외하면 OpenCV와 큰 차이가 없다.

 

 

전체 코드

 

 

 

GitHub - hykhhijk/Rock-classifier: Rock classifier using CNN

Rock classifier using CNN. Contribute to hykhhijk/Rock-classifier development by creating an account on GitHub.

github.com