用 Python 实现隐身,我可以
 
                    
作者 | 李秋键
头图 | 下载于视觉中国
出品 | AI 科技大本营(ID:rgznai100)

视频和图像的隐身术是指在视频或者图像中中,在没有任何输入遮罩的情况下,通过框选目标体,使得程序实现自动去除视频中的文本叠加和修复被遮挡部分的问题。并且最近的基于深度学习的修复方法只处理单个图像,并且大多假设损坏像素的位置是已知的,故我们的目标是在没有蒙皮信息的视频序列中自动去除文本。
今天,我们通过搭建一个简单而有效的快速视频解码器框架去实现视频中物体的去除。流程是构建一个编码器-解码器模型,其中编码器采用多个源帧,可以提供从场景动态显示的可见像素。这些提示被聚合并输入到解码器中。然后通过应用循环反馈进一步改进加强模型。循环反馈不仅加强了时间相干性,而且提供了强大的线索。
实现效果如下可见:


import argparse 
from mask import mask
from inpaint import inpaint
parser = argparse.ArgumentParser(description='Demo')
parser.add_argument('--resume', default='cp/SiamMask_DAVIS.pth', type=str,
metavar='PATH', help='path to latest checkpoint (default: none)')
parser.add_argument('--data', default='data/Human6', help='videos or image files')
parser.add_argument('--mask-dilation', default=32, type=int, help='mask dilation when inpainting')
args = parser.parse_args()
mask(args)
inpaint(args)
1.3 算法概述
try: 
assert(opt.model == 'vinet_final')
model = vinet.VINet_final(opt=opt)
except:
print('Model name should be: vinet_final')
assert(opt.no_cuda is False)
model = model.cuda()
model = nn.DataParallel(model)
loaded, empty = 0,0
if opt.pretrain_path:
print('Loading pretrained model {}'.format(opt.pretrain_path))
pretrain = torch.load(opt.pretrain_path)
child_dict = model.state_dict()
parent_list = pretrain['state_dict'].keys()
parent_dict = {}
for chi,_ in child_dict.items():
if chi in parent_list:
parent_dict[chi] = pretrain['state_dict'][chi]
#print('Loaded: ',chi)
loaded += 1
else:
#print('Empty:',chi)
empty += 1
print('Loaded: %d/%d params'%(loaded, loaded+empty))
child_dict.update(parent_dict)
model.load_state_dict(child_dict)

