舞蹈模型妙用 有一段时间,跳舞视频人物替换很火,如果我们仔细思考,就会发现,舞蹈视频人物替换其实也是可以衍生到其他领域,比如打篮球,只要没有大面积遮挡,我们用一个人物动作视频假装为舞蹈视频,上传给模型, 这听上去和视频中的人物替换不搭嘎呀……但是,如果我们提供的照片和视频的第一帧一模一样,除了人物呢? 小结 本文详细介绍了5种替换视频人物的方法,在实际使用中,主要要考虑成本和时间的问题。 从技术上分析,视频模型之所以能够做到人物替换,主要还是利用了肢体引导的技术,用户上传的视频,主要还是提供了可供驱动的人物骨骼信息,从而让视频中的人物可以被替换。 随着AI们越来越成熟,这样的功能还会被做的越来越简单,可灵在网站上线了替换元素的功能,如下图 理论上,这个功能就可以直接替换视频中的人物,可惜的是,我多次尝试,这个功能都在报错,没有实验成功。
本文将使用grabCut来提取图像中的人物,同时使用mask将提取的人物贴到新的背景中,实现给人物替换背景的功能。 下面是我们将使用的原图,我们将提取图中的人物 首先我们需要手动绘制矩形框框选人物ROI,使用的函数是 cv2.selectROI()此函数主要用于目标跟踪中,允许我们使用鼠标框选ROI,同时还可以选择是否中心画十字或者是否从中心开始画矩形 fgdmodel, 11, mode=cv2.GC_INIT_WITH_RECT) mask2 = np.where((mask==1) + (mask==3), 255, 0).astype('uint8' (np.float32)) +(1 - a) * (background.astype(np.float32)) cv2.imshow("result", result.astype(np.uint8) ) 最终效果如下: 换一张新图片试试: 框选人物区域ROI: 最终效果:
替换原有人物模型 替换原有模型就是替换默认的NPC路人等,这类模型被替换后可以在游戏中找到对应的人物,无需手动召唤出来,但替换时应该做好备份。 1.首先挑选人物模型,这里我就是用死或生模型作为演示,推荐一个人的MOD,做的很细致 https://www.gta5-mods.com/users/alex189 看清楚是添加类还是替换类的。 2.下载好模型以后,打开 NativeTrainerConfig.xml 这个配置文件,选择你要替换的人物,查出他的模型号,这里我就一海滩少女为例,该模型序号是 a_f_y_beach_01 需要注意, 新增人物模型 增加人物模型,则使用rpf格式的文件,这类文件一般是打包好的,例如 realnakedbody[add-on]1.0.zip 这一类型的文件,就属于添加类的。 接着将Outfit里面的3个配置文件解压到,GTA辅助目录的 F:\Grand Theft Auto V\menyooStuff\Outfit 接着按下F8打开Menyoo修改器,找到 人物选项 ->
torchvision==0.8.1 tqdm==4.51.0 opencv-python==4.4.0.44 onnxruntime==1.6.0 数据准备 我们需要准备一张照片以及照片的背景图,和你需要替换的图片 我这边选择的是BackgroundMattingV2给出的一些参考图,原始图与背景图如下: 新的背景图(我随便找的)如下: 替换背景图代码 不废话了,上核心代码。 #! /usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/11/14 21:24 # @Author : 剑客阿良_ALiang # It ensures that all layers have a channel number that is divisible by 8 It can be seen here: 总结 研究这个开源项目以及编写替换背景的功能,花了我两天的时间,需要对项目本身的很多设置需要了解。
args[3] = make_divisible(min(args[3], max_channels) * width, 8) if m in cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 yaml文件修改 在下述文件夹中创立yolov8-swintransformer.yaml # Parameters nc: 80 # number of classes scales: # 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33 s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8
RepViT介绍 论文题目:《RepViT: Revisiting Mobile CNN From ViT Perspective》 论文地址:https://arxiv.org/pdf/2307.09283v8 宏观设计(Macro Design): 早期卷积作为干细胞:用两个3×3卷积层替换MobileNetV3复杂的干细胞,降低延迟并提高性能。 简化分类器:将MobileNetV3的复杂分类器替换为简单的全局平均池化层和线性层,以减少延迟。 调整阶段比例:优化网络中各阶段的块数量比例,以实现更好的性能与延迟平衡。 It ensures that all layers have a channel number that is divisible by 8 It can be seen here: 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33
(1)引入创建的StarNet文件 from ultralytics.nn.backbone.starnet import * (2)修改_predict_once函数 可直接将下述代码替换对应位置 cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 yaml文件修改 在下述文件夹中创立yolov8-starnet.yaml # Parameters nc: 80 # number of classes scales: # model 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33 s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8
Java 8为什么使用元空间替换永久代? 在Java 8中,Java开发团队做出了一个重要的变革:将永久代(Permanent Generation,或PermGen)移除,并引入了元空间(Metaspace)。 本文将详细探讨为什么Java 8选择使用元空间替代永久代,以及这一变化带来的好处和挑战。 必要时,更新或替换不兼容的工具和库。 六、结论 Java 8中引入的元空间替代永久代是JVM内存管理的一个重要改进。元空间通过使用本地内存和动态扩展机制,解决 了永久代固定大小带来的种种问题,提高了内存使用的灵活性和效率。
DropPath import numpy as np __all__ = ['vanillanet_5', 'vanillanet_6', 'vanillanet_7', 'vanillanet_8' args[3] = make_divisible(min(args[3], max_channels) * width, 8) if m in cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33 s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8
_init__(self, img_size=224, in_chans=3, embed_dims=[64, 128, 256, 512], mlp_ratios=[8, args[3] = make_divisible(min(args[3], max_channels) * width, 8) if m in cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33 s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8
引入创建的UniRepLKNet文件 from ultralytics.nn.backbone.UniRepLKNet import * (2)修改_predict_once函数 可直接将下述代码替换对应位置 cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33 s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 , 79.3 GFLOPs l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504
二、网络结构 YOLOv8结构 修改后结构: 三、具体添加方法 第①步:创建FasterNet.py 创建完成后,将下面代码直接复制粘贴进去: import torch, yaml import torch.nn 3, num_classes=1000, embed_dim=96, depths=(1, 2, 8, args[3] = make_divisible(min(args[3], max_channels) * width, 8) if m in cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33
args[3] = make_divisible(min(args[3], max_channels) * width, 8) if m in cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 if m in SEGMENT_CLASS: args[2] = make_divisible(min(args[2], max_channels) * width, 8) 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33 s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8
首先我们从题意中可以读出:“不能使用比较、查找、替换”函数,也就是说我可以使用分割、组合方法。 str[i]="讨"; str[i+1]="厌"; } } console.log(str.join('')); 这里就不多做赘述了,两两组合在一起,如果组合后等于“喜欢”,那就替换为 <ent.length;k++){ str[i+k]=out[k]; } } } console.log(str.join('')); 优化的结果是:无论需要被替换的字符串 B有多长,我都可以用C进行替换,多余的B会被 “” 空字符所代替。 但这套程序也有一个十分明显的弊端:如果C 的长度大于B ,只能替换掉 C.length 的 B,之后我开始写第三种方案: var str = "我喜欢南极和北极,喜欢沙漠大戈壁"; var ent
在编写一个应用时,出现了调用之前的类的问题,在后续更新内容,已经不在使用,需要进行批量替换。 这里记录下如何使用Pycharm进行批量替换操作。 1.打开pycharm中需要修改的代码内容 2.使用快捷键方式 ctrl + r 会跳转到如下页面 3.使用菜单中的查找菜单 4.上面输入要查找的内容,下面输入要替换的内容 5.自行确认是否单个替换还是全部替换
图1.2 素材 2 完成思路 我们可以看到文字人物海报的主要特点在于文字填充进人物轮廓,因此我们首先要制作人物的轮廓图(单一颜色);填充文字:一个一个的文字打在海报上,由于文字数量多且大小不一,会消耗大量时间 ,因此可以将文字作为画笔的类型使用,最后要使文字绘出人物的轮廓,我们可以通过先填充文字再对人物使用剪贴蒙版;又或者直接在人物的蒙版内绘画。 3 操作步骤 3.1 插入人物图片并使用裁剪工具调整至合适大小 ? 图3.1 3.2 对当前图层使用阈值,并调整合适参数使人物轮廓清晰 ? 图3.2 3.3 使用色彩范围工具选取人物的选区,并新建图层,并在人物选区下填充黑色以新建人物图层 ? 图3.3 3.4 新建图层并在当前选区下新建蒙版 ? 图3.12 4 总结 本次教程基础原理十分简单,重点在于1.如何制作人物的轮廓;2.如何将文字填充进人物并保证人物的基本轮廓不变;3.线性光的图层混合模式的效果是什么。
MNv4-Conv-S模型在Pixel 6 CPU上实现了73.8%的Top-1准确率,延迟为2.4ms;而MNv4-Hybrid-L模型在Pixel 8 EdgeTPU上实现了83.4%的Top-1准确率 3, True, 1, 2] ] }, "layer3": { "block_name": "uib", "num_blocks": 8, expand_filters = make_divisible(inp * expand_ratio, 8) self. 引入创建的MobileNetV4文件 from ultralytics.nn.backbone.mobilenetv4 import * (2)修改_predict_once函数 可直接将下述代码替换对应位置 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33
EfficientFormerV2 的设计 2.1 网络架构设计 EfficientFormerV2 的设计基于以下关键改进: 统一的前馈网络(FFN):将局部信息建模模块(如池化层)替换为深度可分离卷积 2.2 网络架构示意图 EfficientFormerV2 的网络架构分为四个阶段,分别处理不同分辨率的特征(1/4、1/8、1/16 和 1/32)。 # 75.0 75.7 } EfficientFormer_depth = { 'L': [5, 5, 15, 10], # 26m 83.3% 'S2': [4, 4, 12, 8] , 4], } class Attention4D(torch.nn.Module): def __init__(self, dim=384, key_dim=32, num_heads=8, 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33
) return model def convnextv2_nano(weights='', **kwargs): model = ConvNeXtV2(depths=[2, 2, 8, args[3] = make_divisible(min(args[3], max_channels) * width, 8) if m in cm = make_divisible(min(cm, max_channels) * width, 8) args = [c1, cm, c2 yaml文件修改 在下述文件夹中创立yolov8-convnextv2.yaml # Parameters nc: 80 # number of classes scales: # model 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n' # [depth, width, max_channels] n: [0.33
Pycharm/Idea里面给我们准备了替换功能 ————– windows电脑 ————— 1. Ctrl + r 替换 2. Ctrl + Shift + F 全局查 3. Ctrl + Shift + R 全局替换 ————– MAC电脑 ————— 1. command + F 全局查找 2. command + R 全局替换 发布者:全栈程序员栈长,转载请注明出处