目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练

将目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练。

import xml.etree.ElementTree as ET
import numpy as np
import os
import tensorflow as tf
from PIL import Image

classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
           "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return [x, y, w, h]

def convert_annotation(image_id):
    in_file = open(‘F:/xml/%s.xml‘%(image_id))

    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find(‘size‘)
    w = int(size.find(‘width‘).text)
    h = int(size.find(‘height‘).text)
    bboxes = []
    for i, obj in enumerate(root.iter(‘object‘)):
        if i > 29:
            break
        difficult = obj.find(‘difficult‘).text
        cls = obj.find(‘name‘).text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find(‘bndbox‘)
        b = (float(xmlbox.find(‘xmin‘).text), float(xmlbox.find(‘xmax‘).text), float(xmlbox.find(‘ymin‘).text), float(xmlbox.find(‘ymax‘).text))
        bb = convert((w, h), b) + [cls_id]
        bboxes.extend(bb)
    if len(bboxes) < 30*5:
        bboxes = bboxes + [0, 0, 0, 0, 0]*(30-int(len(bboxes)/5))

    return np.array(bboxes, dtype=np.float32).flatten().tolist()

def convert_img(image_id):
    image = Image.open(‘F:/snow leopard/test_im/%s.jpg‘ % (image_id))
    resized_image = image.resize((416, 416), Image.BICUBIC)
    image_data = np.array(resized_image, dtype=‘float32‘)/255
    img_raw = image_data.tobytes()
    return img_raw

filename = os.path.join(‘test‘+‘.tfrecords‘)
writer = tf.python_io.TFRecordWriter(filename)
# image_ids = open(‘F:/snow leopard/test_im/%s.txt‘ % (
#     year, year, image_set)).read().strip().split()

image_ids = os.listdir(‘F:/snow leopard/test_im/‘)
# print(filename)
for image_id in image_ids:
    print (image_id)
    image_id = image_id.split(‘.‘)[0]
    print (image_id)

    xywhc = convert_annotation(image_id)
    img_raw = convert_img(image_id)

    example = tf.train.Example(features=tf.train.Features(feature={
        ‘xywhc‘:
                tf.train.Feature(float_list=tf.train.FloatList(value=xywhc)),
        ‘img‘:
                tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw])),
        }))
    writer.write(example.SerializeToString())
writer.close()

  

Python读取文件夹下图片的两种方法:

import os
imagelist = os.listdir(‘./images/‘)      #读取images文件夹下所有文件的名字
import glob
imagelist= sorted(glob.glob(‘./images/‘ + ‘frame_*.png‘))      #读取带有相同关键字的图片名字,比上一中方法好

参考:

https://blog.csdn.net/CV_YOU/article/details/80778392

https://github.com/raytroop/YOLOv3_tf

原文地址:https://www.cnblogs.com/Allen-rg/p/10245729.html

时间: 2024-11-06 03:46:43

目标检测 的标注数据 .xml 转为 tfrecord 的格式用于 TensorFlow 训练的相关文章

第三十一节,使用谷歌Object Detection API进行目标检测

Object Detection API是谷歌开放的一个内部使用的物体识别系统.2016年 10月,该系统在COCO识别挑战中名列第一.它支持当前最佳的实物检测模型,能够在单个图像中定位和识别多个对象.该系统不仅用于谷歌于自身的产品和服务,还被推广至整个研究社区. 一.代码位置与内置的模型 1.Object Detection Object Detection模块的位置与slim的位置相近,同在github.com 中TensorFlow 的models\research目录下.类似slim,

分割数据集label转换为目标检测boundingbox

实现功能 将分割的label图转换为目标检测boundingbox标注文件(VOC格式). 注: 1.分割样本里一张图片只有同一类别的多个目标. 2.转换为boundingbox标注通过连通域实现,所以重叠的目标处理不了,会标为1个. 数据集格式 其中,语义分割数据集格式如下: 原图片在JPEGImages文件夹中,命名格式为ImageID.jpg Label图在labelimage文件夹中,命名格式为ImageID_classname.png 生成的boundingbox标注命名格式为Imag

平均精度均值(mAP)——目标检测模型性能统计量

在机器学习领域,对于大多数常见问题,通常会有多个模型可供选择.当然,每个模型会有自己的特性,并会受到不同因素的影响而表现不同. 每个模型的好坏是通过评价它在某个数据集上的性能来判断的,这个数据集通常被叫做“验证/测试”数据集.这个性能由不同的统计量来度量,包括准确率( accuracy ).精确率( precision ).召回率( recall )等等.选择我们会根据某个特定的应用场景来选择相应的统计量.而对每个应用来说,找到一个可以客观地比较模型好坏的度量标准至关重要. 在本文,我们将会讨论

Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally如何使用尽可能少的标注数据来训练一个效果有潜力的分类器

作者:AI研习社链接:https://www.zhihu.com/question/57523080/answer/236301363来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 今天我给大家介绍一下 CVPR 2017 关于医学图像处理的一篇比较有意思的文章,用的是 active learning 和 incremental learning 的方法. 今天分享的主要内容是,首先介绍一下这篇文章的 motivation,就是他为什么要做这个工作:然后介绍一下他

小目标检测相关资料备忘

1.评价指标 mean Average Precision(mAP) https://blog.csdn.net/zl3090/article/details/82740727 https://www.cnblogs.com/eilearn/p/9071440.html https://blog.csdn.net/yangzzguang/article/details/80540375 https://blog.csdn.net/wangdongwei0/article/details/8303

【pytorch-ssd目标检测】可视化检测结果

制作类似pascal voc格式的目标检测数据集:https://www.cnblogs.com/xiximayou/p/12546061.html 训练自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12546556.html 验证自己创建的数据集:https://www.cnblogs.com/xiximayou/p/12550471.html 测试自己创建的数据集:https://www.cnblogs.com/xiximayou/p/125505

语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里,先介绍几个概念,也是图像处理当中的最常见任务. 语义分割(semantic segmentation) 目标检测(object detection) 目标识别(object recognition) 实例分割(instance segmentation) 语义分割 首先需要了解一下什么是语义分割(s

目标检测lmdb数据格式制作

一.任务 现在用caffe做目标检测一般需要lmdb格式的数据,而目标检测的数据和目标分类的lmdb格式的制作难度不同.就目标检测来说,例如准备SSD需要的数据,一般需要以下几步: 1.准备图片并标注groundtruth 2.将图像和txt格式的gt转为VOC格式数据 3.将VOC格式数据转为lmdb格式数据 本文的重点在第2.3步,第一步标注任务用小代码实现即可.网络上大家制作数据格式一般是仿VOC0712的,建立各种目录,很麻烦还容易出错,现我整理了一下代码,只要两个代码,就可以从图片+t

caffe框架下目标检测——faster-rcnn实战篇操作

原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1)  经常断的话,可以采取两步: git clone https://github.com/rbgirshick/py-faster-rcnn.git 2)  到py-faster-rcnn中,继续下载caffe-faster-rcnn,采取后台跑: git submodule update --in