• Stars
    star
    313
  • Rank 133,714 (Top 3 %)
  • Language
    Python
  • License
    MIT License
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

这是一个mask-rcnn的库,可以用于训练自己的实例分割模型。

Mask-Rcnn-实例分割模型在Keras当中的实现


目录

  1. 注意事项 Attention
  2. 仓库更新 Top News
  3. 相关仓库 Related code
  4. 所需环境 Environment
  5. 文件下载 Download
  6. 训练步骤 How2train
  7. 预测步骤 How2predict
  8. 评估步骤 miou
  9. 参考资料 Reference

注意事项!

为了满足同学们计算mAP的需求,对代码进行了大改,现在使用COCO数据集格式,各位同学请仔细看README,视频中的步骤已经只能用于旧库,旧库地址参考Top News。

Top News

2022-05:进行大幅度更新、支持step、cos学习率下降法、支持adam、sgd优化器选择、支持学习率根据batch_size自适应调整、支持map评估。
BiliBili视频中的原仓库地址为:https://github.com/bubbliiiing/mask-rcnn-keras/tree/bilibili

2020-10:创建仓库、支持训练与预测。

相关仓库

模型 路径
yolact-keras https://github.com/bubbliiiing/yolact-keras
yolact-pytorch https://github.com/bubbliiiing/yolact-pytorch
yolact-tf2 https://github.com/bubbliiiing/yolact-tf2
mask-rcnn-keras https://github.com/bubbliiiing/mask-rcnn-keras
mask-rcnn-tf2 https://github.com/bubbliiiing/mask-rcnn-tf2

所需环境

tensorflow-gpu==1.13.1
keras==2.1.5

文件下载

这个训练好的权重是基于coco数据集的,可以直接运行用于coco数据集的实例分割。
链接: https://pan.baidu.com/s/1JXdNZ_dTCjtxjLmrxFWrag
提取码: mpzp

shapes数据集下载地址如下,该数据集是使用labelme标注的结果,尚未经过其它处理,用于区分三角形和正方形:
链接: https://pan.baidu.com/s/1hrCaEYbnSGBOhjoiOKQmig
提取码: jk44

训练步骤

a、训练shapes形状数据集

  1. 数据集的准备
    文件下载部分,通过百度网盘下载数据集,下载完成后解压,将图片和对应的json文件放入根目录下的datasets/before文件夹。

  2. 数据集的处理
    打开coco_annotation.py,里面的参数默认用于处理shapes形状数据集,直接运行可以在datasets/coco文件夹里生成图片文件和标签文件,并且完成了训练集和测试集的划分。

  3. 开始网络训练
    train.py的默认参数用于训练shapes数据集,默认指向了根目录下的数据集文件夹,直接运行train.py即可开始训练。

  4. 训练结果预测
    训练结果预测需要用到两个文件,分别是mask_rcnn.py和predict.py。 首先需要去mask_rcnn.py里面修改model_path以及classes_path,这两个参数必须要修改。
    model_path指向训练好的权值文件,在logs文件夹里。
    classes_path指向检测类别所对应的txt。

    完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。

b、训练自己的数据集

  1. 数据集的准备
    本文使用labelme工具进行标注,标注好的文件有图片文件和json文件,二者均放在before文件夹里,具体格式可参考shapes数据集。
    在标注目标时需要注意,同一种类的不同目标需要使用 _ 来隔开。
    比如想要训练网络检测三角形和正方形,当一幅图片存在两个三角形时,分别标记为:
triangle_1
triangle_2
  1. 数据集的处理
    修改coco_annotation.py里面的参数。第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。
    训练自己的数据集时,可以自己建立一个cls_classes.txt,里面写自己所需要区分的类别。
    model_data/cls_classes.txt文件内容为:
cat
dog
...

修改coco_annotation.py中的classes_path,使其对应cls_classes.txt,并运行coco_annotation.py。

  1. 开始网络训练
    训练的参数较多,均在train.py中,大家可以在下载库后仔细看注释,其中最重要的部分依然是train.py里的classes_path。
    classes_path用于指向检测类别所对应的txt,这个txt和coco_annotation.py里面的txt一样!训练自己的数据集必须要修改!
    修改完classes_path后就可以运行train.py开始训练了,在训练多个epoch后,权值会生成在logs文件夹中。

  2. 训练结果预测
    训练结果预测需要用到两个文件,分别是mask_rcnn.py和predict.py。 首先需要去mask_rcnn.py里面修改model_path以及classes_path,这两个参数必须要修改。
    model_path指向训练好的权值文件,在logs文件夹里。
    classes_path指向检测类别所对应的txt。

    完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。

