【有视频】通过观察deep dream的一些细节直观了解卷积神经网络

23 篇文章 1 订阅
21 篇文章 1 订阅

使用deep dream做了很多图,从中确实能直观地学到一些东西。

下面是自己做的视频,使用不同通道生成了一些图形,并对比了不同的迭代次数下生成的图片。

https://www.bilibili.com/video/av65825597/

https://www.bilibili.com/video/av65882277/

https://www.bilibili.com/video/av65973012/

 

使用inception v3的通道对图片进行梯度上升完成训练。

图片被压缩,分成高低频,恢复原尺度的过程逐渐训练,完成大尺寸图的deep dream训练。

 

 

有些有意思的点总结一下:

1.一个通道不够代表一个“类别”

这是肯定的,毕竟不是softmax输出,只是卷积层,卷积层抽象出来的是一个特征。每个通道可能只通过某一种特征,比如蛇的鳞、比如狗头、比如人的嘴,比如猩猩的脸,不同通道组合起来共同产生一个类别的特征集合才足证一个类别。

 

 

2.一个通道不只代表一个“类别”

上图都是高次数迭代的抽象图,如果迭代不同的次数,会发现有些特征在迭代次数少的时候有,高的时候被覆盖了。说明一个通道也不止“一个”特征(这里的一个都是人类思维)

如下图,低次迭代时,能看到类似孔雀羽毛或者狗头之类的东西,总之是毛茸茸的,而远处的图形(比较好训练)先成了彩色圆管。但是高次迭代后,这些毛茸茸的东西都消失了,主要集中在彩色的圆管形状。我的认知是,一个通道有多个特征,每个特征的权重不同,占的权重大的很容易凸显,尤其高次迭代训练后。(我说的权重可能是比重,而不是weight具体数值,但是也许对应关系差不多)

 

 

 

3.高低频都代表什么?

在梯度上升进行deep dream操作中,小型图片是一次性操作,但是对大型图片的deep dream涉及到图片的缩放和高低频分离。

如下,高低频的分离代码,循环是图片缩放,循环内是高低频分离,留下低频,高频统一放在数组中。

lo就是图片缩小,hi是原图减去lo的再放大(不然像素不对),lo的一缩一放导致图片“失真”,hi就是原图剪掉这些失真部分,所以(不同尺度下)hi永远都是轮廓

(后续的操作——梯度上升迭代,也是基于这个分离,先给低频图做地图上升,然后逐渐放大,并且把hi加回去,一直放大到原图尺寸,从而保留高频“边缘信息”)

    octaves = []
    for i in range(octave_n - 1):
        hw = img.shape[:2]
        lo = resize(img, np.int32(np.float32(hw) / octave_scale))
        hi = img - resize(lo, hw)
        hi_print = hi.copy()
        lo_print = lo.copy()
        img = lo
        octaves.append(hi)

如下三图,分别为原图、高频图、低频图。可以看到,高频图只剩下轮廓,而低频图(相较原图)则丢失了轮廓,用我的话说,叫锐度降低、边缘淡化、图片平面化。总之就是山的边角轮廓已经不分明了(虽然你根据主观经验,仍然觉得山上有悬崖,仍然觉得近处的山和远处的水是分开的)

 

 

 

其他的,想到了再补充,有空也会传更多通道的抽象图片的视频

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值