专栏首页相约机器人在自己的数据集上训练TensorFlow更快的R-CNN对象检测模型

在自己的数据集上训练TensorFlow更快的R-CNN对象检测模型

作者 | Joseph Nelson

来源 | Medium

编辑 | 代码医生团队

按照本教程,只需要更改两行代码即可将对象检测模型训练到自己的数据集中。

计算机视觉正在彻底改变医学成像。算法正在帮助医生识别可能错过的十分之一的癌症患者。甚至有早期迹象表明胸部扫描可有助于COVID-19的识别,这可能有助于确定哪些患者需要进行实验室检查。

在本示例中,将逐步使用TensorFlow对象检测API训练对象检测模型。尽管本教程介绍了如何在医学影像数据上训练模型,但只需进行很少的调整即可轻松将其适应于任何数据集。

在此处直接跳到Colab笔记本。

https://colab.research.google.com/drive/1U3fkRu6-hwjk7wWIpg-iylL2u5T9t7rr#scrollTo=uQCnYPVDrsgx

示例各节如下:

  • 介绍数据集
  • 准备图像和注释
  • 创建TFRecords和标签图
  • 训练模型
  • 模型推论

在整个教程中,将使用Roboflow这个工具,该工具可以大大简化数据准备和训练过程。Roboflow对于小型数据集是免费的,因此在此示例中,已经准备就绪!

https://roboflow.ai/

示例数据集:血细胞计数和检测(BCCD)

示例数据集是364张细胞种群图像和4888个标记,用于识别红细胞,白细胞和血小板。最初是两年前由comicad和akshaymaba开源的,可在网站上获得。(请注意,与原始版本相比,Roboflow上托管的版本在标签方面进行了较小的改进。)

https://public.roboflow.ai/

https://blog.roboflow.ai/releasing-an-improved-blood-count-and-cell-detection-dataset/

通过Roboflow Public截屏。

幸运的是,该数据集已预先标记,因此可以直接为模型准备图像和注释。

了解患者的红细胞,白细胞和血小板的存在及其比例是确定潜在疾病的关键。使医生能够提高识别上述血球计数的准确性和通量,可以大大改善数百万患者的医疗保健!

对于自定义数据,请考虑以自动方式从Google图像搜索中收集图像,并使用LabelImg之类的免费工具对其进行标记。

https://github.com/tzutalin/labelImg

准备图像和注释

从数据收集到模型训练直接导致次优结果。数据可能有问题。即使没有,应用图像增强也会扩展数据集并减少过度拟合。

准备用于物体检测的图像包括但不限于:

  • 验证注释正确(例如,所有注释在图像中都没有超出范围)
  • 确保图像的EXIF方向正确(即,图像在磁盘上的存储方式与在应用程序中的查看方式不同,请参见更多信息)
  • 调整图像大小并更新图像注释以匹配新尺寸的图像
  • 检查数据集的健康状况,例如其类平衡,图像大小和长宽比,并确定这些数据可能如何影响要执行的预处理和扩充
  • 可以改善模型性能的各种颜色校正,例如灰度和对比度调整

与表格数据类似,清理和扩充图像数据比模型中的体系结构更改更能改善最终模型的性能。

看一下数据集的“运行状况检查 ”:

https://public.roboflow.ai/object-detection/bccd/health

可以清楚地看到数据集中存在大量的类不平衡。数据集中显示的红细胞比白细胞或血小板要多得多,这可能会导致模型训练出现问题。根据问题背景,可能还要优先确定一个类别而不是另一个类别。

而且图像大小都相同,这使得调整尺寸的决定变得更加容易。

当检查对象(细胞和血小板)在图像中的分布方式时,看到红血球遍布各处,血小板有些散布在边缘,白血球聚集在图像中间。鉴于此在检测RBC和血小板时,可能不希望裁剪图像的边缘,但是如果仅检测白细胞,则边缘显得不太重要。还想检查训练数据集是否代表样本外图像。例如,能否期望白细胞通常集中在新收集的数据中?

对于自定义数据集,请按照此简单的分步指南将图像及其注释上载到Roboflow 。

https://blog.roboflow.ai/getting-started-with-roboflow/

创建TFRecords和标签图

