1

利用闪电和冰视探测撞击云图

 2 years ago
source link: https://panchuang.net/2021/10/12/%e5%88%a9%e7%94%a8%e9%97%aa%e7%94%b5%e5%92%8c%e5%86%b0%e8%a7%86%e6%8e%a2%e6%b5%8b%e6%92%9e%e5%87%bb%e4%ba%91%e5%9b%be/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

目标检测是一项计算机视觉任务,旨在对场景或图像中的单个目标进行检测和分类。目标检测有多种模型体系结构,但最常用的两种是区域建议(如快速RCNN)和单次检测(如SSD、YOLO)。

Lightning Flash团队最近发布了一个与IceVision对象检测库的新的令人兴奋的集成,支持数十个新的最先进的主干,这些主干可以进行微调,只需几行代码就可以进行推理。Lightning Flash IceVision

我们参加了Kaggle:COVID19检测/分类挑战赛,展示了新的集成,它展示了来自6000多名患者的现实和具有挑战性的CT扫描数据集。Kaggle: COVID19 detection/classification

使用Lightning Flash⚡️检查我们的kaggle内核-COVID检测COVID detection with Lightning Flash ⚡️

COVID检测挑战赛

最近的Kaggle:COVID19检测/分类旨在促进医疗筛查,并最终帮助医学专家/医生做出诊断。挑战在于图像分类/目标检测的混合任务。首先,您需要确定给定的CT扫描是否有四种异常中的一种,然后提供一组边界框来指示异常存在的位置,以证明诊断是合理的。Kaggle: COVID19 detection/classification abnormalities abnormalities

虽然该任务被描述为检测和分类的混合任务,但是它也可以被建模为传统的目标检测问题,其中图像类别是由检测到的异常的大多数类别的集合来确定的。abnormalities

一项研究代表了一名独特的匿名患者,他只进行了一次计算机断层扫描(CT)。单个DICOM图像应代表每次扫描。重要的是要注意,一些带注释的图像被意外地贴上了不完整的标签。这些图像和它们的注释后来被复制和修复,正如本帖子中所讨论的那样。作为挑战的一部分,在训练之前,需要从数据集中过滤出不完整的注释和重复的图像。Computed Tomography (CT) scan discussed

注释存储在两个单独的CSV表中。第一个表包含表示每个图像的异常类别的一次性编码,第二个表包含图像中的所有边界框(如果有的话)的列表。

加载带有注释的DICOM图像

CT扫描在DICOM文件中提供,包括带有一些元数据的标题和压缩的图像位图。DICOM

要加载图像数据,我们使用pydicom包,请参阅以下示例代码如何加载:pydicom sample code how to do it:

加载图像后,我们按研究ID合并了两个注释表。上面的代码显示了几个示例,扫描每个类并绘制边界框(如果它们在元数据中可用):

不出所料,负片扫描中没有边界框。更有趣的是,大多数阳性扫描在每次扫描中都包含一个以上的检测。

关于检测与标记关系的补充观察

让我们从计数带注释的边界框的角度来看一下数据集。正如你可以从每个班级的样本中看到的那样,有一些阳性病例没有检测到任何冠状病毒。

下图显示了每个给定类的每个图像中有多少个边界框。最终,此观察结果可用于最终的聚合启发式。

下面的饼图显示了带注释的异常在不同研究中的分布。正如预期的那样,没有包含边界框注释的负面研究。

然而,5%的包含异常的图像缺少边界框注释。这意味着,虽然我们可以使用对象检测来估计给定的图像类别,但这些噪声图像将使使用这种方法对任务进行完美建模具有挑战性,这解释了为什么许多人使用混合图像分类/对象检测方法。

带EfficientDet的闪存基准

Flash是一个人工智能工厂,用于快速原型、基线、微调和深度学习,以解决商业和科学问题。它建立在强大的火炬闪电库之上,以便于大规模训练。Flash Pytorch Lightning

在Flash对象检测中,使用来自模型架构/组合的两个关键参数Backbone和Head来初始化模型:

  • 在目标检测模型中,使用诸如ResNet50、EffieientNet等骨干预训练分类网络进行特征提取。
  • 头部定义诸如FASTER-RCNN、RetinaNet等对象检测器的体系结构。

让我们看看EfficientDet Head的模式,以便使用EfficientNet主干更好地理解这些论点。EfficientNet

使用Flash,我们只需要几行代码就可以对竞争数据集上的EfficientDet等最先进的方法进行微调。您只需将Kagle对象检测标签转换为COCO格式,设置模型和训练参数,然后启动Training…EfficientDet

1.将数据集转换为COCO格式

在实践中使用完美注释的情况非常少见,而且通常只在标准/基准数据集中出现。IceVision和Flash集成目前使用的是COCO数据集格式。COCO格式由一个包含原始图像的文件夹和一个包含以下元数据的JSON批注文件组成:COCO dataset format.

在CoCo中,边框由图像中右上角的坐标以及边框的宽度和高度组成。我们需要编写一个自定义脚本来完成从竞争注释到COCO格式的转换。这些步骤在提供的笔记本中进行了描述,代码可以在提供的存储库中找到。notebook repository

2.创建DataModule

在Flash中,from_coco方法加载在上一步中创建的可可图像和批注文件。我们可以提供abatch_size来充分利用我们的GPU,并提供image_size来为我们的模型调整图像的大小。

3.构建任务

要构建对象检测任务,我们选择模型主干。在此示例中,我们使用具有EfficientNet D5主干的最先进的EfficientDet。我们通过实验将学习速率设置为1e-5,我们可以使用超参数搜索来优化此值。

4.创建教练器并微调模型

Flash的训练器继承了闪电侠的训练器,使我们能够有效地利用我们所了解和喜爱的所有训练器旗帜。为了进行培训,我们使用了方法finetune,它采用一个参数策略来配置微调过程。例如,下面的冻结_解冻策略冻结前10个时期的主干,以仅更新头部,然后将训练扩展到整个模型。

使用内置的Tensorboard记录仪,我们可以实时观察训练过程,并看到训练损失是如何减少的。

在训练结束时,我们保存微调后的模型,以便进行推理。

5.负荷模型和运行预测

现在我们有了一个训练有素的模特。现在是评估我们模型性能的时候了。下面的代码显示了一个简单的用例,说明Flash如何从文件加载预先训练好的模型并对测试数据集进行预测:

你就知道了;在帖子里,你学会了如何

敬请关注以下闪电与闪电故事!

Jirka Borovec拥有布拉格CTU的计算机视觉博士学位。他已经在几家IT初创公司和公司从事机器学习和数据科学工作了几年。他喜欢探索有趣的世界问题,并用最先进的技术解决它们,并开发开源项目。Jirka Borovec

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/10/12/%e5%88%a9%e7%94%a8%e9%97%aa%e7%94%b5%e5%92%8c%e5%86%b0%e8%a7%86%e6%8e%a2%e6%b5%8b%e6%92%9e%e5%87%bb%e4%ba%91%e5%9b%be/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK