画像分類アプリ

2025年技術ブログ集

その1 画像分類の歴史 

2015年Tensorflowがwindows対応し、2017年SonyからNNC(Neural Network Console)がリリースされました。コードレスで画像分類ができる優れものでCNNのほかResnetモデルも準備されていました。学習にはパワフルなPCが必要でしたが推論は普通のノートPCやラズパイでリアルタイムで行うことができました。その後YOLOのような物体検出と分類を同時に処理するものが現れ、画像分類のスケーラビリティが向上しました。2022年以降はK210に代表される安価なAIチップで1000分類モデル(量子化モデル)を使った転移学習により、数枚の画像から顔認識などの学習+推論をエッジマイコンで行えるようになりました。K210開発ボードの評価 | TWINKLE TEC
欠陥検出や分類などの人間でも難しい分類は、いまだに多くの教師画像を使った学習が必要です。欠陥検査技術の動向と金属欠陥検出試験報告 | TWINKLE TEC
2025年にローカルで動かせるマルチモーダル生成AI(VLM:Visual Language Model)として、llama3.2-visionやgemma3:12bなどがリリースされました。画像とプロンプトを与えると与えた画像について解釈しコメントを返すようなことができます。なので1枚目の画像に分類する画像を詰め込んで、プロンプトで分類のコツを伝えます。この段階でVLMは画像分類の自己判断基準を確立します。次の画像は検証用の画像で1枚目で確立した基準をもとに与えられた検証画像を分類するように指示します。
こんなことで本当に高度な画像分類が可能なのかと私自身も疑っていましたが、予想以上の効果が得られることがわかりました。そこで、汎用性のあるアプリに仕上げて、いくつかのケースを試してみることにしました。この方法の最大のメリットは学習コストです。まず。アボカドの熟度分類について従来AI(ResNet)で行った例を示します。
アボカドは未熟なものは緑色です。時間がたつと茶褐色に変色し柔らかくなり食べられなくなります(過熟)。以下のようにプロの選別者が5分類(未熟C0,過熟はC4、その間をC1,C2,C3に分類)したアボカドの画像各108枚を学習データに使用しました。学習には、Sony製NNCでResNetを使用しました。検証には同じカテゴリの学習に使用してない画像各12枚を学習後のモデル精度検証に使いました。

検証画像60枚の推論結果を示します。カテゴリの正解率は59/60で良好な結果が得られました。混同行列の対角成分(自己正解確率)を計算しました。Y0(C0:硬い)よY4(C4:過熟)の正解確率は非常に高いのですが、その中間のY1,Y2,Y3の正解確率は低く中間段階の分類の難しさが理解できました。

ところが、第1回実験(夏)で生成した分類モデルを使って第2回実験(冬)画像からランダムに抽出した60枚の画像を使い熟度を推論させてみました。分類正解率は47/60 =78%に低下してしまいました。(98%→78%)

第1回(夏)実験で生成した分類モデルは万能ではありません。季節によりアボカドの種類が変わったことや検査員の違いによる官能基準の設定に問題があると考えられます。また、Deep Learningのモデルは完全なブラックボックスです。何を基準に分類しているのか明確ではありません。(おそらく色と形) 一方、VLMによる分類では、AIを分類職人に仕立てているので、AIは何を基準に分類するのかを確認することができます。
VLMによる分類試験に使用した分類画像と検証用画像を示します。

学習画像に加えて、学習用のプロンプトをVLMに与えます。内容を以下に示します。
“この画像にはC0〜C4の果実分類の見本があります。C0は未熟レベル、C4:は過熟レベル、C1〜C3は未熟から過熟への熟度進行中です。分類は色合いだけでなく表面のごつごつとした状態も基準とします。この基準を理解しましたか?簡潔に説明してください。”
VLMモデルとして、llama3.2-visionを使用しました。VLMからの回答を以下に示します。C0~C4について、色と表面の模様を基準に分類していることがわかります。色は緑から褐色そして黒くなること、表面の模様が見えにくくなる(ごつごつからつるつる)と言っています。

C0~C4の検証画像での正解率は5/5でした。以下C1とC2の検証画像を見せ、プロンプト“この画像から熟度のカテゴリーを推定してください。”と与えた場合のVLMからの回答を示します。分類の根拠も述べてくれます。従来の画像AIとは一線を隔しています。人間に近い感覚で分類しています。

その2 VLMによる画像分類アプリの開発 

最近の私の開発スタイルは、WEB検索をして記事を参考にすることはしなくなりました。コードに関して不明なことなどは、Copilotに頼っています。従来より1桁くらい早くゴールにたどり着いているように感じています。Copilotは私の優秀な相棒です。これから歳をとっていっても、ボケても付き合ってくれそうなラスカル(アライグマ)のような存在で心強く思っています。マイクロソフトさん、友達をくれてありがとうございます。
アプリは、OpenWebUIで試行した内容をコードにするだけです。GUI化する前にVLMとの2STEPのやり取りを行います。OllamaのREST_API経由でVLMと接続します。また、VLMはchatモードを使います。1回目は、学習画像“train.png”にコード中で、学習用プロンプトを記述しています。(後ほど“train.txt”とします)AI自らが学習したことを確認します。2枚目の検証画像を入力します。その画像に対して分類結果をAIが出力します。

