zoukankan      html  css  js  c++  java
  • 跑通SOLOV1-V2实例分割代码,并训练自己的数据集

    SOLOv 2:实例分割(动态、更快、更强)

    论文链接:https://arxiv.org/abs/1912.04488

    论文解读博文

    https://blog.csdn.net/sanshibayuan/article/details/103895058

    就目前来讲,很多实例分割算法存在的问题弊端主要是:

    • 速度太慢了,比如Maskrcnn,虽然声名远扬,但是要把它部署到realtime,还是很困难的;

    • 精度不够,比如Yolact,即便是Yolact++,其精度其实也只能说差强人意,连MaskRCNN都比不上的实力分割,速度再快,也会限制它的使用场景;

    • BlendMask,CenterMask这类的算法,都差不多,基于FCOS构建,本质上没啥区别,还是和MaskRCNN整体流程差不多,只不过检测器变了而已,对于部署来说依旧很麻烦。

    对于许多二阶段的实例分割算法,转换到另一个推理平台很麻烦,主要是这里面存在RPN的一些操作,即便是类似于CenterMask这样的模型,也需要先获取box,然后经过ROIAlign和ROIPool来得到需要的mask,这个过程不仅计算繁琐,而且很难导出到我们想要的模型格式,比如ONNX就不支持这里面的很多op。SOLOV2的性能似乎比maskrcnn差不多,推理速度只要一半,并且速度和精确度都超过了BlendMask。

    通过改进,SOLOv2的AP性能比SOLOv1高出1.9%,而速度提高了33%。Res-50-FPN SOLOv2在具有挑战性的MS-COCO数据集上以18 FPS的速度实现38.8%的掩模AP,在单个V100 GPU卡上进行评估。一个轻量级版本的SOLOv2以31.3FPS的速度执行,产生37.1%的掩模AP。有趣的是,虽然本文的方法彻底消除了bounding box的概念,但是本文的bounding box的副产品,即直接将预测的掩模转换为bounding box,产生42.4%的AP用于bounding box对象检测,它甚至超过了许多最先进、高度工程化的目标检测方法。

    图片

     

    跑通SOLOV1-V2实例分割代码

     

    系统平台:Ubuntu18.04  

    硬件平台:RTX2080 super

    cuda和cudnn版本:cuda10.0   cudnn:7.5.6

    pytorch版本:pytorch1.2.0

    环境安装:

    图片

    完成上面操作就可以跑demo了,但是solo只给了单张图片的预测,摄像头预测是无法运行的,下面的代码是摄像头实时检测的代码,大家可以试一下:

    图片

    图片


    代码 获取方式:

    分享本文到朋友圈

    关注微信公众号 datayx  然后回复 实例分割 即可获取。

    AI项目体验地址 https://loveai.tech

    店铺地址:

    https://shop585613237.taobao.com

    图片

     

    数据集准备:

    我们标注数据集使用的是labelme来标注,每一个图片会生成一个json标注文件,标注完成后我们需要将我们所有json文件合并为一个json文件。代码如下:

    图片

    转换完之后,我们需要生成如下几个文件夹。annotations存储的是我们上面转换的json文件。train2017和val2017存储的是训练和测试的图片。

    图片

    创建我们自己的数据集。在SOLO/mmdet/datasets文件夹下面创建我们自己的数据集,我创建的是pig_data.py文件:

    图片

    修改SOLO/mmdet/datasets/__init__.py文件,将我们的数据集加进去。

    图片

    修改训练文件:

    模型训练文件在SOLO/configs/solo文件夹下,我修改的是solo_r50_fpn_8gpu_3x.py。你想要训练哪个就修改哪个。

    图片

    图片

    图片

    图片

    这样就可以完成solo训练自己的数据集了,经过测试分割效果很出色,边缘信息也比较好。

    图片

    机器学习算法AI大数据技术

     搜索公众号添加: datanlp

    图片

    长按图片,识别二维码

     

  • 相关阅读:
    C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
    C语言十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方
    pycharm的注册码,所有版本
    无法链接glew的解决办法-编译开源库出现: error LNK2001: 无法解析的外部符号
    删除文件是遇到“拒绝访问”的解决方法
    基类的析构函数写成virtual虚析构函数
    C++语言定义的标准转换
    VC中C++数值范围的确定
    SCI投稿过程总结、投稿状态解析、拒稿后对策及接受后期相关问答
    STL其他--<tuple>用法【C11】
  • 原文地址:https://www.cnblogs.com/shuimuqingyang/p/14808201.html
Copyright © 2011-2022 走看看