1.创建一个conda的虚拟环境(python 3.6)【创建一个python 的虚拟环境,这样不被其他python安装的步骤影响】在新建文件夹下 win:conda create -n MaskRCNN python-3.6 pip
2.安装依赖项 activitate MaskRCNN 下载 shapely https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely pip install Shapely-1.6.4.post1-cp36-cp36m-win_amd64.whl pip install -r requirements.txt 如果有gpu的话,tensorflow-gpu==1.5
3.下载mask_rcnn repo git clone https://github.com/matterport/Mask_RCNN.git
4.安装pycocotools win安装: pycocotools requires Visual C++ 2015 Build Tools 下面是地址:http://landinghub.visualstudio.com/visual-cpp-build-tools 下载:http://github.com/philferriere/cocoapi.git 安装:pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI 或者cd PythonAPI python setup.py build_ext install 把pycocotools文件夹放到系统目录下
ubuntu和linux: pycocotools下载地址:git clone https://github.com/waleedka/coco.git cd到PythonAPI里面,使用命令 python setup.py build_ext install 安装即可,如果是安装python3,需要使用 python3 setup.py build_ext install
5.下载预训练权重 https://github.com/matterport/Mask RCNN/releases 下载mask_rcnn_coco.h5文件 并把文件放在Mask_RCNN 目录下
6 测试 jupyter notebook demo_video.py 0+文件名
1.使用visualize_cv2.py 更改里面的参数: from mrcnn import utils
sys.path.append(os.path.join(ROOT ROOT_DIR=os.path.abspath("…/") sys.path.append(os.path.join(ROOT_DIR, “samples/coco/”)) import coco
2.新建video_demo.py import cv2 from visualize_cv2 import model, display_instances,class_name import sys args = sys.argv if(len(args)<2): print(“run command:python video_demo.py 0 or video file name”) name = args[1] if (len(args[1])==1): name=int(args[1]) stream = cv2.videoCapture(name) while True: ret, frame =stream.read() if not ret: print(unable to fetch frame) break 下面的话,就仿照文件video_file.py来写。 关于video_demo.py和video_file.py的文件在 https://github.com/reigngt09/mask-rcnn/tree/master/2. Web-Cam Mask RCNN
参考文献:https://blog.csdn.net/qq_15969343/article/details/80568579 if class_names.index(‘traffic light’) in r[‘class_ids’]: k = list(np.where(r[‘class_ids’] == class_names.index(‘traffic light’))[0]) r[‘scores’] = np.array([r[‘scores’][i] for i in k]) r[‘rois’] = np.array([r[‘rois’][i] for i in k]) r[‘masks’] = np.array([r[‘masks’][i] for i in k]) r[‘class_ids’] = np.array([r[‘class_ids’][i] for i in k]) visualize.display_instances(image, r[‘rois’], r[‘masks’], r[‘class_ids’], class_names, r[‘scores’], figsize=(8, 8))
#Load a random image from the images folder
file_names = next(os.walk(IMAGE_DIR))[2] file_name=os.path.join(IMAGE_DIR, ‘3862500489_6fd195d183_z.jpg’)
#image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names))) image = skimage.io.imread(file_name)
#Run detection results = model.detect([image], verbose=1)
#Visualize results r = results[0] if class_names.index(‘tennis racket’) in r[‘class_ids’]: k = list(np.where(r[‘class_ids’] == class_names.index(‘tennis racket’))[0]) r[‘scores’] = np.array([r[‘scores’][i] for i in k]) r[‘rois’] = np.array([r[‘rois’][i] for i in k]) r[‘masks’]=np.transpose(r[‘masks’]) r[‘masks’] = np.array([r[‘masks’][i] for i in k]) r[‘masks’]=np.transpose(r[‘masks’]) r[‘class_ids’] = np.array([r[‘class_ids’][i] for i in k])
visualize.display_instances(image, r[‘rois’], r[‘masks’], r[‘class_ids’], class_names, r[‘scores’], figsize=(8, 8)) #visualize.display_instances(image, r[‘rois’], r[‘masks’], r[‘class_ids’],
#Visualize results r = results[0] if class_names.index(‘tennis racket’) and class_names.index(‘person’) in r[‘class_ids’]: #如果class_names里的网球拍 在图片的实例(图片的实例有很多)里 #r[‘class_ids’] 这张图片中球拍的个数 #class_id = class_names.index(‘traffic light’) #class_ids: [num_instances] 实例的个数 k = list(np.where(r[‘class_ids’] == class_names.index(‘tennis racket’))[0]) #检索出所有网球拍的实例(2)列表 m = list(np.where(r[‘class_ids’] == class_names.index(‘person’))[0]) r[‘scores’] = np.array([r[‘scores’][i] for i in k+m]) #标注出所有的 r[‘rois’] = np.array([r[‘rois’][i] for i in k+m]) r[‘masks’]=np.transpose(r[‘masks’]) r[‘masks’] = np.array([r[‘masks’][i] for i in k+m]) r[‘masks’]=np.transpose(r[‘masks’]) r[‘class_ids’] = np.array([r[‘class_ids’][i] for i in k+m])
visualize.display_instances(image, r[‘rois’], r[‘masks’], r[‘class_ids’], class_names,figsize=(8, 8))
import numpy as np 把visualize.display_instances(image, r[‘rois’], r[‘masks’], r[‘class_ids’], class_names,figsize=(8, 8)) 改成 masked_image = display_instances(frame, r[‘rois’], r[‘masks’], r[‘class_ids’], class_names, r[‘scores’]) cv2.imshow(“masked_image”,masked_image)
参考博文: 1.Win10系统下一步一步教你实现MASK_RCNN训练自己的数据集(使用labelme制作自己的数据集)及需要注意的大坑 2.【Mask R-CNN】(七):制作并训练自己的数据集最详细教程 3.使用keras版本的Mask-RCNN来训练自己的数据集,tensorflow的安装指令制作方法超简单。 4.Mask RCNN训练自己的数据集 5.Mask R-CNN+tensorflow/keras的配置介绍、代码详解与训练自己的数据集演示
具体过程总结 准备训练数据集(dataset)
#python3 conda create --name=labelme python=3.6 source activate labelme(activate labelme)
#conda install -c conda-forge pyside2 #conda install pyqt pip install pyqt5 #pyqt5 can be installed via pip on python3 pip install labelme #Pillow 5 causes dll load error on Windows. #https://github.com/wkentaro/labelme/pull/174 conda install pillow=4.0.0 直接输入labelme
**数据集中一共有四个文件(cv2_mask、json、labelme_json、pic) 其中pic就是原始图片、json是labelme处理训练图像后生成的文件 这里用到的工具是labelme、labelme_json是处理json之后的文件使用方法是:**labelme_json_to_dataset+空格+文件名称.json 多个文件 具体使用参考:https://blog.csdn.net/shwan_ma/article/details/77823281 labelme的官网:https://github.com/wkentaro/labelme 运行源代码: 见前 训练数据源代码 修改源代码: 1.修改config: 1.1类别:NUM_CLASSES = 1 + 3 比如有猫、狗、非猫非狗的类别,所以标注应该是1+3(1表示背景的一类,3表示cat、dog、not defined这三类 ) 1.2.IMAGES_PER_GPU改为1(如果有gpu的话) 2.修改dataset类别 2.1 修改load_xxx函数 首先是添加类,然后是解析annotations信息 def load_cat_dog(self, dataset_dir, subset): self.add_class(“catvsdog”, 1, “cat”) self.add_class(“catvsdog”, 2, “dog”) self.add_class(“catvsdog”, 3, “not_defined”) assert subset in [“train”, “val”] dataset_dir = os.path.join(dataset_dir,subset)
参考视频: https://www.bilibili.com/video/av23064129?from=search&seid=17949035413834026288
