MakeAI 딥러닝

스마트팜 로봇의 눈 — 생육 단계 인식 데이터셋 만들기

로봇이 "지금 수확할 때인지"를 보려면 생육 단계를 인식하는 비전 모델이 필요해요. 라벨 기준을 정하는 것부터 온실의 계절·조명 편차까지, 데이터셋을 만들면서 겪은 것들이에요.

3분 읽기

스마트팜 로봇은 온실 안을 다니면서 작물 상태를 보고 수확·방제·운반을 해요. 그 "본다"의 핵심이 생육 단계 인식이에요. 이 과실이 수확 적기인지, 이 잎에 병징이 있는지요. 모델보다 데이터셋 만드는 게 훨씬 힘들었어서 오늘은 그 얘기예요.

라벨 기준부터 없었어요

"수확 적기"가 뭔지 물어보면 농가마다, 작업자마다 답이 달라요. 색깔로 보는 분, 크기로 보는 분, 꼭지 상태로 보는 분. 토마토를 예로 들면 출하 거리에 따라 덜 익은 걸 따기도 해요. 라벨러에게 "익은 것에 표시하세요"라고 하면 라벨이 제각각이 돼요.

그래서 모델 전에 기준표를 만들었어요. 작물별로 생육 단계를 몇 개로 나누고, 각 단계의 판정 기준을 사진과 함께 적었어요. 토마토면 착색 비율 구간으로, 딸기면 착색과 크기로. 이 기준표를 농가 담당자와 같이 만들고 합의한 뒤에 라벨링을 시작했어요. 단계 경계에 있는 건 "경계" 라벨을 따로 둬서 억지로 한쪽에 넣지 않았어요.

라벨러 간 일치도를 먼저 쟀어요

같은 사진 수백 장을 라벨러 세 분이 각자 라벨링해서 일치도를 봤어요. 처음엔 낮았어요. 기준표를 고치고 다시 하고, 다시 재고. 일치도가 일정 수준을 넘은 뒤에 본격 라벨링을 했어요. 이걸 안 하고 시작하면 모델이 "라벨러의 기분"을 학습해요.

그리고 일치도가 낮은 단계(예: 4단계와 5단계 사이)는 모델도 그만큼 헷갈릴 거라고 예상하고, 그 경계에서는 모델 신뢰도를 낮게 보정했어요. 3월 3일 보정 글이에요.

온실은 생각보다 다양해요

같은 온실인데 데이터가 달라지는 요인들이에요.

  • 계절. 여름과 겨울의 햇빛 각도, 세기, 색이 달라요. 한 계절 데이터로 학습하면 다음 계절에 떨어져요. 최소 1년 치를 모으기로 했고, 그 전까지는 "학습 안 된 계절"이라고 표시해요.
  • 시간대. 아침·낮·저녁, 그리고 보광등 켜진 밤. 9월 1일 피부 분석 글의 조명 문제가 여기도 그대로 있어요. 로봇 카메라 옆에 기준 색표를 붙였어요.
  • 잎 가림. 과실이 잎에 반쯤 가려 있어요. 가린 정도를 라벨에 넣어서 "많이 가린 건 판정 보류"로 처리해요. 로봇이 각도를 바꿔 다시 봐요.
  • 품종. 같은 작물도 품종에 따라 색과 모양이 달라요. 품종을 메타데이터로 꼭 남겨요.
  • 카메라. 로봇 모델이 바뀌면 카메라가 바뀌어요. 카메라별 색 보정 프로파일을 둬요.

데이터는 로봇이 모아요

초기 데이터는 사람이 찍었지만, 이후엔 로봇이 작업하면서 찍은 사진이 데이터가 돼요. 로봇이 판정하고 작업자가 결과를 확인하면(수확한 과실의 실제 등급), 그게 라벨이에요. 이 루프가 돌면 데이터가 계속 쌓이고 계절 편차도 자연히 채워져요.

다만 이렇게 모은 데이터는 편향이 있어요. 로봇이 "익었다"고 판단한 것만 수확돼서 확인되고, "안 익었다"고 한 건 확인이 안 돼요. 그래서 일정 비율은 로봇 판정과 무관하게 무작위로 사람이 확인해요. 그게 없으면 모델이 자기 판정을 강화해요.

병징은 더 어려워요

병해충 징후는 생육 단계보다 데이터가 훨씬 적어요. 병이 나면 바로 방제하니까 "병든 상태"의 사진이 드물어요. 저희가 한 것들이에요.

  • 농업기술센터의 병해충 도감 사진을 초기 데이터로 (해상도와 배경이 달라서 그대로는 약해요).
  • 병징이 발견되면 그 구역을 며칠간 집중 촬영 (방제 전 동의를 받고).
  • "정상"과 "비정상" 이진 분류를 먼저 하고, 비정상이면 사람에게 사진을 보내요. 병명을 맞히는 건 다음 단계고, 지금은 "이상하다"를 놓치지 않는 게 목표예요.

정리

  • 라벨 기준을 농가와 같이 만들고, 라벨러 일치도를 먼저 재세요.
  • 경계 라벨을 두세요. 억지로 한쪽에 넣으면 모델이 억지로 답해요.
  • 계절·시간대·품종·카메라를 메타데이터로 남기세요.
  • 로봇이 모은 데이터는 편향이 있어요. 무작위 확인을 섞으세요.
  • 병징은 "이상 감지"부터. 병명은 그 다음이에요.

다음 주는 ML Ops 이야기로 돌아가요. 이렇게 배포한 모델의 정확도가 조용히 떨어질 때 어떻게 아는지요.