YOLACT/YOLACT++安装测试与微调训练


简介

YOLACT / YOLACT++ 是在one-stage型检测器上添加一个mask分支来达到实例分割.

论文地址:

优势:

  1. 速度快,因为one-stage;
  2. mask质量高,因为不包含repooling类操作;
  3. 普适性强,这种生成原型mask和mask系数的思路可以应用在目前很多留下的检测器上。

性能对比:
与其他一些现有的实例分割模型在COCO数据集上的表现对比如下图所示
在这里插入图片描述

结果展示:
在这里插入图片描述

YOLACT 安装与测试

安装:

  • github开源地址: https://github.com/dbolya/yolact

  • 安装依赖: Pytorch 1.0.1 (or higher), TorchVision, cython, opencv-python, pillow , matplotlib

  • 由于pycocotools 并不支持Windows系统, pip无法直接安装, 需要折腾一下 查看教程:

    • 下载 Visual C++ 2015 Build Tools, 默认路径安装
    • 执行pip命令: pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI github访问不稳定时, 多试几次
  • 进入项目目录.\yolact-master\

  • 下载 预训练权重.\yolact-master\weights\文件夹

图像输入测试:

  • 将自己的测试图像放在该目录下.\yolact-master\test.jpg
  • 执行命令
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=test.jpg

在这里插入图片描述
webcam测试:
官方提供了测试api, 但我这里未能运行
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=0

opencv开启摄像头测试:

  • 完整代码已经上传: 点击下载 删除了命令参数输入与解析代码, 可以直接运行
  • 关键代码如下: 使用opencv打开摄像头, 并显示检测结果
def evalimage(net: Yolact, camera_index=0):
    camera = cv.VideoCapture(camera_index, cv.CAP_DSHOW)
    if not camera.isOpened():
        print("摄像头开启失败!")
    while True:
        ret, frame = camera.read()
        if not ret:
            continue
        frame = cv.flip(frame, 1)
        image = torch.from_numpy(frame).cuda().float()
        batch = FastBaseTransform()(image.unsqueeze(0))
        preds = net(batch)
        img_numpy = prep_display(preds, image, None, None, undo_transform=False)
        cv.imshow("YOLACT", img_numpy)
        if cv.waitKey(1) == 27:
            break
    cv.destroyAllWindows()
    camera.release()
    return

运行结果如下:
在这里插入图片描述

YOLACT ++ 安装与测试

DCNv2 安装失败, 暂未解决…

YOLACT 重训练: 人体识别

参考:

目标: 调整coco数据集, 重新训练模型, 只对 Person 类进行识别

调整COCO数据集

Just open the COCO 2017 train and validation json annotations (data/coco/annotations) in python or something and in the annotations array, delete every annotation with category ID not equal to 1 (person). Then save these modified annotations files and set up a custom dataset as specified in the readme.

代码如下:

import json

input_file = "instances_val2017.json"
output_file = "instances_val2017_person.json"
with open(input_file, 'r') as f:
    coco = json.load(f)

# 删除不相关的类别标注
annotation = coco['annotations']
del_list = []
for i, item in enumerate(annotation):
    if item["category_id"] != 1:
        del_list.append(i)
print(f"需要删除{len(del_list)}条不相关条目")
print("删除前的标注条目: ", len(coco['annotations']))
for i in sorted(del_list, reverse=True):
    del annotation[i]
    print("\r正在删除不相关条目", i, end="")
print("\n删除后的标注条目: ", len(coco['annotations']))

# 删除不相关的类别
del coco['categories'][1:]
print("删除后的类别数: ", len(coco['categories']))

# 保存
if len(del_list):
    print("正在写入Json文件...", end="")
    with open(output_file, 'w') as f:
        json.dump(coco, f, ensure_ascii=False)
    print("done!")

微调训练

只需要在config.py构造person数据集和配置参数

coco2017_dataset_person = dataset_base.copy({
    'name': 'COCO 2017 Person',
    'train_images': '你的路径/COCO2017/train2017',
    'train_info': '你的路径/COCO2017/annotations/instances_train2017_person.json',
    'valid_images': '你的路径/COCO2017/val2017',
    'valid_info': '你的路径/COCO2017/annotations/instances_val2017_person.json',
    'class_names': ('person',),
})
yolact_coco_person_config = yolact_base_config.copy({
    'name': 'yolact_coco_person',
    'dataset': coco2017_dataset_person,
    'num_classes': len(coco2017_dataset_person.class_names) + 1,
    # Training params
    'lr_steps': (200000, 300000, 330000, 380000),
    'max_iter': 400000,
})

修改模型文件yolact.py
在这里插入图片描述

调用训练命令:

python train.py --config=yolact_coco_person_config --resume=weights/yolact_base_54_800000.pth --start_iter=0

完整项目及微调模型见 https://download.csdn.net/download/Augurlee/12099955 可直接用于人体检测与分割

  • 4
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 39
    评论
好的,这是一个很有趣的问题!BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练模型,它在自然语言处理领域得到了广泛的应用。对于文本分类任务,我们可以使用BERT预训练模型来提取文本的特征表示,并将这些表示作为输入,通过全连接层进行分类。具体的步骤如下: 1. 下载预训练的BERT模型,在此模型上进行微调。可以选择使用已经训练好的模型,也可以对自己的数据进行微调。 2. 对于每一个输入文本,需要进行一些预处理步骤。首先,将文本转化为标记化的文本,即将每个单词或子单词转化为一个唯一的标记。然后,将每个标记转化为对应的标记ID,并添加一些特殊的标记,如[CLS]和[SEP]。 3. 将标记化的文本输入到BERT模型中,获取每个标记的特征表示。对于分类任务,通常使用最后一个隐藏层的输出,即[CLS]标记所对应的特征表示。 4. 将特征表示输入到一个全连接层中,进行分类。可以使用softmax函数将输出转化为类别概率。 5. 使用交叉熵损失函数进行训练,并根据验证集的表现进行调参。 6. 在测试阶段,输入文本到模型中,获取输出概率,选择概率最大的类别作为预测结果。 以上就是使用BERT预训练模型+微调进行文本分类的基本步骤。需要注意的是,由于BERT模型的复杂性,需要较大的计算资源和时间。同时,在微调阶段需要对超参数进行调参,以达到最优的性能。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值