C++ 实现 实例分割(Mask_RCNN-81类)

https://github.com/matterport/Mask_RCNN

下载《Mask_RCNN-master》,并下载训练权重(mask_rcnn_coco.h5)。


然后安装 Keras 2.0.8。pycocotools 就不用装了。

由于我的TensorFlow 是1.0  <1.3,所以按提示修改一二处Keras 中的代码,就可以运行了。


流程图:

C++ 实现 实例分割(Mask_RCNN-81类)_第1张图片

这 张图算是比较全了。


C++运行流程:

正在从二进制文件载入‘Mask_RCNN模型’的数据
载入完成
载入模型用时:0.703 秒

生成5层金字塔特征...

输入图像宽度:314
        高度:208
预处理...

缩放比:1.42675
窗口(window):75,0,372,448

宽,高,深度:448,448,3
首层...
宽,高,深度:224,224,64
宽,高,深度:112,112,64
组2...
宽,高,深度:112,112,256
组3...
宽,高,深度:56,56,512
组4...
23...
宽,高,深度:28,28,1024
组5...
宽,高,深度:14,14,2048
宽,高,深度:14,14,2048

生成5层融合金字塔特征...

p2 宽,高,深度:112,112,256
p5 宽,高,深度:14,14,256
p6 宽,高,深度:7,7,256
p3 宽,高,深度:56,56,256
p4 宽,高,深度:28,28,256

回归候选区前、背景分类和位置修正...

fpn_p2...
rpn_model 输入的 宽,高,深度:112,112,256
宽,高,深度:112,112,512
宽,高,深度:112,112,6
rpn_class_logits 输出的 宽,高,深度:2,37632,1
宽,高,深度:112,112,12
rpn_bbox 输出的 宽,高,深度:4,37632,1
size:50127
fpn_p3...
rpn_model 输入的 宽,高,深度:56,56,256
宽,高,深度:56,56,512
宽,高,深度:56,56,6
rpn_class_logits 输出的 宽,高,深度:2,9408,1
宽,高,深度:56,56,12
rpn_bbox 输出的 宽,高,深度:4,9408,1
fpn_p4...
rpn_model 输入的 宽,高,深度:28,28,256
宽,高,深度:28,28,512
宽,高,深度:28,28,6
rpn_class_logits 输出的 宽,高,深度:2,2352,1
宽,高,深度:28,28,12
rpn_bbox 输出的 宽,高,深度:4,2352,1
fpn_p5...
rpn_model 输入的 宽,高,深度:14,14,256
宽,高,深度:14,14,512
宽,高,深度:14,14,6
rpn_class_logits 输出的 宽,高,深度:2,588,1
宽,高,深度:14,14,12
rpn_bbox 输出的 宽,高,深度:4,588,1
fpn_p6...
rpn_model 输入的 宽,高,深度:7,7,256
宽,高,深度:7,7,512
宽,高,深度:7,7,6
rpn_class_logits 输出的 宽,高,深度:2,147,1
宽,高,深度:7,7,12
rpn_bbox 输出的 宽,高,深度:4,147,1
------------------->
名称:类别和置信值(rpn_class)
形状 宽,高,通道:2,50127,1
数据:
 0.000040, 0.000011,
 0.000040, 0.000011,
............
 0.997535, 0.002465,
 0.992276, 0.007724,
-------------------<
------------------->
名称:位置修正(rpn_bbox)
形状 宽,高,通道:4,50127,1
数据:
 1.164075, 0.359142, -1.046467, 1.089948,
 -0.232473, -0.074489, 1.286546, 1.005225,
............
 0.205122, 1.203826, 4.031924, 5.184391,
 0.288356, 0.418178, 3.501219, 3.429189,
-------------------<

生成预定义的候选区(锚框)...

0:150528
1:37632
2:9408
3:2352
4:588

应用增量生成准确的前景区(提案)...

------------------->
名称:前景得分
形状 宽,高,通道:1,50127,1
数据:
 0.000011,
 0.000011,
............
 0.002465,
 0.007724,
-------------------<

取分值最高的 6000 个前景区...