c、训练coco数据集

  1. 数据集的准备
    coco训练集 http://images.cocodataset.org/zips/train2017.zip
    coco验证集 http://images.cocodataset.org/zips/val2017.zip
    coco训练集和验证集的标签 http://images.cocodataset.org/annotations/annotations_trainval2017.zip

  2. 开始网络训练
    解压训练集、验证集及其标签后。打开train.py文件,修改其中的classes_path指向model_data/coco_classes.txt。
    修改train_image_path为训练图片的路径,train_annotation_path为训练图片的标签文件,val_image_path为验证图片的路径,val_annotation_path为验证图片的标签文件。

  3. 训练结果预测
    训练结果预测需要用到两个文件,分别是mask_rcnn.py和predict.py。 首先需要去mask_rcnn.py里面修改model_path以及classes_path,这两个参数必须要修改。
    model_path指向训练好的权值文件,在logs文件夹里。
    classes_path指向检测类别所对应的txt。

    完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。

预测步骤

a、使用预训练权重

  1. 下载完库后解压,在百度网盘下载权值,放入model_data,运行predict.py,输入
img/street.jpg
  1. 在predict.py里面进行设置可以进行fps测试和video视频检测。

b、使用自己训练的权重

  1. 按照训练步骤训练。
  2. 在mask_rcnn.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类
_defaults = {
    #--------------------------------------------------------------------------#
    #   使用自己训练好的模型进行预测一定要修改model_path和classes_path!
    #   model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
    #
    #   训练好后logs文件夹下存在多个权值文件,选择验证集损失较低的即可。
    #   验证集损失较低不代表mAP较高,仅代表该权值在验证集上泛化性能较好。
    #   如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改
    #--------------------------------------------------------------------------#
    "model_path"        : 'model_data/mask_rcnn_coco.h5',
    "classes_path"      : 'model_data/coco_classes.txt',
    #---------------------------------------------------------------------#
    #   只有得分大于置信度的预测框会被保留下来
    #---------------------------------------------------------------------#
    "confidence"        : 0.7,
    #---------------------------------------------------------------------#
    #   非极大抑制所用到的nms_iou大小
    #---------------------------------------------------------------------#
    "nms_iou"           : 0.3,
    #----------------------------------------------------------------------#
    #   输入的shape大小
    #   算法会填充输入图片到[IMAGE_MAX_DIM, IMAGE_MAX_DIM]的大小
    #----------------------------------------------------------------------#
    "IMAGE_MAX_DIM"     : 512,
    #----------------------------------------------------------------------#
    #   用于设定先验框大小,默认的先验框大多数情况下是通用的,可以不修改。
    #   需要和训练设置的RPN_ANCHOR_SCALES一致。
    #----------------------------------------------------------------------#
    "RPN_ANCHOR_SCALES" : [32, 64, 128, 256, 512]
}
  1. 运行predict.py,输入
img/street.jpg
  1. 在predict.py里面进行设置可以进行fps测试和video视频检测。

评估步骤