将使用Faster R-CNN的TensorFlow实现(稍后对此进行更多说明),这意味着需要为TensorFlow生成TFRecords才能读取我们的图像及其标签。TFRecord是一种文件格式,其中包含图像及其注释。它在数据集级别进行了序列化,这意味着为训练集,验证集和测试集创建了一组记录。还需要创建一个label_map,它将标签名(RBC,WBC和血小板)映射为字典格式的数字。

坦白说,TFRecords有点麻烦。作为开发人员,时间应该集中在微调模型或使用模型的业务逻辑上,而不是编写冗余代码来生成文件格式。因此,将使用Roboflow只需单击几下即可生成TFRecords和label_map文件。

首先,访问将在此处使用的数据集:网站(请注意,使用的是特定版本的数据集。图像已调整为416x416。)

https://public.roboflow.ai/object-detection/bccd/1%E2%80%8B

接下来,点击“下载”。系统可能会提示使用电子邮件或GitHub创建免费帐户。

在下载时,可以以多种格式下载并在本地下载到您的计算机,或生成代码段。就目的而言,要生成TFRecord文件并创建一个下载代码段(而不是本地下载文件)。

导出数据集

将获得一个要复制的代码段。该代码段包含指向源图像,其标签以及分为训练,验证和测试集的标签图的链接。

对于自定义数据集,如果按照分步指南上传图像,则系统会提示创建训练有效的测试分割。还可以将数据集导出为所需的任何格式。

训练模型

将训练更快的R-CNN神经网络。更快的R-CNN是一个两阶段的对象检测器:首先,它识别感兴趣的区域,然后将这些区域传递给卷积神经网络。输出的特征图将传递到支持向量机(VSM)进行分类。计算预测边界框和地面真值边界框之间的回归。尽管有更快的R-CNN,但它的名称却比其他一些推理方法(例如YOLOv3或MobileNet)慢,但准确性更高。

更快的R-CNN是TensorFlow对象检测API默认提供的许多模型架构之一,其中包括预先训练的权重。这意味着将能够启动在COCO(上下文中的公共对象)上训练的模型并将其适应用例。

TensorFlow甚至在COCO数据集上提供了数十种预训练的模型架构。

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md#coco-trained-models

还将利用Google Colab进行计算,这是一种提供免费GPU的资源。将利用Google Colab免费提供GPU计算(长达12小时)。

Colab笔记本在这里。基于GitHub的仓库在这里。

https://colab.research.google.com/drive/1U3fkRu6-hwjk7wWIpg-iylL2u5T9t7rr#scrollTo=uQCnYPVDrsgx

https://github.com/roboflow-ai/tensorflow-object-detection-faster-rcnn

需要确保使用自己的Roboflow导出数据更新单元格要求的代码片段。除此之外,笔记本还是按原样训练的!

关于此笔记本电脑,需要注意以下几点:

  • 为了运行初始模型,训练步骤的数量限制为10,000。增加此值可改善结果,但请注意不要过度拟合!
  • 使用Faster R-CNN的模型配置文件在训练时包括两种类型的数据增强:随机裁剪以及随机水平和垂直翻转。
  • 模型配置文件的默认批处理大小为12,学习率为0.0004。根据训练结果进行调整。
  • 该笔记本包括TensorBoard的可选实现,能够实时监控模型的训练性能。

在使用BCCD的示例中,经过10,000个步骤的训练后,在TensorBoard中看到以下输出:

一般而言,损失在10,000个纪元后继续下降。

正在寻找合适的盒子,但是可能会过度拟合。

在这个例子中,应该考虑收集或生成更多的训练数据,并利用更多的数据扩充。

对于自定义数据集,只要将Roboflow导出链接更新为特定于数据集,这些步骤将基本相同。留意TensorBoard输出是否过拟合!

模型推论

在训练模型时,其拟合度存储在名为的目录中./fine_tuned_model。笔记本中有一些步骤可以保存该模型拟合-通过本地下载到计算机,或者通过连接到Google云端硬盘并在其中保存模型拟合。保存模型的拟合度不仅使能够在以后的生产中使用它,而且甚至可以通过加载最新的模型权重从上次中断的地方继续进行训练!

在这个特定的笔记本中,需要将原始图像添加到/ data / test目录。它包含TFRecord文件,但希望模型的原始(未标记)图像进行预测。

应该上传模型未见的测试图像。为此可以将原始测试图像从Roboflow下载到本地计算机,然后将这些图像添加到Colab Notebook中。

