InternImage实战:使用InternImage实现图像分类任务(一)

2023-05-16

文章目录

  • 摘要
    • “书生2.5”的应用
      • 1. 图像模态任务性能
      • 2. 图文跨模态任务性能
    • 核心技术
  • 安装包
    • 安装timm
    • 安装 grad-cam
    • 安装DCNV3
  • 数据增强Cutout和Mixup
  • EMA
  • 项目结构
  • 计算mean和std
  • 生成数据集

摘要

论文翻译:https://wanghao.blog.csdn.net/article/details/129379410
官方源码: https://github.com/OpenGVLab/InternImage

他来了!他来了!他带着氩弧焊的光芒过来了!作为CV的大模型,InternImage的光芒太强了。

  • 2023年3月14日: 🚀 “书生2.5”发布!
  • 2023年2月28日: 🚀 InternImage 被CVPR 2023接收!
  • 2022年11月18日: 🚀 基于 InternImage-XL 主干网络,BEVFormer v2 在nuScenes的纯视觉3D检测任务上取得了最佳性能 63.4 NDS
  • 2022年11月10日: 🚀 InternImage-H 在COCO目标检测任务上以 65.4 mAP 斩获冠军,是唯一突破 65.0 mAP 的超强物体检测模型!
  • 2022年11月10日: 🚀 InternImage-H 在ADE20K语义分割数据集上取得 62.9 mIoU 的SOTA性能!

“书生2.5”的应用

1. 图像模态任务性能

  • 在图像分类标杆数据集ImageNet上,“书生2.5”仅基于公开数据便达到了 90.1% 的Top-1准确率。这是除谷歌与微软两个未公开模型及额外数据集外,唯一准确率超过90.0%的模型,同时也是世界上开源模型中ImageNet准确度最高,规模最大的模型;
  • 在物体检测标杆数据集COCO上,“书生2.5” 取得了 65.5 的 mAP,是世界上唯一超过65 mAP的模型;
  • 在另外16个重要的视觉基础数据集(覆盖分类、检测和分割任务)上取得世界最好性能。

分类任务

图像分类 场景分类 长尾分类
ImageNetPlaces365Places 205iNaturalist 2018
90.161.271.792.3

检测任务

常规物体检测长尾物体检测 自动驾驶物体检测密集物体检测
COCOVOC 2007VOC 2012OpenImageLVIS minivalLVIS valBDD100KnuScenesCrowdHuman
65.594.097.274.165.863.238.864.897.2

分割任务

语义分割街景分割RGBD分割
ADE20KCOCO Stuff-10KPascal ContextCityScapesNYU Depth V2
62.959.670.386.169.7

2. 图文跨模态任务性能

  • 图文检索

“书生2.5”可根据文本内容需求快速定位检索出语义最相关的图像。这一能力既可应用于视频和图像集合,也可进一步结合物体检测框,具有丰富的应用模式,帮助用户更便捷、快速地找到所需图像资源, 例如可在相册中返回文本所指定的相关图像。

  • 以图生文

“书生2.5”的“以图生文”在图像描述、视觉问答、视觉推理和文字识别等多个方面均拥有强大的理解能力。例如在自动驾驶场景下,可以提升场景感知理解能力,辅助车辆判断交通信号灯状态、道路标志牌等信息,为车辆的决策规划提供有效的感知信息支持。

图文多模态任务

图像描述微调图文检索零样本图文检索
COCO CaptionCOCO CaptionFlickr30kFlickr30k
148.276.494.889.1

核心技术

“书生2.5”在图文跨模态领域卓越的性能表现,源自于在多模态多任务通用模型技术核心方面的多项创新,实现了视觉核心视觉感知大模型主干网络(InternImage)、用于文本核心的超大规模文本预训练网络(LLM)和用于多任务的兼容解码建模(Uni-Perceiver)的创新组合。 视觉主干网络InternImage参数量高达30亿,能够基于动态稀疏卷积算子自适应地调整卷积的位置和组合方式,从而为多功能视觉感知提供强大的表示。Uni-Perceiver通才任务解码建模通过将不同模态的数据编码到统一的表示空间,并将不同任务统一为相同的任务范式,从而能够以相同的任务架构和共享的模型参数同时处理各种模态和任务。

在这里插入图片描述

