MMDetection自定义双主干Transformer模型(一)

2023-11-08

目录

1、添加自定义的主干网络

2、导入写好的主干网络

3、写配置文件来进行实验


基于自己的毕设想法,今天开始研究如何使用MMDetection构建自己的模型。

今天的想法是构建如下的双主干网络,主干网络采用Swin Transformer,直接开始记录。

4b8d3f88112a477493d7d589ac8b14d4.png

1、添加自定义的主干网络

  • 在 mmdet/models/backbones文件夹下新建一份模型文件,这里我新建了一个双主干swin transformer文件,命名为dswin.py。
  • 然后在dswin.py文件里添加自己的内容,由于代码过长,这里贴出重要部分的前向过程
import torch.nn as nn


class DSwin(nn.Module):

    def __init__(self, arg1, arg2):
        pass

    def forward(self, x):
        """Forward function."""

        """1、做第一次的swin特征提取"""
        out1 = list(self.swin1(x))   # 将输出转换为列表 因为元组不能修改
        out1[0] = nn.Upsample(scale_factor=4, mode='bilinear', align_corners=True)(out1[0])   # 恢复到原图
        out1[1] = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)(out1[1])    
        out1[2] = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)(out1[2])
        out1[3] = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)(out1[3])  


        '''2、得到上采样的特征后 与第二主干的特征图进行重组 过程是一边做特征提取 一边做特征融合'''
        # x = x + self.change_channels[0](out1[0])
        # print(x.shape)
        x = self.patch_embed(x)
        # print(x.shape)
        Wh, Ww = x.size(2), x.size(3)
        
        if self.ape:
            # interpolate the position embedding to the corresponding size
            absolute_pos_embed = F.interpolate(self.absolute_pos_embed, size=(Wh, Ww), mode='bicubic')
            x = (x + absolute_pos_embed).flatten(2).transpose(1, 2)  # B Wh*Ww C
        else:
            x = x.flatten(2).transpose(1, 2)
        x = self.pos_drop(x)
        outs = []
        for i in range(self.num_layers):
            """x = x + self.change_channels[i+1](out1[i+1]).flatten(2).transpose(1, 2) 先做特征相加"""
            # print(x.shape)
            if i<=2:
                x = x + self.change_channels[i+1](out1[i+1]).flatten(2).transpose(1, 2)
            # print(x.shape)
            layer = self.layers[i]
            """x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww) 再做特征提取"""
            x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww)

            if i in self.out_indices:
                norm_layer = getattr(self, f'norm{i}')
                x_out = norm_layer(x_out)

                out = x_out.view(-1, H, W, self.num_features[i]).permute(0, 3, 1, 2).contiguous()
                outs.append(out)

        return outs
  • 新建张量 做一个简单的数据测试
if __name__ == "__main__":
    img = torch.randn(2,3,512,512)
    dswin = DSwin()
    out = dswin(img)
    for i in range(len(out)):
        print("out[%d]"%i,out[i].shape)

  得到结果。验证了代码的正确性,符合逻辑,也能跑通,Nice!!!

out[0] torch.Size([2, 96, 128, 128])
out[1] torch.Size([2, 192, 64, 64])
out[2] torch.Size([2, 384, 32, 32])
out[3] torch.Size([2, 768, 16, 16])
  • 接下来只需要将写好的主干网络进行注册,只需要添加以下两行代码

在导入包的时候添加

from ..builder import BACKBONES

在Class DSwin处的上一行添加

@BACKBONES.register_module()

2、导入写好的主干网络

在mmdet/models/backbones/__init__.py中添加以下两行

from .dswin import DSwin
__all__ = ['DSwin']

3、写配置文件来进行实验

  • 在configs文件夹下新建立dswin文件夹
  • 在dswin文件夹下新建自己的config.py文件 由于涉及毕设 贴出主要与主干相关的配置文件
    type='CascadeRCNN',
    pretrained=None,
    backbone=dict(
        type='DSwin',
        embed_dim=96,
        depths=[2, 2, 6, 2],
        num_heads=[3, 6, 12, 24],
        window_size=7,
        mlp_ratio=4.0,
        qkv_bias=True,
        qk_scale=None,
        drop_rate=0.0,
        attn_drop_rate=0.0,
        drop_path_rate=0.2,
        ape=False,
        patch_norm=True,
        out_indices=(0, 1, 2, 3),
        use_checkpoint=False),
  • 执行命令 开始训练
python tools/train.py configs/dswin/config.py

未报错,大功告成!!!等待结果

dfc69732ba374bdd925fcb935d31fa48.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MMDetection自定义双主干Transformer模型(一) 的相关文章

