SlideShare a Scribd company logo
Pythonで切り開く
新しい農業
#2019/09/17 PyConJP2019 - Python New Era -
お前誰よ
● 小池 誠(Makoto Koike)
○ Twitter:@ike_jpn
● 農家
○ キュウリ
● 組み込みエンジニア & Maker
○ 町工場のIT化のお手伝い
○ 個人でキュウリ選別機の開発
● Ph.D student
○ Plant sensing & Data analysis
○ アグリエア株式会社
2
書籍など
● CQ出版インターフェース
● CQ出版トランジスタ技術
3※https://www.cqpub.co.jp/より
My Experience
● 学生時代      : Java
● 組み込みエンジニア : C言語 (8年間…?)
● 無職        : Android(2年間ぐらい)
● 農家(何でも屋)  : Python (2014年〜現在)
4
はじめてのPython
● アプリ開発コンテスト「MashupAwards10」がきっかけ
5
3D Stamp Maker(2014年)
初めてのWebアプリ開発
で,高機能と言われてる
Djangoを使ってみよう.
2016年の作品
● 合わせ調味料調合機
○ 作りたい料理名をしゃべるとそれの調味料をブレンドする
○ 調味料レシピはWebアプリ上で管理・シェアできる
6
Raspberry Piを使用しアプリ
はPythonで開発.
カップの有無をOpenCVを使っ
て認識.
Webアプリ側はFlask使用.
2017年の作品
● My Favorite Farm〜食育にエクササイズとインスタ映えを添えて〜
○ 卓上スプラウト栽培装置(水やり,LED,ヒータ自動制御)
○ 出先でスマホを振るとLEDをスクランブル点灯→よく育つ
7
Raspberry Pi Zero Wを使用.
各種センサとモータはPythonで
制御.
2018年の作品
● 卓上スプラウト工場
○ 栽培スケジュールをJSONで記述
○ 自動的にスプラウトの生長を最適化する(実装中)
8
Raspberry Piを使用.
各種センサとモータは
Pythonで制御.
IN SHORT,
Pythonで
何か作って楽しむ人
9
Agenda
● Makerコミュニティで広がるPython
● Pythonではじめる新しい農業
● 新時代を切り開く
10
Makerコミュニティ
に広がるPython
11
Maker Movement
12
● Maker Movementとは?
○ DIYの延長としてものづくりを行なう人,又は,そのためのスキ
ルを学ぶ人が,インターネットで繋がることによって起こった
ムーブメント
● 2005年,Makeマガジン創設者Dale Dougherty氏が提唱
● 世界最大規模のDIY展示発表会「Maker Faire」
○ 毎年,全世界約200ヶ所で開催
○ 来場者数は年間140万人以上にのぼる
“ Like artists, they are motivated by internal goals, not extrinsic rewards. They are inspired by
the work of others. Most importantly, they do not wait until the future to create and make.”
(アーティストのように,彼らは外的報酬ではなく,内的な目標によって動機付けられます.彼らは他人の
作品に触発されます.最も重要なことは,彼らは未来が作られてくるまで待たないということです.)
Maker Faire Tokyo 2019
13
草取り(拾い?)DonkeyCar
14
制御デバイス
● Jetson Nano
Pythonで開発
● TensorFlow
● OpenCV
● Tornado
● Jetson.GPIO
● 草拾い(お片付け)自動運転ロボット
○ 白線からはみ出ないように走行
○ 落ちている雑草のみを拾う
https://www.donkeycar.com/
システム構成
15
Jetson Nano
ELP 広角
USBカメラ
USB
Motor
driver
(TB6612)
Servo
driver
(PCA9685)
GPIO
Wi-Fi
ドングル
USB
Software
PWM
M
M
DC Motor
(Caterpillar)
I2C Servo
Servo
Servo
Servo
(Arm)
tornado
・Webサーバ
・リモコンUI
opencv
・画像取得
・前処理
tensorflow
・操縦モデル
・雑草検出モデル
機体制御
モータ制御
・PWM出力
Arm制御
システム構成
16
Jetson Nano
ELP 広角
USBカメラ
USB
Motor
driver
(TB6612)
Servo
driver
(PCA9685)
GPIO
Wi-Fi
ドングル
USB
Software
PWM
M
M
DC Motor
(Caterpillar)
I2C Servo
Servo
Servo
Servo
(Arm)
tornado
・Webサーバ
・リモコンUI
opencv
・画像取得
・前処理
tensorflow
・操縦モデル
・雑草検出モデル
機体制御
モータ制御
・PWM出力
Arm制御
TensorFlow
● 機械学習ライブラリ
○ 最新r1.14(8/24 r2.0-rc0 release!)
○ 世界的にユーザ数が多い
17
● TF-TRT(TensorFlowパッケージに含まれている)
○ NVIDIA TensorRT
○ CUDAコア用にモデルを最適化する機能を持つ
TF-TRTを使ったTensorFlow Frozen graphの最適化(TensorRT 5.1.5)
TF-TRTによる最適化効果
● 推論速度の比較(Jetson Nano 10Wモード)
○ 学習済みssd_mobilenet_v1_cocoを使用
○ 入力画像サイズ:640x480x3
18
推論時間
約30%OFF
操縦モデル
● 自動運転はCNNを使った教師あり学習
○ 入力画像:240x180x3(30FPS)
○ 出力:ハンドル操作(右折,直進,左折の3パターン)
○ 教師データ数:12,000枚
19
雑草検出モデル
● 雑草の検出はMobileNet-SSD(TensorFlow Object detection API使用)
○ 入力画像:120x90x3(30FPS)
○ 出力:検出数,座標,クラス
○ 教師データ数:12,000枚
● 検出座標をアームで掴む
20
システム構成
21
Jetson Nano
ELP 広角
USBカメラ
USB
Motor
driver
(TB6612)
Servo
driver
(PCA9685)
GPIO
Wi-Fi
ドングル
USB
Software
PWM
M
M
DC Motor
(Caterpillar)
I2C Servo
Servo
Servo
Servo
(Arm)
tornado
・Webサーバ
・リモコンUI
opencv
・画像取得
・前処理
tensorflow
・操縦モデル
・雑草検出モデル
機体制御
モータ制御
・PWM出力
Arm制御
PythonでDCモータ制御(1)
● モータドライバのデータシートを確認
○ 端子配置の確認
○ 制御方法の確認
22
IN1
IN2
PWM
ストップ
ショート
ブレーキ
100%
時計回り
50%
時計回り
20%
時計回り
モータ
出力
※STBY=H
PythonでDCモータ制御(2)
● Pythonで端子出力をプログラミング
● 端子操作ライブラリ
○ Jetson Nano
■ Jetson.GPIO
○ Raspberry Pi
■ RPi.GPIO
■ wiringpi
■ pigpio
23
将来的には畑で草取り
● 畑で草取りを目指す
○ 現在は自動運転テスト中
24
なぜPythonで作るのか
● ロボットに高度な認知行動をさせたい
○ エッジAI,ディープ・ラーニング必要
■ 画像認識,自己位置推定,SLAMなど
○ 現状ディープ・ラーニングと言えばPython
25
● Web技術・資産の活用が容易
○ IoT機器の開発
○ Web APIを簡単に使える
● 読み易い
○ 学習コストが低い>速度,容量
○ プロトタイピングに最適
集積回路技術
の発達により,
高性能で安価な
SoCが普及した
Makerイベントでよく見るデバイス
26
PICマイコン
Arduino
(Atmel AVRマイコン)
(https://www.microchip.com/)
(https://www.arduino.cc/)
Jetson
(https://www.raspberrypi.org/)
ESP8266
ESP32
(https://www.espressif.com/)
Raspberry Pi
(https://developer.nvidia.com/)
M5STACK
(ESP32)
(https://m5stack.com/)
micro:bit
(https://microbit.org/)
Sipeed
Maix
(https://www.sipeed.com/)
Pythonで開発可能 Pythonで開発可能 Pythonで開発可能
Pythonで開発可能 Pythonで開発可能 Pythonで開発可能
Meaning of “Raspberry Pi”
Raspberry is a reference to a fruit naming tradition in the old days of microcomputers. A lot of
computer companies were named after fruit. There's Tangerine Computer Systems, Apricot
Computers, and the old British company Acorn, which is a family of fruit.
(ラズベリーは,昔のマイクロコンピュータでフルーツの名前を付ける伝統を参照しています.多くのコンピュータ
企業はフルーツに因んでいました. …)
Pi is because originally we were going to produce a computer that could only really run
Python. So the Pi in there is for Python. Now you can run Python on the Raspberry Pi but the
design we ended up going with is much more capable than the original we thought of, so it's kind of
outlived its name a little bit.
(Piは,当初Pythonのみを実行できるコンピュータを作ろうとしていたためです.この PiはPythonのためです.
…)
                        − Eben Upton, Techspotインタビューより
27
https://www.techspot.com/article/531-eben-upton-interview/
産業用途へ広がるラズパイ
● 産業用のCompute Module
○ SDカード→eMMC Flash memory(optional)
● “2018年6月時点50〜60万台のうち約60%が産業用途”
28
※EETimes Japan,“「ラズパイ」最初の10年,今後の10年”,https://eetimes.jp/ee/articles/1807/11/news042.html
やってみた
● ラズパイで作った不良品検知装置
○ 人間がおこなう目視検査の前段階に導入
○ 量産ラインで使うには運用面などまだ課題は沢山ある
29
ものづくりへ広がるPython
● 産業ロボットなどでAI技術活用が活発になった
● Pythonをサポートした組み込み開発環境が出てきた
● 豊富なPythonライブラリが活用できる
30
Pythonではじめる
新しい農業
31
年間を通してきゅうりを栽培・出荷
○ ほ場面積:約40a
○ 家族経営(3人+パート2人)
32
33
年間出荷量:約60t(50万本)
品目別10aあたりの労働時間
農林水産省:品目別経営統計(2007年)より
・ピーマン
・きゅうり
・トマト
・ミニトマト
10aあたりの労働時間(h)
34
機械化が難しい作業が多い
果菜類はとても労働集約型
きゅうり
きゅうり栽培の労働時間
● きゅうり栽培における作業別の労働時間の割合
農林水産省:品目別経営統計(2007年)より
収穫
39.8%
管理
19.2%
出荷(選別など)
22.1%
野菜の品質や収量を増やす作業以外に時間を取られている35
私のモチベーション
● キュウリの品質や収穫量の増加につながらない,選別作
業に使う時間を減らしたい!
● 限られた労働力をもっと有効活用したい!
収穫
出荷
管理
その
他
収穫
出荷
管理
その
他
品質を高める管理の作業を
増やしたい!
労働生産性を高めるための時間割にシフト
36
きゅうりの選別作業とは
● 長さ,太さ,曲がり具合,色などにより等級を分ける作業
● 日本のマーケットでは一般的に行われている
● 我が家では9等級に分類
37
● 対象は自然物。定量的な選別基準があるわけではない
● 長年の経験(主観)生産者のこだわり          
→習得に時間がかかる
● 毎日同じ基準で分けている=信頼            
→作業者間での統一が重要
なかなか難しい選別作業
秀品   B品 秀品   B品 秀品   B品 秀品   B品
特に品質の判断が難しい
同等のことをコンピュータで出来ないか? 38
注目したのは人工知能ブーム
● 画像認識におけるディープ・ラーニングの成果
● 機械学習ライブラリのオープンソース化
http://image-net.org/challenges/talks_2017/ILSVRC2017_overview.pdf
ディープ・ラーニング
ILSVRC
NEC
America
Xerox AlexNet Clarifi VGG Google
Net
GoogLe
Net
ResNet
39
試作1号機(2016年)
● とにかくやってみる
● 試作1号機誕生
○ Webカメラをスタンドに固定
○ 上からキュウリの画像をとる
【ハード】
・Webカメラ Logicool C270(1,500円)
・アルミのパイプ(数百円)
・結合パーツ(3Dプリンターで印刷。数十円)
・固定用ボルト(数百円)
【ソフト】
・カメラ制御:OpenCV
・機械学習:TensorFlow
制作期間:1週間 制作費:約3000円
40
教師データの収集
● ディープ・ラーニングには大量の教師データが必要
○ とは言え・・・
試作1号機では,
● 2475枚(1クラスにつき275枚)
● 背景に白い厚紙
● なるべく位置を揃える
41
学習した結果
80%の正答率
教師画像 : 2475枚
● 同じ時期のデータであったため
42
可能性が見えた!
● ディープラーニングで選別ができそうな気がする
● もっと人間の仕分けに近づけたい
→ カメラの台数を増やしたら精度が上がるかも
熟練農家はいろんな面からキュウ
リを判断する
人間の目に近づける
43
撮影台の作成
● キュウリ画像を取得するための台
● カメラを上、下、横に設置し、キュウリの全面を捉える
● 照明を付けて明るさを一定にする
44
完成した撮影台
● 作ったキュウリ台で教師データとなる画像を撮影&ラベ
ル付け
キュウリ1本につき上、下、横の
3枚の画像を取得
45
教師データ集め
集めた画像 : 8500組
解像度:80x80x3
ラベル:10種類
教師画像 : 7000組
テスト用画像 : 1500組
2ヶ月間ほどかかった
46
学習結果
91.6%の正答率
● データを増やした効果
● カメラを増やした効果
● 照明を追加した効果
教師画像 : 8500枚
47
ベルトコンベア作り
48
完成
制作期間:5ヶ月 制作費:約7万円
49
50
試作2号機(2016年)
実地テストでわかったこと
● 仕分け熟練者に見てもらった結果
○ 遅い
○ ベルトコンベアは傷がつくからダメ←致命的
○ 判別精度はまぁまぁ
○ 仕分け作業は箱に綺麗に並べて蓋をするまで
○ 総括「こんなおもちゃ使えんな!」
認識部分はいい感触
しかし、まだまだ実用には程遠い!
51
3号機の開発着手
● 開発コンセプトの変更
○ 『AIによる自動化』→『AIのサポートによる効率化』
52
テーブル型キュウリ選別システム
制作期間:3ヶ月間 制作費:約2万円
53
OpenCV
TensorFlow
Kivy
画像処理でテーブル上のキュウリを検出
1. マーカー座標検出(起動時のみ)
2. 射影変換
3. 輪郭抽出
4. キュウリ画像切り出し
54
OpenCVで実装
● マーカー検出 cv2.matchTemplate
● 射影変換  cv2.getPerspectiveTransform
      cv2.warpPerspective
● 輪郭抽出 cv2.findContours
教師データ集め
集めた画像 : 36,000枚
解像度:72x24x3
ラベル:9種類
教師画像 : 28,000組
テスト用画像 : 8,000枚
1ヶ月間ほどかかった
55
ニューラルネットワーク構成
● 5層の畳み込みニューラルネットワーク
[1] Kaiming He, et al.”Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition”
活性化関数:Relu
最適化関数:Adam
56
*
*Spatial Pyramid Pooling[1]
学習結果
79.4%の正答率
ラズパイでの処理速度を考慮して,
画像解像度を落とした
(高解像度であれば約90%を確認)
57
前回の開発でわかった課題
● 季節や成長段階によってキュウリ果実の形に偏りがある
○ 取れ始めのころは全体的に太め、徐々に細長くなる
○ 農家は全体の傾向を見極め等級判断基準を微調整している
長さ
太
さ
M
L
2L
B大
B中
長さ
太
さ M
L
2L
B大
B中
全体的に等級の分
布が上にズレる
【長さ,太さによるキュウリ等級の分布傾向】
※長さ,太さによる等級の分布は,経験から線形に変化することがわかっている
通常時
<収穫中期〜>
特定時期
<収穫最初期>
58
判定のキャリブレーション
● 収穫時期に合わせ入力を調整する
○ 学習時は通常時のデータで行う(標準基準を学習)
○ 運用時は目的の等級になるよう入力画像&数値を調整する
学習時
(通常時データで学習)
画像
ニューラル・
ネットワーク
長さ
太さ
表面
積
教師データ 誤差逆伝搬法
判定(運用)時
画像
ニューラル・
ネットワーク
長さ
太さ
表面
積
USB
カメラ
キャリブレーション値
等級
意図した等級になるよう調整 59
キャリブレーションの様子
テスト画像を使って、M等級110本に対し、長さのキャリブレーション-10〜+10%を
行った際のNN判定等級数の変化
期待通りの動きになっていることが
確認できた
M
L
2L
B
小
B
中
2L
L
M
60
等級判定の様子
61
実務で使うまでになった
● ラズパイだけで,4本を約1秒ほどで判定
● 仕分けスピードが1.4倍になった
● 熟練者のスピードにはまだ敵わない
一応ボスのOKをもらい実業務で使うようになった
実務で作業効率1.4倍の効果が確認できた
62
● ラズパイだけで,4本を約1
秒ほどで判定
● 仕分けスピードが1.4倍に
なった
● 熟練者のスピードにはまだ敵
わない
開発して分かったこと
● DLを使ってキュウリの選別ができた
○ 熟練者に近い基準で選別を行なうことができた
○ 基本的に厳密性を求められない農業にDLはマッチする
63
● 熟練者のノウハウをモデル化する可能性が見えた
○ ノウハウの保存と再利用
○ 新規就農に対するハードルを低くできる
● 自動化だけじゃないDLの可能性
○ 障がい者も働きやすい環境作り(ライン→セル型)
○ 人間同士のコミュニケーションの支援
機械学習を用いたストレス養液栽培
水ストレスを予測し上手な
水やりで甘いトマトを栽培
平均糖度8.87(最大16.9)
の安定生産に成功
64
『AIによる灌水制御によって高糖度トマトを負担軽減で大量安
定生産成功』(静岡大学Press Releaseより)
データ処理で植物生理に迫る
● 植物や環境のデータを収集分析し,植物にとって快適な
栽培制御を行なう
○ データ取りはPythonで実装,実験ノートはjupyter notebook
○ データ分析はJupyter,scikit-learn,matplotlib,etc...
65
農家がPythonで実現したい未来
● テクノロジを活用して高品質や高収量!
● 長年かけて築き上げた生産ノウハウを残したい!
● 新規就農のハードルを下げたい!
pipのように農業ノウハウを誰でも簡単
にインストールできる未来に!
新時代を切り開く
67
Sunsetting Python 2
68
● 2020/01/01 サポート終了(節目)
節目
69
節ごとに葉を付け,光合
成を行い,花を咲かせ果
実を付ける.
古くなった葉は,光合成
効率が悪くなり,実りが
なくなり,やがて枯れる.
→
成長点を伸ばし新しい葉
を付けるため.
生長点:新しい
葉が生まれる所
古くなった葉を摘み取るのは農家の重要な管理業務
全ては生長点を伸ばすため
Pythonの良い所
70
● 誰でもすぐに始められる
○ 様々なデバイスで実行できる
○ シンプルな文法でわかりやすい
● 誰とでも繋がり学ぶことができる
○ 様々な業界の人たちとPythonを介して集まれる
○ 自分の知らない世界を学べる
● 誰でもオープンな技術にアクセスできる
○ 素晴らしいライブラリへのオープンなアクセス
○ やりたいことをすぐに実装できる
成長するPythonをこれからも学びたいと思う
MY MINDSET
I don’t learn for start something,
I try to start something to learn.
(何かを始めるために学ぶのではなく,
学ぶために何かを始める)
71
MY MINDSET
● 全ては学ぶため=失敗は無い,怖くない
● やってみないとわからない
● OutputとInputを両方行う(文武両道by養老孟司)
72
NEW ERA
Python3で新しいこと始めてみませんか?
73
Thank you for your attention.
74

More Related Content

[PyConJP2019]Pythonで切り開く新しい農業