对 50127 个数据做快速排序...
前几个得分:0.999151,0.999090,0.999032,0.999003
第一区位置:0.650437,0.432601,0.850682,0.531605
深度,高,宽:1,6000,4

对 6000 个前景区应用 非极大抑制 最多保留前 1000 个...

对 6000 个数据做快速排序...
保留数:1000
非极大抑制后还有 1000 个
------------------->
名称:对象候选区(rpn_rois)
形状 宽,高,通道:4,1000,1
数据:
 0.652134, 0.434852, 0.817850, 0.518587,
 0.662022, 0.341137, 0.801632, 0.391992,
............
 0.218169, 0.277521, 0.369030, 0.402831,
 0.641845, 0.241386, 0.733749, 0.291932,
-------------------<

应用特征金字塔对前景区(提案)分类并生成对象包围框增量...

根据候选区面积大小分配到金字塔级...
总数 :1000
金字塔特征级:2
分离出 :768 个
完成 768 个 剪裁和缩放。
存放到原位...

金字塔特征级:3
分离出 :187 个
完成 187 个 剪裁和缩放。
存放到原位...

金字塔特征级:4
分离出 :41 个
完成 41 个 剪裁和缩放。
存放到原位...

金字塔特征级:5
分离出 :4 个
完成 4 个 剪裁和缩放。
存放到原位...

金字塔特征图候选区对齐(PyramidROIAlign)完成。
------------------->
名称:总成图(ROIAlign)
形状 宽,高,通道:49,256,1000
数据:
 -1.180767, -3.027353,... 2.564615, 3.192584,
 -2.004151, -1.877269,... -0.960412, -0.744303,
............
 -2.804682, -1.567623,... 7.776511, 6.680209,
 5.745147, 4.826375,... 1.747673, 2.950269,
-------------------<
分类卷积 1 输入维度,输出维度:256,1024
分类卷积 2 输入维度,输出维度:1024,1024
分类全连接 输入维度,输出维度:1024,81
------------------->
名称:81类别置信率(mrcnn_class)
形状 宽,高,通道:81,1000,1
数据:
 0.001850, 0.998039,... 0.000000, 0.000000,
 0.002243, 0.997717,... 0.000000, 0.000000,
............
 0.999676, 0.000022,... 0.000009, 0.000003,
 0.998484, 0.001120,... 0.000000, 0.000000,
-------------------<
------------------->
名称:位置修正(bbox_deltas)
形状 宽,高,通道:4,81,1000
数据:
 -0.025706, 0.171097, 0.167358, -0.073987,
 0.091792, 0.095471, -0.636902, -0.473347,
............
 -0.093505, 0.020155, -0.594412, -0.503832,
 0.300399, 0.235836, -0.832490, -0.564470,
-------------------<

从分类的边界框及其增量,生成最终的准确的边界框...

窗口:[ 75, 0, 372, 448 ]
正则化窗口:[ 0.167785, 0, 0.829978, 1 ]
深度,高,宽:1000,81,4
深度,高,宽:1,1000,4
深度,高,宽:1,1000,4
------------------->
名称:已修正的位置
形状 宽,高,通道:4,1000,1
数据:
 0.663566, 0.439433, 0.809462, 0.515605,
 0.670542, 0.340176, 0.799220, 0.387130,
............
 0.222871, 0.273334, 0.374881, 0.404185,
 0.638463, 0.241167, 0.737438, 0.291939,
-------------------<
------------------->
名称:已剪裁的位置(超出原图)
形状 宽,高,通道:4,1000,1
数据:
 0.663566, 0.439433, 0.809462, 0.515605,
 0.670542, 0.340176, 0.799220, 0.387130,
............
 0.222871, 0.273334, 0.374881, 0.404185,
 0.638463, 0.241167, 0.737438, 0.291939,
-------------------<
过滤掉背景区(分类值是0)
过滤掉低置信度区(<0.7)
还有:77 个。有类别 2 个
类别ID:
1,
3,

过滤掉可能是同一对象区(非极大抑制 重合阀值0.3),最多保留100个对象
取每种类别 分别应用非极大抑制...

