農業領域でのSemantic Segmentationの難しさ（作物と環境の多様性）と対応方法の例

# はじめに
![segmentation_results.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431721/b973e5f7-8f67-a492-cbab-0ba38a2dccc1.png)

ロボットを用いたサービスを展開するにあたって、農業という領域には

- ロボットを屋外で安定稼働させるというハードウェアとしてのタフさ
- 屋外でのセンシングのタフさ
- サービス・産業としての経済的・文化的側面

といった様々な困難さ・課題があります。

今回は特に画像処理、Semantic Segmentationというタスクの視点から、”季節性”と”作物やそれを取り巻く環境の多様性”の2点に触れます。特に、私がアスパラの選択収穫ロボットの開発で遭遇した例をベースにした話をしたいと思います。

# 季節毎のシーンの違い
### 夏芽収穫期間の風景
![summer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431721/6daf9860-1303-fb35-a59a-126516306965.png)

### 春芽収穫期間の風景
![spring.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431721/8d1899e3-9f92-8cc0-c24a-4e81a18b5cd8.png)


農業に関する作業は季節に依存した形でスケジュールに制約が存在します。

ハウス栽培でのアスパラの収穫については、大きく分けて春芽収穫期間と夏芽収穫期間と言った形で1年に2回の収穫期間を設ける事が多いです。春芽期間と夏芽期間では、背景やアスパラそのものの色味が異なります。

例えば、春芽期間では加温を行うため1枚多くビニールをより多くハウス内で覆うため、シーンのパッと見は夏芽期間と大きく異なります。

アスパラそのもので言えば（品種や地域にもよりますが）根本付近がより紫色に近い形で色付く傾向があります。季節性やそれに付随する温度変化等の影響によって、対象物自体が生理的機能によって動的に色合いや質感が変化します。
（他には、例えば夏芽のシーズン後半は擬葉や親株が黄色くなる、といったような変化があります。）

この例のように、常に撮影する対象・環境が変わり続けるという点が、農業という領域での画像処理の一つの難しさとも言えます。

# 夏芽期間中のデータで学習したモデルで春芽期間中のシーンを推論した場合の例
![pre_additional_learning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431721/db1dae0b-e4f4-b166-2bec-cc014b3fbe10.png)

基本的にSemantic Segmentationのためのモデルは前シーズンまでに撮影したデータや、作為的に用意した環境で撮影したデータを元に学習します。期間が違えばアスパラの色味や背景は違いますから、既存のデータセットに対して事例がない状況にもしばしば遭遇します。

例えは上図は、夏芽期間中に学習したモデルで、春芽期間中のシーンを推論した結果を表しています。
着目して欲しい点は以下の2点です。

- 夏芽期間中は根本が紫気味のアスパラが少ないため、アスパラ根本付近をアスパラの親株と誤認識している。
- 背景ラベルとして扱うべき白ビニール背景を、部分的にポールと誤認識している。

これらは、訓練データセット内に対応する物体・状況が無かった、少なかったため、推論の確信度が下がった結果発生したと考えられます。

# 既存のデータセットに含まれていない状況と、対処としての追加学習
![post_additional_learning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431721/16f31aa4-2692-fb04-6718-faeed8061e61.png)


既存のデータセットに対して事例がない状況に遭遇した場合、対処法としては例えば下の2つの方法を挙げる事ができると思います。

- 新たにデータ撮影・アノテーションを行い、新しいデータセットについて追加学習を行う
- 画像加工した疑似教師データを含めたデータセットを作成し、追加学習を行う
    - Data Augumentationのノイズパラメータを強めに設定する
    - アスパラ根本を紫色気味に色加工する
    - 背景画像が早めに手に入る場合はコラージュで擬似データを生成する

新規のデータ撮影と追加学習が有効な場面は多いのですが、季節的理由・人的リソース等様々な理由から、質と量を両立したデータが取得できなかったり、アノテーションを大量に行うのが難しかったりする場合もあります。

一方で、既存のデータに対して後処理を加えるアプローチは、追加のアノテーション負荷も無いため、問題の質や状況によっては有用になります。

# 追加学習を支える技術
![field_work.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431721/a063ab25-5576-9c49-6bae-f719e20a6950.jpeg)


既存のデータで学習したモデルで推論が上手く行かないケースには、その時々の品種・地域・圃場・季節・時間帯といった様々な要素が関わり得ますし、その場その時でなければ気づかないといった状況である事が多いです。つまり、現場での迅速な仮説検証・データ撮影にあたっては、当然現場に検証要員が滞在している必要があります。

しかし、他のタスクや案件対応・スケジュールの兼ね合い等の側面から、画像処理エンジニアが必ず検証現場に滞在しているとは限らないです。
他の社員・インターン生に撮影やアノテーションを依頼する場合についても、マルチタスクで作業を行っている場合が多くリソース的な制約は当然存在します。

### あると割と助かったツールなど

そのような場面について、私の場合は特に以下の2つのツールが手元にあると非常に作業が楽になりました。

- 現地でリアルタイムにモデルの出力結果の確認や、データ撮影ができるツール
- 事前学習済のモデルを用いて、アノテーションデータを自動生成できるようなフレームワーク

これらを用いる事で、次の3つの理由から「データ撮影・アノテーション・学習・検証」のイテレーションをより早く回す事ができます。

- モデルで上手く推論できない状況を比較的高速に同定できる
- 特定条件で新規に撮影した少数のデータに過学習させたモデルを用いて、ラフなアノテーションデータを生成する事ができる
- モデルやデータを触った事が無い人でも、モデルの実力や振る舞いをツールを通して直観的に把握できる
（アノテーション依頼の際の指示や質問対応を実例・実感ベースで行いやすい）

# おわりに
季節を考慮した検証スケジュールのタイトさ・作物を取り巻く状況の多様性は、特に難しさを感じる点です。それに適応するためには現場での迅速な仮説検証・改善のための意思決定・それを可能にするためのフレームワークが肝要になるように思います。