Faster R-CNN代码解读之anchor_target_layer.py

anchor_target_layer.py代码解读 anchor_target_layer函数,在network.py中作为一个层被调用到,network并且还加了一些其他的处理,封装在_anchor_target_layer函数里面。 这里面有三个函数方法,一个主要的就是anchor_target_layer,其他两个方法都是为这个函数方法服务的。 anchor_target_layer主要针对RPN的输出进行处理,对RPN的输出结果加工,对a... 阅读详情

# --------------------------------------------------------
# Faster R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick and Xinlei Chen
# --------------------------------------------------------
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
from model.config import cfg
import numpy as np
import numpy.random as npr
from utils.bbox import bbox_overlaps
from model.bbox_transform import bbox_transform
import torch

# 解读faster rcnn重要的几个文件之anchor_target_layer.py文件
# https://github.com/ruotianluo/pytorch-faster-rcnn
"""
这个程序里的东西都是为训练服务的,而训练好后前向出来后topn,NMS等操作在proposal_layer.py
因为是为训练服务的,所以其中有赋label的过程,还有为了计算loss而提供的rpn_bbox_inside_weights等数据
rpn_bbox_inside_weights即loss中为了让loss只计算前景的框位置回归而设置的tensor
用法类似于(delta - gt)点乘rpn_bbox_inside_weights,,即得到了边框loss。
anchor_target_layer是入口,此时有2W个原始anchor
处理步骤为:
-->首先赋label:总的锚点为all_anchors,去除边框外的框
-->只算在边界内的框,这些框的下标inds_inside,框为anchors,分类为label=-1,三者行数都相等。
-->将threshhold>0.7的label=1,<0.3的label=0。
-->还需要把与gt的overlap最大的框赋label=1。gt_argmax_overlaps是gt依次对应的第几个anchor。
-->各从前背景label 1 0中选取128个,其余重新设置label=-1
-->内部权重bbox_inside_weights 为坐标前乘的系数,格式为[[0,0,0,0或1111],...刚开始为内部框个,后来是全部all_anchors个]
    外部权重bbox_outside_weights 为正负区别的系数,格式同上,不过非0数字为1/N_sample,正负权重可以设置(focal Loss论文中会设置)
-->前面都是在边界内anchor上计算的,
    然后用_unmap函数把label,bbox_targets,  bbox_inside_weights,bbox_outside_weights这几个参数扩展到
    全部anchor的shape尺度,对于边界外的anchor,label填充的是-1,其他三个填充的是0.(列数不变)
-->然后相当于有all_anchors个信息,这些信息的排序方式通过label.reshape((1, height, width, A))可以看出是
    联系特征图,先是A(K=9)个anchor为一组,按行排列,排列完一行另起一行。这样height, width, A就解释通了。
    数字1应该是1张图片
    然后.transpose(0,3,1,2),可以把k理解为通道(只是假设理解),即先填充了一个通道的W×H吗,然后再填第二个通道
    最后.reshape((1, 1, A * height, width))顺序应该没变,只是括号[]前后位置变了
    其余3个返回值应该还是k-W-H-图的理解方式,只不过元素个数×4,也就是4-k-W-H-图
    .reshape((1, height, width, A * 4))
"""
def anchor_target_layer(rpn_cls_score, gt_boxes, im_info, _feat_stride,
                        all_anchors, num_anchors):
    """Same as the anchor target layer in original Fast/er RCNN """
    A = num_anchors # 单尺度anchor个数
    total_anchors = all_anchors.shape[0] # 多尺度,总anchor个数
    K = total_anchors / num_anchors

    # allow boxes to sit over the edge by a small amount
    # 边框可以踩一点界,这里是0,即不允许
    _allowed_border = 0

    # map of shape (..., H, W)
    height, width = rpn_cls_score.shape[1:3]

    # only keep anchors inside the image 只保留在图像内的框
    inds_inside = np.where(  # np.where(condition)
        (all_anchors[:, 0] >= -_allowed_border) &
        (all_anchors[:, 1] >= -_allowed_border) &
        (all_anchors[:, 2] < im_info[1] + _allowed_border) &  # width
        (all_anchors[:, 3] < im_info[0] + _allowed_border)  # height
    )[0]
    # all_anchors的格式的[[x,y,w,h],...]?

    # keep only inside anchors
    anchors = all_anchors[inds_inside, :] # 从所有的anchor只保留不踩界的

    # label: 1 is positive, 0 is negative, -1 is dont care
    labels = np.empty((len(inds_inside), ), dtype=np.float32) # 长度
    # 只给不跨边界的anchor赋label=0,1,-1 ?
    labels.fill(-1) # 用1填充

    # overlaps between the anchors and the gt boxes
    # overlaps (ex, gt)
    overlaps = bbox_overlaps(
        np.ascontiguousarray(anchors, dtype=np.float),
        np.ascontiguousarray(gt_boxes, dtype=np.float))
        # 返回了anchors个行,gt_boxes个列。因为有view,所以得ascontiguousarray
    argmax_overlaps = overlaps.argmax(axis=1)  # 最大值的下标,每一行的最大值
    # anchor匹配的是第几个gt框
    max_overlaps = overlaps[np.arange(len(inds_inside)), argmax_overlaps] 
    # 格式应该是[0.5,0.3,...]
    
    gt_argmax_overlaps = overlaps.argmax(axis=0) # argmax输出格式[1,2,3]
    # 与每个gt框最大值的anchor,argmax的shape=anchor的列数,即gt个数
    # 有了行,下面的arange是取对应的列,即第一个gt框对应的最大overlap
    gt_max_overlaps = overlaps[gt_argmax_overlaps,
                               np.arange(overlaps.shape[1])]
       # overlaps.shape[1]是gt个数
       # gt_max_overlaps最后格式 [0.7,0.9,....共gt个]
    gt_argmax_overlaps = np.where(overlaps == gt_max_overlaps)[0]

    if not cfg.TRAIN.RPN_CLOBBER_POSITIVES:
        # assign bg labels first so that positive labels can clobber them
        # first set the negatives
        labels[max_overlaps < cfg.TRAIN.RPN_NEGATIVE_OVERLAP] = 0 # 0.3负类label=0

    # fg label: for each gt, anchor with highest overlap 每个gt最大重叠的框为正
    labels[gt_argmax_overlaps] = 1

    # fg label: above threshold IOU 大于阈值的框为正
    labels[max_overlaps >= cfg.TRAIN.RPN_POSITIVE_OVERLAP] = 1

    if cfg.TRAIN.RPN_CLOBBER_POSITIVES:
        # assign bg labels last so that negative labels can clobber positives
        labels[max_overlaps < cfg.TRAIN.RPN_NEGATIVE_OVERLAP] = 0

    # subsample positive labels if we have too many
    num_fg = int(cfg.TRAIN.RPN_FG_FRACTION * cfg.TRAIN.RPN_BATCHSIZE)
    fg_inds = np.where(labels == 1)[0]  # 这个[0]是什么?符合条件的第一个维度值
    if len(fg_inds) > num_fg: # 随机挑选anchor,选出来剩下的赋label=-1
        disable_inds = npr.choice(  # numpy.random.choice ,replace表示是否重用元素,默认True
            fg_inds, size=(len(fg_inds) - num_fg), replace=False)
        labels[disable_inds] = -1

    # subsample negative labels if we have too many
    num_bg = cfg.TRAIN.RPN_BATCHSIZE - np.sum(labels == 1) # label=1是前景anchor
    bg_inds = np.where(labels == 0)[0] # label=0是背景anchor
    if len(bg_inds) > num_bg:
        disable_inds = npr.choice(
            bg_inds, size=(len(bg_inds) - num_bg), replace=False)
        labels[disable_inds] = -1

    bbox_targets = np.zeros((len(inds_inside), 4), dtype=np.float32)
    # shape=[在边界里的anchor的数目,4]
    bbox_targets = _compute_targets(anchors, gt_boxes[argmax_overlaps, :]) 
    # _compute_targets函数:把绝对坐标转换成offset 
    # 第一个是anchor的坐标,第二个参数是anchors与第几个gt匹配
    # 返回的是anchors与gt框的offset,即训练的真实值tx,ty,tw,th.
    

    bbox_inside_weights = np.zeros((len(inds_inside), 4), dtype=np.float32)
    # bbox_inside_weights的shape是[边界内anchor个数,4坐标]
    # 这里的weight和具体分类时的维度不同,那里的列数是4*类别数
    # only the positive ones have regression targets
    bbox_inside_weights[labels == 1, :] = np.array(
        cfg.TRAIN.RPN_BBOX_INSIDE_WEIGHTS) # (1.0, 1.0, 1.0, 1.0)
        # 只让选出来的正类sample计算回归loss

    bbox_outside_weights = np.zeros((len(inds_inside), 4), dtype=np.float32)
    # bbox_outside_weights 的shape和bbox_inside_weights 同
    if cfg.TRAIN.RPN_POSITIVE_WEIGHT < 0:  # RPN_POSITIVE_WEIGHT =-1
        # uniform weighting of examples (given non-uniform sampling)
        num_examples = np.sum(labels >= 0) # 样本的数目
        positive_weights = np.ones((1, 4)) * 1.0 / num_examples # 这里即公式里的N_clss,要放到outweight中
        negative_weights = np.ones((1, 4)) * 1.0 / num_examples # 正负权重可以设置
    else:
        assert ((cfg.TRAIN.RPN_POSITIVE_WEIGHT > 0) &
                (cfg.TRAIN.RPN_POSITIVE_WEIGHT < 1))
        positive_weights = (
            cfg.TRAIN.RPN_POSITIVE_WEIGHT / np.sum(labels == 1))
        negative_weights = (
            (1.0 - cfg.TRAIN.RPN_POSITIVE_WEIGHT) / np.sum(labels == 0))
    bbox_outside_weights[labels == 1, :] = positive_weights
    bbox_outside_weights[labels == 0, :] = negative_weights
    # 外部权重=1/样本个数

    # map up to original set of anchors映射到原始total_anchor
    # 接下来都使用了_unmap函数,这个函数的作用是从在框内的anchor又扩展回了全部anchor尺度,fill参数代表那些在边界外的anchor要填充的数字
    # 虽然拓展到了原来total_anchor行,但是其中非0还是sample个行
    labels = _unmap(labels, total_anchors, inds_inside, fill=-1) 
    # _unmap由把label从只有在边界里的anchor还原到了total_anchors尺度。即正1,负0,不关心-1
    # 但是1和0的总数还是256个
    bbox_targets = _unmap(bbox_targets, total_anchors, inds_inside, fill=0)
    bbox_inside_weights = _unmap(
        bbox_inside_weights, total_anchors, inds_inside, fill=0)
    bbox_outside_weights = _unmap(
        bbox_outside_weights, total_anchors, inds_inside, fill=0)

    # labels # 原labels=[1,0,-1,1,1,0,0.....2W个]
    labels = labels.reshape((1, height, width, A)).transpose(0, 3, 1, 2)
    # 原来的label是[1,0,-1,1,1,0,0.....2W个],顺序是9个为一组,宽为一组,高为一组,图为1组
    # 1个张图片,宽,高,A=k=9。转成看一张图片,k,高,宽?这样?
    # 联想通道图(实际k不是通道),之前是先从通道方向上方,转置之后是先放完一个通道的整张图,再放第二个通道代表的图
    labels = labels.reshape((1, 1, A * height, width))
    # 我猜是换成了 宽-高-k为一组,一张图为一组,一个batch为一组
    rpn_labels = labels

    # bbox_targets # bbox_targets=[[tx,ty,tw,wh],...2W个]
    bbox_targets = bbox_targets \
      .reshape((1, height, width, A * 4))
    rpn_bbox_targets = bbox_targets
    
    # bbox_inside_weights #原bbox_inside_weights=[[1,1,1,1],[0,0,0,0]...1或0形成2W个 ]
    bbox_inside_weights = bbox_inside_weights \
      .reshape((1, height, width, A * 4))
    rpn_bbox_inside_weights = bbox_inside_weights

    # bbox_outside_weights
    bbox_outside_weights = bbox_outside_weights \
      .reshape((1, height, width, A * 4))
    rpn_bbox_outside_weights = bbox_outside_weights
    return rpn_labels, rpn_bbox_targets, rpn_bbox_inside_weights, rpn_bbox_outside_weights