1 类数目有 54 个。
对 54 个数据做快速排序...
保留数:5
3 类数目有 23 个。
对 23 个数据做快速排序...
保留数:3
------------------->
名称:包围框和置信率(detections)
形状 宽,高,通道:6,100,1
数据:
 0.663566, 0.439433,... 1.000000, 0.998039,
 0.670542, 0.340176,... 1.000000, 0.997717,
............
 0.000000, 0.000000,... 0.000000, 0.000000,
 0.000000, 0.000000,... 0.000000, 0.000000,
-------------------<

从准确的边界框中对特征金字塔扫描生成对象蒙板(遮罩)...

根据候选区面积大小分配到金字塔级...
总数 :100
金字塔特征级:2
分离出 :7 个
完成 7 个 剪裁和缩放。
存放到原位...

金字塔特征级:3
分离出 :1 个
完成 1 个 剪裁和缩放。
存放到原位...

金字塔特征级:4
分离出 :0 个
完成 0 个 剪裁和缩放。
存放到原位...

金字塔特征级:5
分离出 :92 个
完成 92 个 剪裁和缩放。
存放到原位...

金字塔特征图候选区对齐(PyramidROIAlign)完成。
------------------->
名称:总成图(ROIAlign)
形状 宽,高,通道:196,256,100
数据:
 0.139369, -0.040918,... 4.280806, 4.879940,
 -2.554317, -2.201655,... -1.010951, -0.170036,
............
 -2.465950, -2.327947,... 6.927403, 6.182915,
 5.276754, 5.197134,... -0.300403, 0.957843,
-------------------<
遮罩(mask)卷积 1 输入维度,输出维度:256,256
卷积 2 输入维度,输出维度:256,256
卷积 3 输入维度,输出维度:256,256
卷积 4 输入维度,输出维度:256,256
反卷积 输入维度,输出维度:256,256
输出层卷积 输入维度,输出维度:256,81
------------------->
名称:遮罩(mrcnn_mask)
形状 宽,高,通道:784,81,100
数据:
 0.499014, 0.496889,... 0.498139, 0.497982,
 0.006024, 0.007025,... 0.003178, 0.002194,
............
 0.021715, 0.023257,... 0.011044, 0.008604,
 0.003314, 0.003703,... 0.001181, 0.000825,
-------------------<

从对象包围框,序号和蒙板,生成图像(分割图,分割叠加图,文字标注的分割框图)...

mrcnn_mask 宽,高,深度:784,81,100
有效组数:8
------------------->
名称:对象序号
形状 宽,高,通道:8,1,1
数据:
 1.000000, 1.000000,... 1.000000, 3.000000,
-------------------<
蒙区文件已经保存为:    inp_2_蒙板.jpg

蒙区叠加文件已经保存为:    inp_2_叠加.jpg

标上对象计数文件已经保存为:    inp_2_计数.jpg

已经完成
总用时:37.17 秒
请按任意键继续. . .

效 果:

C++ 实现 实例分割(Mask_RCNN-81类)_第2张图片

C++ 实现 实例分割(Mask_RCNN-81类)_第3张图片

C++ 实现 实例分割(Mask_RCNN-81类)_第4张图片

C++ 实现 实例分割(Mask_RCNN-81类)_第5张图片


分别是 蒙板,叠加 和 计数图

为了加快运行速度,运行尺寸不是1024,而是448,所以分割小目标差一点了

再来原图就不发了:

C++ 实现 实例分割(Mask_RCNN-81类)_第6张图片
 

C++ 实现 实例分割(Mask_RCNN-81类)_第7张图片

C++ 实现 实例分割(Mask_RCNN-81类)_第8张图片

---

C++ 实现 实例分割(Mask_RCNN-81类)_第9张图片

C++ 实现 实例分割(Mask_RCNN-81类)_第10张图片


---

C++ 实现 实例分割(Mask_RCNN-81类)_第11张图片

下载:

81类实例分割的win程序

win图像实例分割实用程序,由《Mask_RCNN-master》中的模型《mask_rcnn_coco.h5》改编而成。

https://download.csdn.net/download/juebai123/12343530

 

 

你可能感兴趣的:(实例分割)