Bluetooth 디바이스와 병충해 판별 AI를 활용하는 앱 개발을 진행하면서, 병충해 판별 AI 작업에 대해 소개해보고자 한다.
1. 구성 환경 선정
- 빠른 시간 내에 이미지 객체 감지를 위한 AI 학습 및 배포 를 위해 구글에서 제공하는 Vertex AI를 사용하기로 함
- 데이터 저장 : Google Cloud - Google Storage - 버킷
- 데이터 라벨링 : Google Cloud 기능 사용
- AI 학습 : Google Vertex AI - 이미지 객체 감지
- 배포 : Google Cloud Function
2. 데이터 정리
- 데이터를 전달 받아 확인해본 결과, 작물별, 병충해별 기본 보유 데이터 수량에 많은 편차가 있었음.
- 1차 목표(식물 5종류 병충해 구분) 달성을 위해 전체 데이터에서 식물 5종 우선 선정(토마토, 딸기, 고추, 오이, 상추)
- 해당 작물 별 병충해 데이터 정리 진행함.
- 데이터 정리
- 사진 데이터를 아래와 같이 폴더를 구분하여 정리하였고, 사진과 쌍으로 가지고 있던 라벨링 데이터(json 형태)를 같은 트리구조로 모아서 정리함.
- 라벨링 데이터 만들기
- AI 학습을 위한 라벨링 데이터 만드는 다양한 방식이 존재한다.
- 하지만 우리는, 기존 라벨링 데이터를 가지고 있었고, 그 데이터를 구글 Vertex AI에서 사용하는 형태로 가공하였다.(만일 기존 데이터가 없는 상태였다면, 구글에서 제공하는 기능으로 데이터 하나하나 라벨링 작업을 진행하였어야 했다..)
- 그런데, 기존 가지고 있던 라벨링 데이터는 라벨링 박스 좌표가 원본 데이터의 절대 좌표로 저장되어 있었고, 구글 Vertex AI 를 사용하기 위해 데이터 업로드를 하기 위해서는 상대 좌표로 저장해서 올려야 했다.
- 기존 데이터 : 절대좌표, 사진 하나당 1개의 json 파일
- 필요 데이터 : 상대좌표 , 폴더 별 1개의 json 파일(1개 파일 안에 폴더 내 사진 파일의 정보 전체 포함)
-
- 그래서 파이썬으로 라벨링 데이터를 모아놓은 폴더에서 실행 시 각각의 라벨링 데이터 파일에서 절대 좌표를 가져와, 구글에서 요구하는 포멧으로 바꾼 상대좌표를 저장하는 포멧으로 변환하는 코드를 만들었고, 모아놓은 라벨링 데이터가 있는 파일에서 실행하여 클래스별(폴더별)로 object_detection.jsonl 파일을 생성하였다.
3. 데이터 업로드
- 데이터 저장소
- Google Cloud - Google Storage - 버킷
- region : us-central1 (Vertex AI 이미지 객체 감지 학습을 위해서 해당 지역 선택이 필수였음)
- 폴더명 : 클래스 라벨 명과 동일 (X_Y)
- ex) 1_0 : 토마토_정상
- 데이터 세트 만들기
- 구글 Vertex AI 에서는 이미지를 올리는 여러 방법을 제공하는데, 컴퓨터에서 가져오기 파일 업로드를 사용했다.(이미 라벨링 데이터(object_detection.jsonl)를 만들어놨고, Cloud Storage에 사진을 업로드하였기 때문)
- object_detection.jsonl 파일을 선택하면, Cloud Storage 경로 선택이 뜨고, 해당하는 경로를 선택하고 계속을 하면 라벨링 데이터가 자동으로 매칭되어 등록된다.
4. AI 학습
- Google Cloud - Vertex AI - 학습 - 만들기 를 진행한다.
- 학습 모델 방식 선정 및 학습 시간 등을 선택하여 학습을 시작한다.
- 학습이 완료되면, 학습 모델에 대한 정보를 확인할 수 있고,
- 이미지를 업로드하여 테스트 및 엔드포인트에 배포를 진행할 수 있다.
- 외부에서 AI에 접근하여 사용하기 위해서는 엔드포인트 배포를 진행하여야 하며, 엔드포인트 배포가 된 상태라면 지속하는데 비용이 발생한다.
5. 배포
- 학습한 AI를 엔드포인트 배포하였다면, 외부에서 사용하기 위해 Cloud Function을 이용하였다.
- 우리는 서버에 업로드한 사진을 학습한 AI에 넘겨 판별 결과를 다시 돌려받는 형태로 구성하였다.
- 이렇게 해서 앱에서 사진을 찍어 올리면, AI 판별하여 결과를 내려받는 환경을 구축하였다.
6. 앞으로의 계획
- 현재까지 진행한 프로젝트 AI 학습 내용에 대한 것을 요약한 것이다.
- 식물 종류, 병충해 종류, 데이터 수 등을 늘려서 AI 개선을 진행할 예정이다.
버전 | v1 | v2 | v3 |
식물 종류 | 1종(토마토) | 5종(토마토, 딸기, 고추, 오이, 상추) | 5종(토마토, 딸기, 고추, 오이, 상추) |
병충해 종류 | 7종 | 27종 | 27종 |
클래스 수 | 8종(정상 + 병충해) | 27종(식물별 정상 + 병충해) | 27종(식물별 정상 + 병충해) |
클래스 당 학습데이터 | 100장 | 2500장 | 2500장 |
학습 시간 | 20 노드 시간 | 20 노드 시간 | 200 노드 시간 |
평균 정밀도 | 0.636 | 0.216 | 0.76 |
'개발툴' 카테고리의 다른 글
Timezone, Unix Time (0) | 2023.02.10 |
---|---|
appcenter 사용법(안드로이드) (0) | 2023.02.05 |
SSH & SSH config (0) | 2023.01.28 |
inspector.dev 소개 (0) | 2023.01.24 |
retool 사용방법 (0) | 2023.01.23 |