MindSpore21天實戰營(3)使用MindSpore實現Resnet50毒蘑菇識別
白雪公主和毒蘑菇的故事還是要繼續的。。。
話說,華為的MindSpore大大們,經過縝密的分析,終于發現在檢查是否是毒蘑菇的這一人命關天的推理中可能存在的一個坑,然后默默的填了坑。。。此次填坑,最終導致本文的出爐。本來張小白以為這篇文字會胎死腹中。沒想到反轉的劇情不僅發生在張小白交錯了第一天的作業,得到可貴的0分之外,還發生MindSpore對毒蘑菇識別的一次重大變化。
下面介紹一下此次事情經過。
話說張小白幾天前開始做 MindSpore21天實戰營第三天的作業。
(一)體驗作業
體驗作業看起來較為簡單,就是將OBS桶上放滿水,,nono,
是建好桶?mindspore-21day-tutorials
以及體驗目錄resnet-50
并將ResNet-50體驗作業一鍵下載包.zip的內容解壓上傳到這個目錄下,包含:
resnet目錄下的bert源代碼
ckpt_files目錄下的預訓練模型?resnet-90_209.ckpt,
mushrooms目錄下的待預測的蘑菇圖片tum.jpg(替換掉原來的卡通蘑菇圖片,,,。這是張小白問俺家度娘小助手查到的。。。)
然后去ModelArts的訓練管理去新增訓練作業。。
按照文檔要求的參數去建就可以了
張小白的參數跟上面的區別就是:ascend-tutorials桶名稱換成了?mindspore-21day-tutorials
其他幾乎一樣。。
好像2分鐘不到就推理訓練作業ok了。。。
然后查看日志。。
為啥會有兩個文件,因為張小白把原來那個卡通蘑菇改名成 tum1.jpg了。。(請注意:在這里其實出問題了,但是因為被推理的圖片太少,一時間張小白看不出來啥,只是默默的提交了整張圖片,獲得了體驗作業的8分。)
然而,結果是令人驚訝的。。。明明張小白上傳的是有毒的蘑菇,這里檢測出來的是無毒的?而且,前一個卡通圖片,
看著是可愛,但是它是蘑菇嗎?你說它無毒,我說它無毒也不能吃啊。。。
一定是哪里出了問題。。。。(沒想到一語成讖)
張小白就接著做進階作業的模型訓練:
(二、進階作業篇)
進階作業就是在桶?mindspore-21day-tutorials
里面建個進階目錄resnet-50-2
并將ResNet-50進階作業一鍵下載包.zip的內容
解壓上傳到這個目錄下,
上傳結果包含:
ckpt_files 空目錄這回不用預訓練模型了。。因為這次是要真正的進行模型訓練。。。
mushrooms 比體驗作業多了個訓練數據集train目錄,下面有9個分類的毒蘑菇:AABCEHLRS.
張小白稍后也下載了自己想預測的有毒的無毒的蘑菇圖片:
分成du和nodu兩種(這英文水平也是醉了。。。)
將其上傳到mushrooms 的test目錄下:
像建立體驗作業的訓練任務一樣,我們來建立進階任務的訓練任務:
進階作業.doc上是這么說的:
飯飯大俠的實踐文章 https://bbs.huaweicloud.com/forum/thread-85549-1-1.html?是這么說的:
張小白居然信了。。因為飯大大并沒有提到模型訓練需要多少時間。照以前做AI實戰營的情況,感覺模型訓練也就個把小時的事情吧。。。(大錯特錯了!)
張小白是這么新建模型訓練作業的。。。
沒想到一共訓練了9個小時20分鐘,訓練才結束。。。。
官方文檔訓練時間為 5248,50輪epoch
我的訓練時間為 383984.517,90輪epoch。。。
張小白還是把日志下載下來供分析吧。。。
在output目錄下有ckpt的訓練結果:
把這些文件下載下來吧。。
然后也照著體驗那樣,
將第90輪的結果傳到 ckpt_files目錄下。
咱們再開始推理吧。。。。
推理之前,為了防止張小白新增的照片像體驗作業那樣檢驗不出毒,特意將訓練集里面的一些照片拷貝出來重新命名傳到test目錄下去。心想這些照片一模一樣的總能被推理出來的吧。。。
創建推理訓練作業。。。
其中:
代碼目錄:/mindspore-21day-tutorials/resnet-50-2/resnet/
啟動文件:/mindspore-21day-tutorials/resnet-50-2/resnet/resnet50_predict.py
數據存儲位置:/mindspore-21day-tutorials/resnet-50-2/mushrooms/test/
訓練輸出位置:/mindspore-21day-tutorials/resnet-50-2/output/
增加運行參數:checkpoint_path =?s3://mindspore-21day-tutorials/resnet-50-2/ckpt_files/resnet-90_18810.ckpt
作業日志路徑:/mindspore-21day-tutorials/resnet-50-2/log/
點擊下一步:
確認無誤后提交:
可以查看訓練詳情。。。
并通過日志查看訓練情況。。
耐心等待,沒想到不到30秒內就訓練成功了。。。
然而結果繼續讓人驚訝。。。難道都是毒蘑菇??而且都是“Amanita毒蠅傘,傘菌目,鵝膏菌科,鵝膏菌屬,主要分布于我國黑龍江、吉林、四川、西藏、云南等地,有毒?”
我明明是一樣蘑菇選了一種。。。
張小白有點不相信自己的眼睛。。。
張小白不信這個邪,把待推理的圖片中的?Amanita開頭的圖片刪了,再推理一次。
點擊作業中的修改。再提交一次。。
新版推理訓練中。。。
訓練成功,日志如下:
天啦,已經把唯一的 Amanita刪了啊。。。還能推理出所有的蘑菇都是Amanita。。。
這回張小白把所有的蘑菇圖片都刪了。。。只留上一個Russula類別的。
把蘑菇全刪了。。
放上一個。。。
再如上炮制,重新訓練。。。
還是這個結果。。。
只有一張?Russula,訓練出來一個“Amanita毒蠅傘”。。。。
圖片都是從訓練數據集里面取的啊。。。
這是AI嗎???
張小白不僅對這個ResNet模型表示極大的懷疑。
當然,群里的大大也對此做了一些解釋,張小白結合這個解釋對以上現象做了下綜合整理:
一般每秒30張圖片的處理速度,毒蘑菇數據有6700多張。按照這個進度, 1個epoch需要 6700/30=233秒,還不排除有些圖片會比較大,更耗時。所以 目前張小白的訓練一個epoch花了370秒左右(約6分鐘),也算比較合理。教程中訓練了50個epoch,而張小白選擇了90個epoch.,這就使得模型訓練的整個時間到了9個多小時( 6X90=9X60);但是不表示訓練時間越長,精度就越高。
對于多個圖片顯示同樣的結果,而且有毒蘑菇得出無毒蘑菇的結果,目前所用的卷積神經網絡是沒有辦法識別不是已知的分類的。只能將結果回歸到預訓練定義的9個類別。CNN網絡只能根據大量訓練得到的特征來預測新目標的種類。對于從來沒有訓練過的類型是沒辦法識別的。
模型的預測結果不準確,其原因可能有多種,比如數據集本身的權威性——本次訓練的數據集是從kaggle上下載的,并不是官方imagenet的數據集。;又比如數據的數量有限也會影響模型識別效果,還有參數也需要做調優。
如果想進一步得到精度的信息,可以在resnet50_predict.py中添加打印推理精度的print語句。。
盡管如此,張小白仍然不敢把這些結論整理成博客發出去。總覺得出了什么問題。
張小白就對耐心解答CTR問題的 HelloWay老師訴說了心中的郁悶,,,Hello老師畢竟是名副其實的“您好”老師,找到她就能找到“Way”。在她的幫助下,MindSpore團隊對代碼做了一些修改。
這回張小白終于可以好好試一下了。
按照上面的提示,修改resnet_predict.py的代碼:
將其 上傳到OBS上去:
python腳本的時間已更新。OK
再重新傳上去以前想要測試的蘑菇圖片:
照例是一個類型一種。加上自己找的若干。
進入ModeArts控制臺,選中以前運行的tranjob-resnet2-inference的進階推理訓練作業。
點擊修改:
檢查啟動文件 /mindspore-21day-tutorials/resnet-50-2/resnet/resnet50_predict.py
和數據集位置? /mindspore-21day-tutorials/resnet-50-2/mushrooms/test/,貌似沒啥問題。點擊確定重新推理。
耐心等待運行結束:
查看日志:
大概是一樣一個吧。。要不然應該把圖片名稱打出來看看,是否一一對應。
在resnet50_predict.py文件中加入對應的文件名的打印:
重新上傳py文件到OBS,并且重新在ModelArts上run推理作業,結果如下:
我們用文本可以看得更清楚一點:
文件名[Cortinarius022_tNaDxq5khkg.jpg],預測的蘑菇標簽為: Cortinarius擲絲膜菌,傘菌目,絲膜菌科,絲膜菌屬,分布于湖南等地(夏秋季在山毛等闊葉林地上生長) 文件名[Boletus0032_Sl_iMoAAJyU.jpg],預測的蘑菇標簽為: Boletus麗柄牛肝菌,傘菌目,牛肝菌科,牛肝菌屬,分布于云南、陜西、甘肅、西藏等地,有毒 文件名[Hygrocybe047_TNyRfvIaJxw.jpg],預測的蘑菇標簽為: Hygrocybe淺黃褐濕傘,傘菌目,蠟傘科,濕傘屬,分布于香港(見于松仔園),有毒 文件名[nodu4.jpg],預測的蘑菇標簽為: Lactarius松乳菇,紅菇目,紅菇科,乳菇屬,廣泛分布于亞!熱帶松林地,無毒 文件名[Amanita039_ukO5iaLSiRM.jpg],預測的蘑菇標簽為: Amanita毒蠅傘,傘菌目,鵝膏菌科,鵝膏菌屬,主要分布于我國黑龍江、吉林、四川、西藏、云南等地,有毒 文件名[Russula026_B-JruZ9eQ2c.jpg],預測的蘑菇標簽為: Russula褪色紅菇,傘菌目,紅菇科,紅菇屬,分布于河北、吉林、四川、江蘇、西藏等地,無毒 文件名[nodu9.jpg],預測的蘑菇標簽為: Boletus麗柄牛肝菌,傘菌目,牛肝菌科,牛肝菌屬,分布于云南、陜西、甘肅、西藏等地,有毒 文件名[Agaricus013_bhSPsvLNpKk.jpg],預測的蘑菇標簽為: Agaricus雙孢蘑菇,傘菌目,蘑菇科,蘑菇屬,廣泛分布于北半球溫帶,無毒 文件名[Lactarius025_8bHMwyrm1xE.jpg],預測的蘑菇標簽為: Lactarius松乳菇,紅菇目,紅菇科,乳菇屬,廣泛分布于亞!熱帶松林地,無毒 文件名[du1.jpeg],預測的蘑菇標簽為: Lactarius松乳菇,紅菇目,紅菇科,乳菇屬,廣泛分布于亞!熱帶松林地,無毒 文件名[Entoloma038_2UbtRbtpLYw.jpg],預測的蘑菇標簽為: Entoloma霍氏粉褶菌,傘菌目,粉褶菌科,粉褶菌屬,主要分布于新西蘭北島和南島西部,有毒 文件名[du5.jpeg],預測的蘑菇標簽為: Boletus麗柄牛肝菌,傘菌目,牛肝菌科,牛肝菌屬,分布于云南、陜西、甘肅、西藏等地,有毒 文件名[du2.jpeg],預測的蘑菇標簽為: Amanita毒蠅傘,傘菌目,鵝膏菌科,鵝膏菌屬,主要分布于我國黑龍江、吉林、四川、西藏、云南等地,有毒 文件名[du3.jpeg],預測的蘑菇標簽為: Amanita毒蠅傘,傘菌目,鵝膏菌科,鵝膏菌屬,主要分布于我國黑龍江、吉林、四川、西藏、云南等地,有毒 文件名[du6.jpeg],預測的蘑菇標簽為: Suillus乳牛肝菌,牛肝菌目,乳牛肝菌科,乳牛肝菌屬,分布于吉林、遼寧、山西、安徽、江西、浙江、湖南、四川、貴州等地,無毒 文件名[du8.jpeg],預測的蘑菇標簽為: Cortinarius擲絲膜菌,傘菌目,絲膜菌科,絲膜菌屬,分布于湖南等地(夏秋季在山毛等闊葉林地上生長) 文件名[Suillus044_Bb96EmGmLVE.jpg],預測的蘑菇標簽為: Suillus乳牛肝菌,牛肝菌目,乳牛肝菌科,乳牛肝菌屬,分布于吉林、遼寧、山西、安徽、江西、浙江、湖南、四川、貴州等地,無毒 文件名[du7.jpeg],預測的蘑菇標簽為: Entoloma霍氏粉褶菌,傘菌目,粉褶菌科,粉褶菌屬,主要分布于新西蘭北島和南島西部,有毒 ResNet50?prediction?success!
再簡單分析下:
首先,基本上在訓練集里面的案例都被正確的分類了。。。這才是好的resnet嘛。。。
然后,自己找的毒蘑菇照片,
有3個明顯錯了,
nodu9,是男瘦型香菇。,完全沒毒。被指認為有毒。這個跟自動學習學得結果不一樣。。
du1,du6,本來有毒,被認為是無毒。
另還有一個Cortinarius擲絲膜菌 ,經度娘告知:有毒。貌似也沒錯。
從這個結果來看,還是較能令人接受的。。
細心的讀者還可以對比下張小白昨天發的博客:張小白教你如何使用ModelArts的自動學習對毒蘑菇進行分類 https://bbs.huaweicloud.com/blogs/208172
從自動學習和MindSpore使用ResNet網絡進行學習的兩種方式對比來看,
對于已存在訓練集里面的圖片,獲得了完全一致類別的結果。
而不在訓練集里面的7張有毒蘑菇新圖片,
自動學習的結果是:
Russula,無毒
Amanita,有毒
Lactarius,無毒
Amanita,有毒
Hygrocybe,有毒
Amanita,有毒
Lactarius,無毒---------白雪公主的中毒率為 3/7.
MindSpore的推理結果是:
圖1:Lactarius 無毒
圖2:Amanita 有毒
圖3:Amanita 有毒
圖5:Boletus 有毒
圖6:Suillus 無毒
圖7:Entoloma 有毒---------白雪公主的中毒率為?2/7.
而對于兩種食用蘑菇:
自動學習全部認為可以吃。
而MindSpore認為有一個可以吃,另一個nodu9是Boletus,有毒。
盡管兩者的分類結果大相徑庭,但是——
MindSpore會讓白雪公主減肥,而且中毒的幾率小一點,這點是毋庸置疑的了。。
好了,多少讓張小白對MindSpore恢復了點信心吧。但愿張小白能通過進階課程學習到MindSpore更高級點的知識。。。
畢竟,除了毒蘑菇,ResNet可以做的事情還是不少的。
(全文完,謝謝閱讀)
MindSpore 昇騰 AI開發平臺ModelArts Python EI企業智能
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。