a、评估自己的数据集

  1. 本文使用coco格式进行评估。
  2. 如果在训练前已经运行过coco_annotation.py文件,代码会自动将数据集划分成训练集、验证集和测试集。
  3. 如果想要修改测试集的比例,可以修改coco_annotation.py文件下的trainval_percent。trainval_percent用于指定(训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1。train_percent用于指定(训练集+验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1。
  4. 在mask_rcnn.py里面修改model_path以及classes_path。model_path指向训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。
  5. 前往eval.py文件修改classes_path,classes_path用于指向检测类别所对应的txt,这个txt和训练时的txt一样。评估自己的数据集必须要修改。运行eval.py即可获得评估结果。

b、评估coco的数据集

  1. 下载好coco数据集。
  2. 在mask_rcnn.py里面修改model_path以及classes_path。model_path指向coco数据集的权重,在logs文件夹里。classes_path指向model_data/coco_classes.txt。
  3. 前往eval.py设置classes_path,指向model_data/coco_classes.txt。修改Image_dir为评估图片的路径,Json_path为评估图片的标签文件。 运行eval.py即可获得评估结果。

Reference

https://github.com/matterport/Mask_RCNN
https://github.com/feiyuhuahuo/Yolact_minimal

More Repositories

1

yolov4-pytorch

这是一个YoloV4-pytorch的源码,可以用于训练自己的模型。
Python
2,100
star
2

yolo3-pytorch

这是一个yolo3-pytorch的源码,可以用于训练自己的模型。
Python
1,993
star
3

faster-rcnn-pytorch

这是一个faster-rcnn的pytorch实现的库,可以利用voc数据集格式的数据进行训练。
Python
1,559
star
4

unet-pytorch

这是一个unet-pytorch的源码,可以训练自己的模型
Python
1,314
star
5

yolov5-pytorch

这是一个YoloV5-pytorch的源码,可以用于训练自己的模型。
Python
1,019
star
6

deeplabv3-plus-pytorch

这是一个deeplabv3-plus-pytorch的源码,可以用于训练自己的模型。
Python
883
star
7

yolox-pytorch

这是一个yolox-pytorch的源码,可以用于训练自己的模型。
Python
879
star
8

yolov7-pytorch

这是一个yolov7的库,可以用于训练自己的数据集。
Python
868
star
9

yolov4-tiny-pytorch

这是一个YoloV4-tiny-pytorch的源码,可以用于训练自己的模型。
Python
778
star
10

ssd-pytorch

这是一个ssd-pytorch的源码,可以用于训练自己的模型。
Python
669
star
11

yolov8-pytorch

这是一个yolov8-pytorch的仓库,可以用于训练自己的数据集。
Python
614
star
12

Siamese-pytorch

这是一个孪生神经网络(Siamese network)的库,可进行图片的相似性比较。
Python
572
star
13

yolo3-keras

这是一个yolo3-keras的源码,可以用于训练自己的模型。
Python
535
star
14

yolov4-keras

这是一个YoloV4-keras的源码,可以用于训练自己的模型。
Python
491
star
15

Semantic-Segmentation

I will upload many semantic segmentation models to this repository for you to learn
Python
433
star
16

classification-pytorch

这是各个主干网络分类模型的源码,可以用于训练自己的分类模型。
Python
387
star
17

mobilenet-yolov4-pytorch

这是一个mobilenet-yolov4的库,把yolov4主干网络修改成了mobilenet,修改了Panet的卷积组成,使参数量大幅度缩小。
Python
365
star
18

centernet-pytorch

这是一个centernet-pytorch的源码,可以用于训练自己的模型。
Python
364
star
19

pspnet-pytorch

这是一个pspnet-pytorch的源码,可以用于训练自己的模型。
Python
357
star
20

yolov4-tf2

这是一个yolo4-tf2(tensorflow2)的源码,可以用于训练自己的模型。
Python
314
star
21

efficientdet-pytorch

这是一个efficientdet-pytorch的源码,可以用于训练自己的模型。
Python
305
star
22

faster-rcnn-keras

这是一个faster-rcnn的keras实现的库,可以利用voc数据集格式的数据进行训练。
Python
285
star
23

segformer-pytorch

这是一个segformer-pytorch的源码,可以用于训练自己的模型。
Python
251
star
24

GAN-keras

里面包含许多GAN算法的Keras源码,可以用于训练自己的模型。
Python
236
star
25

keras-face-recognition

这是一个基于mtcnn和facenet的人脸识别模型,可实现在线人脸识别。
Python
224
star
26

retinaface-pytorch

这是一个retinaface-pytorch的源码,可以用于训练自己的模型。
Python
211
star
27

ddpm-pytorch

这个是一个ddpm的pytorch仓库,可以用于训练自己的数据集。
Python
207
star
28

facenet-retinaface-pytorch

这是一个利用facenet和retinaface实现人脸识别的库,可以进行在线的人脸识别。
Python
193
star
29

yolov7-tiny-pytorch

这是一个yolov7-tiny-pytorch的源码,可以用于训练自己的模型。
Python
184
star
30

retinanet-pytorch

这是一个retinanet-pytorch的源码,可以用于训练自己的模型。
Python
175
star
31

faster-rcnn-tf2

这是一个faster-rcnn的tensorflow2实现的库,可以利用voc数据集格式的数据进行训练。
Python
171
star
32

ssd-keras

这是一个ssd-keras的源码,可以用于训练自己的模型。
Python
167
star
33

clip-pytorch

这是一个clip-pytorch的模型,可以训练自己的数据集。
Python
164
star
34

yolov4-tiny-keras

这是一个YoloV4-tiny-keras的源码,可以用于训练自己的模型。
Python
160
star
35

detr-pytorch

这是一个DETR-pytorch的仓库,可以训练自己的数据集
Python
158
star
36

object-detection-augmentation

这里面存放了一些目标检测算法的数据增强方法。如mosaic、mixup。
Python
150
star
37

efficientnet-yolo3-pytorch

这是一个efficientnet-yolo3-pytorch的源码,将yolov3的主干特征提取网络修改成了efficientnet
Python
142
star
38

mask-recognize

这是一个简单的人工智障识别口罩佩戴的库
Python
142
star
39

classic-convolution-network

里面会保存许多优秀的卷积神经网络结构,这些结构可以帮助我们更好的设计网络。
Python
139
star
40

ssd-tf2

这是一个ssd-tf2(tensorflow2)的源码,可以用于训练自己的模型。
Python
138
star
41

yolov4-tiny-tf2

这是一个YoloV4-tiny-tf2的源码,可以用于训练自己的模型。
Python
134
star
42

segmentation-format-fix

该仓库中放置了一些工具,用于调整语义分割算法的数据集格式,使其符合训练要求。
Python
131
star
43

arcface-pytorch

这是一个arcface-pytorch的源码,可以用于训练自己的模型。
Python
130
star
44

count-mAP-txt

这个是一个在SSD的基础上用于生成绘制mAP代码所用的txt的例子。(目的是生成txt)
Python
128
star
45

Keras-Attention

这个仓库主要包含了LSTM、卷积神经网络中,注意力机制的实现。
Python
126
star
46

mtcnn-keras

这是一个利用keras实现mtcnn的代码,可以实现人脸检测。
Python
124
star
47

yolov5-v6.1-pytorch

这是一个yolov5-v6.1-pytorch的源码,可以用于训练自己的模型。
Python
115
star
48

retinanet-keras

这是一个retinanet-keras的源码,可以用于训练自己的模型。
Python
111
star
49

unet-keras

这是一个unet-keras的源码,可以用于训练自己的模型。
Python
107
star
50

hrnet-pytorch

这是一个hrnet-pytorch的库,可用于训练自己的语义分割数据集
Python
106
star
51

mobilenet-ssd-keras

这是一个mobilenet-ssd-keras的源码,可以用于训练自己的轻量级ssd模型。
Python
105
star
52

stable-diffusion

这是一个stable-diffusion的库。
Python
102
star
53

yolov5-tf2

这是一个YoloV5-tensorflow2的源码,可以用于训练自己的模型。
Python
101
star
54

Bubbliiiing

91
star
55

efficientdet-keras

这是一个efficientdet-keras的源码,可以用于训练自己的模型。
Python
89
star
56

Transfer-Learning

这是一个有关迁移学习的仓库,在这里可以看到迁移学习的各种用法。
Python
88
star
57

yolo3-tf2

这是一个yolo3-tf2的源码,可以用于训练自己的模型。
Python
80
star
58

Mobilenet-SSD-Essay

这是Mobilenet-SSD的论文版,可用于训练与预测。
Python
78
star
59

yolox-tf2

这是一个yolox-tf2的源码,可以用于训练自己的模型。
Python
73
star
60

yolact-pytorch

这是一个yolact-pytorch的库,可用于训练自己的数据集
Python
71
star
61

mobilenet-yolov4-keras

这是一个mobilenet-yolov4的库,把yolov4主干网络修改成了mobilenet,修改了Panet的卷积组成,使参数量大幅度缩小。
Python
71
star
62

M2det-Keras

这是一个M2det的Keras实现的库,可以实时检测与训练。
Python
67
star
63

Siamese-keras

这是一个孪生神经网络(Siamese network)的库,可进行图片的相似性比较。
Python
66
star
64

classification-keras

这是各个主干网络分类模型的源码,可以用于训练自己的分类模型。
Python
66
star
65

yolox-keras

这是一个yolox-keras的源码,可以用于训练自己的模型。
Python
65
star
66

unet-tf2

这是一个unet-tf2的源码,可以用于训练自己的模型。
Python
64
star
67

RFB-keras

这是一个利用Keras实现RFBnet的库,RFBnet是SSD的改进版,其整体的结构与SSD相差不大,其主要特点是在SSD的特征提取网络上用了RFB模块。
Python
63
star
68

centernet-keras

这是一个centernet-keras的源码,可以用于训练自己的模型。
Python
63
star
69

mask-rcnn-tf2

这是一个mask-rcnn-tf2的库,可以用于训练自己的模型。
Python
63
star
70

facenet-keras

这是一个facenet-keras的源码,可以用于训练自己的模型。
Python
62
star
71

retinaface-keras

这是一个retinaface-keras的源码,可以用于训练自己的模型。
Python
60
star
72

DiT-pytorch

这是一个DiT-pytorch的代码,主要用于学习DiT结构。
Python
60
star
73

efficientdet-tf2

这是一个efficientdet-tf2(tensorflow2)的源码,可以用于训练自己的模型。
Python
59
star
74

efficientnet-yolo3-keras

这是一个efficientnet-yolo3-keras的源码,将yolov3的主干特征提取网络修改成了efficientnet
Python
55
star
75

retinaface-tf2

这是一个retinaface-tf2的源码,可以用于训练自己的模型。
Python
53
star
76

srgan-pytorch

这是一个srgan-keras的源码,可以用于训练自己的模型。
Python
53
star
77

pspnet-keras

这是一个pspnet-keras的源码,可以用于训练自己的模型。
Python
51
star
78

Siamese-tf2

这是一个孪生神经网络(Siamese network)的库,可进行图片的相似性比较。
Python
51
star
79

seq2seq-keras

这是一个利用keras实现seq2seq模型的仓库,大家可以通过这个仓库学习到许多的seq2seq的例子
Python
50
star
80

deeplabv3-plus-tf2

这是一个deeplabv3-plus-tf2的源码,可以用于训练自己的模型。
Python
49
star
81

dcgan-pytorch

这是一个dcgan-pytorch的源码,可以用于训练自己的模型。
Python
49
star
82

deeplabv3-plus-keras

这是一个deeplabv3-plus-keras的源码,可以用于训练自己的模型。
Python
49
star
83

classification-tf2

这是各个主干网络分类模型的源码,可以用于训练自己的分类模型。
Python
47
star
84

mobilenet-yolov4-tf2

这是一个mobilenet-yolov4的库,把yolov4主干网络修改成了mobilenet,修改了Panet的卷积组成,使参数量大幅度缩小。
Python
46
star
85

centernet-tf2

这是一个centernet-tf2的源码,可以用于训练自己的模型。
Python
46
star
86

dcgan-keras

这是一个dcgan-keras的源码,可以用于训练自己的模型。
Python
44
star
87

blip-pytorch

这是一个blip-pytorch简化的代码,适用于了解Attention与Transformer的结构。
Python
42
star
88

facenet-tf2

这是一个facenet-tf2的库,可以用于训练自己的人脸识别模型
Python
42
star
89

facenet-retinaface-keras

这是一个利用facenet和retinaface实现人脸识别的库,可以进行在线的人脸识别。
Python
40
star
90

QRcode-location

This is an Example about how to locate QRcode.
C++
39
star
91

poems-generator

这个例子可以用LSTM来写五言诗。
Python
37
star
92

cyclegan-pytorch

这是一个cyclegan-pytorch的源码,可以用于训练自己的模型。
Python
37
star
93

srgan-keras

这是一个srgan-keras的源码,可以用于训练自己的模型。
Python
34
star
94

yolov5-keras

这是一个YoloV5-keras的源码,可以用于训练自己的模型。
Python
34
star
95

pspnet-tf2

这是一个pspnet-tf2的源码,可以用于训练自己的模型。
Python
31
star
96

yolov7-tf2

这是一个YoloV7-tf2的源码,可以用于训练自己的模型。
Python
28
star
97

yolov7-keras

这是一个yolov7-keras的源码,可以用于训练自己的模型。
Python
26
star
98

fcos-pytorch

这是一个fcos-pytorch的仓库,可以用于训练自己的数据集。
Python
24
star
99

Colab

这是一个Colab使用的示例notebook。配合博文使用。
Jupyter Notebook
22
star
100

yolov5-v6.1-tf2

这是一个yolov5-v6.1-tf2的源码,可以用于训练自己的模型。
Python
19
star