这篇文章主要讲解如何使用InternImage完成图像分类任务,接下来我们一起完成项目的实战。本例选用的模型是InternImageNet_s,在植物幼苗数据集上实现了97%的准确率。

请添加图片描述

请添加图片描述

通过这篇文章能让你学到:

  1. 如何使用数据增强,包括transforms的增强、CutOut、MixUp、CutMix等增强手段?
  2. 如何实现InternImage模型实现训练?
  3. 如何使用pytorch自带混合精度?
  4. 如何使用梯度裁剪防止梯度爆炸?
  5. 如何使用DP多显卡训练?
  6. 如何绘制loss和acc曲线?
  7. 如何生成val的测评报告?
  8. 如何编写测试脚本测试测试集?
  9. 如何使用余弦退火策略调整学习率?
  10. 如何使用AverageMeter类统计ACC和loss等自定义变量?
  11. 如何理解和统计ACC1和ACC5?
  12. 如何使用EMA?
  13. 如果使用Grad-CAM 实现热力图可视化?

如果基础薄弱,对上面的这些功能难以理解可以看我的专栏:经典主干网络精讲与实战
这个专栏,从零开始时,一步一步的讲解这些,让大家更容易接受。

安装包

安装timm

使用pip就行,命令:

pip install timm

本文实战用的timm里面的模型。

安装 grad-cam

pip install grad-cam

安装DCNV3

https://github.com/OpenGVLab/InternImage下载源码,然后进入ops_dcnv3,如果是Ubuntu系统,
则可以执行:

sh ./make.sh

通用的方式:

python setup.py install 

注意:本机要有显卡,并安装CUDA环境。

数据增强Cutout和Mixup

为了提高成绩我在代码中加入Cutout和Mixup这两种增强方式。实现这两种增强需要安装torchtoolbox。安装命令:

pip install torchtoolbox

Cutout实现,在transforms中。

from torchtoolbox.transform import Cutout
# 数据预处理
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    Cutout(),
    transforms.ToTensor(),
    transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])

])

需要导入包:from timm.data.mixup import Mixup,

定义Mixup,和SoftTargetCrossEntropy

  mixup_fn = Mixup(
    mixup_alpha=0.8, cutmix_alpha=1.0, cutmix_minmax=None,
    prob=0.1, switch_prob=0.5, mode='batch',
    label_smoothing=0.1, num_classes=12)
 criterion_train = SoftTargetCrossEntropy()

参数详解:

mixup_alpha (float): mixup alpha 值,如果 > 0,则 mixup 处于活动状态。

cutmix_alpha (float):cutmix alpha 值,如果 > 0,cutmix 处于活动状态。

cutmix_minmax (List[float]):cutmix 最小/最大图像比率,cutmix 处于活动状态,如果不是 None,则使用这个 vs alpha。

如果设置了 cutmix_minmax 则cutmix_alpha 默认为1.0

prob (float): 每批次或元素应用 mixup 或 cutmix 的概率。

switch_prob (float): 当两者都处于活动状态时切换cutmix 和mixup 的概率 。