def _unmap(data, count, inds, fill=0):
    """ Unmap a subset of item (data) back to the original set of items (of
  size count) """
    if len(data.shape) == 1: # data(label)是一维的,如[1,2,3,4]
    # 例_unmap(labels, total_anchors, inds_inside, fill=-1)
        ret = np.empty((count, ), dtype=np.float32)
        ret.fill(fill)
        ret[inds] = data # ret[inds_inside] = labels
    else:
    #例2: _unmap(data=bbox_targets, count=total_anchors, inds=inds_inside, fill=0)
        ret = np.empty((count, ) + data.shape[1:], dtype=np.float32)
        # 单纯第data.shape[1]是一个数,但是data.shape[1:]是一个元组(2,)
        # np.empty((2,)+(3,))是2行3列的空矩阵
        ret.fill(fill)
        ret[inds, :] = data
    return ret


def _compute_targets(ex_rois, gt_rois): 
# 这个函数的意思是验证一下维度,实际起作用的是另外一个函数bbox_transform
    """Compute bounding-box regression targets for an image."""

    assert ex_rois.shape[0] == gt_rois.shape[0] # gt已经是赋完label的anchor了
    # 这里gtbox的格式还需要根据其他地方研究
    assert ex_rois.shape[1] == 4 # [[x,y,x,y],...]
    assert gt_rois.shape[1] == 5 #gt[[x,y,x,y,类],...]

    return bbox_transform( # 把绝对坐标转换成offset坐标
        torch.from_numpy(ex_rois), torch.from_numpy(gt_rois[:, :4])).numpy()


