基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)

详细步骤

  • 1 数据集的制作
      • 1.1 数据标注
      • 1.2 生成数据集
  • 2 环境的搭建
      • 2.1 搭建流程
      • 2.2 注意事项(报错)
  • 3 开始训练
  • 4 可视化
      • 4.1 修改webcam.py文件
      • 4.2 进行可视化
  • 5 参考文章

1 数据集的制作

1.1 数据标注

使用 labelme=4.5.6 版本进行标注,标注文件指定到保存图片的路径下,也就是json文件和jpg文件放在同一个文件夹里

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第1张图片

1.2 生成数据集

先手动划分训练集和测试集(包括图像和标注文件),然后分别整合它们的标注信息,参考代码:1_ships_to_coco.py
详细的操作可以参考我的另一篇博客:mask rcnn 实例分割的数据集制作

2 环境的搭建

2.1 搭建流程

参考GitHub上面的官方文档:INSTALL.md

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第2张图片

一共需要下载(git clone) 4 个文件夹,分别是

apex 
cityscapesScripts 
cocoapi 
maskrcnn-benchmark

在下载这些文件夹之前,个人建议先创建一个父目录,也就是类似下图中的MASK-RCNN,这样比较容易操作,!!!特别要注意路径关系,进入子文件夹编译完setup.py文件后需要把路径重新指定到原本的父目录下,也就是下图中MASK-RCNN的路径下,INSTALL.md文件中的cd ..命令就是进行这个操作,这里建议使用 os.chdir 命令来替换 cd 命令

import os
os.chdir('/content/drive/My Drive/MASK-RCNN')
!ls

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第3张图片

Google colab 上面不能执行 conda 命令,也就是无法创建 conda 环境等操作,所以直接从 pip install ninja yacs cython matplotlib tqdm opencv-python命令开始执行

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第4张图片

在 Google colab 上的pytorchcuda都已经装好,下面这一步可以忽略
在这里插入图片描述

2.2 注意事项(报错)

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第5张图片

  1. !pip install torch==1.4.0 torchvision==0.5.0
  2. 待定;
  3. 待定;
  4. 待定;
  5. 待定;
  6. 待定;

3 开始训练

