스마트팜 로봇은 온실 안을 다니면서 작물 상태를 보고 수확·방제·운반을 해요. 그 "본다"의 핵심이 생육 단계 인식이에요. 이 과실이 수확 적기인지, 이 잎에 병징이 있는지요. 모델보다 데이터셋 만드는 게 훨씬 힘들었어서 오늘은 그 얘기예요.
라벨 기준부터 없었어요
"수확 적기"가 뭔지 물어보면 농가마다, 작업자마다 답이 달라요. 색깔로 보는 분, 크기로 보는 분, 꼭지 상태로 보는 분. 토마토를 예로 들면 출하 거리에 따라 덜 익은 걸 따기도 해요. 라벨러에게 "익은 것에 표시하세요"라고 하면 라벨이 제각각이 돼요.
그래서 모델 전에 기준표를 만들었어요. 작물별로 생육 단계를 몇 개로 나누고, 각 단계의 판정 기준을 사진과 함께 적었어요. 토마토면 착색 비율 구간으로, 딸기면 착색과 크기로. 이 기준표를 농가 담당자와 같이 만들고 합의한 뒤에 라벨링을 시작했어요. 단계 경계에 있는 건 "경계" 라벨을 따로 둬서 억지로 한쪽에 넣지 않았어요.
라벨러 간 일치도를 먼저 쟀어요
같은 사진 수백 장을 라벨러 세 분이 각자 라벨링해서 일치도를 봤어요. 처음엔 낮았어요. 기준표를 고치고 다시 하고, 다시 재고. 일치도가 일정 수준을 넘은 뒤에 본격 라벨링을 했어요. 이걸 안 하고 시작하면 모델이 "라벨러의 기분"을 학습해요.
그리고 일치도가 낮은 단계(예: 4단계와 5단계 사이)는 모델도 그만큼 헷갈릴 거라고 예상하고, 그 경계에서는 모델 신뢰도를 낮게 보정했어요. 3월 3일 보정 글이에요.
온실은 생각보다 다양해요
같은 온실인데 데이터가 달라지는 요인들이에요.
- 계절. 여름과 겨울의 햇빛 각도, 세기, 색이 달라요. 한 계절 데이터로 학습하면 다음 계절에 떨어져요. 최소 1년 치를 모으기로 했고, 그 전까지는 "학습 안 된 계절"이라고 표시해요.
- 시간대. 아침·낮·저녁, 그리고 보광등 켜진 밤. 9월 1일 피부 분석 글의 조명 문제가 여기도 그대로 있어요. 로봇 카메라 옆에 기준 색표를 붙였어요.
- 잎 가림. 과실이 잎에 반쯤 가려 있어요. 가린 정도를 라벨에 넣어서 "많이 가린 건 판정 보류"로 처리해요. 로봇이 각도를 바꿔 다시 봐요.
- 품종. 같은 작물도 품종에 따라 색과 모양이 달라요. 품종을 메타데이터로 꼭 남겨요.
- 카메라. 로봇 모델이 바뀌면 카메라가 바뀌어요. 카메라별 색 보정 프로파일을 둬요.
데이터는 로봇이 모아요
초기 데이터는 사람이 찍었지만, 이후엔 로봇이 작업하면서 찍은 사진이 데이터가 돼요. 로봇이 판정하고 작업자가 결과를 확인하면(수확한 과실의 실제 등급), 그게 라벨이에요. 이 루프가 돌면 데이터가 계속 쌓이고 계절 편차도 자연히 채워져요.
다만 이렇게 모은 데이터는 편향이 있어요. 로봇이 "익었다"고 판단한 것만 수확돼서 확인되고, "안 익었다"고 한 건 확인이 안 돼요. 그래서 일정 비율은 로봇 판정과 무관하게 무작위로 사람이 확인해요. 그게 없으면 모델이 자기 판정을 강화해요.
병징은 더 어려워요
병해충 징후는 생육 단계보다 데이터가 훨씬 적어요. 병이 나면 바로 방제하니까 "병든 상태"의 사진이 드물어요. 저희가 한 것들이에요.
- 농업기술센터의 병해충 도감 사진을 초기 데이터로 (해상도와 배경이 달라서 그대로는 약해요).
- 병징이 발견되면 그 구역을 며칠간 집중 촬영 (방제 전 동의를 받고).
- "정상"과 "비정상" 이진 분류를 먼저 하고, 비정상이면 사람에게 사진을 보내요. 병명을 맞히는 건 다음 단계고, 지금은 "이상하다"를 놓치지 않는 게 목표예요.
정리
- 라벨 기준을 농가와 같이 만들고, 라벨러 일치도를 먼저 재세요.
- 경계 라벨을 두세요. 억지로 한쪽에 넣으면 모델이 억지로 답해요.
- 계절·시간대·품종·카메라를 메타데이터로 남기세요.
- 로봇이 모은 데이터는 편향이 있어요. 무작위 확인을 섞으세요.
- 병징은 "이상 감지"부터. 병명은 그 다음이에요.
다음 주는 ML Ops 이야기로 돌아가요. 이렇게 배포한 모델의 정확도가 조용히 떨어질 때 어떻게 아는지요.