基于MASK RCNN算法实现瑕疵图像识别(准备环境)

目前图像识别领域,两步法最炙手可热的图像处理模型就是Mask RCNN了,应用该模型可以在较为广泛的工业领域实现图像化检测。近期我们实现了该模型在金属加工产品线上的质量检测识别,取得了较好的效果。

Github原代码地址:

https://github.com/matterport/Mask_RCNN 下载zip即可,该模型的backbone是Resnet101

注意该原代码没有预训练的模型,如果需要的话,预训练模型在这里:

https://github.com/matterport/Mask_RCNN/releases  名称是mask_rcnn_balloon.h5 目前最新的版本是2.1

关于该代码部署的环境:经过实际应用发现,如果没有GPU、或者其他高性能服务器的话,至少也要达到如下标准:CentOS 7 建议安装 anacoda环境,便于管理。64G内存,64 core vCPU,硬盘空间不能太小,因为每轮Epoch训练都会产生新的模型,单个模型大小256M左右,多轮调试、训练会占用大量硬盘空间。

下面先说总体步骤:

打开冰箱,放入大象,关上冰箱 。。。

正确的步骤是 :

1 调试并修改代码;2 制作训练、测试、验证数据集;3 开始训练,4 检验模型,5 应用模型。

一步一步说

先说环境,如果你要在自己的笔记本上跑跑代码,看看效果,反而麻烦一些。主要在于里面的pycocotools是需要VC2005的,安装起来很麻烦。如果是在服务器,linux下安装反而没有什么问题。按照代码说明的那些包是不太够的。

    我的安装环境如下: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 

顺便说一下:为了后期的评估方便,我同时开启了服务器端jupyter和基于jupyter的tensorboard。实现方法就不赘述了,网上一搜一大把。建议大家也要开启,方便模型后期的调试和评估。另外虽然装了anacoda,但是装包的时候能用pip就用pip,混装会出现很多莫名其妙的冲突,教训深刻。

装好了之后,可以登陆jupyter notebook上看看demo,如果能跑完到演示图片识别,说明程序已经没问题,可以开始改了!

原代码是在高性能、多gpu设备上实现的,我没有那些好设备,所以必须修改,关键调整是

如果没有GPU,必须要将该参数改为1,即使拥有GPU,增加IMAGES_PER_GPU数值也要小心,很容易在训练模型的时候跑死机或者程序闪退。

看注释就明白原作者还是很土豪的。

接下来就是理解原代码的结构并且改造属于自己的模型了。

核心代码放到mrcnn文件夹里,其实也就用这里面即可。samples文件夹里的例子可以作为自己代码修改的基础和参考,也很有用

简单的说config.py主要进行基础参数的定义,如果你选择了 from mrcnn.config import Config,然后在自己的class中集成绝大部分的config定义,那么一定要看看这里的设置是不是真的属于你需要的。上述的 IMAGES_PER_GPU,还有NUM_CLASSES  STEPS_PER_EPOCH 等等,都要注意匹配。

model.py是这个算法的精髓部分,基于tensorflow和keras实现训练和识别,算法理解将在后面详述。

utils.py实现了图像的准确评估,比如mAP IOU的计算等等,非常方便。

visualize.py 实现了图像的检测的可视化展现,也是非常有效的工具。

parallel_model.py 多GPU专用(土豪专用)它把模型做多个copy到每一个GPU里,然后把输入数据也切片到每一个模型copy里,当然最终输出会重新合并,并且基于合并后的输出给出loss值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容