!!!注意:现在进入了 MASK-RCNN 的目录下

  1. 上传datasets文件夹到MASK-RCNN/maskrcnn-benchmarkmaskrcnn_benchmark/data/datasets目录下 (下图中有两个datasets是因为我把我的数据集命令为了datasets

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第6张图片

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第7张图片

  1. 更改maskrcnn-benchmark文件夹下maskrcnn_benchmark/config/paths_catalog.py文件,加入自己数据集的图像路径和标签文件的路径(大概在107行左右),还有后面的get(name)函数里面的也要改动,更改最后一个elif的后面的内容为能区分数据集的名称;

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第8张图片

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第9张图片

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第10张图片

  1. maskrcnn-benchmark/configs/get_started目录下新建一个yaml文件(这是模型配置文件),没有get_started目录就新建一个,下面是样例,涉及到路径的都要改,WEIGHTDATASETSOUT_DIR 这三个都要根据自己要求改动;
WEIGHT: 需要使用的预训练权重文件的路径
DATDSETS: 需要使用的自己的数据集的训练集和测试集
OUT_DIR: 需要保存模型的位置,同时也是测试结果保存的路径

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第11张图片

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第12张图片

MODEL:
  META_ARCHITECTURE: "GeneralizedRCNN"
  WEIGHT: /content/drive/MyDrive/SEED-MASK/maskrcnn-benchmark/PretrainedModels/R-50.pkl
  BACKBONE:
    CONV_BODY: "R-50-FPN"
  RESNETS:
    BACKBONE_OUT_CHANNELS: 256
  RPN:
    USE_FPN: True
    ANCHOR_STRIDE: (4, 8, 16, 32, 64)
    ANCHOR_SIZES: (32, 64, 128, 256, 384)
    PRE_NMS_TOP_N_TRAIN: 2000
    PRE_NMS_TOP_N_TEST: 400
    POST_NMS_TOP_N_TEST: 200
    FPN_POST_NMS_TOP_N_TEST: 100
  ROI_HEADS:
    USE_FPN: True
  ROI_BOX_HEAD:
    POOLER_RESOLUTION: 7
    POOLER_SCALES: (0.25, 0.125, 0.0625, 0.03125)
    POOLER_SAMPLING_RATIO: 2
    FEATURE_EXTRACTOR: "FPN2MLPFeatureExtractor"
    PREDICTOR: "FPNPredictor"
    NUM_CLASSES: 2 #漏写
  ROI_MASK_HEAD:
    POOLER_SCALES: (0.25, 0.125, 0.0625, 0.03125)
    FEATURE_EXTRACTOR: "MaskRCNNFPNFeatureExtractor"
    PREDICTOR: "MaskRCNNC4Predictor"
    POOLER_RESOLUTION: 14
    POOLER_SAMPLING_RATIO: 2
    RESOLUTION: 28
    SHARE_BOX_FEATURE_EXTRACTOR: False
  MASK_ON: True
DATASETS:
  TRAIN: ('seed_train',)
  TEST: ('seed_val',)
DATALOADER:
  SIZE_DIVISIBILITY: 32
SOLVER:
  BASE_LR: 0.005
  WEIGHT_DECAY: 0.0001
  STEPS: (20000,40000)
  MAX_ITER: 42500
  IMS_PER_BATCH: 1
OUTPUT_DIR: /content/drive/MyDrive/SEED-MASK/maskrcnn-benchmark/results/cx

如果报下面的错误说明 DATASETS 那里没有写对(注意括号里面的逗号!!!)

DATASETS:
  TRAIN: ('seed_train',)
  TEST: ('seed_val',)

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第13张图片

  1. 更改maskrcnn-benchmark/demo文件夹里面的predictor.py文件(训练好像没用到,测试时候用到);
    基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第14张图片

  2. 把在maskrcnn-benchmark/demo文件夹里面的webcam.pypredictor.py文件复制一份到maskrcnn-benchmark目录下(也就是上一级目录)
    基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第15张图片

  3. 再次配置一下环境,也就是编译setup.py文件
    提示:之前环境配置成功了,第二次只需编译一次下面提供的整合的代码即可

#整合代码:(只需编译一次)
import os
os.chdir('/content/drive/My Drive/SEED-MASK')
!ls
os.chdir('maskrcnn-benchmark/')
!ls
!pip install ninja yacs cython matplotlib tqdm opencv-python
!pip install torch==1.4.0 torchvision==0.5.0
os.chdir("../")
os.chdir('cityscapesScripts/')
!python setup.py build_ext install
os.chdir('../')
os.chdir('apex/')
!ls
!python setup.py install --cuda_ext --cpp_ext
os.chdir('../')
os.chdir('maskrcnn-benchmark/')
!python3 setup.py build develop

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第16张图片

  1. 开始训练(--config-file 指定模型的配置文件即可)
!python tools/train_net.py --config-file "configs/get_started/mask_seed.yaml"
#指定第3步中新建的yaml文件
有下图中第一幅图效果说明配置文件的路径没有问题
有下图中第二幅图效果说明预训练权重文件和模型配置文件匹配,已经开始训练
有下图中第三幅图效果说明已经训练完成,自动调用最后一个epoch保存的模型进行测试,输出测试结果

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第17张图片

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第18张图片
基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第19张图片

  1. 测试训练模型
!python tools/test_net.py --config-file "configs/get_started/mask_seed.yaml"
#指定第3步中新建的yaml文件

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第20张图片

4 可视化

4.1 修改webcam.py文件

a = glob('./seg/v/*.*') 是指定检测的图片存放的路径

os.mkdir('./seg/xu-res') 
cv2.imwrite('./seg/xu-res/'+name,composite) 都是指检测结果保存的路径,没有就自动创建

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第21张图片

4.2 进行可视化

!python webcam.py --config-file "configs/get_started/mango_mask_rcnn_R_50_FPN_1x.yaml"

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第22张图片

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)_第23张图片

总结一下需要预先编译的py文件

路径 编译命令
cocoapi/PythonAPI python setup.py build_ext install
cityscapesScripts python setup.py build_ext install
apex python setup.py install --cuda_ext --cpp_ext
maskrcnn-benchmark python setup.py build develop

5 参考文章

1 使用Mask RCNN Benchmark训练自己的数据集
2 facebookresearch/maskrcnn-benchmark 的 issues

欢迎关注:G果的博客,respect !
在这里插入图片描述

你可能感兴趣的:(机器学习,python,深度学习,pytorch,mask,rcnn,Google,colab)