随机推荐

  • pip安装opencv-python

    文章目录 前言 一 基本概念 二 操作步骤 1 删除旧版本 2 pip升级 3 opencv python安装 总结 前言 OpenCV的全称是Open Source Computer Vision Library 是一个跨平台的计算机视觉
  • 跳转至tabBar页面不触发页面的onLoad,点击底部tabar不触发onLoad

    小程序想跳转tabar页面带参数 使用了全局变量app js的全局 跳转到页面后发现不是每次都执行onLoad方法 传参失败 更换跳转的方法解决 由wx switchTab改为wx reLaunch 就可以了 点击底部导航不触发解决 js
  • Ubuntu挂载Win10下的NTFS硬盘出错的解决方案

    概述 在Ubuntu下打开Win10的NTFS硬盘总是提示出错了 而且是全部的NTFS盘都出错 其中sdb1错误显示如下 he disk contains an unclean file system 0 0 Metadata kept i
  • matplotlib函数总结

    导入matplotlib import matplotlib pyplot as plt import matplotlib Figures对象包含一个或多个Asex对象 方法 matplotlib rc figure figsize 14
  • 在Ubuntu18.04.3系统中安装谷歌拼音输入法(Google Pinyin)

    一 安装前的准备 在Ubuntu18 04下 谷歌拼音输入法是基于Fcitx输入法的 因此 我们需要首先安装Fcitx 一般来说 Ubuntu最新版中都默认安装了Fcitx 但是为了确保一下 我们可以在系统终端中运行如下命令 sudo ap
  • 如何用PHP解决高并发与大流量问题

    举个例子 高速路口 1秒钟来5部车 每秒通过5部车 高速路口运作正常 突然 这个路口1秒钟只能通过4部车 车流量仍然依旧 结果必定出现大塞车 5条车道忽然变成4条车道的感觉 同理 某一个秒内 20 500个可用连接进程都在满负荷工作中 却仍
  • StrangeIOC中Signal类使用详解

    在讲解Signal类之前 先复习一下dispatch的用法 1 View层调用自身的dispatch view 告知绑定的Mediator层也调用自身的dispatch mediator 2 Mediator层的dispatch media
  • 如何实现在的Windows上运行的Linux程序(附示例代码)

    而今天的这篇文章将会讲解如何自己实现一个简单的原生Linux程序运行器 这个运行器在用户层实现 原理和Bash On Windows不完全一样 比较接近Linux上的Wine 示例程序完整的代码在github上 地址是 https gith
  • SuperSocket教程六:配置文件启动后使用自己的请求处理

    上一教程虽然实现了配置文件启动 但是发送信息后返回的缺失AppServer的原始信息 而不是我在教程四锁自定义的信息回复 配置文件启动是实现了 接下来做什么修改可以实现自定义的请求处理呢 其实很简单 只是把原来的那些代码换了个位置罢了 这个
  • 机器学习案例3:基于逻辑回归的肿瘤预测

    案例3 基于逻辑回归的肿瘤预测 为什么写本博客 前人种树 后人乘凉 希望自己的学习笔记可以帮助到需要的人 需要的基础 懂不懂原理不重要 本系列的目标是使用python实现机器学习 必须会的东西 python基础 numpy pandas m
  • 阿里云上的gitlab不能使用ssh

    晚上突然发现ssh到gitlab的项目失败 提示 ssh exchange identification read Connection reset by peer fatal Could not read from remote repo
  • 【电路参考】缓启动电路

    一 外部供电直接上电可能导致的问题 1 在热拔插的过程中 两个连接器的机械接触 触点在瞬间会出现弹跳 电源不稳 发生震荡 这期间系统工作可能造成不稳定 2 由于电路中存在滤波或大电解电容 在上电瞬间 会产生较大的脉冲电流 有时候会看到DC接
  • react+antd修改主题色

    第一步 安装需要的插件 npm install react app rewired customize cra babel plugin import less less loader 第二步 修改package json文件 将原本 sc
  • 李沐老师 《动手学深度学习》笔记

    08 线性回归 基础优化算法 文章目录 前言 一 true w和w以及true b和b之间的关系 二 代码实现 前言 这个是我在B站上看李沐老师 动手学深度学习 之后 针对自己不懂和想记录的部分的一个记录 由于本人是刚接触深度学习的小白 所
  • C++基础语法1 break continue floor ceil 简析

    break 用于中断本层的整个循环 continue 用于中断本次循环 并不中断整个循环 而是继续下次循环 for x 0 x lt TEMPLATE X SIZE x for y 0 y lt TEMPLATE Y SIZE y sum
  • Java 中常用的转义字符

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 Java中常用的转义字符 看如下代码 public class ChangeChar public static void main S
  • Ubuntu装系统后重启卡死解决办法(超详细)

    笔者为了装这个Ubuntu可走了不少弯路 想必当你看到我这篇博客时你一定遇到了如下诸多问题的诸多个 笔者全部遇到了 1 Ubuntu装都装不了 第一步加载lougou下面有几个点 红了几个就停下了 从此一直如此 迫不得已强制关机 2 惊险度
  • 你要允许来自未知发布者的此应用对你的设备进行更改吗_物联网改变移动应用开发的4种方式...

    来源 物联之家网 iothome com 转载请注明来源 物联网改变了移动应用程序的开发格局 那么 为物联网开发移动应用程序有何不同 物联网与移动应用程序开发齐头并进 物联网改变了人类与机器的互动方式 甚至改变了机器之间的互动方式 而移动应
  • 【微分方程】微分算子法求微分方程特解

    文章目录 微分算子法 D 求特解 概述 f x f x f x 为
  • MMDetection自定义双主干Transformer模型(一)

    目录 1 添加自定义的主干网络 2 导入写好的主干网络 3 写配置文件来进行实验 基于自己的毕设想法 今天开始研究如何使用MMDetection构建自己的模型 今天的想法是构建如下的双主干网络 主干网络采用Swin Transformer