📌 프로젝트 개요
☐ 주관 : 2022 동덕여자대학교 정보통계학과 과동아리 OUTLIER 프로젝트
2023 한국정보처리학회 학부생 논문 경진대회 - 빅데이터 분야 (우수상 수상)
☐ 프로젝트 명 : 효율적인 작물 재배를 위한 LSTM 기반 작물 잎 중량 예측 모델
☐ 프로젝트 기간 : 22년 10월 ~ 23년 1월 / 23년 4월 ~ 23년 5월
☐ 인원 : 3명 (동덕여자대학교 정보통계학과 3명)
☐ 활용 Tool : Python, Notion, 미리캔버스
☐ 프로젝트 개요 : 지구온난화와 농업 활동 감소로 인해 농작물 생산량이 줄어듦에 따라, 시간대별 최적 환경을 파악하여 최적의 생육 환경을 조성에 도모
☐ 본인이 맡은 역할 :
- 자료 수집 및 전처리 :
- 선형 보간법, MinMaxScaler를 통한 데이터 전처리
- 모델 최적화
- PPT, 논문 총괄 제작
- 발표
☐ 성과/의의 :
- 작물 시간대별 최적 생육 환경 예측 완료
- AI 예측 모델을 통해 효율적인 작물 재배를 기대
📑 프로젝트 내용
❓주제 선정 배경
지구온난화, 농가 인구/농가 수/토지 면적 감소 등의 원인으로 농작물 생산량이 감소하고 있고, 농업 분야에서도 인공지능 기술이 사용되고 있는 추세입니다.
이를 바탕으로, 다음 목표를 세웠습니다.
- 작물의 수확량을 최고로 끌어올릴 수 있는 시간대별 최적 환경 파악
- 작물의 일별 잎 중량을 예측하는 AI 예측 모델 생성
🔗 데이터 수집
토글을 펼치면 활용 데이터 목록을 확인할 수 있습니다.
데이터 | 시점 | 출처 | 데이터 설명 및 목적 |
train_input | 2022.11 | KIST-코리아디지탈(주)-주식회사 파모스 연구를 통해 도출된 데이터 | 총 28개 상추 케이스 존재 (시간 단위) → 학습_인풋 데이터 |
train_target | 2022.11 | KIST-코리아디지탈(주)-주식회사 파모스 연구를 통해 도출된 데이터 | 총 28개의 상추 케이스 존재 (시간 단위) → 학습_아웃풋 데이터 |
test_input | 2022.11 | KIST-코리아디지탈(주)-주식회사 파모스 연구를 통해 도출된 데이터 | 총 5개 상추 케이스 (일별 단위) → 테스트_인풋 데이터 |
test_input | 2022.11 | KIST-코리아디지탈(주)-주식회사 파모스 연구를 통해 도출된 데이터 | 총 5개 상추 케이스 (일별 단위) → 테스트_아웃풋 데이터 |
활용한 모든 데이터는, 프로젝트 진행 당시 기준 최신 데이터로 수집하였습니다.
🙋🏻♀️ 본인이 맡은 역할
⓵ 선형 보간법, MinMaxScaler를 통한 데이터 전처리
총 4종류의 데이터를 제공받았으나, input과 target의 데이터 구조가 맞지 않아 선형 보간법과 MinMaxScaler를 통해 데이터 단위를 맞춰주었습니다.
선형 보간법- 정의 : input(시간 단위) 데이터와 target(일 단위) 데이터의 구조가 맞지 않아, target(일 단위) 데이터를 input(시간 단위) 데이터 형식으로 변경
⭐️ input(시간 단위) 데이터를 target(일 단위) 데이터 형식으로 바꾸지 않은 이유는, 데이터 손실과 시계열의 특성 미반영 문제가 일어나기 때문입니다.
- 계산 : target(일 단위) 데이터를 input(시간 단위) 데이터 형식에 맞추어, 시간 단위 데이터로 변경
data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/상추/data/scale_train_x.csv', header=0, index_col=0) # MinMaxScaler + 사용할 변수들로만 구성된 데이터 data = data[['DAT', 'obs_time']] data['predicted_weight_g'] = np.nan data['predicted_weight_g'].interpolate(method = 'linear', inplace = True)
MinMaxScaler- 정의 : 모든 데이터의 변수가 0 ~ 1 사이의 값을 갖도록 변경
- 계산 : interpolate 함수를 이용하여, 모든 데이터의 변수 단위를 맞춤
data = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/상추/data/train_x.csv', header=0, index_col=0) # 데이터 [train input] 28일치를 합쳐 놓은 데이터 df = data.loc[:, ('DAT', 'obs_time')] scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)) values = scaler.fit_transform(data.loc[:, ('내부온도관측치', '내부습도관측치', 'co2관측치', 'ec관측치', '시간당총광량')]) df2 = pd.DataFrame(values, columns = ['내부온도관측치', '내부습도관측치', 'co2관측치', 'ec관측치', '시간당총광량'])
⓶ 모델 생성 및 최적화
여러 번의 시도 끝에, 작물의 일별 잎 중량을 예측하는 AI 예측 모델을 최적화하여 생성하였습니다.
from keras.callbacks import ModelCheckpoint, EarlyStopping checkpoint = ModelCheckpoint("/content/drive/MyDrive/Colab Notebooks/상추/model.h5", monitor='val_loss', verbose=1, save_best_only=True, mode='min' ) earlystopping = EarlyStopping(monitor='val_loss', patience=15, ) model = Sequential() model.add(LSTM(400, activation='tanh', dropout=0.2, input_shape=(x_train.shape[1], x_train.shape[2]), kernel_regularizer=regularizers.l2(0.01))) model.add(Dense(100)) model.add(Dense(1)) model.compile(loss='mae', optimizer='adam', metrics=['mae']) history = model.fit(x_train, y_train, epochs=400, batch_size=24+28, validation_data=(x_val, y_val), verbose=2, shuffle=False, callbacks=[checkpoint, earlystopping]) model = tf.keras.models.load_model("/content/drive/MyDrive/Colab Notebooks/상추/model.h5") score = model.evaluate(x_val, y_val, verbose=0) print('Test loss:', score[0]) print('Test MAE:', score[1])
💡성과/의의
📍결론
상추의 일별 잎 중량을 예측하는 AI 예측 모델을 생성하여 작물의 수확량을 최대로 끌어올릴 수 있는 시간대별 최적 환경을 예측하였습니다.
최종 모델 설정 값
- 활성화 함수 = tanh
- drop out = 0.2
- L2 규제
- batch size = 24*28
- 은닉층 = 100
- loss = mae
- optimizer = adam
📍프로젝트 의의
작물의 수확량을 최대로 끌어올릴 수 있는 시간대별 최적 환경을 예측한 의의는 다음과 같습니다.
- 상추의 일별 잎 중량을 예측하는 AI 모델 생성
- 스마트팜의 여러 잎채소들에 모델을 적용할 수 있습니다.
- 생육 변수와 환경 변수 둘 다 고려
- 잎 중량 예측에서부터 생산량 예측까지 연구가 확장될 수 있습니다.
💬 회고
➕ 보완할 점
- 짧은 관측 기관, 중복되는 변수들로 인해 예측 오차가 높은 편이라, 기상 데이터와 작물에 관한 연구를 바탕으로 정확한 프로젝트를 실시하면 오차가 줄어들 것이라 예상합니다.
- 최종 모델을 기반으로 한 예측 모델을 이용해서 생성 모델을 만든 후, 상추의 일별 잎 중량 예측값을 기반으로 하여 상추가 자랄 수 있는 최적의 생육 환경 조성 수치를 예측하면 효율적인 작물 재배로 농작물 생산량을 증가시킬 수 있을 것이라 예상합니다.
🚶🏻♀️➡️ 성장한 점
- 데이터 구조가 다른 여러가지 데이터를을 일관되게 정리할 수 있었습니다.
- 모델 최적화를 위한 다양한 최적화 방법을 적용해보는 시간이 되었습니다.