目前圖像識別領(lǐng)域卫键,兩步法最炙手可熱的圖像處理模型就是Mask RCNN了炼七,應(yīng)用該模型可以在較為廣泛的工業(yè)領(lǐng)域?qū)崿F(xiàn)圖像化檢測缆巧。近期我們實現(xiàn)了該模型在金屬加工產(chǎn)品線上的質(zhì)量檢測識別,取得了較好的效果豌拙。
Github原代碼地址:
https://github.com/matterport/Mask_RCNN?下載zip即可陕悬,該模型的backbone是Resnet101
注意該原代碼沒有預(yù)訓(xùn)練的模型,如果需要的話按傅,預(yù)訓(xùn)練模型在這里:
https://github.com/matterport/Mask_RCNN/releases? 名稱是mask_rcnn_balloon.h5 目前最新的版本是2.1
關(guān)于該代碼部署的環(huán)境:經(jīng)過實際應(yīng)用發(fā)現(xiàn)捉超,如果沒有GPU、或者其他高性能服務(wù)器的話唯绍,至少也要達(dá)到如下標(biāo)準(zhǔn):CentOS 7 建議安裝 anacoda環(huán)境拼岳,便于管理。64G內(nèi)存况芒,64 core vCPU惜纸,硬盤空間不能太小,因為每輪Epoch訓(xùn)練都會產(chǎn)生新的模型绝骚,單個模型大小256M左右耐版,多輪調(diào)試、訓(xùn)練會占用大量硬盤空間压汪。
下面先說總體步驟:
打開冰箱粪牲,放入大象,關(guān)上冰箱 止剖。腺阳。。
正確的步驟是 :
1 調(diào)試并修改代碼穿香;2 制作訓(xùn)練舌狗、測試、驗證數(shù)據(jù)集扔水;3 開始訓(xùn)練,4 檢驗?zāi)P停? 應(yīng)用模型朝氓。
一步一步說
先說環(huán)境魔市,如果你要在自己的筆記本上跑跑代碼,看看效果赵哲,反而麻煩一些待德。主要在于里面的pycocotools是需要VC2005的,安裝起來很麻煩枫夺。如果是在服務(wù)器将宪,linux下安裝反而沒有什么問題。按照代碼說明的那些包是不太夠的。
????我的安裝環(huán)境如下:Python3.5 tensorflow1.14
_libgcc_mutex 0.1 main
absl-py? ? ? ? ? ? ? ? ? 0.8.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
alabaster? ? ? ? ? ? ? ? 0.7.12? ? ? ? ? ? ? ? ? pypi_0? ? pypi
astor? ? ? ? ? ? ? ? ? ? 0.8.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
attrs? ? ? ? ? ? ? ? ? ? 19.3.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
babel? ? ? ? ? ? ? ? ? ? 2.7.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
backcall? ? ? ? ? ? ? ? ? 0.1.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
bleach? ? ? ? ? ? ? ? ? ? 3.1.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ca-certificates? ? ? ? ? 2019.10.16? ? ? ? ? ? ? ? ? ? 0?
certifi? ? ? ? ? ? ? ? ? 2018.8.24? ? ? ? ? ? ? ? py35_1?
chardet? ? ? ? ? ? ? ? ? 3.0.4? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
cycler? ? ? ? ? ? ? ? ? ? 0.10.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
cython? ? ? ? ? ? ? ? ? ? 0.29.13? ? ? ? ? ? ? ? ? pypi_0? ? pypi
decorator? ? ? ? ? ? ? ? 4.4.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
defusedxml? ? ? ? ? ? ? ? 0.6.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
docutils? ? ? ? ? ? ? ? ? 0.15.2? ? ? ? ? ? ? ? ? pypi_0? ? pypi
entrypoints? ? ? ? ? ? ? 0.3? ? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
gast? ? ? ? ? ? ? ? ? ? ? 0.3.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
google-pasta? ? ? ? ? ? ? 0.1.7? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
grpcio? ? ? ? ? ? ? ? ? ? 1.24.3? ? ? ? ? ? ? ? ? pypi_0? ? pypi
h5py? ? ? ? ? ? ? ? ? ? ? 2.10.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
idna? ? ? ? ? ? ? ? ? ? ? 2.8? ? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
imageio? ? ? ? ? ? ? ? ? 2.6.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
imagesize? ? ? ? ? ? ? ? 1.1.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
imgaug? ? ? ? ? ? ? ? ? ? 0.3.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
importlib-metadata? ? ? ? 0.23? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ipykernel? ? ? ? ? ? ? ? 5.1.3? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ipyparallel? ? ? ? ? ? ? 6.2.4? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ipython? ? ? ? ? ? ? ? ? 7.9.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ipython-genutils? ? ? ? ? 0.2.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ipywidgets? ? ? ? ? ? ? ? 7.5.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
jedi? ? ? ? ? ? ? ? ? ? ? 0.15.1? ? ? ? ? ? ? ? ? pypi_0? ? pypi
jinja2? ? ? ? ? ? ? ? ? ? 2.10.3? ? ? ? ? ? ? ? ? pypi_0? ? pypi
jsonschema? ? ? ? ? ? ? ? 3.1.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
jupyter-client? ? ? ? ? ? 5.3.4? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
jupyter-core? ? ? ? ? ? ? 4.6.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
jupyter-tensorboard? ? ? 0.1.10? ? ? ? ? ? ? ? ? pypi_0? ? pypi
keras? ? ? ? ? ? ? ? ? ? 2.2.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
keras-applications? ? ? ? 1.0.4? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
keras-preprocessing? ? ? 1.0.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
kiwisolver? ? ? ? ? ? ? ? 1.1.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
libedit? ? ? ? ? ? ? ? ? 3.1.20181209? ? ? ? hc058e9b_0?
libffi? ? ? ? ? ? ? ? ? ? 3.2.1? ? ? ? ? ? ? ? hd88cf55_4?
libgcc-ng? ? ? ? ? ? ? ? 9.1.0? ? ? ? ? ? ? ? hdf63c60_0?
libstdcxx-ng? ? ? ? ? ? ? 9.1.0? ? ? ? ? ? ? ? hdf63c60_0?
markdown? ? ? ? ? ? ? ? ? 3.1.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
markupsafe? ? ? ? ? ? ? ? 1.1.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
matplotlib? ? ? ? ? ? ? ? 3.0.3? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
mistune? ? ? ? ? ? ? ? ? 0.8.4? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
more-itertools? ? ? ? ? ? 7.2.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
nbconvert? ? ? ? ? ? ? ? 5.6.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
nbformat? ? ? ? ? ? ? ? ? 4.4.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ncurses? ? ? ? ? ? ? ? ? 6.1? ? ? ? ? ? ? ? ? he6710b0_1?
networkx? ? ? ? ? ? ? ? ? 2.4? ? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
nose? ? ? ? ? ? ? ? ? ? ? 1.3.7? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
notebook? ? ? ? ? ? ? ? ? 6.0.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
numpy? ? ? ? ? ? ? ? ? ? 1.17.3? ? ? ? ? ? ? ? ? pypi_0? ? pypi
opencv-python? ? ? ? ? ? 4.1.1.26? ? ? ? ? ? ? ? pypi_0? ? pypi
opencv-python-headless? ? 4.1.1.26? ? ? ? ? ? ? ? pypi_0? ? pypi
openssl? ? ? ? ? ? ? ? ? 1.0.2t? ? ? ? ? ? ? h7b6447c_1?
packaging? ? ? ? ? ? ? ? 19.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pandocfilters? ? ? ? ? ? 1.4.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
parso? ? ? ? ? ? ? ? ? ? 0.5.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pexpect? ? ? ? ? ? ? ? ? 4.7.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pickleshare? ? ? ? ? ? ? 0.7.5? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pillow? ? ? ? ? ? ? ? ? ? 6.2.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pip? ? ? ? ? ? ? ? ? ? ? 19.3.1? ? ? ? ? ? ? ? ? pypi_0? ? pypi
prometheus-client? ? ? ? 0.7.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
prompt-toolkit? ? ? ? ? ? 2.0.10? ? ? ? ? ? ? ? ? pypi_0? ? pypi
protobuf? ? ? ? ? ? ? ? ? 3.10.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
ptyprocess? ? ? ? ? ? ? ? 0.6.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pycocotools? ? ? ? ? ? ? 2.0.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pygments? ? ? ? ? ? ? ? ? 2.4.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pyparsing? ? ? ? ? ? ? ? 2.4.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pyrsistent? ? ? ? ? ? ? ? 0.15.5? ? ? ? ? ? ? ? ? pypi_0? ? pypi
python? ? ? ? ? ? ? ? ? ? 3.5.6? ? ? ? ? ? ? ? hc3d631a_0?
python-dateutil? ? ? ? ? 2.8.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pytz? ? ? ? ? ? ? ? ? ? ? 2019.3? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pywavelets? ? ? ? ? ? ? ? 1.1.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pyyaml? ? ? ? ? ? ? ? ? ? 5.1.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
pyzmq? ? ? ? ? ? ? ? ? ? 18.1.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
qtconsole? ? ? ? ? ? ? ? 4.5.5? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
readline? ? ? ? ? ? ? ? ? 7.0? ? ? ? ? ? ? ? ? h7b6447c_5?
requests? ? ? ? ? ? ? ? ? 2.22.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
scikit-image? ? ? ? ? ? ? 0.15.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
scipy? ? ? ? ? ? ? ? ? ? 1.3.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
send2trash? ? ? ? ? ? ? ? 1.5.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
setuptools? ? ? ? ? ? ? ? 40.2.0? ? ? ? ? ? ? ? ? py35_0?
shapely? ? ? ? ? ? ? ? ? 1.6.4.post2? ? ? ? ? ? ? pypi_0? ? pypi
six? ? ? ? ? ? ? ? ? ? ? 1.12.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
snowballstemmer? ? ? ? ? 2.0.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinx? ? ? ? ? ? ? ? ? ? 2.2.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinxcontrib-applehelp? 1.0.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinxcontrib-devhelp? ? 1.0.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinxcontrib-htmlhelp? ? 1.0.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinxcontrib-jsmath? ? ? 1.0.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinxcontrib-qthelp? ? ? 1.0.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sphinxcontrib-serializinghtml 1.1.3? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
sqlite? ? ? ? ? ? ? ? ? ? 3.30.1? ? ? ? ? ? ? h7b6447c_0?
tensorboard? ? ? ? ? ? ? 1.14.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
tensorflow? ? ? ? ? ? ? ? 1.14.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
tensorflow-estimator? ? ? 1.14.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
termcolor? ? ? ? ? ? ? ? 1.1.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
terminado? ? ? ? ? ? ? ? 0.8.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
testpath? ? ? ? ? ? ? ? ? 0.4.2? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
tk? ? ? ? ? ? ? ? ? ? ? ? 8.6.8? ? ? ? ? ? ? ? hbc83047_0?
tornado? ? ? ? ? ? ? ? ? 6.0.3? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
traitlets? ? ? ? ? ? ? ? 4.3.3? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
urllib3? ? ? ? ? ? ? ? ? 1.25.6? ? ? ? ? ? ? ? ? pypi_0? ? pypi
wcwidth? ? ? ? ? ? ? ? ? 0.1.7? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
webencodings? ? ? ? ? ? ? 0.5.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
werkzeug? ? ? ? ? ? ? ? ? 0.16.0? ? ? ? ? ? ? ? ? pypi_0? ? pypi
wheel? ? ? ? ? ? ? ? ? ? 0.31.1? ? ? ? ? ? ? ? ? py35_0?
widgetsnbextension? ? ? ? 3.5.1? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
wrapt? ? ? ? ? ? ? ? ? ? 1.11.2? ? ? ? ? ? ? ? ? pypi_0? ? pypi
xz? ? ? ? ? ? ? ? ? ? ? ? 5.2.4? ? ? ? ? ? ? ? h14c3975_4?
zipp? ? ? ? ? ? ? ? ? ? ? 0.6.0? ? ? ? ? ? ? ? ? ? pypi_0? ? pypi
zlib? ? ? ? ? ? ? ? ? ? ? 1.2.11? ? ? ? ? ? ? h7b6447c_3?
順便說一下:為了后期的評估方便较坛,我同時開啟了服務(wù)器端jupyter和基于jupyter的tensorboard印蔗。實現(xiàn)方法就不贅述了,網(wǎng)上一搜一大把丑勤。建議大家也要開啟华嘹,方便模型后期的調(diào)試和評估。另外雖然裝了anacoda法竞,但是裝包的時候能用pip就用pip耙厚,混裝會出現(xiàn)很多莫名其妙的沖突,教訓(xùn)深刻岔霸。
裝好了之后薛躬,可以登陸jupyter notebook上看看demo,如果能跑完到演示圖片識別呆细,說明程序已經(jīng)沒問題型宝,可以開始改了!
原代碼是在高性能侦鹏、多gpu設(shè)備上實現(xiàn)的诡曙,我沒有那些好設(shè)備,所以必須修改略水,關(guān)鍵調(diào)整是
如果沒有GPU价卤,必須要將該參數(shù)改為1,即使擁有GPU渊涝,增加IMAGES_PER_GPU數(shù)值也要小心慎璧,很容易在訓(xùn)練模型的時候跑死機(jī)或者程序閃退。
看注釋就明白原作者還是很土豪的跨释。
接下來就是理解原代碼的結(jié)構(gòu)并且改造屬于自己的模型了胸私。
核心代碼放到mrcnn文件夾里,其實也就用這里面即可鳖谈。samples文件夾里的例子可以作為自己代碼修改的基礎(chǔ)和參考岁疼,也很有用
簡單的說config.py主要進(jìn)行基礎(chǔ)參數(shù)的定義,如果你選擇了 from mrcnn.config import Config缆娃,然后在自己的class中集成絕大部分的config定義捷绒,那么一定要看看這里的設(shè)置是不是真的屬于你需要的。上述的 IMAGES_PER_GPU贯要,還有NUM_CLASSES? STEPS_PER_EPOCH 等等暖侨,都要注意匹配。
model.py是這個算法的精髓部分崇渗,基于tensorflow和keras實現(xiàn)訓(xùn)練和識別字逗,算法理解將在后面詳述京郑。
utils.py實現(xiàn)了圖像的準(zhǔn)確評估,比如mAP IOU的計算等等葫掉,非常方便些举。
visualize.py 實現(xiàn)了圖像的檢測的可視化展現(xiàn),也是非常有效的工具挖息。
parallel_model.py 多GPU專用(土豪專用)它把模型做多個copy到每一個GPU里金拒,然后把輸入數(shù)據(jù)也切片到每一個模型copy里,當(dāng)然最終輸出會重新合并套腹,并且基于合并后的輸出給出loss值绪抛。