用 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 也官宣造车!互联网企业造车到底哪家强?
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 中共中央召开党外人士座谈会 7904267
- 2 贪污超11亿!白天辉被执行死刑 7808219
- 3 日本强震 高市早苗神色慌张一路小跑 7712290
- 4 全国首艘氢电拖轮作业亮点多 7617241
- 5 王毅:是可忍孰不可忍 7522144
- 6 《大明王朝1566》逆袭成国产剧天花板 7425787
- 7 河北沧州杀妻案男方被判死刑 7332755
- 8 日本发生7.5级强震后 高市早苗发声 7232634
- 9 水银体温计将于2026年禁产 7140193
- 10 “人造太阳”何以照进现实 7044462











CSDN
