使用 labelme=4.5.6
版本进行标注,标注文件指定到保存图片的路径下,也就是json文件和jpg文件放在同一个文件夹里
先手动划分训练集和测试集(包括图像和标注文件),然后分别整合它们的标注信息,参考代码:1_ships_to_coco.py
详细的操作可以参考我的另一篇博客:mask rcnn 实例分割的数据集制作
参考GitHub上面的官方文档:INSTALL.md
一共需要下载(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 上面不能执行 conda 命令,也就是无法创建 conda 环境等操作,所以直接从 pip install ninja yacs cython matplotlib tqdm opencv-python
命令开始执行
在 Google colab 上的pytorch
和cuda
都已经装好,下面这一步可以忽略
!pip install torch==1.4.0 torchvision==0.5.0
!!!注意:现在进入了 MASK-RCNN 的目录下
datasets
文件夹到MASK-RCNN/maskrcnn-benchmark
的maskrcnn_benchmark/data/datasets
目录下 (下图中有两个datasets
是因为我把我的数据集命令为了datasets
)maskrcnn-benchmark
文件夹下maskrcnn_benchmark/config/paths_catalog.py
文件,加入自己数据集的图像路径和标签文件的路径(大概在107行左右),还有后面的get(name)函数里面的也要改动,更改最后一个elif的后面的内容为能区分数据集的名称;maskrcnn-benchmark/configs/get_started
目录下新建一个yaml文件(这是模型配置文件),没有get_started
目录就新建一个,下面是样例,涉及到路径的都要改,WEIGHT,DATASETS,OUT_DIR 这三个都要根据自己要求改动;WEIGHT: 需要使用的预训练权重文件的路径
DATDSETS: 需要使用的自己的数据集的训练集和测试集
OUT_DIR: 需要保存模型的位置,同时也是测试结果保存的路径
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',)
更改maskrcnn-benchmark/demo
文件夹里面的predictor.py
文件(训练好像没用到,测试时候用到);
把在maskrcnn-benchmark/demo
文件夹里面的webcam.py
和predictor.py
文件复制一份到maskrcnn-benchmark
目录下(也就是上一级目录)
再次配置一下环境,也就是编译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
--config-file
指定模型的配置文件即可)!python tools/train_net.py --config-file "configs/get_started/mask_seed.yaml"
#指定第3步中新建的yaml文件
有下图中第一幅图效果说明配置文件的路径没有问题
有下图中第二幅图效果说明预训练权重文件和模型配置文件匹配,已经开始训练
有下图中第三幅图效果说明已经训练完成,自动调用最后一个epoch保存的模型进行测试,输出测试结果
!python tools/test_net.py --config-file "configs/get_started/mask_seed.yaml"
#指定第3步中新建的yaml文件
a = glob('./seg/v/*.*') 是指定检测的图片存放的路径
os.mkdir('./seg/xu-res')
cv2.imwrite('./seg/xu-res/'+name,composite) 都是指检测结果保存的路径,没有就自动创建
!python webcam.py --config-file "configs/get_started/mango_mask_rcnn_R_50_FPN_1x.yaml"
总结一下需要预先编译的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 |
1 使用Mask RCNN Benchmark训练自己的数据集
2 facebookresearch/maskrcnn-benchmark 的 issues