py-faster-rcnn源码解读系列(四)——anchor_target_layer.py 本文介绍了在solver中出现的用python定义的layer,顾名思义,该layer主要功能是产生anchor,并对anchor进行评分等操作,详细见代码注释。 阅读详情

相关推荐

5. VGGnet_train.py ( Faster-RCNN_TF代码解读)

5. /lib/networks/VGGnet_train.py 本文件是整个faster网络结构。从VGG到RPN,到RoI Proposal,最后是RCNN。 网络结构如下: 调用函数链接: 本文件调用的函数,如feed(), conv(), softmax()等都在network.py中。 ‘rpn-data’层所用到的函数:anchor_target_layer ‘rpn...

风轻扬逍遥子的博客 1289

Faster Rcnn 代码解读之 anchor_target_layer.py

# -------------------------------------------------------- # Faster R-CNN # Copyright (c) 2015 Microsoft # Licensed under The MIT License [see LICENSE for details] # Written by Ross Girshick and Xinl...

JUST CODE IT 511

6. network.py ( Faster-RCNN_TF代码解读)

6. /lib/networks/network.py 本文件是/lib/networks/VGGnet_train.py的支持文件,提供各种函数。 调用函数链接: ‘rpn-data’层所用到的函数:anchor_target_layer ‘rpn-rois’层所用到的函数:proposal_layer ‘roi-data’层所用到的函数:proposal_target_layer ...

