2020的大背景下,学习深度学习怎么样?

2020-07-30 14:01发布

2条回答

肯定会很不错

曾为
3楼 · 2020-10-16 09:06





基于深度学习的图像背景移除

[原文-Backgroundremovalwithdeeplearning]


这篇博客主要是介绍greenScreen.AI中所涉及的工作.


  1. Intro

  2. 深度学习技术的发展为很多以往难以实现解决的问题提供了可能性方案.

  3. 给自己设定的目标:

  4. 提升深度学习技巧提高AI产品的部署水平设计一种具有市场需求的产品HaveFun经验分享

  5. 针对以上目标,这里考虑了一下几个方面:

  6. 还未做的(或还没有合理解决的)问题实施难度不是太大的问题能够有简单且吸引人的用户界面——希望产品能够具有实用性,而不只是例子训练数据易于获取——有时数据比算法更难得使用最新的深度学习技术(Google,Amazon等云平台可能已经存在),但不够先进(因此,可以在网络上找到相似的例子)有达到“产品化”的可能

  7. 我们早期的想法是做一下医疗项目,因为医疗领域与我们更密切相关,且现在深度学习在医疗领域的有效成果还比较少.然而,我们意识到,可能遇到数据收集和法律法规的问题,这与保持项目简单相冲突.因此采用了第二方案——背景移除.

  8. 背景移除是手工或着半手工(利用Photoshop,甚至PowerPoint的相关工具)可以容易完成的任务.例如ClippingMagic.但是,据我们所知,全自动的背景移除,是一项具有挑战性的工作,虽然已经有相关的{尝试工作](http://www.logitech.com/en-us/product/c922-pro-stream-webcam),但现在仍没有能够取得满意结果的产品.

  9. 需要移除的背景是什么?这显然是一个重要的问题.如果指定了物体(objects)或者轮廓(angle)等的模型,就可以得到较为高质量的分离结果.当开始我们的工作时,我们把问题想的很大:通用的背景移除器以自动分辨各种类型图片的前景和背景.但是,当训练完初步模型时,我们认识到,将注意力集中到特定图像集是更合理的.因此,这里只针对自拍照(selfie)和人像(humanportraits)进行分析处理.Figure1.(almost)人像的背景移除

  10. 自拍照是具有突出和集中前景的图像(一个或多个persons),确保了物体(face+upperbody)和背景(background)能够有较好的可区分度,且角度相对不变(quiteanconstantangle),往往都是相同的物体(object,person).

  11. 基于这些假设,我们开始进行项目研究,以实现一个one-click的简单操作来完成背景移除的服务.

  12. 需要进行的主要工作是模型训练,但不能低估合理部署的重要性.好的分割模型仍然与分类模型(e.g.SqueezeNet)结合的不够紧凑,我们测试了在服务器(server)和浏览器(browser)的部署.

  13. 如果想了解关于产品部署过程的更多细节,欢迎访问server和client.

  14. 如果想了解模型和模型训练的过程,请继续.

  15. 2.语义分割SemanticSegmentation

  16. 与我们的产品相近的深度学习和计算机视觉任务,最佳选项是语义分割.其它的策略,如separationbydepthdetection,对于我们的研究不够成熟.

  17. 语义分割,和分类、目标检测,是计算机视觉的三大任务.分割实际上是分类任务,将每一个像素分类.但不像分类或者检测,分割模型表示着对图像的一些“理解”,而不是仅是说“图像里有一只猫”,而是要在像素级指出猫在的位置和猫是什么.

  18. 分割如何进行呢?为了更好的理解,我们首先介绍该领域的一些早期工作.

  19. 最早的想法是,采用早期的分类网络,如VGG和Alexnet.VGG是2014年出现的图像分类模型,由于其简单和直接的网络结构而被普遍应用.分析VGG的浅层网络层,可以发现,需要分类的物体的附近具有较高的激活程度.越深度的网络层,激活程度越高.但由于Pooling层的影响,激活结果比较粗糙(coarse).基于该理解,假设分类网络经过某些调整可以来寻找/分割物体.

  20. 语义分割的早起结果是伴随着分类算法产生的.在Post中,可以看到一些基于VGG的粗略分割结果:

  21. 输入图片:

  22. 后期网络输出结果:

  23. bilinearupsampling结果:

  24. 这些结果仅是取自全连接层输出转换为原始尺寸的结果,保持了其空间特征,得到全卷积网络.

  25. 在上述例子中,输入768*1024的图片到VGG网络,得到24*32*1000的网络层输出.24*32是图像池化后的特征图尺寸(缩小了32倍),1000是图像类别数.从该结果可以得到上述的分割效果.

  26. 为了平滑预测结果,研究者采用简单的bilinearupsampling层.

  27. 在FCN论文中,进一步改善了这种idea.他们将某些层进行连接,以获取更丰富的表达信息,根据上采样率(up-samplingrate),分别记作FCN-32,FCN-16和FCN-8.

  28. 通过在网络层间添加一些跳跃连接(skipconnections),使得预测结果能够编码原始图像的更好的细节信息.进一步的训练可以提高预测结果.该技术说明了基于深度学习的技术对于语义分割确实是可能有效的.Figure4.FCN论文的分割结果

  29. FCN开启了分割的篇章,研究者基于不同的网络继续语义分割工作.其主要思想是相同的:基于已有网络,上采样,采用跳跃连接.

  30. 推荐阅读的几篇博客:

  31. A2017GuidetoSemanticSegmentationwithDeepLearning

  32. SemanticSegmentationusingFullyConvolutionalNetworksovertheyears

  33. ABriefHistoryOfCNNsInImageSegmentationFromRcnntoMask-Rcnn

  34. 也可以关注一些encoder-decoder网络结构.

  35. 3.背景移除项目

  36. 在进行分析调研后,我们选择了三种模型:FCN,Unet和Tiramisu——深度encoder-decoder结构.我们也考虑了Mask-RCNN,但是其实现有点超出项目范围.

  37. FCN由于其效果达不到期望好的效果,似乎与项目无关.但是,其余的两个模型结果不太差.基于CamVid数据集的Tiramisu,Unet的主要优势在于其紧凑性和速度快.Unet是相对容易实现的(基于keras),Tiramisu也是可以实现的.这里采用JeremyHoward’s的深度学习课堂的Tiramisu实现.

  38. 基于这两种模型,我们开始在数据集上进行训练.这里需要说明的是,我们先尝试了Tiramisu,发现该方法更适用于项目,因为其能够捕捉图像中的形状边缘(sharpedges).Unet似乎不够适用,其结果差强人意.

  39. 3.1数据

  40. 确定了模以后,开始选择合适的数据集.分割数据与分类和检测数据不太相同.另外,手工标注也不是一种可能.最广泛的分割数据集是COCOdataset,其包括80K张图片,共90类;VOCPascaldataset,其共11K张图片,20类;以及ADE20Kdataset.

  41. 由于COCOdataset有更多的person类的标注图片,与我们的人像背景去除任务较为相关,这里选取该数据集.

  42. 根据我们的任务,分析了是,采用只与我们任务相关的图片,还是更通用的数据集.一方面,采用具有更多图片和种类的通用数据集,可以使得模型能够应对更多场景和挑战.另一方面,整晚的训练能够允许超过150K张图片.如果我们对整个COCOdataset进行模型训练,可以对每张图片训练两次,稍微修剪下是有帮助的.另外,对于我们的任务能够更好的聚焦在模型上.

  43. 值得提到的是,Tiramisu模型是基于CamViddataset进行训练,其有一些缺点,最重要的是,该数据集的图片非常单调——所有的图片都是从一辆车得到的路照(roadpics).容易理解,从该数据集进行学习,即使其有person,对于我们的任务是没有帮助的.因此,经过一些尝试,我们继续.Figure2.CamViddataset中的图片

  44. COCOdataset提供了直接的API,便于我们准确的知道每一张图片中的物体(90中预定义类).

  45. 经过实验,我们决定梳理下COCOdataset:

  46. 首先,只保留图片中存在person的图片,共得到40K张;然后,删除图片中存在很多person的图片,确保每张图片只有1-2个person;这是我们的产品需要处理的.最后,只保留图片中被标注为person的区域占20%-70%的图片,去除背景中非常小的person,以及某些奇怪的标注.

  47. 最终的数据集包含11K张图片,应该是够用于训练.Figure3.(左)-好图片;(中)包含太多person;(右)物体太小

  48. 3.2Tiramisu模型

  49. 我们在JeremyHoward’scourse介绍了Tiramisu模型.尽管其全名是“100层Tiramisu”,表示是一个较大的网络,但其还是比较经济的,仅有94M参数.而VGG网络超过130M参数.

  50. Tiramisu是基于DenseNet的,DenseNet是最近出现的图像分类模型,其所有层都是内部连接的(interconnected).而且,类似于Unet,Tiramisu添加了一些跳跃连接(skipconnections)到上采样层(up-samplinglayers).

  51. 回忆下可知,该网络采用了FCN中的思想:基于分类网络,上采样,添加跳跃连接以提升结果.Figure5.Tiramisu网络

  52. DenseNet网络可以看作是Resnet模型的自然进化版本,但是,DenseNet记住网络所有层的信息,而不是只记住直到下一层的每一层信息.这种连接成为高速连接(highwayconnections).DenseNet会引起filter数量的膨胀,记为“增长率(growthrate)”.Tiramisu的growthrate是16,即每一层都添加16个新的filters,直到网络层的filters数达到1072.然而,100层的tiramisu可能会有1600层,上采样层裁剪了部分filters.Figure6.DenseNet模型结构——前面的filters被堆积到整个网络.

  53. 3.3训练

  54. 训练网络采用的损失函数是——标准的crossentropyloss,1e-3学习率和较小的decay的RMSPropoptimizer优化算子.

  55. 11K的数据集的70%用于训练,20%用于验证(validation),10%用于测试.下面的图片都是测试集中的.

  56. 为了与原文的训练保持一致,我们设定epochsize为500张图片.这就使得们可以周期的保存训练模型.

  57. 此外,我们只在两类的数据集上进行训练——背景和person.论文里是12类.我们首先在COCO的类别上进行训练,然而对于模型的训练影响不大.

  58. 3.4数据问题

  59. 以下几方面的数据问题影响了预测结果:

  60. 动物(Animals)-模型有时分割动物,这就会降低IoU.在我们的任务中添加动物类作为相同的主类或者其它类,都会影响预测结果;肢体部分(BodyParts)-虽然我们已经过滤了图片数据集,但是对于图片中的标注是person类还是某些人体部分,如,脚、手等,仍无法确认.这些图片不在我们的研究范围,但仍是会出现的情况.Figure6.动物、部分肢体、手持物体的图片手持物体(HandheldObjects)-数据集中的需要图片都是与体育相关的,如球棒、球拍、滑雪板等.我们的模型会对如何分割它们产生混淆.类似于动物的情况,这些图片数据会影响分割效果.Coarsegroundtruth-COCOdataset的标注不是pixelbypixel,而是基于多边形(polygons)的.有些情况,方法足够有效,但某些groundtruth可能非常粗糙,这对于模型的学习也是有影响的.Figure7.COCOdataset中的图片及对应的粗糙分割标注

  61. 4.结果

  62. 我们的结果是令人满意的,虽然不够完美.最终的测试集IOU是84.6,现在能达到85.虽然这个结果还不够稳定,其会在不同的数据集和类别间波动.某些类容易分割,比如马,路等,很容易能达到90的IOU.其它有挑战性的物体类是树和人,大部分模型能达到大约60的IOU.针对这种情况,我们将网络关注与单一类别,以及有限的图片类型.

  63. 我们的工作还未达到预计的产品化,但已经有50%的图片可以取得较高的分割结果,可以对结果进行讨论分析了.

  64. 下面是一些好的分割结果:

  65. 5.Debuggingandlogging

  66. 神经网络训练的一个重要部分是debugging.当工作开始时,能够对数据和网络,训练过程,网络输出进行监控,是有意义的.但是,我们发现,追踪每一部分都是及其重要的,能够便于检查每一步的结果.

  67. 以下是遇到的问题:

  68. 早期问题:模型不能训练.这可能是因为内在问题,或者是某些预处理错误,比如忘记对某些数据快进行归一化,简单的结果可视化是有帮助的.可以参考该Post.网络自身的调试:在确认没有重要问题,网络训练开始,基于预定义的loss函数和度量.分割度量采用的是IoU- intersectoverunion.另一个有帮助的是技巧是,对每一个epoch的模型预测结果进行显示.可以参考该Post来了解机器学习模型调试的技巧.IOU不是keras的标准度量/loss,可以从网络上找到其IOU实现.这里我们给出了loss画图和每一个epoch的预测结果的Code-plot_loss+sample.py.机器学习版本控制:当训练一个模型时,会有很多参数,某些可能是有用的.我们可以说的是,我们还没有找到一种完美的方法,除了频繁地写明网络配置.(自动保存kerascallback的最佳模型).Debugging工具:完成以上的工作后,我们可以对每一步的工作进行检测,但不是无缝隙的(seamlessly).因此,最终的一步是结合以上的步骤,创建Jupyternotebook,以便于我们无缝的加载每个模型和每张图片,快速验证结果.基于这种方式,我们可以简单地比较不同模型的区别,错误和其它问题.

  69. 下面是模型提升的例子,通过参数调整和额外的训练:

  70. 保存最佳的验证IoU模型(Keras提供了很好的callback以便于进行模型保存).

  71. callbacks=[keras.callbacks.ModelCheckpoint(hist_model,verbose=1,save_best_only=True,monitor=’val_IOU_calc_loss’),plot_losses]

  72. 除了正常的代码错误调试,我们注意到模型错误是可预测的,比如截断的肢体部分,大分割区域的小区域(Bites),不必要的连续的扩展肢体部分,较差的灯光,较差的质量,等等其它细节.这些问题某些可以通过添加不同数据集的特定图片来解决,但仍有一些十分具有挑战性.为了提高下一个版本模型的结果,我们将对困难图片进行扩增.

  73. 我们已经在上面提到数据集存在的问题,现在说一下模型问题:

  74. 服装:非常深或非常浅的衣服某些情况下往往被当作背景;Bites:在好的分割结果中,有一些零星的错误小区域Figure8.服装和bite光照:COCOdataset中,较差的光照和不清晰的图片是比较普遍.除了模型要处理的标准困难问题外,我们还没有准备更难分割的图片.这个问题可以通过扩增更多数据来提升效果.Figure9.差光照的图片

  75. 6.未来的改进方向

  76. 6.1进一步训练

  77. 我们的模型结果是在训练数据集上训练了大约300epoches后得到的.此后,模型开始过拟合.我们已经达到接近于发行的分割结果,因此,还没有进一步的应用数据增广.

  78. 模型训练采用的是224*224尺寸的输入图片.进一步的训练,基于更多的数据,更大的图片尺寸(原始的COCOdataset图片尺寸为600*1000),可能提升分割效果.

  79. 6.2CRF和其它后处理方法

  80. 在某些阶段,我们的分割结果在边缘存在一些噪声,一种能够改善的方法是CRF.CRF的使用方法参考Post.

  81. 然而,CRF对于我们的工作不是帮助很大的,可能是由于CRF一般对于结果更coarser的情况有效.

  82. 6.3Matting

  83. 基于现在的分割结果,仍是不完美的.头发,衣服细节,树枝等其它精细objects不能被完美分割.即使背景分割中不包含这些子类.对于这些精细化分割,被成为Matting,也是具有挑战性的工作.

  84. 下面是NVIDIAconference上的Matting的一个例子:Figure10.Matting例子——输入包括trimap

  85. Matting任务与其它的图像相关任务是不同的,因为其输入不仅包括图片,还需要其trimap——图像边缘的轮廓,可以认为其是一个半监督问题.

  86. 我们尝试了一点Matting实验,采用分割结果作为trimap,但没有取得明显效果提升.

  87. 另一个问题是,缺少适当的数据集来进行训练.

  88. 7.总结

  89. 如开始所说,我们的目标是,设计一个深度学习产品.从Alion’sPosts可知,部署变得越来越简单快速.但模型的训练是复杂的.网络训练需要仔细的设计与计划,调试,以及结果记录.

  90. 另外,研究与尝试新事物、训练和提升之间的工作,是难以平衡的.由于我们采用深度学习技术,我们经常能感觉到,最佳的模型,或者我们需要的精确模型,一直就在附近,只需要google搜索一下或者相关的文章就可以让我们找到它.但是,实际上,效果的提升来自对我们最初模型的一点一点的“挤压(squeezing)”.正如上面说的,我们仍有很大的空间来提升最初模型的精度.


相关问题推荐

  • 回答 20

    选对培训机构比较重要,还有就是选择的时候看一下自己适合哪种风格的讲课方式,这个也很重要。因为现在5G时代来临,人工智能绝对是一个发展的大趋势,如果你自己空余时间又比较多的话,其实可以报一个辅导班,学习学习一些基本的东西,毕竟多学点总是没有坏处...

  • 回答 3

    深度学习是近几年人工智能领域的主要研究方向。深度学习的主要任务是通过构建深度卷积神经网络(Deep Neural Network,DNN)和采用大量样本数据作为输入,人们最终会得到一个具有强大分析能力和识别能力的模型,该模型包含了DNN的构成参数以应用于实际工作。...

  • 回答 3

    AI深度学习课程是用于建立、模拟人脑进行分析学习的神经网络,并模仿人脑的机制来解释数据的一种机器学习技术,主要应用于图像识别、语音识别、自然语言处理等领域。学完可以从事深度学习工程师、机器学习工程师、人工智能工程师、高级算法工程师、高级算法工...

  • 回答 16

    算法,数据相关的适合做人工智能

  • 回答 28

    人工智能取代的行业,一定有如下几个特征:1、大量重复型。2、逻辑性比较强。3、数据库依赖型。像司机,咨询,教育,医生,会计,律师助理,工程师,码农等,都是容易被取代的行业。当然,这都是强人工智能以后会发生的事,现在还是弱人工智能的时代,想进入...

  • 回答 9

    如果你是自己学着玩,提升自己的话,高中毕业都可以。如果是冲着AI算法岗或者科研一席之地,至少211硕士。具体可以亲身体验一下今年算法岗秋招。

  • 回答 9

    可以,未来的人工智能发展深度学习必然是现在大型机器生产科研必备的,证书的话某个培训好像有这个中科院的证书,具体你去百度吧

  • 回答 8

    我觉得就是人工智能的课程,现在家具都是智能家居了。这一块发展一定很好

  • 回答 3

    对于sgd算法而言,batch size太大太小都不好,太小的话训练不稳定,计算效率低;太大的话收敛速度慢,需要仔细调节一下。以2的倍数调节,例如32,64,128等

  • 回答 1

    在terminal中输入$wolf@wolf:~/Downloads/gitclonehttps://github.com/Tencent/ncnn cd切换到NCNN目录***这步很重要,这时候需要修改ncnn的root目录下的CMakeLists.txt文件,需要将倒数几行的add_subdirectory(examples),取消注释,这样就是默认编译example...

  • 回答 5

    人工智能的话其实到现在来说已经慢慢趋于成熟,学的话首先是一线城市,学出来好就业,还有就是薪资也高

  • 回答 3

    画个train and test error VS 训练数据量(training set size) 的learningcurve应该会更加直观了。可以找个简单的数据集,比如说handwritten digits或者什么的,分别用神经网络和决策树或者knn做出这个learningcurve。你会看到如果用一个决策树去解决这个问题...

  • 回答 2

    共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。     一幅图象的灰度共生矩阵能反映出图象灰度关于...

没有解决我的问题,去提问