テストコードの出力結果を示します。OpenWebUIと同じことができています。

テストコードをベースにGUI化を行いました。VLMアプリの汎用性を持たせるため、“train.png”と”train.txt“は固定名称として読み込むことにしました。

GUI化は、pythonの標準ライブラリであるtkinterを使用しました。また、ノートPCでも動かせるようにVLMモデル容量が小さい「gemma:7b」を使いました。以下にGUI画面と併せて簡単な操作方法を示しました。学習画像のサイズですが、大きすぎるとVLMへの負荷が大きく、小さすぎるとVLMが認識しずらくなります。1280×720,96dpiとしています。(PowerPointでpngにexportするサイズです)
GUIの上半分が学習ステップです。左から学習画像、学習プロンプト、AIの分類確認コメントです。GUIの下半分は、左側から検証用画像(ブラウズできます)、分類指示プロンプト(複数枚の画像を分類する場合は、プロンプトの内容を編集してください)、分類結果と理由が表示されます。GUI下半分(推論)は繰り返し操作ができます。
ほかの画像分類へ応用する場合は、“train.png”と”train.txt”の内容を変え、カレントフォルダーに入れておけば対応できます。

その3 VLM画像分類アプリの応用例1 

まず、金属表面に刻印された文字認識を人間に代わって行うという例を示します。文字認識なら、「tesseract」や「easyOCR」などのOCRライブラリを使えばよいと思われるかもしれませんが、辞書にない文字とか、傾いている文字は認識できません。それなら、VLMを素直に使えば傾いた文字でも辞書になさそうな文字でも42か国の文字を学習しているVLMなら何とかなるのではないかと考えましたが、これがどうにもなりませんでした。ローカルVLMでgemma3シリーズの最高峰gemma3:27bの結果をしまします。「304」「H」「Ⅲ」を認識しましたが、商標〇HはVLMに登録されてないため正確に把握出来ませんでした。文字認識ではだめです。刻印の種類は6種類でそれらの組み合わせです。画像学習で対応してみました。

6つも刻印画像を各3枚切り出し、各分類ラベルを覚え込ませます。VLM自身がどのように分類できるかを確認します。次にテスト画像を見せて何が読み取れるかをリクエストします。「」で記載した分類ラベルもきちんと確認していることがわかりました。

VLM画像分類アプリの応用例(金属刻印文字)
VLMによる画像分類アプリを試しました。検証画像を与えて、正しい推論ができているかを確認しました。VLMにはgemma3:12bを使用しました。まず商標文字「マルエッチ」を含んだ検証画像の結果です。3つの刻印がありますが3つとも正解でした。

次の検証画像にも3つの刻印が含まれています。下側は光の反射で読みずらいのですが、3つとも正しく読み取っています。

VLM画像分類アプリの応用例(アボカドの褐変異常の検出)
次の画像分類はアボカドヘタ部の褐変検出の例です。アボカド熟度はC0~C4で色と表面の模様からVLMが判定しましたが、アボカドの腐敗は多くの場合ヘタからの細菌の侵入により起こるといわれています。ヘタの周りの色味と感触を診て人間が判断しています。素人には判りずらいです。熟度には関係なく固いアボカドと柔らかいアボカドの中に含まれています。ヘタ周りの色分解データを使って分離をしようとしたこともありますが、ヘタとヘタ周辺の領域分離が難しく断念した経緯があります。

固いアボカドと柔らかいアボカドのヘタ周りの写真を示しますが、ヘタがとれているものもありますが、ヘタの周辺が黒っぽくなっていると褐変の可能性が高いといわれています。(Hは固いアボカド、Sは柔らかいアボカドです。)

専門家により褐変ありなし(NG/OK)の分類を行いました。学習画像は「OK」「NG」それぞれ6枚を使いました。また学習プロンプトは、”この画像はアボカドのへたの画像です。「OK」に分類された6枚の画像はヘタの付け根周辺が新鮮に見え緑っぽいものが多いです。「NG」に分類された6枚の画像はヘタの付け根周辺が灰色か黒っぽいです。ヘタがとれている画像ももありますがヘタがあった付け根周辺の分類基準は同じです。「OK」と「NG」の判定基準を理解しましたか?簡潔に説明してください。“としました。

検証画像は3つを1枚にまとめていますが、OK,NG,OKと判断しています。(H21=OK,S23=NG,S17=OKです。3つとも正解です。)少ない画像でここまで判別できるとは思っていませんでした。少ない学習画像をプロンプトで補助することで、効率の良い学習ができたものと考えられます。

その4 VLM画像分類アプリの応用例2(音響分類) 