风轻扬逍遥子的博客 1335

rpnnp的matlab,faster-rcnn的rpn网络源码解析(转)

解析的FasterR-CNN代码是tensorflow版本的,链接地址https://github.com/kevinjliang/tf-Faster-RCNN首先,在faster_rcnn_resnet50ish.py文件中,我们看一下训练时数据层输出的是:# Train dataself.x['TRAIN'] = tf.placeholder(tf.float32, [1, None, Non...

weixin_34129429的博客 266

Faster RCNN.pdf

Faster RCNN 网络结构,详细解读Faster RCNN的各个网络模块,有助于对two stage模型的理解

制造业批次管理中双计量单位动态转换的实践指南

本文详细介绍了制造业批次管理中双计量单位动态转换的实践指南,特别是在SAP系统中的配置与操作步骤。通过实际案例展示了如何解决采购与生产部门计量单位不一致的问题,提升物料管理效率。重点讲解了批次特性配置、移动类型调整及常见问题排查方法,适用于金属加工、化工等多个行业。

weixin_29228203的博客 158

rpnnp的matlab,详细的Faster R-CNN源码解析之RPN源码解析

在阔别了将近三个月之后,笔者又准备更新博客了。对于前两个多月的未及时更新,笔者在此向大家表示歉意,请大家原谅。本次博客的更新是关于Faster R-CNN的源码。首先说一下笔者为什么要更新Faster R-CNN的源码解析,有以下两个原因:1. 笔者的研究方向和目标检测有一些关系。虽然不是纯做目标检测,但是像Faster R-CNN这样的经典框架必须做出比较深度的了解,尤其是像RPN这样的革命性算...

