こんにちは、ようこそ。JMPのシステムエンジニア、マリリンです。本日は、鉱業業界向けにAIを活用したインサイトを提供するJMP Proによる鉱物識別の高速化について少しお話させていただきます。まず、このプレゼンテーションの背景と目的について少しご説明させていただきます。
鉱業分野では、鉱物の識別や分類に多くの課題があります。現場での鉱物の識別は困難を極め、専門知識が求められるだけでなく、ミスが発生しやすいという問題もあります。従来の手法では、例えば顕微鏡検査を用いて識別対象の鉱物から手作業で特徴を抽出することに大きく依存しており、これは労働集約的で時間がかかり、ミスが発生しやすいという問題がありました。
さらに、採掘事業がより遠隔地や低品位の鉱床へと移行するにつれて、現場でのリアルタイム鉱物分類の必要性が高まっています。このポスターで提案するこれらの課題に対する解決策は、JMP ProのTorchアドインを活用して、鉱物をリアルタイムで識別または分類できるモデルを構築することです。
本日の例では、画像をXまたは入力値として用いて将来の鉱物を予測する分類モデルを作成するTorchアドインを実行するにはJMP Proが必要であることをお知らせします。この例では、7種類の鉱物の画像953枚を含むデータセットを使用し、鉱物分類のための鉱物予測モデルを学習しました。このデータセットは、Kaggleのデータセットのバージョンです。
さて、現実世界では、鉱山技師は鉱石を通常の作業で使用するサイズに粉砕し、粉砕された鉱石の写真を撮影するでしょう。その際に、モデルの学習用に撮影する画像が、将来の分類のためにリアルタイムで撮影する画像にできるだけ近くなるように、照明の中でカメラをどこに設置するかについても検討するでしょう。
今日は、その手順を順にご説明したいと思います。既に特定されている鉱物の画像をいくつか用意し、鉱業現場でリアルタイムに鉱物を分類できる予測モデルを素早く構築することがいかに簡単か、ご理解いただけると思います。まずはTorchアドインをインストールしてください。これはJMPマーケットプレイスからJMP Proにダウンロードできます。その使い方をご説明しましょう。
JMPマーケットプレイスには、JMPの機能を拡張するための拡張機能が多数ダウンロードできます。今回ご紹介するアドインはここにあります。「Torch Deep Learning for JMP Pro」です。このアドインをダウンロードするには、ダウンロードボタンをクリックするだけです。ダウンロードが完了したら、ダウンロードしたファイルを開いているJMPウィンドウの上にドラッグ&ドロップしてインストールできます。
このページには、システム要件やサポートされているJMPのバージョン、ヘルプ、アドインの使用に関するドキュメントも掲載されています。アドインをインストールすると、JMPの画面上部に「アドイン」という新しいメニューが表示されます。ここに、Torchディープラーニングアドインが表示されています。JMPジャーナルに、このアドインのオプションを示す画像があります。
K分割検証列を作成するオプションがあります。今日はこれについて見ていきます。Torchモデルをフィッティングします。このアドインには、いくつかのサンプルデータセットも付属しています。画像の操作や変更に役立つ画像ユーティリティもいくつかあります。今日はこれらのオプションについてもいくつか見ていきます。このアドインをダウンロードすると、特定のモデルが付属するほか、アドイン用の追加モデルもダウンロードできます。ヘルプとドキュメントもこのメニュー内にあります。
これがステップ1です。アドインはインストール済みです。次のステップは、画像をJMPにインポートし、データをクレンジングすることです。まず、モデルのトレーニングに使用する鉱物画像をJMPにインポートします。そのためには、JMPの複数ファイルインポート機能を使います。さて、その前に、このフォルダ内でこれらの鉱物画像がどのように配置されているかを確認したいと思います。そのために、このファイルを移動します。このフォルダの名前は「mineral images」で、その中にはたくさんのサブフォルダがあります。それぞれのサブフォルダには、含まれている鉱物画像の名前が付けられています。
例えば、バイオタイプフォルダを開くと、特定の鉱物の画像がたくさんあることがわかります。これがこのデータセット、あるいは私のマシン上での画像の整理方法です。
JMPの「ファイル」機能と「複数ファイルのインポート」機能を使って、これらの画像をJMPに取り込み、モデルを学習させましょう。手順を説明します。まず、ジャーナル内の手順と、各手順で実行する内容を説明します。まず、「ファイル」機能を使って「複数ファイルのインポート」を行います。これは既に画像が保存されているフォルダの場所に設定されています。次に、サブフォルダもインポートします。このフォルダには他にもフォルダがあるのが分かります。サブフォルダもインポートします。
下の方に画像が表示されています。JPEG画像がたくさんあり、ファイル形式も様々です。PNG画像もいくつかありますが、これは問題ありません。それ以外は、JMPで結果のデータテーブルにファイル名の列を追加したいです。ファイル名は、鉱物のタイトルが含まれているフォルダを参照します。鉱物の名前の列と、データテーブル内の対応する画像を含む列を作成します。JMPでこれらのファイルと画像をすべて1つのJMPデータテーブルにまとめたいです。
では、「インポート」をクリックすると、JMPがそのフォルダを開いて、すべての画像と鉱物名が入った新しい列を読み込みます。さあ、始めましょう。これが結果のデータテーブルです。これらの鉱物の953枚の画像をインポートするのは本当に簡単です。それでは、こちらを見てみましょう。右側の2つの列は不要なので削除します。これで、データがどうなっているか詳しく見ることができます。
ここの各行には、鉱物の画像が1つずつ入っています。2列目には、鉱物の名前と、それぞれの画像のタイトル、そしてJPEG画像があります。少しデータの整理をする必要があります。それが次のステップになります。
これで複数のファイルをインポートできました。次のステップはデータのクリーニングです。まずはラベル列をクリーニングします。「再コード」と詳細オプションを使ってセグメントを抽出します。鉱物名のセグメントだけを抽出したいので、データテーブルで右クリックして「再コード」を選択します。
これらの結果を同じ列、または既存の列に保存し、ホットスポットまたは赤い三角のメニューから詳細オプションにアクセスします。テキストセグメントの一部を抽出したいのですが、ここでこのコントロールを使用できます。繰り返しますが、私がやりたいことは、データテーブルにある内容と同じです。ここで結果を確認できます。
これはかなり良さそうです。結果を見ると、鉱物の名前だけが残っていて、個々のファイル名を削除してOKを押して再コーディングできます。さあ、始めましょう。鉱物の名前ができました。ヘッダーグラフを展開すると、先ほどお見せしたフォルダにあった鉱物の名前と同じであることがわかります。
さて、これが2番目のステップでした。もう少しデータクリーニングが必要なので、次のステップを見てみましょう。このアドイン内の画像ユーティリティを見てみましょう。このデータセットでは、鉱物の画像に指や手に余分なものが含まれているため、モデルのフィッティングに問題が生じる可能性があります。
これらの画像を修正します。画像の中央50%を残し、画像の外側にあるものはすべて切り取ります。これを行うには、ここにある画像ユーティリティメニューを使用します。これはTorchのアドインの一部です。Torchディープラーニングにアクセスします。これが私の画像ユーティリティです。
画像のサイズは別の列に保存できます。画像のサイズは、必要に応じて大きくしたり小さくしたりできます。先ほど言ったように、画像を切り抜いてみます。これは、どのように見えるかを示したものです。データテーブルに戻り、Torchディープラーニングのアドインである画像ユーティリティを使って画像を修正してみましょう。画像を切り抜きたいと思います。
このデータテーブルには画像を含む列が1つだけあります。ここで設定を変更できますが、これがまさに私が求めているものです。設定はこの例に従っています。この設定で、JMPは既に画像の中央50%を取得すると表示しており、まさに私たちが求めているものです。さあ、実行してみましょう。JMPがこれらの画像を操作します。
比較のために、それぞれのビフォーアフターを少しお見せします。今ご覧いただいている画像には少し不具合がありますので、このファイルをダウンロードフォルダに保存します。もう一度開いてみてください。すぐにその理由が分かります。
さあ、始めましょう。最近使ったアイテムを開いてみます。さあ、見てください。4行目を見てください。4行目のここに、例えばこの画像に指がいくつか写っているのが分かります。右側は、画像をクリーンアップしてトリミングした後で、少し拡大されているのが分かります。モデル構築に使用する画像には含めたくない余分なものが切り取られています。
新しい列の画像切り抜きをモデルのX軸、Y軸として鉱物、正しい鉱物を使用します。次のステップを見てみましょう。画像を修正し、データをインポートしてクリーンアップしました。次のステップは、K分割検証列を作成することです。
これを行うには、このTorchアドインも使用します。どのように見えるかお見せしましょう。データテーブルで、アドインのTorchディープラーニングを選択し、Kフォールド列をいくつか作成します。今回は、正解の鉱物であるY列に注目し、この列を層別化にも使用します。ここでは、このデータをグループ化する3つの列を作成します。
これら3つの列にはそれぞれ5つのグループがあります。モデル構築の検証には、これらのK分割列を使用します。モデル構築にはデータの一部のみを使用し、残りの部分は予測値の検証とモデルの更新・改善に使用します。つまり、一度に少しずつデータを使用するということです。このメニューを使って、それを可能にする層別列を作成しています。
さあ、実行してみましょう。JMPは高度なDOE(実験計画法)手法を用いて、モデルの検証と改善のためのグループ化列を作成するという、実に高度な処理を実行しています。さあ、始めましょう。折り畳みA、折り畳みB、折り畳みCという3つの新しい列があるのがわかります。これらの列とグループ化をすべて検証に使うと、実際にはかなり時間がかかります。私のノートパソコンで実行すると数時間かかるかもしれません。最終的なモデルを当てはめる場合は、おそらくこれらの列をすべて使って、JMPにモデルの当てはめを長時間実行させるでしょう。
今日は、皆さんをそんなに長くお待たせしません。デモの目的に合わせて、処理を少し速くするために、シングルホールドアウト検証を使用します。そのために、列ユーティリティを使ってインジケーター列を作成します。今日の検証では、この1番の列を使用します。例えば、このデータ部分、つまり763行をモデルの適合に使用し、残りの190行を予測のテストとモデルの更新に使用します。この例では、単純な検証を使用します。
このように、このアドインを使ってK分割検証列を作成できます。次のステップは、このモデルを当てはめて反復処理することです。つまり、モデルを当てはめてから少し調整するということです。これらのTorchモデルには多くの制御機能があり、これらの小さな変更によって予測精度が向上するかどうかを確認できます。まず、モデルを指定します。JMPに予測したい内容を伝えます。
データテーブルに戻って、これを実行してみましょう。アドイン、Torchディープラーニング、Torchディープラーニング。ここで、JMPに予測したいY、つまりレスポンスが鉱物であることを伝え、画像の50%のクロップに基づいて予測します。この例では簡単な検証を行い、OKとします。
ここで指定できるオプションは他にもたくさんあります。ここでは簡単に説明しますが、これらのオプションについては他にも多くのドキュメントがあります。ここでは、モデルの適合方法を制御できます。例えば、この画像モデルのドロップダウンには、何千枚もの画像で事前学習されたモデルがあります。事前学習済みのモデルを使用し、独自の画像を追加して、ニーズに合わせてモデルをカスタマイズします。私はGoogle Netを選択します。この画像モデルでは、この特定のデータセットで良好な結果が得られました。よくわからない場合は、もちろんJMPのデフォルト設定をそのまま使用しても構いません。
ここでエポック数も調整します。これは実際にはデータのパス回数です。処理速度を上げるために、この数値を少し減らします。もちろん、学習率、つまりモデルが以前のモデルの誤差にどれだけ早く適応するかも制御できます。そして、右側にさらに高度なオプションがあります。ジャーナルに戻って、これらについて簡単に説明しましょう。
高度なモデルコントロールが多数用意されており、これらは3つのカテゴリに分類されます。まず、モデル仕様です。フィッティングするモデルはどのようなものでしょうか?トレーニング用のコントロールもいくつかあります。このモデルをどのようにフィッティングするべきでしょうか?どのようにトレーニングするべきでしょうか?次に、画像モデリング用のオプションがあります。画像の操作や処理を行います。
それがどのように見えるかお見せしましょう。それでは、このモデルを当てはめてみましょう。右側のオプションを展開すると、左側のオプションが表示されます。少し複雑に見えるかもしれませんが、便利なホバーヘルプがあります。マウスで囲むと、ジャンプボタンがそれぞれのオプションの目的について簡単なヒントを表示します。ディープニューラルネットワークのレイヤー数は、ニューラルネットワークのノード数と基本的に同じです。この例では8とします。
次のバケットを見てみましょう。これはトレーニングバケットです。ここでバッチサイズを変更します。バッチサイズとは、一度に処理するデータ行数です。私のコンピューターはそれほど高速ではないので、一度に64行のデータだけを確認したいと思います。最後に、右側に画像オプションがあります。画像サイズは画像のサイズを制御するのに役立ちます。ここでは228に設定します。このデータセットでは、これで問題ありませんでした。
とりあえず変更するのはこれだけです。Torchディープラーニングを使ってモデルをフィッティングするというのは、まずモデルをフィッティングし、それを繰り返していくというものです。モデルの予測能力やパフォーマンスを向上させるために、細かい調整や変更を加えることもあります。とりあえずOKを押します。JMPがデータを処理し、どのようなモデルが得られるか見ていきます。
JMPがこれを実行すると、この小さなウィンドウにいくつかの更新が表示されます。これは、学習データと検証データの両方における、これまでのパフォーマンスを示しています。学習データとは、モデルの学習と検証に使用されたデータです。検証データの数値に注目してください。新しい画像を与えたときに、このモデルがどれだけ正確に予測できるかをより正確に把握できるからです。
ここでは、トレーニングと検証の両方の精度を確認していますが、今のところかなり良好です。トレーニングデータでは90%を超えており、検証データでは70%から80%程度の精度です。これは非常に短時間でトレーニングしたモデルです。例えば、異なるオプションを使用してエポック数を増やすことで、既存のモデルにあまり変更を加えずに、より優れたモデルを作成できる可能性があります。
次のステップ、つまりモデルの比較なので、ここを見てみましょう。今はモデルを1つだけ作成しました。ここでは、1つのモデルでどのように見えるかを見てみましょう。モデルをさらに作成していくと、JMPはモデル比較により多くの情報を追加し、異なるモデル間の比較が可能になります。この初期モデル、モデル1では、応答は鉱物でした。これは、モデルを当てはめるためにウィンドウに入力した情報です。
R2乗に関する情報はありますが、数値を予測するわけではないので、ここでは見ません。画像を分類しているので、精度指標、特に検証精度に関心があります。これは既にかなり良い結果が出ています。非常に短時間で学習させたこのモデルでは、精度はほぼ90%に達しています。
ここでは、モデルがトレーニング中にどのように進化したかをグラフで表すことができます。2本の線があり、1本はトレーニングデータ、もう1本は検証データです。この傾向からわかるのは、エポックを経るにつれてモデルの損失または誤差が減少しているということです。画像からより多くの情報を抽出するためにデータを処理する回数が増えるにつれて、誤差は減少し、予測精度が向上しています。
これらの線がまだ下降傾向にあることを考えると、エポック数を増やしてこのモデルにデータをもう少し処理させ、モデルの改善に役立つかもしれません。これらは、モデルの性能を評価するために確認できる点の一部です。ここには、実際の鉱物と予測された鉱物の確率を示すグラフがあります。グラフの右側は、予測が良好で、左側は予測があまり良好でない点です。
ここではすべてがインタラクティブで動的です。例えば、データテーブルに戻って画像の列をラベルとして設定すると、これらの点にマウスを合わせると、どの画像がクォーツのように見えるかがわかります。この画像はグラフ上でかなり左寄りなので、おそらく誤って分類されたのでしょう。クォーツでした。正しく分類されなかった画像をすべてハイライト表示することもできます。ここには約40行ありますね。
それらの画像をもう一度見直して、画像に潜在的な問題があるかどうかを確認したり、あるいは特定の鉱物の画像をさらに収集して予測を改善する必要があるかもしれません。
下の方にもう少し情報があります。検証データの混同行列を見てみましょう。この2つの対角線、つまりカウント数を見るにしてもレートを見るにしても、この対角線には大きな数字が入り、できれば上か下にゼロがあるのが望ましいです。
黒雲母については、実際の鉱物が左側に表示され、その横に予測された鉱物が表示されています。黒雲母の精度は約75%、ボロナイトは92%です。それぞれのモデルでどれだけ精度が上がっているかが分かります。ここでは白雲母が77.8%のようです。このモデルでは、白雲母の予測や分類が最もうまくいっていない鉱物のようです。
繰り返しになりますが、私の場合、比較対象は1つの例だけです。このジャーナルに戻って、複数のモデルを比較した場合の表示例をお見せしたいと思います。追加のモデルが適合され、オプションを微調整していくと、JMPはそれらの追加モデルをモデル比較に追加していきます。そして、複数のモデルの検証精度を比較したり、これらのモデルのパフォーマンスを視覚化して比較したりすることができます。
繰り返しになりますが、先に進んで展開する前に、改善を試みて、可能な限り最適なモデルを見つけてください。モデルの比較と結果の評価については少し説明しました。結果の評価についてもう少し詳しく説明しましょう。
この出力には、とても見やすいインタラクティブなプロットがいくつかあります。それぞれのモデルについて、データテーブルに保存できる追加オプションがあることを指摘しておきます。例えば、埋め込みを保存できます。クリックするとデータテーブルに戻って、ご覧の通りです。
ここに埋め込み用の列が8つあるのがわかります。埋め込みとは何でしょうか?モデルコントロールでニューラルネットワークのノード数を8に設定したことを思い出してください。これがそのノードです。これらのノードは鉱物画像から抽出された特徴量です。これらの埋め込みを、JMP内の他のモデリングプラットフォームを用いた予測モデルのX値または入力として使用することも可能です。Torchを使って情報を抽出し、それを用いて予測を行ったり、別のプラットフォームでモデルを構築したりすることも可能です。
もう一つの優れた選択肢は、少なくとも私にとっては、モデルの予測精度を視覚化したいので、予測結果をデータテーブルに保存することです。データテーブルに戻って、どのように見えるかお見せしましょう。これは、データテーブルに保存した、最も可能性の高い、あるいは予測された鉱物です。グラフビルダーを使えば、実際の鉱物をY軸にグラフ化するのはとても簡単です。これを色変数としても使います。予測された鉱物をX軸に表示します。
これは何を表しているのでしょうか?大きな四角は正しく分類された鉱物で、その外側にある点はすべて誤って分類されています。これは石英ですが、ボロナイトに分類されていました。これは白雲母ですが、バイオタイプと誤って分類されていました。これにより、どの画像が誤って分類され、そのうちどれだけが誤って分類されたかが簡単にわかります。
もう一つ、言及する価値のあるオプションがあります。この赤い三角形から、リアルタイム予測を行うためのPythonコードを生成することもできます。これが最終モデルで、予測結果に満足し、これをリアルタイムで実装したい場合は、ここにPythonコードを保存します。今回は保存しませんが、ジャーナルに戻って、Pythonコードをエクスポートしたら何ができるかについてお話ししたいと思います。
このモデルを使って予測を行いたいと考えています。鉱山では、次のようなことが考えられます。学習済みのモデルを作成し、Pythonコードをエクスポートしたら、それを現場のシステムに統合できます。具体的には、鉱山から採掘される鉱物や鉱石の写真を撮るためのカメラが必要です。カメラで撮影した新しい鉱物の画像をPythonコードで取り込み、この鉱物かあの鉱物かを簡単に分類できるように、何らかのエッジデバイスにPythonコードを追加します。これがアイデアです。リアルタイムの予測が可能になります。
これを使って何ができるでしょうか?例えば、この情報を使って、粉砕パラメータの調整といった意思決定に役立てることができます。予測に基づいて、鉱石と廃棄物を自動的に選別したり、鉱石から各鉱物がどれだけ抽出されるかをリアルタイムで推定したりすることも可能です。情報がリアルタイムで得られるようになれば、これは非常に役立つでしょう。
最後に、いくつかポイントをお伝えします。今日のデモを通して、Torch Deep LearningとJMP Proが鉱物分類のための優れたノーコードソリューションを提供していることがご理解いただけたかと思います。ラベル付き画像を用いてモデルを迅速に学習でき、JMPには画像のインポート、データのクリーンアップ、モデル作成前の前処理など、あらゆるツールが備わっています。非常にシンプルなハードウェアでリアルタイム分類が可能になり、このアプローチは採掘作業におけるより迅速かつ正確な意思決定をサポートします。ご視聴いただきありがとうございました。