Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
機械学習で画像を分類してみた話
Search
moyashi
December 07, 2024
Technology
1
59
機械学習で画像を分類してみた話
KerasとZbarを使用して大量の画像を分類→バーコード認識した話。
画像分類は転移学習、バーコードは回転・拡大をしたら認識率があがった。
moyashi
December 07, 2024
Tweet
Share
More Decks by moyashi
See All by moyashi
自分の学習データで画像生成AIを使ってみる話
moyashi
2
570
メールを受信トレイに届けよう - Gmailガイドラインの話
moyashi
3
790
Visual Studio Codeの使い方 基礎編
moyashi
0
110
プログラミング支援AI GitHub Copilot すごいの話
moyashi
0
4k
アナログ電話のナンバーディスプレイを安価にIT化する話
moyashi
1
160
Other Decks in Technology
See All in Technology
バクラクでのSystem Risk Records導入による変化と改善の取り組み/Changes and Improvement Initiatives Resulting from the Implementation of System Risk Records
taddy_919
0
220
グループポリシー再確認
murachiakira
0
160
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.2k
Go の analysis パッケージで自作するリファクタリングツール
kworkdev
PRO
1
410
Cline、めっちゃ便利、お金が飛ぶ💸
iwamot
19
18k
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
4.9k
セマンティックレイヤー入門
ikkimiyazaki
8
2.7k
モジュラーモノリスでスケーラブルなシステムを作る - BASE のリアーキテクチャのいま
panda_program
7
2k
Cloud Native PG 使ってみて気づいたことと最新機能の紹介 - 第52回PostgreSQLアンカンファレンス
seinoyu
1
180
問題解決に役立つ数理工学
recruitengineers
PRO
7
1.8k
一人QA時代が終わり、 QAチームが立ち上がった話
ma_cho29
0
290
Engineering Managementのグローバルトレンド #emoasis / Engineering Management Global Trend
kyonmm
PRO
6
980
Featured
See All Featured
RailsConf 2023
tenderlove
29
1k
Become a Pro
speakerdeck
PRO
27
5.2k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Documentation Writing (for coders)
carmenintech
69
4.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How GitHub (no longer) Works
holman
314
140k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Making Projects Easy
brettharned
116
6.1k
Transcript
機械学習で画像を 分類してみた話 2024/12/07 伊勢IT交流会
もやし工房 石黒 光茂 @koike_moyashi mitsushige.ishiguro もやし工房
写真ファイルを分類する ▪□□□□□□□□▪□□□□▪□□▪□□□□□□▪□□□□... やること ▪はバーコードを適当に写した写真 □は商品の写真
写真ファイルを分類する ▪□□□□□□□□▪□□□□▪□□▪□□□□□□▪□□□□... ↓ ▪□□□□□□□□ ▪□□□□ ▪□□ ▪□□□□□□ ▪□□□□ やること バーコード写真と商品写真を分類
バーコードの数字のフォルダを作成して入れて、 サーバに自動アップロードする + WebUI付ける ▪はバーコードを適当に写した写真 □は商品の写真
写真ファイルを分類する • 画像分類→機械学習 • バーコード検出→オープンソースのソフト やること
画像分類 Google の TensorFlow などを、 さらに簡単に使える(Tensorflowをバックエンドとして使う)、 Kerasと言うPythonのライブラリを使ってみる。 機械学習 / Keras
https://keras.io/
学習させてみる 学習元の▪は5000枚、□は8000枚程度 Kerasのチュートリアル + GitHub Copilotの助けを借りながら、 学習用のコードを書いてみた。 学習させてみる
学習させてみる→いまいち なんかいまいち。ざっくり90~95%くらいの精度。 結果 この時点ではグラフの意味もイマイチ分からなかったが、あんまり結果が良く無いぽい事はわかった。
よくネットとかで見るグラフ チュートリアルにも読み方が書いてあった グラフの見方 • Training 学習元データで検証 • Validation 検証用データで検証 •
結果は、はい/いいえ ではなく自信度(確信度)みたいなので出てくる。 バーコード(0.85)的な。= 85%の確率でバーコード。 • Epoch 学習回数。たくさんすればよいと言うこともない • Accuracy モデルがどれだけ正しく予測できたかの割合 • Loss 予測がどれくらい間違っているか EpochをあげるつれてLossが下がっていくと良い 増えていったり、Validationだけ上がってくと何かおかしい Epochをあげるつれて正確度が上がっていくと良い 両方あがってくと良いけどそうじゃないなら何かおかしい
転移学習で学習 なんやかんやあって、 「転移学習」ってのを使うと良いぽいことがわかった 精度を上げられないか…
転移学習で学習 • 既に学習済みのモデルを転用して、新たなモデルを生成する方法 • 学習済みモデルは色んなものを既に学習してるので、 今回のような2分類しかしない独自のデータでは邪魔なだけかと思ってたけど、 そうじゃないぽい • よく聞くファインチューニングとは、 ちょっとだけ意味合いが違うらしいけど
似たもの。 転移学習とは Zero to Oneから引用 https://zero2one.jp/ai-word/transfer-learning/
学習済みモデルは色んな種類がある VGG16:シンプル ◯:実装が簡単で理解しやすい。多くのコンピュータビジョンタスクで広く使用される。 ✕:モデルサイズが大きく、計算コストが高い。 ResNet50:深いネットワークを効果的にトレーニング可能 ◯:計算効率が高く、深い層でもなんだか良い感じ。 ✕:ネットワーク構造が複雑。 MobileNet:軽量で、モバイルや組み込みデバイスで良い感じ ◯:モデルサイズが小さく、計算速度が速い。 ✕:高精度を求められるタスクには向かない。
その他、EfficientNet、InceptionV3、Xceptionなど 既に学習済みのモデル ↓5年前MobileNetを使ったml5.jsを試してみたやつ https://www.slideshare.net/slideshow/ss-208636922/208636922
モデルを比較してみる 説明を見てもよくわかなかった&今回は少々遅くても良かったので、 VGG16、ResNet50V2、EfficientNetを 同一条件で比較するようなコードを書いて結果を見てみた。 既に学習済みのモデルを利用
モデルを比較してみる 既に学習済みのモデルを利用 ネットの記事でよくみるグラフの形! (VGG16はちょっとだけ結果が良くなかったので省いてある)
転移学習の結果 • ResNet50 V2が結果がやや良かったのでこれで。 2分類なので?正解率は99%くらい。すごい。 • 学習はPCのGPU使って15分程度。 前回発表した画像まねっ子の学習時間を思うとあっと言う間と言う印象。 • 学習結果を使う側はCPUのみ。そこまで遅くはない。
既に学習済みのモデルを利用
バーコードを認識させる • それなりに歴史のあるZBarと言うソフトをPythonから利用(pyzbar) 綺麗に撮れてる場合、斜めとかでもちゃんと認識する。 • バーコードは適当に撮られてて小さかったり暗かったり回転してたりで、 機械学習で「バーコードぽい」と分類できても、認識してくれない(取得率 85%くらい)。 バーコード読み取り /
ZBar 回転 暗い 一部怪しい 小さい・複数
バーコードを認識させる • 画像処理ライブラリ(OpenCV)で少しづつ回転させたり、拡大したり、 明るさ変えたりで 97%くらいに。ただ、処理に時間かかる。 拡大、回転が効果があった。機械学習でバーコードだけを抜き出そうとしたけど、自分にはできなかった。 • バーコードは決まったフォーマットで、決まった角度から写してもらえば、認識度はあげられそう。 バーコード認識も機械学習で行けるのかもしれない。 •
有料のライブラリを使うと精度は高かった(値段も高い) バーコード読み取り 回転 ↓ 少しづつ回 転 一部怪しい ↓ 補正 小さい・複数 ↓ 拡大 暗い ↓ 明るく
今のところ100%の精度は厳しそうだけど、今後は色々使えそうで楽しい • 今回のケースでは2分類程度であればかなり賢かった。使う側もそこまで重いわけでもない。 ただ、100%分類できるわけではない。 • 自分が未知の分野は生成AI助かる。今回はOpenCV関連でかなり助けてもらった。 • これ系は色んな人を助けられそうな気はするけど、 クライアントワークではあんまりしたくない気もする。 微妙な”できなさ具合”を上手く説明でき、お客さんに理解してもらえるか…
まとめ 点