공기정화 식물-인공지능-IOT

공기정화식물 식별 인공지능 Keraslens 코드 작성

coding art 2020. 7. 31. 15:31
728x90

참조: https://medium.com/analytics-vidhya/how-to-do-image-classification-on-custom-dataset-using-tensorflow-52309666498e

 

How to do Image Classification on custom Dataset using TensorFlow

Image classification is basically giving some images to the system that belongs to one of the fixed set of classes and then expect the…

medium.com

 

 

구글 렌즈를 사용하여 식물들을 관찰해 보면 상당히 근접해서 식물 이미지를 캡춰해야 원활한 작업이 가능하다는 점을 알 수 있다. 예를 들자면 작은 화분을 관찰함에 있어서 식별하려는 이미지가 식물과 함께 화분 및 주변 환경에 대한 정보를 담고 있으면 식별을 위한 이미지 정보의 농도가 낮아질 수 있어 식별 작업이 어려워진다. 이러한 점을 감안하여 공기정화 식물들의 사진 이미지를 준비하도록 하자. 현재 준비한 이미지 대상은 베고니아, 스파티필럼, 스킨답서스, 깻잎, 디펜바키아 이다. 깻잎은 공기정화식물이 아니지만 특이하게도 구글렌즈로 인식이 안되기 때문에 특별히 넣도록 한다. 구글렌즈는 약간의 이미지 식별 기능에 구글 크롬의 이미지 검색 기능이 결합되어 있는 듯하다. 이미지 식별 작업을 통해 뭔가 정보가 얻어져도 불확실할 수도 있으므로 웹 이미지 검색을 실행하여 관련성 있는 정보를 제공한다. 한편 오이 고추 호박 가지 다 되는데 깻잎은 향유라는 답을 주는바 데이터베이스 준비에서 빠진 듯 하다.

스파티필럼, 스킨답서스, 디펜바키아는 직접 재배하는 화분으로부터 이미지를 준비하고 나머지는 농장에 나가 사진 이미지를 찍도록 하자. 구글 렌즈에서 요구하는 것처럼 어느 정도 근접해서 로컬한 이미지를 준비하는 것이 좋다.

직접 스마트폰 카메라로 찍으면 일정한 해상도의 이미지를 얻을 수 있는 장점이 있다. 상당히 고해상도이지만 특별히 조작할 필요는 없으며 단지 읽어 들이는 과정에서 사진 Image 파일의 SHAPE 값을 (18, 32) 와 같이 지정하면 되는 작업이다.

학습용 데이터를 많이 준비하면 좋겠지만 공기 정화식물간에 구별해야 할 정도라면 15개 정도의 사진 이미지만으로도 아래의 학습 및 테스트 사례에서처럼 80% 수준의 인식률이 얻어질 수 있다. 매번 실행때 마다 학습용과 테스트용으로 80:20 으로 무작위하게 셔플링하기 때문에 인식률에 변동이 있을 수 있지만 최악의 인식률인 50:50 이상이면 실용에 충분해 보인다. 이 작업에 사용된 Keraslens 코드는 바로 앞 Fresh/Wilt Classification 블로그의 코드와 동일한 코드이다.

요즈음 스마트폰 카메라의 해상도가 대단히 높지만 실제로 이미지 학습처리에 사용하는 해상도는 18:32 로서 이 비율은 VGA480:640 과 동일하다. 개개의 이미지를 출력해 보면 흐릿하게 간신히 인식될 정도이다. 실제 keraslens 학습과정을 보면 큰 해상도 값 이미지를 사용할 때에 GPU 지원을 받더라도 학습 시간이 엄청나게 늘어나게 되지만 그렇다고 인식률이 그다지 나아지지 않는 다는 점에 주목한다. 실제로 PyTorch CIFAR 10 예제를 보아도 이미지를 출력해 보면 간신히 인식할 수 있는 수준의 낮은 해상도의 이미지를 사용하여 컴퓨팅 타임을 절감하고 있다. 일단 학습 및 테스트 결과가 성공적이라면 그 다음은 스마트폰에서 IOT 로 사용할 수 있도록 학습내용을 준비하는 단계로 넘어가기로 한다.