Austin's_Lab

[Capston Design]CNN을 이용한 병충해 검출 자동화 시스템 프로젝트 본문

Embedded System

[Capston Design]CNN을 이용한 병충해 검출 자동화 시스템 프로젝트

Ausome_(Austin_is_Awesome) 2017. 4. 25. 21:36

본 프로젝트는 3학년 2학기 Capston Design 수업의 프로젝트로 수행한 것이다.


lane tracing을 하여 길을 따라 농원을 돌아다니면서 농작물의 사진을 서버로 전송하고, 서버에서는 CNN을 통해 학습된 검출기로 전송받은 작물이 병충해에 감염되었는 지 여부를 판단한다. 작물이 병충해에 감염되었을 경우 어플리케이션에 푸시알림을 넣어줌으로써 사용자에게 실시간으로 병충해 발생 사실을 알려준다.



병충해 검출 자동화 시스템은 크게 3가지 부분으로 나누어 구성된다. lane tracing을 하며 돌아다니면서 작물의 사진을 찍어 서버로 전송하는 Raspberry Pi car, 학습된 분류기를 통해 병충해를 검출해내고 사용자에게 알림을 주는 서버, 마지막으로 서버와 통신하며 병충해 검출 여부, 검출 위치, 시기 등을 알 수 있는 안드로이드 어플리케이션이 있다. 


* 프로젝트 중간 설계 흐름도, 최종적으로 Histogram Equalization은 빠졌다. - made by 조장님


사실 병충해 검출이라는 주제는 우리 연구실의 연구과제에서 따온 것이다. 따라서 학습 데이터 역시 연구실에서 진행하던 연구자료를 받아다 썼다. 하지만 연구실에서도 데이터부족에 허덕이던 상태여서(지금도 ing...) 데이터가 너무 부족했다. 2개의 병징 class와 1개의 정상 class가 있는데 받은 데이터는 병징 2개 class에 대해 각각 1000여 장씩 받았다. 그래서 조장님이 구글 및 온갖 루트로 추가 자료를 수집하고데이터를 증식하느라 고생했다.


이 프로젝트를 진행할 때만 해도 나에게 머신러닝에 대한 지식이 거의 없었기 때문에 학습에 관한 부분은 조장님이 맡아서 했다(조장님은 머신러닝 관련 연구실). Library는 Theano를 사용했고, 구조는 CNN으로 Batch normalization없이 conv, max_pool, FC만 8 layer정도 쌓아 중간중간 dropout을 넣어주었다(지금은 내가 TF에서 새로 만든 구조와 모델로 10개 class에 대해 학습, overfitting 극복중...). class가 적은 덕분에 적은 데이터에도 불구하고 그럭저럭 쓸만한 성능이 나왔었다. 문제는 컴퓨터상에서 non-trained image를 테스트하면 성능이 괜찮았는데(90%정도), 그걸 출력해서 테스트를 진행하면 빛이 종이에 반사되어서 성능이 들쭉날쭉해진다는 것이었다. 


이것을 조금이나마 극복해보기위해 연구를 진행했고, 얼마전 illumination noise를 첨가한 augmentation과 homomorphic filter를 이용한 빛 제거 전처리 과정에 대한 논문을 썼다. 매우 엉성하지만...


다른 한 명의 조원은 푸시알림을 받을 안드로이드 어플리케이션을 맡았고, 나는 Raspberry pi에서 lane tracing을 구현하고, 사진을 찍어 서버로 보내는 작업을 구현했다. lane tracing은 contour로 구현했는데, Raspberry pi가 생각보다 image processing performance가 좋지 않아 검은색 하나만 contouring하는 데도 꽤 버벅거렸다. 지금생각해보면 contour보다 효과적이고 효율적인 방법이 있는데 왜 그 땐 그렇게 contour에 집착했었나 생각이 든다. 처음엔 webcam을 이용하여 image processing을 했는데 나중에 picam으로 갈아타니 아주 조금 진행이 부드러워졌다. 서버는 조장님 집에 두었는데(학교는 방화벽때문에 소켓통신이 안됨), 통신사 문제인지 그 지역만 또 소켓통신이 안 됐다. 어찌어찌 방법을 찾다가 ssh통신으로 갈아탔는데 사진 한 장 보내는데 조금 시간이 걸린다. 


이 때 알아낸 한 가지 사실이 있다. 원래는 방화벽 때문에 학교 외부에서 연구실 컴퓨터로 데이터를 전송할 수가 없었는데, ssh를 사용하니 통신이 가능했다. 아마 특정 port를 제외한 나머지를 block해서 막은 것 같은데 ssh(port 22)의 경우 수업때도 자주 사용하다보니 열어두어서 그런가보다. 


아래는 데모 동영상이다.

*오검출은 너그러이 모른척...


기술적인 면에서도 그렇고 나름 잘 만들었다고 생각해서 교내 대회에 3개정도 출전했는데, 입상은 했지만 우리의 기대보다 평가가 그렇게 좋지는 않았었다. 뭐 한 개는 다른 부서에 초청돼서 간 거라 처음부터 아무 기대 안 하고 간 거지만... 다들 기술적인 면에서는 높이 평가해주었는데, 아무래도 주제가 병충해 검출이다보니 비 관련자가 보기엔 크게 매리트가 없어 보이나보다. 아쉽긴 하지만 기술적 난이도나 완성도, 퀄리티는 우리 시스템이 최고였다고 생각한다. 감사하게도 Capston 수업 교수님들께서는 우리의 기술과 완성도를 알아주시고 최고점을 주셨다.

Comments