weixin_34872032的博客 250

用Python的fengwo模块复刻通达信筹码峰(COST/WINNER),选股效率提升10倍

本文介绍了如何使用Python的fengwo模块高效复刻通达信的筹码峰(COST/WINNER)计算,显著提升选股效率。通过C++内核与多线程优化,fengwo模块将传统Python实现的数小时计算压缩至分钟级,解决了量化交易中的性能瓶颈问题。文章详细解析了筹码峰计算原理、fengwo模块的技术架构及实战应用,助力量化开发者构建高效选股系统。

weixin_29062823的博客 438

py最大值的索引的用法_faster R-CNN代码解读之anchor_target_layer.py

# -------------------------------------------------------- # Faster R-CNN # Copyright (c) 2015 Microsoft # Licensed under The MIT License [see LICENSE for details] # Written by Ross Girshick and Xinle...

weixin_30579759的博客 138

【AI开源】Understand-Anything 完整使用教程(2026最新版)

Understand-Anything是一款基于交互式知识图谱的AI学习与开发平台,能够将代码库转化为可视化知识结构,支持语义搜索、上下文问答和全流程开发。核心功能包括代码知识图谱化、AI辅助学习和多编码代理集成。支持TypeScript/JavaScript、Python等多种语言,要求Node.js 20+和16GB以上内存。提供NPM、Docker和源码三种安装方式,支持增量更新和团队知识共享。与同类产品相比,在交互式图谱、语义搜索和AI集成方面更具优势。适用于代码学习、大型项目维护和团队协作等场景。

与时俱进,开放共享 7199

【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)

随着打印技术的快速发展,镭射打印技术也开始得到越来越广泛的应用。这种技术可以被用于在木材、塑料、皮革、织物等各种材料上进行图形打印,并且通常比传统机器更快、更准确和更灵活。

嵌入式技术开发 7198

最详细的Faster-RCNN代码解读Pytorch版 (二) RPN部分

回顾 读懂Pytorch版本的Faster-RCNN代码 (一) generate_anchors.py 上一篇博客简单讲述了Faster RCNN的构成和原理,以及RPN模块的generate_anchors.py的代码部分,回顾一下generate_anchors的主要作用是根据一个base anchor来生成9个不同尺度和纵横比的待选框,如下图所示: ...

pyd20的博客 2936

Vibe coding 氛围编程:编程就像聊天一样,低代码开发时代来了?

Vibe coding:编程就像聊天一样,低代码开发时代来了!

Code_流苏:在代码中寻诗意,在实践中觅真知 4802

7. anchor_target_layer_tf.py ( Faster-RCNN_TF代码解读)

7. /lib/rpn_msr/anchor_target_layer_tf.py 本文件将anchors分配给gt targets,产生anchor classification labels和bounding-box regression targets. 思路如下: # ------------------------------------------------------...

风轻扬逍遥子的博客 835

【06】新国都——新国都 嵌入式笔试,校招,题目记录及解析

本文总结了新国都嵌入式校招笔试题目及解析,内容涵盖C语言基础、Linux系统、数据结构与算法等多个方面。主要包括:1)不定项选择题10道,涉及字符串常量、蓝牙与GPRS区别、编译错误识别等;2)判断题10道,考察Linux权限、循环控制、内存管理等;3)填空题5道,包括编码计算、逻辑运算、宏定义等;4)简答题2道,解析全局变量引用和进程线程区别。题目难度适中,重点考察嵌入式开发基础知识和编程能力,并提供详细解析和扩展知识链接,对准备嵌入式相关笔试具有参考价值。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1429

【电机应用控制】——直流有刷电机&驱动板/编码器介绍&PID算法&实操代码思路

声明:学习笔记来自正点原子B站教程,仅供学习交流!!玩具车、平衡车、无人机、印刷机、打印机、手机振动马达等电机即电动机(motor),也叫作马达,电能转化为机械能。按电源:直流、交流按用途:驱动用、控制用按运转速度:高速、低速、恒速、调速直流电机(有刷、无刷)、舵机、步进电机、伺服电机1、直流有刷电机(Brushed DC Motor,简称BDC)是内含电刷装置的将直流电能转化为机械能的电动机。例如四驱赛车四个马达操控方便、成本低、维护时换电刷即可;

weixin_51658186的博客 2万+

