前几日,52CV分享了最近一本新出的书《深度学习500问》中迁移学习相关的内容:有故事、有实践,谈一谈深度迁移学习方法的基本思路,并举办了以“论文推荐+经验分享”赠送这本新书的活动,有8位粉丝的留言最终入选,他们推荐的论文涵盖自动驾驶、2D手势估计、隐私保护、目标检测、小物体检测、图像压缩、轻量级网络、多模态医学图像分割等方向,每个人也都分享了对迁移学习的理解。
经授权,本文刊载这些精彩推荐,希望对大家有帮助!
01
lcl:
SNE-RoadSeg: Incorporating Surface Normal Information into Semantic Segmentation for Accurate Freespace Detection
地址:
https://arxiv.org/pdf/2008.11351.pdf
代码:
https://github.com/hlwang1124/SNE-RoadSeg
ECCV 2020出了一篇论文是做可行驶空间的,叫做SNE-RoadSeg(代码已开源),使用了类似Unet的结构做特征提取,在多个升采样层追加残余链接,使得每层的提取特征可以相互串联。
此外还使用了基于“three-filter to normal”的方法将深度图转化为surface normal map来进一步丰富特征图。
再谈谈我对迁移学习的学习方法。
迁移学习有基于样本的迁移,基于模型的迁移,基于特征的迁移,及基于关系的迁移。比较简单的就是基于模型的迁移,像是文中解释的,使用预训练权重来做微调,不过微调还要看模型复杂度,有些情况下甚至要砍一些层。
也可以基于一些源区域数据样本进行迁移学习,基本就是对这些样本施加权重,通过调节权重,使得选择的源域数据的分布近似于目标区域,这也是提升模型表现的好办法。
字数限制写不了了,有兴趣进一步了解,可以看一下这里做参考 :
https://zhuanlan.zhihu.com/p/44654536
02
A鹏:
Nonparametric Structure Regularization Machine for 2D Hand Pose Estimation
地址:
https://arxiv.org/pdf/2001.08869.pdf
代码:
https://github.com/HowieMa/NSRMhand
提出一种新的非参数结构正则(NSRMhand:novel Nonparametric Structure Regularization Machine)来做2D手势估计。将NSRM融入到CPM中,当然NSRM也可融入到其它模型中。
训练中对Structure Stage进行CE Loss进行监督学习,标签是根据关键点生成的mask,而不是人工标注的mask;对Keypoint Stage进行MSE Loss监督学习,标签是根据关键点生成的热力图map 。
迁移学习方法和经验:
1、可以将CNN模型作为特征提取器:直接去掉最后一层的全连接层,然后把剩下的网络保留作为一个特征提取器,再把特征输入到一个SVM分类器或者softmax分类器快速实现自己的分类任务;
2、就是本文提出的“神经网络的前3层基本都是通用特征,进行迁移的效果比较好。”所以在进行迁移学习的时候,直接把前面网络的学习率设为0,我用是caffe训练,即把train.prototxt里面前三层的“lr_mult: 0 ”
3、直接用原有的网络相关参数进行迁移学习,要用小的学习率进行重新训练;
4、迁移学习过程,要防止过拟合,可以采用数据增广、dropout、BN层等方式
03
艾美妮斯:
Preventing Personal Data Theft in Images with Adversarial ML
地址:
https://arxiv.org/abs/2010.10242
1. 目前数据安全和网络隐私已经成为一个严重的紧迫问题,根据最近读的一篇论文,即使用户没有在图片上标注他/她的名字,无监督学习算法仍然可以识别出图片中的人是谁,这是非常令人担忧的事情,在他们的论文中,他们提出在原始图像上叠加一个 "面具",这样我们的身份就不会暴露在各种面部识别工具中。
2. 由于我的硕士毕业论文做的就是和迁移学习相关的,所以想分享下自己的入门历程:
1)入门必读的blog,读完以后你会对包括实例分割和mask-rcnn有基础了解,原文链接如下:https://engineering.matterport.com/splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46 目前国内也有相应翻译版本。
2) 当时我毕设项目是基于上面blog中提供的code做的迁移学习,github如下:
https://github.com/matterport/Mask_RCNN
补充:自己作迁移学习的案例:我硕士毕设的第一部分就是利用mask-rcnn进行迁移学习来识别1种植物,然后预训练权重就是用的matterport/Mask_RCNN提供的那个coco权重,结果第一种植物,仅仅100张图片,30多个轮回,就训练出了非常好的识别结果。
04
老杨可爱多:
#CVPR 2020 Oral
Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection
地址:
https://arxiv.org/pdf/1912.02424.pdf
代码:
https://github.com/sfzhang15/ATSS
这篇文章将FCOS(anchor-free,one-stage)与RetinaNet(anchor-based,one-stage)做对比,指出了基于锚定和无锚检测的本质区别在于如何定义正样本和负样本,这导致了它们之间的性能差距。如果在训练过程中采用相同的正负样本定义,无论是从一个box还是一个point回归,最终的表现都没有明显的差异。
这说明了如何选取正、负训练样本对当前目标检测器具有重要意义。最后提出了一种自适应训练样本选择(ATSS),根据目标的统计特性自动选取正负样本。它大大提高了基于锚定和无锚检测器的性能,并弥补了两者之间的差距。
作者的研究本质上给予了anchor-free能继续发展的佐证,而且ATSS也能很方便的移植到其他网络当中去,不可谓不精彩。
迁移学习很多还是相同任务或者说相似任务之间的转变,都是基于微调使得在新任务上损失快速收敛。最近大火的元学习,我个人认为也是迁移学习的一种,只不过是跨任务的迁移学习。
元学习在目标检测,目标跟踪领域最近非常引人注目,不仅仅因为它效果卓群,还因为它方法简单易懂,大家有兴趣可以看一下tracking by instance detection:a meta-learning approach,文章还是很富有创新的。
05
少年:
NETNet:Neighbor Erasing and Transferring Network for Better Single Shot Object Detection
地址:
https://arxiv.org/pdf/2001.06690.pdf
代码:
作者尚未开源
这篇论文说的是小物体检测。作者针对目前的小物体检测出现的问题进行了优化。
提出了:一种新的邻域擦除模块NEM,用于擦除大目标的显著特,并强调浅层小物体的特征。而且,引入了一个邻域传输模块用来传输被擦除的特征,突出深层中的大对象。利用这种机制,构建了Single-shot网络,感知大尺度的对象检测。
此外,作者建议综合最近的相邻金字塔特征来增强检测的性能。对迁移学习的理解 迁移学习,理解起来很简单,就是将从一项任务中学习到的能力迁移到另一项任务中。
对于机器来说。迁移学习就是利用虚拟数据来进行学习,所得模型对目标任务进行一些调整即可应用。尤其是深度学习,很多项目,需要大量的计算资源,如果数据集的规模比较大,训练起来必然会导致周期很长,不仅加大资金投入,也加大了算法工程师的压力。
而这,并不是人工智能的初衷。所以,在其他任务上训练好的模型,适当的修改部分参数,并喂入处理好的相应的数据集,也能取得不错的效果。
06
孙颖颍穎颕頴:
An End-to-End Compression Framework Based on Convolutional Neural Networks
地址:
https://arxiv.org/pdf/1708.00838.pdf
文章亮点:
1.实现了深度学习在图像压缩上的应用,且压缩效果达到了state of art;
2.提出的压缩网络较新颖,一共有两个CNN组成。ComCNN对图像进行提取紧凑表示,再使用标准编码器对紧凑表达进行编码,RecCNN对解码结果进行图像超分辨率重建。
3.提出一种解决压缩标准中的量化函数导致的梯度无法反向传播的解决方法。
记得一开始刚上研究生的时候,老师让我们暑假就过来,一开始就学习吴恩达老师的机器学习课程,期间学习了python和C++以及matlab,因为是做视觉的,这几种语言还是经常用到的,还有一些机器学习深度学习框架sklearn、tensorflow、 potorch等。
Python语言推荐用《python学习手册》入门,然后用《流畅的python》进阶,C++用那本《C++primer》 第五版就完事了,matlab比较简单看一些代码就会了!
至于sklearn和tensorflow以及pytorch我觉得官方手册就挺好的,当然市面上也有很多优秀的书去选择。这些都是机器学习者的必备技能!后面就在李飞飞老师的课上接触到了迁移学习,很感兴趣。
迁移学习的概念为:迁移学习是一种机器学习方法,就是把为任务A开发的模型作为初始点,重新使用在为任务B开发模型中。
举个简单的例子就很好理解了,比如,我们马上就要去工作了,但是不知道要怎么工作,我们就可以通过别人诉说工作的经历来知道我们自己以后工作将是一个什么样情况,从一个环境中学习到知识去帮助新环境的学习任务,这无疑可以节约大量人力财力。并且还解决了传统的机器学习假设训练数据与测试数据服从相同的数据分布的缺陷,不必再去重新标记新数据而丢弃旧数据。
总之迁移学习在未来将引领下一波机器学习技术商业化浪潮!有研究图像压缩的朋友可以一起讨论哈....
07
天天放羊:
MutualNet:Adaptive ConvNet via Mutual Learning from Network Width and Resolution
地址:
http://xxx.itp.ac.cn/pdf/1909.12978.pdf
github:
https://github.com/ taoyang1122/MutualNet
是一个轻量级网络,这篇文章提出了宽度-分辨率相互学习的方法(MutualNet),根据动态的资源约束来训练网络,实现运行时自适应的准确率-效率的平衡。
该方法利用不同的宽度和输入分辨率,训练了多个子网络,每个网络都互相学习多尺度的特征表示。相对于目前SOTA的自适应网络 US-Net,文中的方法在ImageNet上取得了更高的top-1准确率,要比最优的复合尺度的MobileNet和EfficientNet 高1.5%1.5%1.5%。
在COCO目标检测、实例分割和迁移学习任务上,该方法也进行了验证。MutualNet的训练策略可以提升单个网络的性能,在效率(GPU搜索时间:1500 vs. 0)和准确率方面都显著超过了AutoAugmentation。
我自己对迁移学习的理解与应用分享:
首先,传统的机器学习,主要是监督学习,需要大量的标注数据,标注数据是一项枯燥无味且花费巨大的任务,比如我所处的农业cv领域,大型数据集很少,而且农业场景的特殊性,没有一个数据集能够囊括所有,而且有些数据的样本是很少很难获得的,所有利用迁移学习我认为很重要;
拿一个实际做过的例子来说吧,制作一款病害识别的手机端APP,自己建立的数据集(xx植物病害)样本量很少,主要原因是很难获得,所以采取的策略呢就是现在ImageNet上先训练模型,然后使用自己数据库进行二次训练,发现节约了大量时间而且网络的收敛速度更快,我认为这中策略也是一种迁移学习吧
08
不贪吃的牛:
Disentangle, align and fuse for multimodal and semi-supervised image segmentation
地址:
https://arxiv.org/abs/1911.04417
这一篇是多模态医学相关的论文,文章模型采用了半监督方法,属于工程性的一篇文章,模型设计比较复杂。
本文提出了一种二维方法用于学习多模态医学图像中解剖和形态因子的解耦表示,以进行分割,并且展示了设计的语义解剖因子重要性和可学习性。
迁移学习的经验:说实话我本身对迁移学习了解不够多,只知其表。迁移学习属于机器学习,专注于储存已有问题的解决模型,并将该模型应用于其他问题上(与原有问题不同但相关)。
这类问题常常出现在:我们在一个感兴趣的领域中有一个分类任务,但我们只在另一个感兴趣的领域中有足够的训练数据,其中后者的数据可能在不同的特征空间中或遵循不同的数据分布,我们希望能够从后者中将知识进行迁移从而帮助完成前者的任务。
比如:有一个辨识汽车的模型,将其应用于提升识别卡车。在迁移学习中,参数微调是很重要且容易出错的步骤。作为一名学生,要学习的还有很多,谢谢CV君长期以来的分享。
END
备注:CV
计算机视觉交流群
图像分割、姿态估计、智能驾驶、超分辨率、自监督、无监督、2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到