2024年PyLadies Conで発表した内容です。
下記、発表原稿
はじめに
今回お話することは、題名通りですが、PyLadies東京で初めて知ったStreamlit(ストリームリット)とYOLOが面白すぎてノリと勢いで、その日のうちにアプリを作った話をします。
目次
・LTを聞いてくださっている方に持ち帰ってほしいこと
・ストリームリットとは?
・YOLOとは?
・アプリの紹介
・今回話すアプリについての制作背景
・アプリ作成時に大変だったこと
・今回の学び
・まとめ
・参考文献
今回このLTを通じて持ち帰って欲しいこと
「アプリ制作は楽しい!」と思っていることです。
「初心者でも欲しいと思ったらアプリを作ったらいい」と私は思っています。
アイディアはみんなの日常にあって、そのアイディアを「物」にするのはとても大変で難しいことです。
これは初心者だとより難しいことと認識しています。
今回のアプリはとても簡単に作成したつもりなのですが、ちゃんと詰まるポイントもあって、、、
大変でした。
でも作り終えて自分で遊ぶ時の楽しさや まわりの反応は、その大変さの倍はあります。
お釣りが来るぐらいです!
なにはともあれ、アプリ制作はちょー楽しい!!!
気になる言語や、新しく知ったものは、ちょっとでも使うと、よりたのしいと思っていますので、それが伝われば幸いです。
Streamlit(ストリームリット)
Pythonで作成されたオープンソースのWebフレームワークです。
Webアプリに必要なフロントエンドの知識(HTML,CSS, JavaScript)を必要としません。
マークダウン記法で書くことができます
データの可視化やWebアプリケーションの作成に使用されます
素早くアプリを作って公開することができます
そのため、
仕事で使用するデータを表などで可視化して、URLにて共有することが可能で、チームメンバー等に情報共有がしやすくなるような便利なフレームワークです
YOLO(ヨーロー)
人間のように一目見ただけで物体検出ができるライブラリです。
物体検知とは、コンピュータを使って画像や動画に 映っている物体の位置を推定する技術を指します。
「You Only Look Once」
(ユー オンリー ルック ワンス)という英文の頭文字を取ってYOLOと呼ばれています。
YOLOv8(ヨーロー バージョン 8)
では物体検出の他に、セグメンテーション、イメージ分類、姿勢測定などを実行できます
自動運転、セキュリティ、医療等さまざまな分野で使用されています
アプリ紹介
さきほど、紹介した技術を使い、今回作ったものは、猫 写真 判定機の「ねこかもしれない」です。
ねこしか判定する気がありません。ええ、私が興味がないからです。
そこは作者の意見が絶対です。
フレームワークとデプロイサービスとしてStreamlit(ストリームリット)を使用しています。
画像判定にはYOLOを使用して、瞬時にねこ かどうかの検知をさせています。
今回は、精度より速さを重視しました。
勉強会でいただいた資料のコードに 条件分岐を追加してできています。
URLで動かすことができます。
動いてなかったら叩き起こしてあげてください。
画像を保存する機能はついていません。
安心して遊んでください。
紹介したアプリを使ってみたいと思います。
まずは、猫の写真を物体検知にかけてみたいと思います。
YOLOは、物体を検知した場合、バウンディングボックスという長方形で物体を囲みます。
左上に各ボックスのクラスラベルを表示します。
またその横に信頼度スコアを表示します。
このアプリは、猫を判定した場合猫の信頼度スコアごとに表示されるコメントが変わる設定になっています。
猫の写真は横顔や顔だけのもの、不機嫌でも 耳が見えない程ふわふわでも 信頼度スコアが高く検知できることがわかりました。
今度は、ハムスターの写真を物体検知させようと思います。
人の目からは「コケててかわいいハムスター」と認識できると思います
条件分岐的に、「猫以外判定するつもりはありません」と出てきてほしいところです。
YOLOは、なにと判定するのでしょうか?
ねこ と判定されました。
しかも、横顔の猫と同じぐらいの高い信頼度スコアの0.64です。
今回使用したYOLOv8は、既存モデルとしてクラスラベルを80個デフォルトで学習してあります。そこには、ハムスターはありませんでした。
これは私の予想なのですが、YOLOはハムスターに近しいと感じたクラスラベルの猫として検知してしまったのでないかと思いました。
日本人にとって一番有名な青いねこ型ロボットも試してみました。
さて、YOLOは一目みた時の印象はなんでしょうか?
日本人にとっては、「ねこ」と認識しています。
たぬきだった気がしたあなたは
もう一度「ドラえもん」を履修することをおすすめします。
・・・ねこではない判定が出てしまいました。
これは、本当にたぬきかもしれません。
なんで作ったの?
なぜこのアプリを私が作成したかですが、
「猫が好きで、YOLOのクラスラベルのねこ で遊んでいたら、「ハムスターの写真」もねこ判定されてしまいました。
色々判定が甘くて面白かったためです。
たったそれだけと思われるかもですが
ここ重要だと思っています。
だって、そこを深ぼれば面白そうじゃないですか?
人間の目には、ハムスターはハムスターとしか認識できません。
なのにYOLOは、「ねこ」にみえると言っています。
この認識の誤差はかなり面白いし、YOLOがどうみているのかは、エンジニアならば気になるじゃあないですか!
私は気になったのでつくってみました!
大変だったこと
基本的には資料を参考に作りました。
そのため、画像読み込みや
ねこの判定方法は教えていただいていた ため詰まることはありませんでした!
しかし、画面に表示されている信頼度スコアがどこの変数に入っているか。そして、その数値が取り出せるかがわかりませんでした。
Pythonに慣れていないため そこでつまずいてしまいました・・・
幸いブラウザでのデバックが簡単なストリームリットを使っていたのでデバックしてそれらしき変数の中身を確認しつつ進めました。
信頼度スコアの出し方は、プログラミングスクールの友達に話を聞いてもらいつつ、組み込み関数を教えてもらいできました!
また、デプロイに関して資料には記載にあったのですが実際には やっていなかったためそこにも躓きました。
デプロイ自体は参考資料にかいてくださっていました。
でも、importエラーがでる・・・
参考資料は大変手厚く書いてくださっていたため、原因はすぐにわかりました。
ライブラリがデプロイに対応していませんでした。
参考資料通りに行い再度デプロイ!
うまく いきました!
ストリームリットが用意してくれているデプロイ方法が本当に簡単で助かりました!
今回の学び
人は多分正確さを求め続けると思っています。
でもまだYOLOは誤差だらけです。
ここって、お遊びではとても楽しいと思いませんか?
また、遊んでいる際になにが誤差の原因なのか特定とかできたら素敵だと思います。
今回初めて知ったストリームリットは本当に簡単にアプリを作ることができます。
上記の「楽しい!」をすぐにみんなに共有できたことが今回いい経験でした。
まとめ
ストリームリットはかなり簡単にブラウザにいろんなものを表示することができる。
Pythonで計算したものを人に伝えやすいように図や文字列等を作成してくれて、ブラウザに表示してくれます。
人と意思疎通するのにかなり便利だと思いました。
YOLOは導入や使用コードが簡単でした!
わかりやすいし、無料で使え試しやすいです!
ただ、コード自体が重いためそこは検討に入れる方がいいと思います。
また、「クラスラベルのねこ」でも間違えることを頭に入れておいた方よいと認識しました。
今回使用した技術は二つとも実装してて面白かったです!
今後も個人の勉強用アプリは、少しずつ作っていきたいと思います!
アプリ制作を通じて、自分の楽しいを伝えられたら最高です!
参考文献等
参考資料として、Pyladies東京の勉強会資料です。
今回のスライドを作る際も大変お世話になりました!
センキュー!
下記に作ったアプリです。
上から、アプリのURL
GitHubのURLを公開しています。
このアプリはファイル1ページしかありませんので、気になる方は見てくださると幸いです。