一行代码搞定文件批量重命名
在我的rgb文件夹中,含有若干张图片,先使用os.listdir来查看一下这些图片的名字: 1234path = 'rgb'all_pics=os.listdir(path)for i in all_pics: ...
一阶运动模型
最近,”蚂蚁雅黑”又火了一波,在B站搜索”蚂蚁雅黑”,映入眼帘的是这样的场景 它利用某种技术,可以让一张静态图片动起来,无论是影视人物的画像,还是活在古画里的历代皇帝,甚至动漫人物,雕塑人物,只要有一份参考视频做参考,他们就统统都能动起来,而且毫无违和感。 本文分为两部分,第一部分主要介绍上面提到的某种技术,第二部分手把手教你生成这种神奇的视频。 对于理论不感冒的小伙伴,也可以直接划到动手实践部分进行阅读。 对了,按照本文操作生成的视频已经放在文末,欢迎围观,哈哈哈~ 理论讲解 整个框架由两部分组成:运动估计模块(Motion Module)和图像生成模块(Generation Module)。 用一段话来描述整个框架在做的事情: 输入的数据包括原图像(Source)和驱动视频(Driving Frame),这两部分数据被输入关键点检测器(Keypoint Detector,它是一个编解码器网络),以提取关键点(Keypoint),这里的关键点包含两部分:源图像中的关键点+驱动视频中的关键点;接着,这些关键点通过仿射变换(Affine...
Python实现10大经典排序算法
大家好,我最近在重学数据结构与算法这门课,顺手整理了10大经典排序算法的Python实现,并配有动画加以理解,建议收藏起来慢慢食用~ 好了,废话少说,上干货 ! 1. 冒泡排序 123456def bubbleSort(arr): for i in range(1, len(arr)): for j in range(0, len(arr)-i): if arr[j] > arr[j+1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr 2. 选择排序 1234567891011def selectionSort(arr): for i in range(len(arr) - 1): # 记录最小数的索引 minIndex = i for j in range(i + 1, len(arr)): if arr[j] < arr[minIndex]: ...
SinGAN
...
街景字符编码识别
本文属于学习帖,用于记录“街景字符编码识别”问题的 baseline 解决方案。原代码链接见文末,其中有些小的错误已更正。 赛题来源自Google街景图像中的门牌号数据集(The Street View House Numbers Dataset, SVHN),并根据一定方式采样得到比赛数据集。 训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置;测试集A包括4W张照片,测试集B包括4W张照片。 本赛题需要选手识别图片中所有的字符,为了降低比赛难度,我们提供了训练集、验证集和测试集中字符的位置框。 一个比较有效的方法是先对字符做检测(使用目标检测技术),但这里仅使用baseline方案。 baseline解决方案是将其转为定长字符识别问题。 具体来说,所有字符的最大长度不超过6位,因此将不足6位的字符填充到6位。因为所有字符全部取值为0到9共10个数字,所以用10作为填补的标记,字符总长度不足6位的样本用10进行填补。 导入相关库+必要设置1234567891011121314151617181920212223import...
ProGAN
ProGAN的结构ProGAN也是用于图像生成的一种生成对抗网络。在原始GAN...
Transformer
Transformer的结构Transformer的结构如上图所示,我们将其拆解为x个小部分,逐个部分用代码实现,然后再将各个部分联结起来,形成最终的Transformer。 关于Transformer的原理,网上已经有很多优质的文章了,这里我们关心其代码实现。对于其每一个子模块(以类的形式定义),我们都会实例化一个对象,用具体的数值代入其中,把中间过程中产生的变量维度及相关信息打印出来,这些都体现在代码注释中,请留意。 Muti-Head AttentionMuti-Head Attention接收输入q,k,v,维度在这里都是$[4,3,512]$,输出维度也是$[4,3,512]$。 q和k的维度是一致的,而v可以和它们不一致,这里只是为了方便才将三者维度保持一致。 SelfAttention实现代码如下...
CycleGAN
上图中,最左边一列是原图,右侧的4列是将原图转换成其他风格后的图像。这种转换被称为图像风格迁移。 实现图像风格迁移的方法有很多,这里我们介绍CycleGAN并用它来实现图像风格迁移。 CycleGAN的网络结构CycleGAN的网络结构如上图所示。它的训练数据集需要来自两个不同的域(就是两种不同风格的图像):$A,B$; CycleGAN包含两个生成器:$G_{AB},G_{BA}$,分别用于将A风格图像转换为B风格图像,以及将B风格图像转换为A风格图像; 同样,它也包含两个判别器:$D_{A},D_{B}$。 CycleGAN的损失函数在原始GAN损失函数的基础上,CycleGAN为了防止生成器偷懒(解释见下一段),增加了循环一致性损失,这个东西其实就是重构损失,以保证转换后的图像和原图像的内容一致性。 李宏毅老师的PPT中一幅图很形象的展示了循环一致性损失 现在举个例子解释偷懒...
从GAN到WGAN再到WGAN-GP
之前介绍了GAN的原理,并使用celeba数据集训练了一个基于DCGAN的”假”人脸生成器(传送门戳我),这里我把它的生成效果图搬运过来了在GAN问世后,其出色的表现使得对于GAN的研究一时风生水起(至今还在持续),越来越多关于GAN的研究成果被发表,GAN本身存在的缺陷也逐步被挖掘出来。 本文不会陷入繁杂的数学推导中,而是指出WGAN相比于原始GAN的改进之处,以及进一步提出的WGAN-GP,并动手用PyTorch进行实现。 WGANWGAN便是对于原始GAN的一种改进方案,它的作者用了大量篇幅指出了原始GAN的不足之处,并最终给出了自己的解决方案。虽然其中蕴含了大量的数学推导,但推导的结论却出乎意料的简单,或许这就是数学的魅力。 说完一堆废话后,来看看改进得到的WGAN相比于原始GAN有哪些改动,这里直接把WGAN作者给出的训练算法贴出来,然后做简要分析。 5和10分别给出了判别器和生成器的损失函数,相比于原始GAN...
火爆全球的GAN究竟是何方神圣?
故事时间从前有一个人,他希望通过制造假币来发家致富。 于是,他开始学习制造假币。 一开始,他的技术太菜,制作的假币刚流入市场就被警察发现了。 他不甘心,于是继续学习来提升造假币技术,这一次,假币并没有被发现,他很开心的数着钱。 可是,过了一段时间,敏锐的警察使用刚刚学习到的新知识,破获了他的假币。 但他还是不甘示弱,继续提升造假币的技术 警察也继续学习新的假币鉴别技术 就这样,他的造假币技术一直在提升,警察鉴别假币的技术也在不断提升 在互相抗衡很久以后,他的造假币技术到了炉火纯青的地步,以至于警察都难以鉴别。 GAN是什么? 生成对抗网络(Generative adversarial network,...