Microsoft lobeでモデル作ってエクスポートして、SDTestをフロントエンドとして動かす、以上!
と言うわけで、MVTec異常検知データセットをlobeに食わせてみました。
異常検知は@shinmura0さんの記事に触発されたと同時期くらいにSDTestがリリースされたこともあり、ローコストで画像検査機を開発できるなと感じたところから全俺の異常検知歴史が始まりました。
@daisukelabさんのMVTec異常検知データセットへの深層距離学習応用でモデルをいい感じに調教する手法もめっちゃ参考になります。colab上で学習すれば非力なマシンでもちゃんと学習できるし、うまくやれば本当に現場で使えるレベルのものになると確信していたものの、学習コストがやや高めというか、めんどくさいのがいまいちだなと思ってました。
そんな中、lobeのデモ動画をみて、これやんっ
https://youtu.be/Mdcw3Sb98DA
何がすごいって、モデルの作成が完全にノーコード。しかもどの程度の精度で、どの画像が推論ミスってるってところまで、わかりやすく表示される。学習ボタンとかなくて自動で学習始まるのもよき。追加学習も自動なの更によき。
あってたら、間違ってたらで勝手に追加学習始まる
作成したモデルはエクスポートして、lobe-pythonで
from lobe import ImageModel
from PIL import Image
model = ImageModel.load('path/to/exported/model')
img = Image.open('path/to/file.jpg')
result = model.predict(img)
とやるだけで推論できちゃうので、勢い余ってSDTestに突っ込んでみました。
lobe-pythonは、Python 3.6 on Windowsで動かなかったので、Anacondaで3.7で環境を作成しなおして、SDTestのrequirementsのバージョンを調整するなど。
###### Requirements with Version Specifiers ######
fbs[sentry] == 0.8.3
PyQt5 == 5.13.*
PyQtWebEngine == 5.13.*
PyInstaller == 3.4
tensorflow == 1.15.*
keras == 2.2.*
lobeはTensorflow-liteもサポートしていて、Raspberry Pi 4で動くと公式にある(Pi3はうまくいくときといかないときあるみたい)。SDTestも非公式だけどPi 4なら動いちゃったりします。
ロボットとかPLCとの連携は、connect_to_dobot
ブランチのsrc/main/python/model/serving_dobot.py
あたりを参考に、socketライブラリとかで通信すれば、周辺装置の方がたけーよっていうくらい激安かつ汎用性高めな、がんばらない人のための画像検査機、できちゃいます。