大家好,歡迎收看。我叫瑪麗蓮,是JMP公司的系統工程師。今天我想和大家聊聊如何利用JMP Pro加速礦物識別,以及如何利用人工智慧為採礦業提供洞察分析。在正式開始之前,我先簡單介紹一下本次演講的背景和目的。
在採礦領域,礦物鑑定和分類面臨許多挑戰。現場礦物鑑定不僅難度高,需要專業知識,而且容易出錯。傳統方法嚴重依賴人工提取待鑑定礦物的特徵,例如使用顯微鏡觀察,這既費時費力,又容易出錯。
此外,隨著採礦作業向偏遠地區或低品位礦床轉移,對現場即時礦物分類的需求日益增長。我在此海報中提出的解決方案是利用 JMP Pro 的 Torch 插件來建立一個能夠即時識別或分類礦物的模型。
今天的例子需要說明的是,運行 Torch 插件需要 JMP Pro,該插件會將圖像作為 X 或輸入,創建一個分類模型來預測未來的礦物種類。在這個例子中,我使用了一個包含 953 張圖像的資料集,這些圖像代表了七種不同的礦物,並用它來訓練一個模型,用於礦物分類預測。這個資料集是 Kaggle 資料集的一個版本。
在實際操作中,採礦工程師可能會先將礦石破碎成他們通常作業中使用的粒度,然後拍攝破碎礦石的圖像。同時,他們還需要考慮相機在光照條件下的擺放位置,以便使用於訓練模型的影像盡可能接近未來即時分類所需的影像。
今天我想帶大家一步步了解具體步驟。您將看到,只需使用一些已識別礦物的圖像,即可輕鬆快速地建立預測模型,該模型可用於在採礦作業中即時對礦物進行分類。第一步是安裝 Torch 插件,該插件可在 JMP Marketplace 中找到,適用於 JMP Pro。讓我來示範一下它的介面。
JMP 應用市場提供了許多可供下載的擴充程序,用於增強 JMP 的功能。這裡介紹的這款外掛程式名為「Torch Deep Learning for JMP Pro」。要下載此插件,只需點擊下載按鈕即可。下載完成後,將下載的檔案拖曳到已開啟的 JMP 視窗中即可完成安裝。
本頁還包含系統需求、支援的 JMP 版本、外掛程式使用說明和文件等資訊。插件安裝完成後,頂部會出現一個名為「JMP 插件」的新選單。您可以在這裡看到我的 Torch 深度學習外掛。我的 JMP 日誌中有一張圖片,展示了該插件的各項選項。
這裡有一個建立 K 折交叉驗證列的選項。我們今天就來了解一下。我們將擬合 Torch 模型。這個插件還附帶幾個範例資料集。它還提供了一些影像處理工具,可以幫助我們操作和修改影像。我們今天也會介紹其中的一些功能。下載此外掛程式後,它會自備一些模型,用戶還可以下載其他模型。此外,說明和文件也位於此選單中。
這是第一步。我已經安裝了插件。下一步是將圖像導入 JMP 並清理資料。首先,我們要將礦物影像匯入 JMP 以訓練模型。為此,我們將使用 JMP 的「匯入多個檔案」功能。在此之前,我想先向您展示這些礦物圖像在這個資料夾中的排列方式。為此,我將導入這個文件。您可以看到,這個資料夾名為“礦物圖像”,其中包含許多子資料夾。每個子資料夾都根據其中包含的礦物圖像命名。
例如,如果我進入生物類型資料夾,你會看到這裡有很多這種特定礦物的圖片。這就是這個資料集的組織方式,或者說這些圖片在我電腦上的組織方式。
現在我們要使用 JMP 的檔案匯入功能,將這些影像匯入 JMP 以便訓練我們的模型。接下來我會示範具體步驟,並在日誌中展示,然後再逐一講解。首先,我們要使用文件導入功能。這裡已經指定了包含圖像的資料夾位置。接下來,我要新增子資料夾。可以看到,這個資料夾裡還有子資料夾。我們需要新增這些子資料夾。
現在我可以看到,這裡有很多圖片。可以看到,這裡有很多JPEG格式的圖片,還有其他不同的檔案格式。我也有一些PNG格式的圖片。這完全沒問題。除此之外,我希望JMP在產生的資料表中新增一列,用來儲存檔案名稱。檔案名稱將指向包含礦物名稱的資料夾。我希望資料表中有一列包含礦物名稱,另一列包含對應的圖片。我希望JMP將所有這些文件和圖片都整合到一個JMP資料表中。
現在點選匯入,JMP 會開啟那個資料夾,把所有圖片匯入進來,也會新增一個新列,用來記錄礦物的名稱。好了,這就是產生的數據表。導入這 953 張礦物圖片真是太容易了。接下來我們來看看這裡。右邊這兩列我不需要,所以我把它們刪掉,這樣我們就能更仔細地查看資料了。
這裡每一行都包含一張礦物圖片。第二列是礦物名稱,後面依序是每張圖片的標題和JPEG檔案。我需要對資料進行一些清理工作,這是我們的下一步。
現在我們已經導入了多個文件。下一步是清理資料。清理資料的第一步是清理標籤列。我們將使用“重新編碼”和高級選項來提取資料段。我只需要包含礦物名稱的資料段。要在我的資料表中執行此操作,我可以右鍵單擊,然後選擇“重新編碼”。
我想將這些結果儲存在同一列或現有列中,我將使用熱點或紅色三角形選單來存取進階選項。我想提取一段文字。這裡我可以使用這個控制項。我想要實現的是,這是我在資料表中看到的內容,這裡我可以看到結果。
我覺得這看起來不錯。結果顯示我只會得到礦物的名稱,我可以把每個單獨的檔案名稱去掉。我確認一下,然後重新編碼。好了,我們現在得到了礦物的名稱。如果我們展開標題圖表,可以看到這些礦物名稱和我之前給你看的資料夾裡的礦物名稱一樣。
好的,這是我們的第二步。接下來我們來看看下一步,因為我們還需要做一些資料清理工作。我們要來看看這個插件中的影像處理工具。在這個特定的資料集中,我收集的礦物影像中,它們的指尖和手掌中有一些額外的物體,這可能會導致模型擬合出現一些問題。
我要修改這些圖片。我們只需裁剪它們,保留圖片中心 50% 的部分,並剪掉圖片邊緣以外的內容。為此,您可以看到這裡的圖像實用工具選單。這是 Torch 外掛的一部分。我在這裡打開 Torch 深度學習。這就是我的圖像實用工具。
好的,我們可以獲取圖像尺寸,並將其儲存在單獨的列中。我們可以根據需要調整圖像大小,放大或縮小它們。就像我剛才說的,我要裁剪它們。這裡只是簡單地展示了一下裁剪後的效果。讓我們回到資料表,使用 Torch 深度學習圖像工具外掛程式來處理這些圖像,我想裁剪一下圖像。
這個資料表中只有一列包含圖片,我可以在這裡更改設置,但這正是我想要的。這些設定參考了這個範例。有了這些設置,JMP 已經告訴我們將獲取中間 50% 的圖片,這正是我們想要的。我點擊運行。 JMP 將開始處理這些圖片。
為了方便比較,我將分別展示這些文件的修改前後對比。現在我們看到的畫面有點小問題,所以我先把這個檔案存到我的下載資料夾裡。我再重新打開它,一會兒你們就會明白原因了。
好了。我可以打開它來查看最近使用的項目。好了。這裡我想讓你們看看。請看第4行。在第4行,就在這裡,你們可以看到這張圖片裡面有一些手指,例如。在右側,我們清理並裁剪了圖片之後,你們可以看到它被放大了,我們剪掉了圖片中那些我們不想包含在用於構建模型的圖片中的多餘部分。
我們將使用新裁剪的列影像作為模型的 X 軸,Y 軸則使用礦物名稱,也就是正確的礦物名稱。接下來我們來看下一步。我們已經修改了圖像,導入並清理了數據,下一步是創建一些 K 折交叉驗證列。
為此,我們還要用到 Torch 插件。讓我來示範一下。在我的資料表中,選擇插件,然後選擇 Torch 深度學習,我們要建立一些 K 折交叉驗證列。在這個例子中,我們將查看響應列 Y,它代表正確的礦物種類,我們也將使用該列進行分層。我們在這裡創建了三列來對這些數據進行分組。
在這三列中,每列都會有五個分組。我們將使用這些 K 折交叉驗證列來建立模型。我們的想法是,每次只使用一部分資料來建立模型,用另一部分資料來測試預測結果,然後更新和改進模型。這就是我們的想法,每次只使用一部分資料。透過這個選單,我們可以建立這些分層列來實現這一點。
我這就點擊「開始」。 JMP 正在使用一些高級的實驗設計 (DOE) 技術,創建這些分組列,用於驗證和改進模型。好了。這裡我們可以看到新增了三列,分別是 A 列、B 列和 C 列。要使用所有這些列和分組進行驗證,實際上需要相當長的時間,在我的筆記型電腦上運行可能需要幾個小時。不過,如果我們正在擬合最終模型,我們可能也需要使用所有這些列,並讓 JMP 運行很長時間來擬合模型。
今天,我不會讓大家等太久。為了示範方便,我們將使用單行留出驗證法,這樣可以加快速度。為此,我將使用列實用程式並建立指示列。今天,我們將使用標記為“1”的欄位進行驗證。例如,我們可以使用這部分資料(763 行)來擬合模型,然後使用剩餘的 190 行來測試預測結果並更新模型。在這個範例中,我們將使用簡單的驗證方法。
但這就是我們透過這個外掛程式創建 K 折交叉驗證列的方法。接下來,我們要擬合這個模型並進行迭代。我的意思是,我們要先擬合模型,然後稍作調整。這些 Torch 模型有許多控制選項。我們可以更改一些小細節,看看能否提高預測效果。首先,我們要指定模型。我們要告訴 JMP 我們想要預測什麼。
我們回到數據表,開始操作。選擇插件、Torch 深度學習、Torch 深度學習。這裡,我要告訴 JMP,我要預測的 Y 值(反應變數)是礦物種類,我想基於我們之前截取的影像的 50% 區域進行預測。在這個例子中,我們只使用一些簡單的驗證,然後就確認無誤。
這裡還有更多選項可以設定。我會簡單介紹一下,關於這些選項還有很多其他文件。在這裡,我們可以控制模型的擬合方式。例如,在這個圖像模型下拉式選單中,這些模型已經用成千上萬張圖像進行了預訓練。我們將使用一個預訓練模型,然後添加我們自己的圖像來根據我們的需求自訂模型。我將選擇 Google Net。我之前用這個圖像模型處理這個特定資料集時效果不錯。當然,如果您不確定,也可以直接使用 JMP 中的預設設定。
我還要調整一下訓練輪數(epochs)。這其實就是模型遍歷資料的次數。我稍微減少一下這個數字,加快訓練速度。當然,我們也可以控制學習率,也就是模型調整前一個模型誤差的速度。然後,右邊還有一些進階選項。我回到我的日誌裡,簡單講解一下。
我們有許多進階模型控制選項,這些選項大致可以分為三類。首先是模型規格。我們要擬合的模型應該是什麼?我們有一些訓練控制選項。我們應該如何擬合這個模型?應該如何訓練它?其次,我們還有一些影像建模選項,用於處理影像。
讓我來示範一下,我們接下來會用這個模型來幫你擬合一下。如果我把選項展開到右側,你可以看到左邊這裡。看起來可能有點複雜,不過我們有很實用的懸停提示。如果你把滑鼠懸停在那裡,點擊「跳轉」按鈕,就能看到每個選項的簡要說明。深度神經網路的層數本質上類似於神經網路的節點數。為了方便舉例,我這裡就用八層。
接下來我們來看看這個儲存桶,這是訓練儲存桶。這裡我要修改一下批次大小。批次大小決定了我們一次處理多少行資料。因為我的電腦速度比較慢,所以我一次只處理 64 行資料。最後,我們來看看右側的圖像選項。這裡的圖像大小可以控制圖像的大小。我把它設定為 228。在這個資料集上,這個設定看起來效果不錯。
這就是我目前要做的全部更改。使用 Torch 深度學習擬合模型的想法是,你先在這裡擬合一個模型,然後迭代。你可能會做一些小的調整和修改,以嘗試提高模型的預測能力或性能。我現在就點擊「確定」按鈕。 JMP 將會處理這些數據,讓我們來看看會得到什麼樣的模型。
JMP執行此操作時,我們會在這個小視窗中看到一些更新,顯示目前為止模型在訓練資料和驗證資料上的效能表現。我們將專注於驗證數據,因為它能讓我們更了解模型在處理新影像時的預測效果。
這裡我查看了訓練集和驗證集的準確率,目前看來相當不錯。訓練集的準確率超過 90%,驗證集的準確率在 70% 到 80% 之間。這個模型訓練得非常迅速。如果我們採用不同的訓練方法,例如增加訓練輪數,或許就能得到一個更好的模型,而無需對現有模型進行太多改變。
但我們先來看看這裡,因為這是我們的下一步,也就是模型比較。現在我們只建構了一個模型。我們先來看看一個模型是什麼樣子。隨著我們建立更多模型,JMP 會在模型比較中添加更多信息,以便我們比較不同的模型。對於初始模型(模型 1),反應變數是礦物。這是我們輸入到視窗中以擬合模型的資訊。
我們有關於R平方的信息,但我不會去看它,因為我們不是在預測一個數值,而是在對圖像進行分類。我們更關注準確率指標,尤其是驗證準確率。目前看來效果相當不錯。我們這個訓練速度很快的模型,準確率已經接近90%。
在這裡,我們可以看到模型在訓練過程中的演變過程的圖形化表示。可以看到這裡有兩條線,一條代表訓練數據,另一條代表驗證數據。總的來說,我們可以看到,隨著訓練輪數的增加,模型的損失或誤差逐漸減少。當我們對資料進行更多遍歷,從影像中提取更多資訊時,誤差就會降低,預測結果也會得到改善。
鑑於這些曲線仍在下降,我們可能需要增加迭代次數,讓模型對資料進行更多迭代,這或許有助於改進模型。以下是一些我們可以用來評估模型表現的指標。這裡有一些實際值與預測值的比較圖,左側顯示的是實際礦物含量,下方顯示的是預測機率。基本上,這些圖的右側資料點預測效果較好,而左側資料點的預測效果則較不理想。
這裡的一切都是互動的,而且是動態的。例如,如果我們回到資料表,並將圖像列設為標籤,當滑鼠懸停在這些點上時,我們可以看到哪張圖像看起來像是石英,但由於這張圖像在圖表中非常靠左,所以它很可能被錯誤分類了。它確實是石英。我們也可以突出顯示所有分類錯誤的圖像。看起來這裡大約有 40 行。
我們可以回頭看看這些影像,看看影像是否有任何潛在問題,或者我們需要收集更多特定礦物的影像,以嘗試改進這些預測。
下面,我們再補充一些信息,看一下驗證數據的混淆矩陣。我們希望在這兩條對角線上(無論是計數還是比率),數值都很大,並且最好上方或下方都是零。
對於黑雲母,左側列出的是實際礦物名稱,右側列出的是預測的礦物名稱。黑雲母的預測準確率約為75%,硼石的預測準確率約為92%。我們可以看到每種不同模型的表現。這裡,白雲母的預測準確率是77.8%。看來,白雲母是我們用這個模型預測或分類效果最差的礦物。
同樣,就我而言,我們只有一個範例進行比較。我想在本期刊中向您展示,如果您要比較多個模型,情況會是怎樣的。隨著您擬合更多模型,調整各種選項,JMP 會不斷將這些新模型新增至模型比較。這樣,您就可以比較多個模型的驗證準確率,也可以視覺化這些模型的效能並進行比較。
再次強調,在正式部署前,盡量改進模型,找出最佳方案。我們之前簡單討論過模型比較和結果評估,現在讓我們更深入地探討一下結果評估。
這裡有一些非常棒的互動式圖表,您可以在輸出結果中看到。我想指出的是,對於您創建的每個模型,這裡還有一些額外的選項,您可以將一些內容保存回資料表。例如,我可以在這裡保存嵌入。我點擊這裡,返回數據表給您示範。
您可以看到這裡有 8 列嵌入資料。這些嵌入資料是什麼呢?如果您還記得,在模型設定中,我將神經網路的節點數設定為了 8。這就是嵌入資料的作用。這些節點是從礦物圖像中提取的特徵。如果我想將這些嵌入資料用作 X 值或輸入,以便在 JMP 中使用其他建模平台建立預測模型,我完全可以這樣做。我可以使用 Torch 提取訊息,然後用它來進行預測,或根據需要使用其他平台建立模型。
對我來說,還有一個很棒的選擇,因為我喜歡用這種方式視覺化模型的預測效果,你可以將預測結果儲存到資料表中。讓我回到數據表,給你看看它的樣子。這是我們儲存在資料表中的最有可能的預測礦物。使用圖表產生器,可以輕鬆地將實際礦物繪製在 Y 軸上。我也會將其用作顏色變數。我將把預測的礦物放在 X 軸上。
這代表什麼呢?嗯,大方框代表被正確分類的礦物,而方框外的所有點都代表被錯誤分類的礦物。這是石英,它被錯誤地分類為硼石。這是白雲母,它被錯誤地分類為生物型。這樣可以很容易看出哪些影像被錯誤分類,以及有多少影像被錯誤分類。
還有一點值得一提。從這個紅色三角形出發,我們還可以產生用於即時預測的 Python 程式碼。如果這是我們的最終模型,我們對這些預測結果感到滿意,並且想要將其實時應用,那麼我們可以把 Python 程式碼保存在這裡。不過我暫時不會這麼做,但我會回到我的日誌裡,討論一下我們可以在匯出 Python 程式碼後做些什麼。
我們希望利用這個模型進行預測。在礦場,我們可以這樣做:一旦我們訓練好模型並導出相應的Python程式碼,就可以將其整合到現場系統中。具體來說,我們需要一台攝影機來拍攝從礦井中出來的礦物或礦石。我們還需要某種邊緣設備,將我們的Python程式碼添加到該設備上,以便該程式碼能夠接收相機拍攝的礦物圖像,並快速將其分類為某種礦物。這就是我們的想法。我們可以進行即時預測。
我們能用這些資訊做什麼呢?我們可以利用這些資訊來指導決策,例如調整選礦參數。我們可以根據這些預測結果自動將礦石與廢料分類。或者,我們可能希望即時估算從礦石中提取每種礦物的量。如果這些資訊是即時取得的,那就非常有用。
最後總結一下,以下是幾個要點。希望透過今天的演示,您已經了解到 Torch 深度學習和 JMP Pro 為礦物分類提供了一個優秀的無程式碼解決方案。利用已標註的圖像可以快速訓練模型,而 JMP 擁有所有必要的工具,可以幫助我們匯入圖像、清理資料並在創建模型之前進行資料預處理。即使使用非常簡單的硬件,也能實現即時分類,這種方法有助於在採礦作業中做出更快、更準確的決策。非常感謝您的觀看。