美文网首页
神经网络调试经验

神经网络调试经验

作者: 蒋豆芽 | 来源:发表于2019-08-20 14:12 被阅读0次

    做项目一年了,围绕桥梁病害检测进行了殊死搏斗,总归是有个还不错的结果,期间还真是历经磨难,没人带飞,辛苦摸索,艰苦卓绝啊。

    今天把自己整个过程总结一下:

    1、深度学习技术,数据才是根本!数据才是根本!数据才是根本!重要的话说三遍。

    数据量很重要。目前现有的网络,无论分类、检测,都是基于大数据作为支撑的,网络较深,参数较多,几百张图片别想着从头训练。有两条路:一是迁移训练。其实效果一般。因为工业场景图片跟ImageNet差得可太远了。迁移训练能保证收敛,不保证效果,但也可以了,总比从头训练不收敛强。二是自己搭建轻量型网络适应数据量较少的情况。不过到时候移植又是个麻烦事,毕竟工业上还是C++用的多,目前所有深度学习框架对C++的demo都好少。。。

    数据量还是很重要。魔改网络,不如增加更多的样本。来自数据量对魔改党的可怕嘲讽。呵呵。改来改去,最后发现,不如增加样本效果来得直接。

    数据质量很重要。现在学术领域深度学习效果这么好,都是基于清晰高分辨率的图片的。工业环境,图片质量那叫一个差,深度学习技术做也可以做,只是效果就没那么好了。

    数据质量还是很重要。对图片各种预处理,不如换高分辨率相机,提高图片采集质量。来自高分辨率相机对图片处理的嘲讽。

    总结一句话,就是数据才是根本。其他一切都是在这个基础上谈。无论自己数据增强,还是换高分辨率相机,这才是深度学习的第一步,这一步做好了,成功一半。

    2、根据自己的任务挑选合适的网络,有现成的最好,然后迁移训练,也许会有不错的效果。

    更多的时候还是要自己搭网络了,运用各种知识来实现。

    我主要是搭建分割网络。知识自己补充,我只说干货。

    首先说网络结构,分割网络要采用编码解码的结构,融合高低语义特征实现分割,具体可以参见Unet

    其次考虑网络深度以及下采样次数,网络越深,适合复杂的任务、难的图片,浅层网络适合简单图片

    下采样时,图片丢失信息,特别是工业环境拍摄的模糊图片,下采样多了,信息都丢没了,对语义分割影响很大。因此分割网络下采样次数不能多,但是我们又要获取大感受野怎么办?那么通用的做法是下采样三次,然后紧跟空洞卷积,参考商汤DetNet网络。那模糊的图片说不定第一次下采样时信息就丢失得差不多了,那么我们就要适当在前面也要加空洞卷积。这样我们就减轻了信息丢失的问题。

    3、各种参数

    激活函数:leaky_relu比较好用,既避免了死亡节点,又不至于参数量太大。

    权重初始化:he_norm比较好用

    优化函数:Adam比较好用

    正则化:batchnormal比较好用,groupNormal也好用

    4、结构块

    我们引入比较好用结构块,比如res_block、suffle_block、batchnorm_block

    相关文章

      网友评论

          本文标题:神经网络调试经验

          本文链接:https://www.haomeiwen.com/subject/igbusctx.html