实战教程
作者:Adrian Rosebrock
编译整理:萝卜兔
项目主要包含两个脚本,但还有其他几个重要的文件。我们按照下图的方式组织项目:
OpenCV and Mask R-CNN in images
下面我们一起来看看Mask R-CNN是如何工作的。在开始之前,确保Python环境安装了OpenCV3.4.3或者更高的版本。需要下载的源代码以及示例图(链接附文末)
打开mask_rcnn.py插入以下代码:
首先,我们将在Lines 2-7导入NumPy和OpenCV。然后解析命令行参数:
我们的脚本要求命令行参数标志和参数在运行时在终端传递。参数在第10-21行解析,其中前两个是必须的,其余的是可选的。
命令行参数存储在args字典中,加载标签和颜色:
加载模型:
接下来,我们将通过Mask R-CNN神经网络加载并传递图像:
现在已经在图像上执行了Mask R-CNN的前向传递,我们要过滤+可视化我们的结果。这正是下一个for循环完成的。这部分很长,我们从下面开始分成五个代码块来看:
图像分割要求我们找到目标的所有像素,因此我们将在目标上层放置一个透明覆盖层,以查看算法的执行情况。为此,我们将计算一个掩膜:
下一个块实现mask、roi和segmented instance可视化:
继续可视化:
最后,我们将在图像上绘制边界框和类别标签+置信度值,并显示结果!
让我们一起试一下Mask R-CNN代码。确认通过本教程给的链接下载了源代码,经过训练的Mask R-CNN和示例图像,从那里打开终端并执行以下命令:
Figure 7:Mask R-CNN应用于汽车场景。Python和OpenCV用于生成蒙版。
在上图中,我们可以看到,Mask R-CNN不仅定位了图像中的每个车辆,而且还构建了像素方式的掩膜,允许我们从图像中分割每辆车。
如果我们运行相同的命令,提供--visualize标志,也可以可视化ROI、Mask以及instance:
Figure 8:使用--visualize flag,可视化ROI、mask和instance
尝试另一张照片:
Figure 9: Mask R-CNN进行实例分割
正确检测并分割了人、狗、马和卡车。
最后一个图像示例:
Mask R-CNN in video streams
上面讲了如何将Mask R-CNN应用于图像,接下来我们来看如何应用于视频。
打开 mask_rcnn_video.py 文件插入下面的代码:
首先,我们导入必要的包并解析命令行参数。然后加载LABELS、COLORS和Mask R-CNN网络:
现在,让我们初始化视频和视频读写器:
接着开始帧处理循环:
循环处理检测到的对象:
我们过滤掉置信度低的候选框,然后确定边界框坐标并获得mask和roi。
现在让我们绘制对象的掩膜,边界框和标签+置信度:
最后,将视频文件写入磁盘并释放视频流对象:
我们来看一下结果,在源代码链接中我没有给出视频文件,需要的话可以去YouTube下载,或者从文末的链接中下载。
打开终端执行以下命令:
Figure11 视频处理结果
上面的视频中可以看到应用了Mask R-CNN的狗和猫的有趣的视频剪辑。
第二个例子:
本教程中的Mask R-CNN是在COCO数据集上预先训练好的,源代码也提供在文末的链接中了。如果想要在自己的数据集上训练Mask R-CNN,可以参考文末的论文以及书籍链接。
参考资料
YOLO Object detector:
https://www.pyimagesearch.com/2018/11/12/yolo-object-detection-with-opencv/
Mask R-CNN论文:
https://arxiv.org/abs/1703.06870
《Deep Learning for Computer Vision with Python》:
https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/
原文链接:
https://www.pyimagesearch.com/2018/11/19/mask-r-cnn-with-opencv/
源代码下载链接:
https://www.getdrip.com/forms/192164124/submissions
视频文件链接:
https://www.youtube.com/watch?v=EtH9Yllzjcc
https://www.youtube.com/watch?v=i59v0p-gAtk
>
领取专属 10元无门槛券
私享最新 技术干货