Mask R-CNN TensorFlow 實驗
源碼
github:https://github.com/CharlesShang/FastMaskRCNN
實驗環境
推薦使用: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數據集:https://mscoco.org/dataset/#download
Resnet50: https://download.tensorflow.org/models/resnet_v1_50_2016_08_28.tar.gz
實驗步驟
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 |