深度学习| Deep Snake环境设置+训练+猜测评估(超全面) ...

打印 上一主题 下一主题

主题 1969|帖子 1969|积分 5907

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
媒介:Deep Snake是一个比较经典结合了轮廓的深度学习分割方法,但是去实际运行Deep Snake项目标时候碰到了很多问题。这篇文章把Deep Snake从环境设置、训练到猜测评估,都做了详细的教程,还补充了一些相干的知识点。

  
Deep Snake信息

文章:https://arxiv.org/abs/2001.01629
代码:https://github.com/zju3dv/snake
数据集

Deep Snake提供了三种数据集格式进行训练,分别是Cityscapes、COCO 和SBD 。
我原本数据的label都是mask掩膜数据,选择针对COCO进行转换。因为转COCO数据是三个内里我认为比较方便简朴的。
COCO

既然要转成COCO数据集,那肯定要对COCO数据集有些明白。
COCO作用
COCO数据集,根据用途不同, 数据集分为目标检测, 目标分割( 对应的标注信息是 “bbox” 和 “segmentation”), 图像语义明白(“captions”), 人体关节点(“keypoints”)。
COCO标注格式
COCO的标注文件和之前mask作为标注文件不同。
因为我是做分割的,之前常用的分割数据都是原图作为input,然后mask数据作为label的。
但是COCO数据的特点,就是label标注文件是json构成的。
COCO的标注json文件通常会放在annotations文件夹下面。
COCO的标注json文件,包罗几个部门:


  • info:存放数据集的根本信息,比方年份、版本、描述、贡献者、URL和创建日期;
  • licenses:数据集的允许信息,比方ID、名称和URL;
  • images:包含多个image,每个image包含输入图片的ID、宽度、高度、文件名、允许证ID、Flickr URL、COCO URL和获取日期;
  • annotations:包含多个标注信息(label),每个标注包含ID、图像ID、类别ID、界限框(bbox)、区域面积(area)、分割信息(segmentation)和是否拥挤(iscrowd)标志;
  • categories:包含多个类别的信息,每个类别包含ID、名称和超类别;
总结来说,主要关注的就是images、annotations和categories。
直接去看COCO格式的话,images和categories都很好明白,有多少张图片和类别就照着写,但是annotations须要更详细明白一下。
  1. "annotations": [
  2.         {
  3.    "segmentation": [[510.66,423.01,511.72,420.03,510.45,416.0,510...,423.01]],# 第一个点x,y坐标;第n个点x,y坐标;其精度均为小数点后两位
  4.          "area": 702.1057499999998,# 区域面积
  5.          "iscrowd": 0,
  6.          "image_id": 289343,# 对应图片ID
  7.          "bbox": [473.07,395.93,38.65,28.67],# 定位框,左上角的坐标和宽高度
  8.          "category_id": 18,# 类别ID
  9.          "id": 1768# 对象ID,因为每张图片不只有一个对象
  10.         },
复制代码
Mask->COCO代码

因为我用的是掩膜数据集,须要代码转为COCO数据集。Mask转COCO的代码网上有很多,我参考了这篇博客Mask图像转化成COCO数据,主要是通过第一方法代码修改mask轮廓为COCO格式。
下面是对参考的代码做出一些解释解释,各位可以根据自己需求进行修改。
这是一个两个类别的转换代码,主要知道怎么修改数据来源地址、种类、大小就可以了。
  1. import json
  2. import numpy as np
  3. from pycocotools import mask
  4. from skimage import measure
  5. import cv2
  6. import os
  7. import sys
  8. if sys.version_info[0] >= 3:
  9.     unicode = str
  10. __author__ = 'hcaesar'
  11. import io
  12. def maskToanno(ground_truth_binary_mask,ann_count,category_id):
  13.     fortran_ground_truth_binary_mask = np.asfortranarray(ground_truth_binary_mask)
  14.     encoded_ground_truth = mask.encode(fortran_ground_truth_binary_mask)
  15.     ground_truth_area = mask.area(encoded_ground_truth)
  16.     ground_truth_bounding_box = mask.toBbox(encoded_ground_truth)
  17.     contours = measure.find_contours(ground_truth_binary_mask, 0.5)
  18.     annotation = {
  19.    
  20.         "segmentation": [],
  21.         "area": ground_truth_area.tolist(),
  22.         "iscrowd": 0,
  23.         "image_id": ann_count,
  24.         "bbox": ground_truth_bounding_box.tolist(),
  25.         "category_id": category_id,
  26.         "id": ann_count
  27.     }
  28.     for contour in contours:
  29.         contour = np.flip(contour, axis=1)
  30.         segmentation = contour.ravel().tolist()
  31.         annotation["segmentation"].append(segmentation)
  32.     return annotation
  33. # 针对两个类别分别是block和mouse
  34. # 如果你只有一个类别的话,可以删掉其中一个种类,把剩下一个改成自己的;注意后面生成json也要做相应的修改
  35. block_mask_path="D:\\6Ddataset\\XieSegmentation\\1block\\block_mask_thresh"# mask图像地址
  36. mouse_mask_path="D:\\6Ddataset\\XieSegmentation\\2mouse\\mouse_mask_thresh"
  37. block_mask_image_files=os.listdir(block_mask_path)
  38. mouse_mask_image_files=os.listdir(mouse_mask_path)
  39. jsonPath="blockmouseAll.json&#
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表