重新访问数据集下载页面:

https://public.roboflow.ai/object-detection/bccd/1

点击下载。对于格式,请选择COCO JSON并在本地下载到自己的计算机上。(实际上可以下载非TFRecord的任何格式,以将原始图像与注释格式分开!)

一旦在本地解压缩该文件,将看到测试目录原始图像:

现在在Colab笔记本中,展开左侧面板以显示测试文件夹:

右键单击“测试”文件夹,然后选择“上传”。现在可以从本地计算机中选择刚刚下载的所有图像!

在笔记本中,其余单元格将介绍如何加载创建的已保存,训练有素的模型,并在刚刚上传的图像上运行它们。

对于BCCD,输出如下所示:

模型在10,000个纪元后表现不错!

对于自定义数据集,此过程看起来非常相似。无需从BCCD下载图像,而是可以从自己的数据集中下载图像,并相应地重新上传它们。

下一步是什么

已经将对象检测模型训练为自定义数据集。

现在,在生产中使用此模型将引起确定生产环境将是一个问题。例如是要在移动应用程序中,通过远程服务器还是在Raspberry Pi上运行模型?模型的使用方式决定了保存和转换其格式的最佳方法。

根据问题,将这些资源视为下一步:转换为TFLite(对于Android和iPhone),转换为CoreML(对于iPhone应用程序),转换为在远程服务器上使用或部署到Raspberry Pi。

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren),作者:代码医生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据受限的Kaggle图像分类的最新获奖技术

    在本文中,将介绍用于课堂内Kaggle挑战的方法。花了大约两个星期的时间在挑战赛上,最终提交分数为0.97115,使在最终排行榜上排名第二。

    代码医生工作室
  • 250,000辆汽车–用于机器学习的十大免费车辆图像和视频数据集

    随着特斯拉自动驾驶汽车的兴起以及谷歌Waymo等项目的兴起,自动驾驶汽车行业似乎每年都在增长。无人驾驶汽车是计算机视觉的一个重要领域,具有众多应用程序,并且具有...

    代码医生工作室
  • 用fastai和Render进行皮肤癌图像分类

    在构建和部署模型以对皮肤病变图像进行分类时,将逐步进行。完成后用户可以将图像上传到网站,模型将对皮肤病变进行分类。

    代码医生工作室
  • 使用Tensorflow对象检测在安卓手机上“寻找”皮卡丘

    在TensorFlow的许多功能和工具中,隐藏着一个名为TensorFlow对象探测API(TensorFlow Object Detection API)的组...

    AiTechYun
  • 零基础可上手 | 手把手教你用Cloud AutoML做毒蜘蛛分类器

    近日,一名叫Matt Fraser的小哥用Cloud AutoML制作了一个分类器,能识别分类澳大利亚的各种毒蜘蛛。

    量子位
  • 轻松使用TensorFlow进行数据增强

    当我们没有大量不同的训练数据时,我们该怎么办?这是在TensorFlow中使用数据增强在模型训练期间执行内存中图像转换以帮助克服此数据障碍的快速介绍。

    计算机与AI
  • 用fastai和Render进行皮肤癌图像分类

    在构建和部署模型以对皮肤病变图像进行分类时,将逐步进行。完成后用户可以将图像上传到网站,模型将对皮肤病变进行分类。

    代码医生工作室
  • ORB-SLAM3 细读单目初始化过程(上)

    学习ORB-SLAM3单目视觉SLAM中,发现有很多知识点需要展开和深入,同时又需要对系统有整体的认知,为了强化记忆,记录该系列笔记,为自己图方便,也希望对大家...

    计算机视觉
  • ORB-SLAM3 细读单目初始化过程(上)

    学习ORB-SLAM3单目视觉SLAM中,发现有很多知识点需要展开和深入,同时又需要对系统有整体的认知,为了强化记忆,记录该系列笔记,为自己图方便,也希望对大家...

    3D视觉工坊
  • 屏下摄像头效果不好?微软:上神经网络,还原更真实的可视会议效果

    把摄像头放在屏幕下的想法并不新奇,在视频会议这个交流方式刚刚出现时,人们就意识到把摄像头和屏幕分设在不同位置让人交流起来非常别扭。眼神交流是沟通的关键因素,但如...

    机器之心

扫码关注云+社区

领取腾讯云代金券