Mask R-CNN TensorFlow 實驗

源碼

github:github.com/CharlesShang

實驗環境

推薦使用:Python2.7+,TensorFlow1.0.0+,cuDNN5.1

我的實驗環境:Python3.6(需要修改與Python2版本不兼容的地方),TensorFlow1.1.0 (在TensorFlow1.3.0版本下測試有問題,建議使用1.1.0或1.0.0版本),cuDNN5.1

下載

COCO數據集:mscoco.org/dataset/#

Resnet50: download.tensorflow.org

實驗步驟

Step 1:Go to ./libs/datasets/pycocotools and make run,執行命令:

cd ./libs/datasets/pycocotoolsmake run

Step 2:Download COCO dataset, place it into ./data, then run python download_and convert_data.py to build tf-records. It takes a while.

COCO dataset在目錄中的結構為:

./data ./coco ./annotations ./train2014 ./val2014

轉到FastMaskRCNN-master主目錄下,執行命令:

python download_and_convert_data.py

82783 images轉換需要很長時間,全部轉換成功之後會顯示:

Finished converting the coco dataset!

Step 3:Download pretrained resnet50 model, unzip it, and place it into ./data/pretrained_models

Step 4:Go to ./libs and run make

cd libsmake

  • Error 4.1

SyntaxError:Missing parentheses in call to print.

對./libs/setup.py文件line 85進行修改:

print(extra_postargs)

  • Error 4.2

AttributeError:dict object has no attribute iteritems

對./libs/setup.py文件line 51進行修改:

for k,v in cudaconfig.items():

  • Error 4.3

可能會報cython相關的錯誤,忘記保存具體的錯誤了,安裝cython就能解決了。

sudo apt-get install cython

Step 5:Run python train/train.py for training

cd ./trainpython train.py

  • Error 5.1

ModuleNotFoundError:No module named timer

解決方法:

pip install timer

  • Error 5.2

TabError:inconsistent use of tabs and spaces in indentation

解決方法,修改./libs/layers/sample.py 文件 line 117,118,119的縮進:

  • Error 5.3

ImportError:/home/wujue/anaconda3/lib/python3.6/site-packages/tensorflow/python/../../../../libstdc++.so.6:versionGLIBCXX_3.4.22 not found (required by /home/wujue/anaconda3/lib/python3.6/site-packages/../../libopencv_objdetect.so.3.3)

根據報錯,可以知道libstdc++.so.6所在路徑為./home/wujue/anaconda3/lib目錄下。轉到anaconda3/lib 目錄下,檢查動態庫。

strings libstdc++.so.6 | grep GLIBC

發現確實沒有GLIBCXX_3.4.22,然後查找編譯gcc時生成的最新動態庫:

find / -name "libstdc++.so*"

部分結果如下:

發現最新動態庫libstdc++.so.6.0.42已經在/home/wujue/anaconda3/lib目錄下,然後轉到該目錄下重建默認庫的軟連接。

rm -rf libstdc++.so.6lb -s libstdc++.so.6.0.24 libstdc++.so.6

檢查動態庫是否更新,發現已經有 GLIBCXX_3.4.22以及更新版的GLIBC庫了。

strings libstdc++.so.6 | grep GLIBC

  • Error 5.4

ValueError:strings_input_producer requires a non-null input tensor

根據報錯,可以知道指針指向了空的輸入,經過檢查,發現可能是路徑問題,因此對./libs/datasets/dataset_factory.py的line 17進行修改:

tfrecords = glob.glob(../ + dataset_dir +/records/ + file_pattern)

  • Error 5.5

InvalidArgumentError (see above for traceback): Unsuccessful TensorFlowReader constructor: Failed to get matching files on ./data/pretrained_models/resnet_v1_50.ckpt:Not Found: ./data/pretrained_models

根據報錯,可以知道沒有找到./data/pretrained_models目錄下的resnet_v1_50.ckpt文件,但經過檢查之後發現該路徑是存在這個文件的,所以應該也是路徑使用問題。對./train/train.py的line 141進行修改,改為絕對路徑。

checkpoint_path:/home/wujue/FastMaskRCNN-master/data/pretrained_models/resnet_v1_50.ckpt

  • Error 5.6

UnknownError (see above for traceback):NameError: name xrange is not defined

根據報錯,顯示xrange未被定義,最後終於找到xrange()函數出現在./libs/boxes/anchor/py文件中,對line 38進行修改:

for i in range(ratio_anchors.shape[0])])


推薦閱讀:

TAG:MaskRCNN | TensorFlow | Python |