Faster-RCNN_TF代码解读17:anchor_target_layer_tf.py

# -------------------------------------------------------- # Faster R-CNN # Copyright (c) 2015 Microsoft # Licensed under The MIT License [see LICENSE for details] # Written by Ross Girshick and Sean B

一呆飞仙的博客 3477

目标跟踪与视频时序分析基础

两帧均有目标,却因快速移动导致检测框无重叠,仅靠交并比(IoU)无法维持身份关联。本文通过手算与纯Python实现最小跟踪流程,揭示IoU仅为位置线索,不能应对快速位移或遮挡。实验表明,即使目标真实存在,低重叠也会触发新编号。强调跟踪需结合运动预测、外观特征与阈值验证,避免误判。

Mr数据杨 2334

py-faster-rcnn源码解读系列

转载自:http://blog.csdn.net/sunyiyou9/article/details/52207486 train_faster_rcnn_alt_opt.py 前言: 本文主要功能是实现Alternating optimization的训练方法,在NIPS的那篇paper上仅有较为简略的介绍,所以我认为通过源码来学习是很有必要的。 其他主要模块的解读也会在后续陆

Leo的博客 5796

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

faster rcnn 主要代码解读

转载自: py-faster-rcnn源码解读系列(一)——train_faster_rcnn_alt_opt.py - sunyiyou9的博客 - 博客频道 - 优快云.NET http://blog.csdn.Net/sunyiyou9/article/details/52207486 py-faster-rcnn源码解读系列(二)——pascol_voc.p

Tiffany的博客 685

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

读懂每一行超参数:Faster-RCNN-TensorFlow-Python3配置文件深度解读与调优清单

Faster-RCNN-TensorFlow-Python3 是一个基于 **TensorFlow 实现的 Faster R-CNN 目标检测模型**,支持 Python 3,提供完整的预训练模型下载脚本与训练代码。整个项目的"大脑"只有一个文件:[lib/config/config.py](https://link.gitcode.com/i/6fc2fb814506cc44f88f103b95

gitblog_00599的博客 460

faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/article/details/81812454 下面我和大家一起从训练最开始学习作者如何将原始数据读入并通过RoIDataLayer转化成网络训练所需的数据的总体过程。 训练从./tool...

dibuxue3246的博客 210

caffe-fasterrcnn程序理解

faster-rcnn 结构杂谈 参考博客:::https://www.cnblogs.com/longriyao/p/5832274.html http://www.cnblogs.com/chaofn/p/9310912.html https://blog.csdn.net/u014380165/article/details/80303040 https://blog.c...

dibuxue3246的博客 265

Faster R-CNN源码阅读之十二:写在最后

写在最后    毫无疑问,Faster RCNN(以及Faster RCNN的各种变体)作为当前目标检测方面的先锋,在这方面确实贡献巨大。下一步计划对one-stage的目标检测方法进行学习。由于给的源码中,关于数据准备的代码过于复杂,不具有一定的普适性,实际上,完全可以根据自己的项目工程进行数据准备代码的编写,即简单又直观,因此,在这里就省略了数据准备方面的代码的分享,还请各位大佬们原谅! ...

DaVinciL的博客 572

Faster RCNN 源码解读(1) -- 文件结构分析

基本介绍Faster RCNN 在目标检测及其相关领域得到了广泛的运用。其原型RCNN是将CNN引入到目标检测的开山之作,此外基于region proposal是一种十分值得学习的思想。因此将在后续的系列章节中,基于源码,对Faster RCNN进行深入的剖析。代码结构从github上的源码看上去就是这个样子:接下来将对各个文件夹的功能进行详细的分析:caffe-fast-rcnnFaster RC

博观而约取,深研而广求 3562

MMRotate训练遥感目标检测模型:从数据裁剪到模型测试的完整配置清单(附代码)

本文详细介绍了使用MMRotate框架训练遥感目标检测模型的完整流程,包括环境配置、数据预处理、模型选择与优化、训练调优及部署技巧。通过自定义数据集和旋转目标检测技术,帮助开发者高效实现高精度遥感图像分析,适用于卫星图像、城市规划等应用场景。

weixin_30882895的博客 391
上一篇: faster rcnn解读
下一篇: anchor free:CornerNet解读【目标检测】
hancoder
博客等级 码龄9年 4135粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值