【问题标题】:Exporting Yolov5 bboxes to Pascal format将 Yolov5 bbox 导出为 Pascal 格式
【发布时间】:2021-12-27 20:17:41
【问题描述】:

之前已经问过一些类似的样式问题(12)但是,没有人提到新的Yolov5 样式注释。

是否有一个简单的函数可以接收 规范化 Yolov5 边界框,例如:-

test = [0.436523 0.535156 0.587891 0.484375]

def some_function(test):
    ...
    return pascal_coords

并以 Pascal-VOC 格式返回?

我已经尝试过很多在线脚本——比如https://dbuscombe-usgs.github.io/MLMONDAYS/blog/2020/08/17/blog-posthttps://blog.roboflow.com/how-to-convert-annotations-from-pascal-voc-to-yolo-darknet/

但他们的目标是完整的数据集转换,包括xml,有些不接受标准化框

这是格式:-

Yolov5 [<x-center> <y-center> <width> <height>]

|---> Converted to <-----|

Pascal VOC [x-top-left, y-top-left, x-bottom-right, y-bottom-right]

我只是想要转换后的边界框:) 蒂亚!

【问题讨论】:

    标签: annotations object-detection data-conversion yolov5


    【解决方案1】:

    没有直接的方法可以将标准化的 Yolo 格式转换为另一种格式,如 Pascal VOC,因为您需要知道图像的大小才能进行转换。 (就像您首先需要知道图像的大小才能将其转换为规范化的 yolo 格式一样。)您还需要提供一些映射来将类号转换为类名。

    我正在开发一个 Python 包来简化这些类型的转换,称为 PyLabel。我有一个示例笔记本,可以将 Yolo v5 注释转换为 VOC 格式https://github.com/pylabel-project/samples/blob/main/yolo2voc.ipynb。您可以使用 this link 在 Colab 中打开它。

    核心代码是这样的:

    from pylabel import importer
    dataset = importer.ImportYoloV5(path=path_to_annotations, path_to_images=path_to_images)
    dataset.export.ExportToVoc(output_path=output_path)
    
    

    希望对您有所帮助。如果您有任何反馈或需要帮助,请随时与我联系。

    【讨论】:

    • xmin,ymix,xmax,ymax 不使用此代码存储为整数。
    • 嗨@curious_mind。感谢您报告。我可能可以快速解决这个问题。将查看并报告。
    • @curious_mind。我修复了这个问题并发布了一个新版本 v0.1.25,它以 int 形式导出。执行 pip install pylabel>=0.1.25 以确保您获得最新版本。我好奇。什么框架正在使用使用过的 VOC 格式?我想将它添加到我的测试中,以确保我的输出文件与该框架一起使用。再次感谢您的报告。
    【解决方案2】:

    经过一番挖掘,我在@tensorturtle 的大量谷歌搜索https://github.com/tensorturtle/rebox 下发现了这个很棒的小包。感谢作者提供了如此有用且易于使用的存储库!

    它提供了一种快速转换 bbox 以及计算 IOU 等基本操作的方法。真的很可爱的工作:)

    【讨论】:

      【解决方案3】:

      这是我在将 Yolo 转换为 Pascal_VOC 时使用的代码 sn-p。 Yolo 使用标准化坐标,因此拥有图像的高度和宽度很重要。否则无法计算回来。

      这是我的sn-p:

      # Convert Yolo bb to Pascal_voc bb
      def yolo_to_pascal_voc(x_center, y_center, w, h,  image_w, image_h):
          w = w * image_w
          h = h * image_h
          x1 = ((2 * x_center * image_w) - w)/2
          y1 = ((2 * y_center * image_h) - h)/2
          x2 = x1 + w
          y2 = y1 + h
          return [x1, y1, x2, y2]
      

      对于任何其他对象检测格式转换,您可以查看我在 Medium 上的博文:https://christianbernecker.medium.com/convert-bounding-boxes-from-coco-to-pascal-voc-to-yolo-and-back-660dc6178742

      玩得开心!

      【讨论】:

        猜你喜欢
        • 2018-04-18
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 2022-01-27
        • 2021-10-31
        • 2012-07-23
        • 1970-01-01
        相关资源
        最近更新 更多