opt = Object() 
opt.crop_size = 512
opt.double_size = True if opt.crop_size == 512 else False
########## DAVIS
DAVIS_ROOT =os.path.join('results', args.data)
DTset = DAVIS(DAVIS_ROOT, mask_dilation=args.mask_dilation, size=(opt.crop_size, opt.crop_size))
DTloader = data.DataLoader(DTset, batch_size=1, shuffle=False, num_workers=1)
opt.search_range = 4 # fixed as 4: search range for flow subnetworks
opt.pretrain_path = 'cp/save_agg_rec_512.pth'
opt.result_path = 'results/inpainting'
opt.model = 'vinet_final'
opt.batch_norm = False
opt.no_cuda = False # use GPU
opt.no_train = True
opt.test = True
opt.t_stride = 3
opt.loss_on_raw = False
opt.prev_warp = True
opt.save_image = False
opt.save_video = True
2.2 视频处理
with torch.no_grad(): 
for seq, (inputs, masks, info) in enumerate(DTloader):
idx = torch.LongTensor([i for i in range(pre - 1, -1, -1)])
pre_inputs = inputs[:, :, :pre].index_select(2, idx)
pre_masks = masks[:, :, :pre].index_select(2, idx)
inputs = torch.cat((pre_inputs, inputs), 2)
masks = torch.cat((pre_masks, masks), 2)
bs = inputs.size(0)
num_frames = inputs.size(2)
seq_name = info['name'][0]
save_path = os.path.join(opt.result_path, seq_name)
if not os.path.exists(save_path) and opt.save_image:
os.makedirs(save_path)
inputs = 2. * inputs - 1
inverse_masks = 1 - masks
masked_inputs = inputs.clone() * inverse_masks
masks = to_var(masks)
masked_inputs = to_var(masked_inputs)
inputs = to_var(inputs)
total_time = 0.
in_frames = []
out_frames = []
lstm_state = None
for t in range(num_frames):
masked_inputs_ = []
masks_ = []
if t < 2 * ts:
masked_inputs_.append(masked_inputs[0, :, abs(t - 2 * ts)])
masked_inputs_.append(masked_inputs[0, :, abs(t - 1 * ts)])
masked_inputs_.append(masked_inputs[0, :, t])
masked_inputs_.append(masked_inputs[0, :, t + 1 * ts])
masked_inputs_.append(masked_inputs[0, :, t + 2 * ts])
masks_.append(masks[0, :, abs(t - 2 * ts)])
masks_.append(masks[0, :, abs(t - 1 * ts)])
masks_.append(masks[0, :, t])
masks_.append(masks[0, :, t + 1 * ts])
masks_.append(masks[0, :, t + 2 * ts])
elif t > num_frames - 2 * ts - 1:
masked_inputs_.append(masked_inputs[0, :, t - 2 * ts])
masked_inputs_.append(masked_inputs[0, :, t - 1 * ts])
masked_inputs_.append(masked_inputs[0, :, t])
masked_inputs_.append(masked_inputs[0, :, -1 - abs(num_frames - 1 - t - 1 * ts)])
masked_inputs_.append(masked_inputs[0, :, -1 - abs(num_frames - 1 - t - 2 * ts)])
masks_.append(masks[0, :, t - 2 * ts])
masks_.append(masks[0, :, t - 1 * ts])
masks_.append(masks[0, :, t])
masks_.append(masks[0, :, -1 - abs(num_frames - 1 - t - 1 * ts)])
masks_.append(masks[0, :, -1 - abs(num_frames - 1 - t - 2 * ts)])
else:
masked_inputs_.append(masked_inputs[0, :, t - 2 * ts])
masked_inputs_.append(masked_inputs[0, :, t - 1 * ts])
masked_inputs_.append(masked_inputs[0, :, t])
masked_inputs_.append(masked_inputs[0, :, t + 1 * ts])
masked_inputs_.append(masked_inputs[0, :, t + 2 * ts])
masks_.append(masks[0, :, t - 2 * ts])
masks_.append(masks[0, :, t - 1 * ts])
masks_.append(masks[0, :, t])
masks_.append(masks[0, :, t + 1 * ts])
masks_.append(masks[0, :, t + 2 * ts])
masked_inputs_ = torch.stack(masked_inputs_).permute(1, 0, 2, 3).unsqueeze(0)
masks_ = torch.stack(masks_).permute(1, 0, 2, 3).unsqueeze(0)
start = time.time()最终完成效果如下: 
☞寒门问题少年到计算机博士,硅谷穷小子是如何成为“创业之神”
☞这个Wi-Fi安全漏洞偷跑了24年,可能危及全球所有设备!
☞继小米之后,360 也官宣造车!互联网企业造车到底哪家强?
- 
                                        Windows Cleaner 专治C盘爆红的开源工具Windows Cleaner 是一个专为解决 C 盘爆红、垃圾文件堆积等问题而开发的开源清理工具。它的目标是快速、精准地清理系统中的死角,同时保障用户的数据安全和操作体验。无论是普通用户还是深度用户 
- 
                                        MarkItDown 轻松搞定 PDF、Word、PPT全能转换神器MarkItDown 是一个由微软开源的、基于 Python 的文档转换神器。它的核心功能是将各种格式的文件(比如 PDF、Word、Excel,甚至音视频文件)转成 Markdown 格式。不仅转换 
- 
                                        Google LangExtract让文本结构化变得简单LangExtract是一个基于Python的开源库,专门设计用于利用大语言模型(LLM)从非结构化文本中提取结构化信息。这个项目的核心理念是将复杂的文本分析任务简化为几行代码,同时保证提取结果的准确 
[广告]赞助链接:
                        关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
                        让资讯触达的更精准有趣:https://www.0xu.cn/
                    
 关注KnowSafe微信公众号
            关注KnowSafe微信公众号随时掌握互联网精彩
- 遭大规模恶意攻击!周鸿祎:360愿为DeepSeek提供安全服务
- 你在怕什么:Gemini AI被禁止发表关于美国大选的言论
- 【今天19:00】GeekPwn 2022 赛况如何?看雪视频号全程直播!
- 16 年云存储历程,亚马逊云科技如何应对数据存储挑战
- Google 正式发布 Android 13,已发布至 AOSP!
- 快递单上的红包,你们有谁领到了?
- 赚钱鬼才:即使开放外部支付,苹果 App Store 仍坚持收取佣金
- 服务端渲染基础
- 华为杨超斌:创新永恒,共建5Gigaverse社会
- 物联网安全漏洞实战,全方位解析IoT安全!
- 2020中国市场身份认证与访问控制产品用户调查报告
- 小米 11 发布,售价 3999 元起;罗永浩回应败诉半导体公司;deepin 20.1(1010) 发布|极客头条





 
                 
             
             
            
 
        
 
        
