复现GAN开源项目源码受阻,求助!



  • 大概是年前10月份跟老师一起着手学习GAN做课题研究,当时刚入门tensorflow和keras,可以跑通一些简单的demo。后来跟老师交流之后决定研究一下黑白照片上色的课题,刚好在寻找资料的过程中碰到DeOldify这个使用自注意力的GAN项目开源了,着实被上色的效果惊艳到了,决定上手尝试复现这个项目,学习一下它的代码。

    因为当时自己还是比较萌新,所以给自己定的预期时间是2个月左右。结果到现在4个月左右的时间过去了,做了许多的努力还是没法取得突破性进展。期间我学了pytorch,从头系统地去跑了一些GAN的代码,也给项目源码提了一些issue。最终卡在fastai这个框架上了:项目环境那些全部搭配好之后,跑作者的训练代码时报错“division by zero”,即被除数不能为0,无奈看不懂fastai的代码,不知道那些命令行的作用,所以不知道如何修改。😢

    867dd780-c6ed-434a-8d85-4c1b1014e8c3-image.png
    而针对这个封装了pytorch的库fastai,我期间也尝试着想去找些资料来入门的,但是随着版本修改的比较快,网上很多fastai的代码都报错,实在不知道接下来已经怎么找突破口了,跪求大牛们给萌新一些指引!!😭 😭 😭

    附上:

    项目源码地址

    记录自己复现过程的知乎文章



  • @seven 这个代码:

    from __future__ import division
    
    

    发生这个错误的原因是python2里面 除会直接得到0,不带小数。然后结果再去除就出错了。关于Deolidfy这个项目以来与fastai,这个其实就是pytorch的一个wrapper。

    过段时间我们可能把它的模型用pure pytorch实现。零依赖



  • @金天 刚刚试了一下还是不行,报错情况如下。这是训练集的问题吗?

    Failed to generate graph for model: index 0 is out of bounds for axis 0 with size 0. Note that there's an outstanding issue with scopes being addressed here:  https://github.com/pytorch/pytorch/pull/12400
    Failed to generate graph for model: index 0 is out of bounds for axis 0 with size 0. Note that there's an outstanding issue with scopes being addressed here:  https://github.com/pytorch/pytorch/pull/12400
    ---------------------------------------------------------------------------
    ZeroDivisionError                         Traceback (most recent call last)
    <ipython-input-8-5da03e316ffe> in <module>()
    ----> 1 trainer.train(scheds=scheds)
    
    D:\pythonwork\DeOldify\fasterai\training.py in train(self, scheds)
        175 
        176             self._get_inner_module(self.netG).freeze_to(sched.gen_freeze_to)
    --> 177             self.critic_sched.on_train_begin()
        178             self.gen_sched.on_train_begin()
        179 
    
    D:\pythonwork\DeOldify\fastai\sgdr.py in on_train_begin(self)
        303     def on_train_begin(self):
        304         self.cycle_iter,self.cycle_count=0,0
    --> 305         super().on_train_begin()
        306 
        307     def calc_lr(self, init_lrs):
    
    D:\pythonwork\DeOldify\fastai\sgdr.py in on_train_begin(self)
        135     def on_train_begin(self):
        136         super().on_train_begin()
    --> 137         self.update_lr()
        138         if self.record_mom:
        139             self.update_mom()
    
    D:\pythonwork\DeOldify\fastai\sgdr.py in update_lr(self)
        147 
        148     def update_lr(self):
    --> 149         new_lrs = self.calc_lr(self.init_lrs)
        150         self.layer_opt.set_lrs(new_lrs)
        151 
    
    D:\pythonwork\DeOldify\fastai\sgdr.py in calc_lr(self, init_lrs)
        313             res = init_lrs * (1 + pct*(self.div-1)) / self.div
        314         else:
    --> 315             pct = self.cycle_iter/self.cycle_nb
        316             res = init_lrs * (1 + pct*(self.div-1)) / self.div
        317         self.cycle_iter += 1
    
    ZeroDivisionError: division by zero
    
    
    


  • @金天 明白,截图问题下次注意😂 ,现在去试试看您说的divide兼容包。另外想问一下您,像我这种经验还积累不够的学习者,遇到像这种报错去搜索也没能搜到有具体帮助的回答时,应该怎么处理呢?另外就是这个fastai的问题,我记得以前跟您讨论过,您说使用pytorch就好,fastai可能有时还跟pytorch版本有兼容性问题,所以我的本意就是希望能够读懂这份代码(例如模型的框架或者一些细节性处理)之后自己写一份pytorch的代码开源,但是fastai就是很多地方不明白,缺少了许多针对性,这个时候又应该怎么去处理呢?
    另外我现在的水平是可以读通并修改pytorch框架的pix2pix代码,而DeOldify这个项目作者在github上面介绍的就是他杂糅了像self-attention gan、pg gan、两个时间尺度的trick就可以得到一个很好的效果。我就是想看一下他究竟是怎么处理这些步骤的,不然单看文字还是不够形象的。😩
    感谢!



  • 这个其实就是python2和python3的兼容问题,用python2跑应该不会出错,如果用python3,应该在最上面添加一下:

    from __future__ import divide
    

    具体不记得了,就是添加一个divide的兼容包。

    另外建议错误贴文字啊!!!!!!!!!!!!!!!!!!截图很容易把服务器内存称爆!!!!!!!!!!!!!