【深度学习】【YOLACT】代码解读一

本文详细介绍了YOLACT深度学习模型的代码运行流程,包括数据集配置、验证过程的三种评估方法和训练步骤。在验证阶段,文章讨论了如何使用自定义评估函数以及设置分数阈值。此外,还探讨了模型的网络架构,特别是在单GPU环境下FPN模块的实现细节。
摘要由CSDN通过智能技术生成

代码运行

根据github所给指导一步一步进行,如果曾经下载好coco数据集,在data/config.py108行以下修改数据集的目录,并且在run_coco_eval.py16行修改验证集annotation文件的路径。

验证

有以下三种评估方式:
first

python eval.py --trained_model=weights/yolact_base_54_800000.pth

在这里插入图片描述
以上命令不使用coco数据集自带的模型评估COCOEval,而是使用自己定义的评估函数。
second

python eval.py --trained_model=weights/yolact_base_54_800000.pth --output_coco_json
python run_coco_eval.py

首先通过第一条命令生成’./results/bbox_detections.json’ and ‘./results/mask_detections.json’ 两个文件,第一个文件保存的是网络输出的预测框(坐标、类别及分数),然后通过第二条命令利用COCOEval来评估模型,可以看出和第一条命令的评估结果相差无几。
在这里插入图片描述
third

python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --display

上述命令可以自定义分数阈值,凡是低于该阈值的都会被过滤,其次也可以选取前多少个作为要评估的输出。

处理图片

# 处理指定图片,通过plt显示结果
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png

# 处理一张图片,结果存入另一张照片
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=input_image.png:output_image.png

#处理一个文件夹中所有图片
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --images=path/to/input/folder:path/to/output/folder

在这里插入图片描述

训练

根据指导下载好权重并放到weights/文件夹下。

# 默认batchsize是8,resnet101_backbone
python train.py --config=yolact_base_config

在这里插入图片描述

代码解读

网络架构

<bound method Module.named_parameters of Yolact(
  (backbone): ResNetBackbone(
    (layers): ModuleList(
      (0): Sequential( # C2
        (0): Bottleneck(
          (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu): ReLU(inplace)
          (downsample): Sequential(
            (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
            (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          )
        )
        (1): Bottleneck(
          (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu): ReLU(inplace)
        )
        (2): Bottleneck(
          (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu): ReLU(inplace)
        )
      )
      (1): Sequential( # C3
        (0): Bottleneck(
          (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
          (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu): ReLU(inplace)
          (downsample): Sequential(
            (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
            (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          )
        )
        (1): Bottleneck( 
          (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (relu): ReLU(inplace)
        )
        (2): Bottleneck(
          (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
          (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
          (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
          (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True
  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
YOLACT(You Only Look At CoefficienTs)是一个用于实时目标检测和实例分割的深度学习模型。它基于Mask R-CNN,并使用特征金字塔网络(FPN)和预测系数的方法来实现高效的目标检测和实例分割。 YOLACT的源代码是开放的,你可以在GitHub上找到它的详细实现。我将简要解释一下代码的主要部分: 1. 数据加载和预处理:YOLACT代码中提供了数据加载和预处理的功能,包括读取图像和标签数据,将图像和标签数据转换为模型所需的张量格式。 2. 构建模型:YOLACT使用ResNet作为主干网络,并在其基础上构建特征金字塔网络(FPN)来提取多尺度特征。在FPN之后,YOLACT引入了一个预测头部来生成目标分类、边界框回归和分割掩码预测。 3. 损失函数:YOLACT使用多个损失函数来训练模型。这些损失函数包括目标分类损失、边界框回归损失和MaskIoU损失,用于实例分割。 4. 训练过程:YOLACT通过迭代数据集中的样本来训练模型。在每次迭代中,它会计算模型的损失并更新模型的参数。 5. 推理过程:在推理过程中,YOLACT将输入图像传递给模型,然后根据模型的预测生成目标的边界框、类别和分割掩码。 总的来说,YOLACT是一个用于实时目标检测和实例分割的强大模型,它结合了ResNet主干网络、特征金字塔网络和预测系数的方法。通过阅读代码,你可以深入了解YOLACT的实现细节,并根据需要进行修改和扩展。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值