私は、かつて製造工場で働いていた経験があります。組み立て装置の加工点のエア漏れが原因でM菱様に高額な賠償を支払った苦い経験があります。装置の音で異常を検知したり原因を推定したりするプロがリーマンショックで辞めてしまい、誰も装置の異常に気付けなったことが原因でした。その後、IoTやらDXやら流行しました。大嫌いです,,,,言うのはよいのですが、お前がやれよと言いたい場面になん踊可遭遇しました。金があれば専門業者に丸投げしておけば内容は理化しなくてもとりあえずやったことになりますかね。時間稼ぎだけですけど。こんな人ばかりが増えたら,,,将来が心配です。なんか、今日は愚痴っぽいジジイになってしまいました。まあ、明日には、ぽっくり逝ってもおかしくないジジイなのでいらない心配はせず笑顔で毎日を過ごしたいと心がけています。
音による異常検知を生業にしている日本のTOP10メーカーという情報がありました。ランキングは、クリック回数という怪しい指標ですが、上位5社中4社はマイクをセンサにして異常測度を検出しているだけでした。正常か異常かの判定と、異常の度合いがどの程度か検出するだけでも生業になるんですね。1社だけCTC(BrainSolution)という2021年ころにぽっとでの自動車会社関係のベンチャーがスペクトラム解析をしているようです。音を可視化すると分類がし易いのかもしれません。本業は画像AI系の欠陥検査でしたか。

異常検知の手法は、超古典的な手法として、例えば周波数軸での正常時特徴値空間の基底分布からの距離を指標にする方法や部分空間法で近傍データ(3点以上)までの距離を指標にする方法があります。異常でない状態のデータの空間分布の母集団が大きくなれば、感度よく異常を検出できます。しかし残念ながら異常原因につながるモード分類はできません。

まず、異常検出でなく異常モード分類の手法を説明します、DeepLearningと機械学習が一般的です。CTC社のように音響スペクトラム画像でDeepLearningを利用した画像分類や複数の特徴値を利用した機械学習による分類が一般的です。どちらも2021年や2022年の段階で検討しています。センサとマイコンを使用したリアルタイムの異常検出や異常分類については、音声分類システム | TWINKLE TECInteligentSensorのGUIプログラム | TWINKLE TECハンドミキサーのモータ負荷状態測定システム | TWINKLE TECなどで取り上げています。また、別の機会に詳しく説明したいと思います。

話がだいぶ逸れてしまいましたがVLMでしたね。以前、犬の聴診音スペクトラムを抽出する装置を開発しました。同時聴診型聴診装置の開発 | TWINKLE TEC
信号処理の流れを示します。心拍数や心拍洞調律と併せて心拍スペクトラムを抽出することができます。

獣医さんの協力で、6頭の犬の心拍スペクトラムを収集しました。このうち2例は、心臓異常な犬と他覚的耳鳴りと判断された犬のものです。その他4例は特に異常なしと判断されましたが、正常な老犬のスペクトラム1件(マルチーズ)と心臓異常(トイプードル)を検証用に利用しました。VLMに与える学習画像と学習プロンプトを以下に示します。

次に、検証(推論)のプロンプトと画像を与えて、AIの診断を仰ぎました。

gemma:7bによる診断結果を示します。データが少ない中で適格な診断をしています。

最後の応用例です。過去に異音分類で使用した音声データのうち、特徴的な5スペクトラムと正常スペクトラムを学習画像として使いました。学習プロンプトで画像に付加情報を与えます。使用するVLMは「gemma:7b」と「gemma3:12b」です。

テスト画像とテストプロンプトを示します。「N1002」は吸い込み不良、「N3002」はドライ運転に近い状態のスペクトラムです。また、GUIでの処理を示しました。

gemma:7bの診断結果を示します。スペクトラムの判読はできているようです。
少ない学習データから、慎重な答え方をしているように思われます。学習データを
積み上げればより精度の高い診断ができるかもしれません。

**左画像 (N1002) のスペクトラム:**
*   **全体的な傾向:** 全体的に安定したパターンを示しており、比較的正常な状態と言えます。
*   **特定の周波数帯域のノイズ:** 1000Hz ~ 2000Hz 程度の周波数帯域に、わずかなノイズが見られます。これは、ポンプの内部部品の摩擦や、配管系の共振などが原因かもしれません。
*   **全体的な評価:** 正常範囲内にあるものの、わずかなノイズが見られるため、注意深くモニタリングする必要があります。

**右画像 (N3002) のスペクトラム:**
*   **全体的な傾向:** 低周波から高周波数にかけて、ノイズが非常に多く見られます。
*   **特定の周波数帯域の共振:** 500Hz~1000Hz の周波数帯域で、非常に強い共振が見られます。これは、ポンプの内部の部品の共振、あるいは配管系の共振などが原因かもしれません。
*   **全体的な評価:** 異常な兆候が強く見られるため、早急な点検が必要です。特に、共振周波数を特定し、原因を取り除く必要があります。

**総合的な診断:**

*   **N1002:** 正常に近い状態ですが、わずかな異常の兆候が見られるため、定期的なモニタリングが必要です。
*   **N3002:** 異常の兆候が非常に強く、早急な点検が必要です。

**補足:**

上記はスペクトラム画像のみに基づいた診断です。ポンプの機種、使用状況、過去のデータと比較するなど、より詳細な情報を考慮することで、より正確な診断が可能になります。

タイトルとURLをコピーしました