mode (str): 如何应用 mixup/cutmix 参数(每个’batch’,‘pair’(元素对),‘elem’(元素)。

correct_lam (bool): 当 cutmix bbox 被图像边框剪裁时应用。 lambda 校正

label_smoothing (float):将标签平滑应用于混合目标张量。

num_classes (int): 目标的类数。

EMA

EMA(Exponential Moving Average)是指数移动平均值。在深度学习中的做法是保存历史的一份参数,在一定训练阶段后,拿历史的参数给目前学习的参数做一次平滑。具体实现如下:


import logging
from collections import OrderedDict
from copy import deepcopy
import torch
import torch.nn as nn

_logger = logging.getLogger(__name__)

class ModelEma:
    def __init__(self, model, decay=0.9999, device='', resume=''):
        # make a copy of the model for accumulating moving average of weights
        self.ema = deepcopy(model)
        self.ema.eval()
        self.decay = decay
        self.device = device  # perform ema on different device from model if set
        if device:
            self.ema.to(device=device)
        self.ema_has_module = hasattr(self.ema, 'module')
        if resume:
            self._load_checkpoint(resume)
        for p in self.ema.parameters():
            p.requires_grad_(False)

    def _load_checkpoint(self, checkpoint_path):
        checkpoint = torch.load(checkpoint_path, map_location='cpu')
        assert isinstance(checkpoint, dict)
        if 'state_dict_ema' in checkpoint:
            new_state_dict = OrderedDict()
            for k, v in checkpoint['state_dict_ema'].items():
                # ema model may have been wrapped by DataParallel, and need module prefix
                if self.ema_has_module:
                    name = 'module.' + k if not k.startswith('module') else k
                else:
                    name = k
                new_state_dict[name] = v
            self.ema.load_state_dict(new_state_dict)
            _logger.info("Loaded state_dict_ema")
        else:
            _logger.warning("Failed to find state_dict_ema, starting from loaded model weights")

    def update(self, model):
        # correct a mismatch in state dict keys
        needs_module = hasattr(model, 'module') and not self.ema_has_module
        with torch.no_grad():
            msd = model.state_dict()
            for k, ema_v in self.ema.state_dict().items():
                if needs_module:
                    k = 'module.' + k
                model_v = msd[k].detach()
                if self.device:
                    model_v = model_v.to(device=self.device)
                ema_v.copy_(ema_v * self.decay + (1. - self.decay) * model_v)

加入到模型中。

#初始化
if use_ema:
     model_ema = ModelEma(
            model_ft,
            decay=model_ema_decay,
            device='cpu',
            resume=resume)

# 训练过程中,更新完参数后,同步update shadow weights
def train():
    optimizer.step()
    if model_ema is not None:
        model_ema.update(model)


# 将model_ema传入验证函数中
val(model_ema.ema, DEVICE, test_loader)

针对没有预训练的模型,容易出现EMA不上分的情况,这点大家要注意啊!

项目结构

InternImage_Demo
├─data1
│  ├─Black-grass
│  ├─Charlock
│  ├─Cleavers
│  ├─Common Chickweed
│  ├─Common wheat
│  ├─Fat Hen
│  ├─Loose Silky-bent
│  ├─Maize
│  ├─Scentless Mayweed
│  ├─Shepherds Purse
│  ├─Small-flowered Cranesbill
│  └─Sugar beet
├─models
│  ├─__init__.py
│  └─intern_image.py
├─ops_dcnv3
├─mean_std.py
├─makedata.py
├─train.py
├─cam_image.py
└─test.py

ops_dcnv3:来着官方的文件夹,存放dcnv3的文件。
models:来源官方代码,对面的代码做了一些适应性修改。增加了一些加载预训练,调用模型的逻辑。
mean_std.py:计算mean和std的值。
makedata.py:生成数据集。
ema.py:EMA脚本
train.py:训练PoolFormer模型
cam_image.py:热力图可视化

计算mean和std

为了使模型更加快速的收敛,我们需要计算出mean和std的值,新建mean_std.py,插入代码:

from torchvision.datasets import ImageFolder
import torch
from torchvision import transforms

def get_mean_and_std(train_data):
    train_loader = torch.utils.data.DataLoader(
        train_data, batch_size=1, shuffle=False, num_workers=0,
        pin_memory=True)
    mean = torch.zeros(3)
    std = torch.zeros(3)
    for X, _ in train_loader:
        for d in range(3):
            mean[d] += X[:, d, :, :].mean()
            std[d] += X[:, d, :, :].std()
    mean.div_(len(train_data))
    std.div_(len(train_data))
    return list(mean.numpy()), list(std.numpy())

if __name__ == '__main__':
    train_dataset = ImageFolder(root=r'data1', transform=transforms.ToTensor())
    print(get_mean_and_std(train_dataset))

数据集结构:

image-20220221153058619

运行结果:

([0.3281186, 0.28937867, 0.20702125], [0.09407319, 0.09732835, 0.106712654])

把这个结果记录下来,后面要用!

生成数据集

我们整理还的图像分类的数据集结构是这样的

data
├─Black-grass
├─Charlock
├─Cleavers
├─Common Chickweed
├─Common wheat
├─Fat Hen
├─Loose Silky-bent
├─Maize
├─Scentless Mayweed
├─Shepherds Purse
├─Small-flowered Cranesbill
└─Sugar beet

pytorch和keras默认加载方式是ImageNet数据集格式,格式是

├─data
│  ├─val
│  │   ├─Black-grass
│  │   ├─Charlock
│  │   ├─Cleavers
│  │   ├─Common Chickweed
│  │   ├─Common wheat
│  │   ├─Fat Hen
│  │   ├─Loose Silky-bent
│  │   ├─Maize
│  │   ├─Scentless Mayweed
│  │   ├─Shepherds Purse
│  │   ├─Small-flowered Cranesbill
│  │   └─Sugar beet
│  └─train
│      ├─Black-grass
│      ├─Charlock
│      ├─Cleavers
│      ├─Common Chickweed
│      ├─Common wheat
│      ├─Fat Hen
│      ├─Loose Silky-bent
│      ├─Maize
│      ├─Scentless Mayweed
│      ├─Shepherds Purse
│      ├─Small-flowered Cranesbill
│      └─Sugar beet

新增格式转化脚本makedata.py,插入代码:

import glob
import os
import shutil

image_list=glob.glob('data1/*/*.png')
print(image_list)
file_dir='data'
if os.path.exists(file_dir):
    print('true')
    #os.rmdir(file_dir)
    shutil.rmtree(file_dir)#删除再建立
    os.makedirs(file_dir)
else:
    os.makedirs(file_dir)

from sklearn.model_selection import train_test_split
trainval_files, val_files = train_test_split(image_list, test_size=0.3, random_state=42)
train_dir='train'
val_dir='val'
train_root=os.path.join(file_dir,train_dir)
val_root=os.path.join(file_dir,val_dir)
for file in trainval_files:
    file_class=file.replace("\\","/").split('/')[-2]
    file_name=file.replace("\\","/").split('/')[-1]
    file_class=os.path.join(train_root,file_class)
    if not os.path.isdir(file_class):
        os.makedirs(file_class)
    shutil.copy(file, file_class + '/' + file_name)

for file in val_files:
    file_class=file.replace("\\","/").split('/')[-2]
    file_name=file.replace("\\","/").split('/')[-1]
    file_class=os.path.join(val_root,file_class)
    if not os.path.isdir(file_class):
        os.makedirs(file_class)
    shutil.copy(file, file_class + '/' + file_name)

完成上面的内容就可以开启训练和测试了。

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

InternImage实战:使用InternImage实现图像分类任务(一) 的相关文章

  • stm32中pwm频率和占空比设置

    对于72M频率来说 xff0c 计算pwm频率是 xff1a 频率 xff1a Fpwm 61 72M arr 43 1 psc 43 1 单位 xff1a Hz 占空比 xff1a duty circle 61 TIM3 gt CCR1
  • stm32最简单的实现BootLoader

    BootLoader大家应该都知道是干什么的 xff0c 简单的来说就是程序开始运行前的一段程序 在成熟的产品中 xff0c 通常都是采用BootLoader方式来升级产品的程序 也就是IAP升级 在了解完基本的实现原理后 xff0c 可以
  • c语言编写http服务器

    一直想弄一下http服务器 xff0c 一直没有深入的去看http协议 昨天研究了一天 xff0c 查看源码和优化 xff0c 终于实现了 也稍微的理解了一下http协议 身为一个嵌入式工程师 xff0c 需要了解http协议吗 xff1f
  • html页面实时刷新显示服务器数据

    在上一篇中我说到浏览器和服务器交互数据 xff0c 是实现了服务器发数据给浏览器 xff0c 并在页面上显示 xff0c 但是是通过按钮点击刷新的 xff0c 而且数据是和html页面一起发过来的 xff0c 在这里我是数据放到页面数组里
  • Windows 终端神器 MobaXterm & 常用设置

    文章目录 1 主要功能2 安装插件3 常用设置4 遇到的问题5 总结 MobaXterm 是远程计算的终极工具箱 在单个 Windows 应用程序中 xff0c 它提供了大量为程序员 网站管理员 IT管理员以及几乎所有需要以更简单的方式处理
  • week 9作业 目录管理器,打牌,椅子

    week9 目录管理器打牌长椅 目录管理器 题目 xff1a 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff
  • 阿贝云使用心得

    阿贝云使用心得 最进因为学习的原因 xff0c 项目要到线上去测试 xff0c 朋友给我介绍了阿贝云 xff0c 现在用了已经两个月了 xff0c 个人感觉还是功能很强大的 xff0c 最关键的是 xff0c 像我这样的学生党 xff0c
  • 阿里云网站域名备案注销方法

    阿里云网站域名备案如何注销 xff1f 域名备案注销很简单 xff0c 阿里云百科网告诉你网站域名备案注销方法 域名备案注销 域名备案注销分为两种 xff0c 即注销主体和注销网站 xff0c 先选择注销种类 xff1a 注销主体 xff1
  • 【CCTC 2017】TensorFlow在金融科技应用,以及大规模分布式机器学习系统最佳实践...

    CSDN 现场报道 5月18日 19日 xff0c CCTC 2017中国云计算技术大会 xff08 Cloud Computing Technology Conference 2017 xff0c 简称CCTC 2017 xff09 在北
  • win10 linux(wsl子系统)删除方法

    管理员账号运行Powershell 1 xff0c 查看已经安装软件包 xff1a Get AppxPackage allusers Select Name PackageFullName 2 xff0c 删除对应的安装软件包 xff1a
  • C语言学习之sprintf

    sprintf函数介绍 xff1a 该函数原型为 xff1a int sprintf char str const char format 该函数的功能为 xff1a 本该输出到显示上的数据 xff0c 改为输出到str所指导内存空间中 x
  • 本地化生成Swift脚本

    iOS本地化生成Swift脚本 看过其他人写的的脚本后发现有些问题 xff0c 其他人会把Localizable strings中的value值传入NSLocalizedString xff0c 实际上这是不对的 xff0c 按理应该传入k
  • 2021-03-08

    MachOView修复版 修复闪退https github com GRSource MachOView git
  • Mac终端每次启动都要source ~/.zshrc的问题

    Mac终端每次启动都要source zshrc的问题 如果在系统用户与群组当中设置了默认shell为 bin zsh xff0c 在启动终端时如果仍然需要source zhsrc xff0c 可以在终端的偏好设置当中查看是否使用的是 bin
  • iOS动画:Stroke和Path动画(9)

    利用stroke和Path动画制作下拉刷新动画 首先创建一个虚线圆 span class token keyword let span ovalShapeLayer span class token operator 61 span spa
  • iOS动画:3D动画(18)

    根据图示创建动画 xff0c 当点击菜单按钮时 xff0c 需要显示左侧菜单栏 效果看起来就像一个3D动画 现在我们来实现这种效果 打开工程中的ContainerViewController swift xff0c 创建3D变换函数 xff
  • iOS动画:粒子发射器(20)

    我们来实现这种下雪的粒子效果 要创建粒子发射器的动画 xff0c 需要用到一个新的layer xff1a CAEmitterLayer 在viewDidLoad中创建emitter对象 span class token keyword le
  • iOS动画:UIImageView帧动画(完结)

    这是iOS动画的最后一章 xff0c 比较简单 xff0c 我们来创建一只企鹅移动的动画 1 设置帧动画 span class token keyword var span walkFrames span class token opera
  • STM32F429入门(三):使用寄存器点亮LED

    xff08 一 xff09 打开原理图 xff0c 找到led所在引脚 xff0c 选用PH10 xff08 二 xff09 选取寄存器 xff0c 选用GPIO端口输出数据寄存器 GPIO 端口输出数据寄存器 GPIOx ODR x 61
  • opengauss的安装

    一 xff0e VMware 下载安装 进入官网的 VMware Workstation Pro 页面 xff0c 浏览功能特性 应用场景 系统要求等 下滑页面点击 试用 Workstation 16 Pro 下方的下载链接 xff0c 跳

随机推荐

  • Linux下解决GBK迁移到UTF-8中文名乱码

    在windows上使用ftp上传文件到Linux上 xff0c 中文名称在Linux系统中显示为乱码 虽然将Linux的env设置了LANG 61 en US UTF 8 并且本地的Shell客户端编码也设置成UTF 8 xff0c 但在S
  • Boost库学习笔记(1)—— 安装编译

    文章目录 一 概述二 构建方式三 链接库四 官方文档五 开发过程注意项1 编译出错 34 fatal error C1189 error WinSock h has already been included 34 一 概述 Boost是免
  • C++/socket缓冲区的大小设置

    设置socket发送 接收缓冲区大小为64k xff0c 默认为8k xff0c 最大为64k int value 61 65535 int tmpCode 61 0 tmpCode 61 setsockopt m UdpSendSocke
  • Win7远程桌面“发生身份验证错误。要求的函数不受支持”

    安装 KB2574819 KB2592687两个更新补丁重启后可解决
  • PID控制参数GIF动态图解

    PID控制参数GIF动态图解
  • LATEX公式行间距调整

    LATEX默认的行间公式与上下文本间距过大 以book类为例 xff0c 公式和文本之间的间距由 abovedisplayskip 和 belowdisplayskip 两个距离来控制的 book类10号字体的定义为 xff1a renew
  • Debian 10导出已安装软件包名称和版本

    Debian 10导出已安装软件包名称和版本 dpkg span class token operator span query span class token operator span show span class token op
  • opencv cmake配置

    opencv cmake配置 span class token function wget span https github com opencv opencv releases download 4 5 3 opencv 4 5 3 v
  • android开发笔记之系统属性(ro.com.google.clientidbase.ms)随卡适配

    客户要求 客户提了一个小需求 xff0c 就是要将系统属性 ro com google clientidbase ms 随卡适配 具体要求是 xff1a 如果插中国的卡 xff0c 系统属性ro com google clientidbas
  • FreeRTOS(三)——应用开发(一)

    文章目录 0x01 FreeRTOS文件夹FreeRTOSConfig h文件内容上面定义的宏决定FreeRTOS h文件中的定义0x02 创建任务创建静态任务过程configSUPPORT STATIC ALLOCATION创建动态任务过
  • 免费的天气预报webservice接口

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 【VsCode修改侧边栏字体大小——用缩放的方法】

    VsCode修改侧边栏字体大小 用缩放的方法 缩放界面字体百分比 xff08 包括编辑器界面 xff09 1 Vscode界面缩放2 Text Editor字体大小调节 缩放界面字体百分比 xff08 包括编辑器界面 xff09 如果只修改
  • Linux c和cpp如何获取真实时间和绝对时间

    使用这些函数的组装可以用来记录程序执行时间 xff0c 和执行时长 include lt iostream gt include lt chrono gt include lt cstdio gt include lt sys time h
  • QT多线程网络通信

    QT多线程网络通信 使用QT提供的类进行基于TCP的套接字通信需要用到两个类 xff1a 1 QTcpServer 服务器类 xff0c 用于监听客户端连接以及和客户端建立连接 2 QTcpSocket 通信的套接字类 xff0c 客户端
  • Mysql 分组查询(group by)

    分组查询 1 语法 span class token keyword select span 查询列表 span class token keyword from span 表 span class token keyword where
  • CSS样式、动画以及盒子模型

    CSS 级联样式表 优势 xff1a 内容与表现分离 网页的表现统一 xff0c 容易修改 丰富的样式 xff0c 使得页面布局更加灵活 减少网页的代码量 xff0c 增加网页的浏览速度 xff0c 节省网络带宽 运用独立于页面的CSS x
  • CodeForces - 1165D 纯思维

    理解错题意导致就是过不了 题意 xff1a 给出了一个数组 xff0c 要求找出最小的数满足它的因子全是数组里的数且不包含1和它本身 xff0c 如果没有输出 1 xff0c 数组是这一个数的因子 xff0c 而不是说它本身也可能是一个因子
  • 计算机综合题汇总

    数学计算题 把6个相同的球分到三个不同的学生身上 xff0c 允许有的学生没有球 xff0c 请问有多少种不同的方法 xff1f C 8 2 61 28 典型的插板问题 xff0c 直接套公式 xff0c C n 43 m 1 m 1 6个
  • YoloV8改进策略:将ConvNextV2与YoloV8激情碰撞,能迸发出什么样的火花呢?

    文章目录 摘要 论文翻译 摘要 1 简介 2 相关工作 3 全卷积掩码自编码器 4 全局响应归一化 5 ImageNet实验 6 迁移学习实验 7 结论 ConvNext V2 Block 改进方法
  • InternImage实战:使用InternImage实现图像分类任务(一)

    文章目录 摘要 书生2 5 的应用1 图像模态任务性能2 图文跨模态任务性能 核心技术 安装包安装timm安装 grad cam安装DCNV3 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文翻译 x