复现MaskRcnn_tf

首先先看一个固定的博主的讲解

唐宇迪老师的视频最多,可以选择B站链接很多

1.把官方源码下载下来,下载最多人下载的,后续的讲解绝大部分也就会基于此来开展

2.然后进入CSDN开始选择安装版本

这是一个漫长复杂的过程,需要选一个主要博主和一个次要博主,不要选择太多的博主,先从简答的入手,但是讲解必须详细,可能会有你碰到的问题他没有碰到的问题,所以他如果有记录自己的问题会更好

包含依赖库具体版本的文章

其中碰到问题,无法安装opencv-python,先试着安装后面的,也不行,于是去查找问题,could not build opencv-python,找到方法是安装低版本的,可行,但是觉得可能后续会有问题

pip install opencv-python==4.3.0.38

(94条消息) MaskRcnn环境配置+训练_maskrcnn训练好的权重在哪_血狼傲骨的博客-CSDN博客https://blog.csdn.net/sjjsbsbbs/article/details/119854367?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168725193016800185875501%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168725193016800185875501&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-119854367-null-null.142%5Ev88%5Ekoosearch_v1,239%5Ev2%5Einsert_chatgpt&utm_term=maskrcnn%E7%8E%AF%E5%A2%83&spm=1018.2226.3001.4187参照二:

(94条消息) windows下MaskRCNN环境配置【保姆级教程--附各个依赖库版本安装】_岳一岁的博客-CSDN博客https://blog.csdn.net/m0_58658712/article/details/123437366?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168725193016800185875501%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168725193016800185875501&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-123437366-null-null.142%5Ev88%5Ekoosearch_v1,239%5Ev2%5Einsert_chatgpt&utm_term=maskrcnn%E7%8E%AF%E5%A2%83&spm=1018.2226.3001.41873.接下来就是对源码在所搭建的环境上的模拟了

需要进入pycharm,新建一个项目,在创建项目的时候需要添加环境,运行的时候参照:

(94条消息) Mask_RCNN项目下载、配置、运行保姆级教程_mask r-cnn下载_晨同学0327的博客-CSDN博客https://blog.csdn.net/qq_42864343/article/details/125238668?spm=1001.2014.3001.5506

### 使用Keras实现Faster R-CNN训练复现 #### 了解目标检测原理 目标检测领域中,R-CNN系列算法是经典之作。从最初的R-CNN到Fast R-CNN再到如今广泛应用的Faster R-CNN,在性能和速度方面不断优化改进[^1]。 #### 构建特征提取网络 为了能够有效地识别图像中的物体,构建一个强大的特征提取器至关重要。通常采用预训练好的卷积神经网络作为骨干网,比如VGG、ResNet等。通过迁移学习的方式加载已有的权重参数可以加速收敛并提高泛化能力。 ```python from keras.applications import VGG16 base_model = VGG16(weights='imagenet', include_top=False, input_shape=(None, None, 3)) for layer in base_model.layers: layer.trainable = False ``` #### 设计区域提议网络(RPN) RPN负责生成候选框(anchor boxes),并对它们进行初步筛选得到前景(proposals)与背景之分。该部分由两层全连接层组成,并分为分类支路和回归支路分别预测类别概率分布以及边界框坐标偏移量[^2]。 ```python import tensorflow as tf from keras.layers import Conv2D, Flatten, Dense def build_rpn(base_layers, num_anchors): x = Conv2D(512, (3, 3), padding='same', activation='relu')(base_layers) # Classification branch predicts objectness score for each anchor x_class = Conv2D(num_anchors, (1, 1), activation='sigmoid')(x) # Regression branch refines bounding box coordinates relative to anchors x_regr = Conv2D(num_anchors * 4, (1, 1))(x) return [x_class, x_regr] ``` #### 定义自定义损失函数 不同于传统分类任务,Faster R-CNN采用了特殊的损失计算方式——仅考虑正负样本参与反向传播更新过程;对于忽略类别的锚点则不予理会。具体来说就是在交叉熵基础上加入了一个掩码机制来屏蔽掉不需要的部分[^3]。 ```python def rpn_loss_cls(y_true, y_pred): """Custom classification loss function.""" mask = tf.cast(tf.not_equal(y_true, -1.), 'float32') cls_loss = K.binary_crossentropy(y_true, y_pred)[..., 0] normalizer = K.maximum(K.sum(mask), 1.) return K.sum(cls_loss * mask) / normalizer def smooth_l1(x): abs_x = K.abs(x) min_abs_x = K.minimum(abs_x, 1) loss = 0.5 * ((abs_x - 1) * min_abs_x + abs_x) return loss def rpn_loss_regr(y_true, y_pred): """Custom regression loss function with L1-smooth.""" sigma_squared = 9. diff = y_pred - y_true[..., :-1] abs_diff = K.abs(diff) mask = tf.cast(tf.equal(y_true[..., -1], 1.), 'float32') normalizer = K.maximum(K.sum(mask), 1.) return K.sum( mask * tf.where( K.less(abs_diff, 1), 0.5 * sigma_squared * K.square(diff), abs_diff - 0.5 / sigma_squared, ) ) / normalizer ``` #### 准备数据集及标签制作 除了准备好待处理的数据外,还需要针对每张图片生成对应的anchor box及其对应的真实标签信息。这一步骤涉及到读取原始标注文件(xml/json格式),解析其中的目标位置描述等内容后再映射回至相应尺度下的特征图上去[^5]。 ```python # Example of creating training anchors based on given feature map size and predefined base anchors def create_train_anchors(feature_size, base_anchors, stride=16): anchors = [] for row in range(feature_size[0]): for col in range(feature_size[1]): cx = col * stride + int(stride/2) cy = row * stride + int(stride/2) for bx, by, bw, bh in base_anchors: anchors.append([ cx + bx, # center x offset from cell's top-left corner cy + by, # center y offset from cell's top-left corner bw, # width scale factor w.r.t original image dimensions bh # height scale factor h.r.t original image dimensions ]) return np.array(anchors).reshape(-1, 4) # Function that assigns ground truth labels to generated proposals during training phase def assign_labels_to_proposals(gt_boxes, all_anchors, iou_threshold_positive=0.7, iou_threshold_negative=0.3): ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值