看板 Python 關於我們 聯絡資訊
看了這個影片想照著做,結果就卡在原本的函式都是用舊的 tf 語法,要轉成新的才行 https://www.youtube.com/watch?v=5ZStcy7NWqs
model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config) 這一句會去呼叫 mrcnn/model.py 內的 log2_graph 函式,舊的語法是 tf.log,要改成 tf.math.log 才行 我就用 google 到的指令把用到的舊語法都改成新的 https://github.com/matterport/Mask_RCNN/issues/1797 !tf_upgrade_v2 \ --intree ../../Mask_RCNN \ --outtree ../../Mask_RCNN_v2 \ --reportfile report.txt 然後就進入鬼打牆的狀態,因為錯誤訊息依舊一樣,甚至我把舊版的 Mask_RCNN 資料夾 移到別的地方都不會跑出找不到這個資料夾的錯誤訊息 一開始查看 sys.path,把裏面之前加入的舊路徑 /Mask_RCNN 都清掉,換成 /Mask_RCNN_v2,依舊沒用 然後查看 sys.modules['mrcnn'],阿,原來是這裡在搞鬼,這邊還是舊的路徑 指向 /content/Mask_RCNN/mrcnn/__init__.py 因此又用 google 到的結果終於讓 sys.modules['mrcnn'] 指向新的路徑 縮 https://reurl.cc/MvXNdk https://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-f ull-path MODULE_PATH = "/content/Mask_RCNN_v2/mrcnn/__init__.py" MODULE_NAME = "mrcnn" import importlib import sys spec = importlib.util.spec_from_file_location(MODULE_NAME, MODULE_PATH) module = importlib.util.module_from_spec(spec) sys.modules[spec.name] = module spec.loader.exec_module(module) 結果還是不行!! 因此改成查看 sys.modules['mrcnn.model'],這裡居然還是指向舊的路徑 只好重複上面的步驟再做一次 MODULE_PATH = "/content/Mask_RCNN_v2/mrcnn/model.py" MODULE_NAME = "mrcnn.model" import importlib import sys spec = importlib.util.spec_from_file_location(MODULE_NAME, MODULE_PATH) module = importlib.util.module_from_spec(spec) sys.modules[spec.name] = module spec.loader.exec_module(module) sys.modules['mrcnn.model'] 終於指向正確的路徑了 這樣修改完後,原本可以正常使用的 import mrcnn.model as modellib 居然不能用了 說是 mrcnn 沒有 model 屬性 最後把這句改成 from mrcnn import model as modellib 才終於把這個範例跑完 我最不懂的就是為何原本可以用的 import 指令在那樣修改之後居然變成不能用了? 另外則是舊的資料夾都不在了,居然還能繼續跳出 tf 沒有 log 屬性的錯誤訊息,為何 不是先跳出找不到這個路徑的訊息呢? -- 「看在上帝的份上,我們不能當著孩子的面槍殺他的父親!」 「那我們就連孩子一起幹掉!」 「第一槍打中的是那個天真的孩子,第二槍是抱著孩子的母親。第三槍 停頓了三秒,當難以致信的父親擦拭著臉上愛子的腦漿從震驚中醒轉 過來,慢慢的轉頭看向停車的地方,分辨出是誰在攻擊他後,第三顆 子彈才將他的腦殼打飛。」 ─摘自〈狼群〉 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.189.149 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1586708445.A.A1D.html