CrowdHuman密集行人数据集转换代码(可任意选择某些类别的框)

crowdhuman 数据集 darknet yolov7训练 yolov7-darknet-crowdhuman 阅读详情

CrowdHuman密集行人数据集转换代码

转换顺序: (odgt--->voc--->coco)

1. odgt--->voc

from xml.dom import minidom
import cv2
import os
import json
from PIL import Image

roadlabels = "./Annotations/"
roadimages = "./Images/"
fpath = "annotation.odgt"

def load_func(fpath):
    assert os.path.exists(fpath)
    with open(fpath, 'r') as fid:
        lines = fid.readlines()
    records = [json.loads(line.strip('\n')) for line in lines]
    return records

bbox = load_func(fpath)
# bbox中的其中一行如下
# {'ID': '284193,faa9000f2678b5e',
# 'gtboxes': [{'tag': 'person', 'hbox': [123, 129, 63, 64], 'head_attr': {'ignore': 0, 'occ': 1, 'unsure': 0}, 'fbox': [61, 123, 191, 453], 'vbox': [62, 126, 154, 446], 'extra': {'box_id': 0, 'occ': 1}},
#             {'tag': 'person', 'hbox': [214, 97, 58, 74], 'head_attr': {'ignore': 0, 'occ': 1, 'unsure': 0}, 'fbox': [165, 95, 187, 494], 'vbox': [175, 95, 140, 487], 'extra': {'box_id': 1, 'occ': 1}},
#             {'tag': 'person', 'hbox': [318, 109, 58, 68], 'head_attr': {'ignore': 0, 'occ': 1, 'unsure': 0}, 'fbox': [236, 104, 195, 493], 'vbox': [260, 106, 170, 487], 'extra': {'box_id': 2, 'occ': 1}},
#             {'tag': 'person', 'hbox': [486, 119, 61, 74], 'head_attr': {'ignore': 0, 'occ': 0, 'unsure': 0}, 'fbox': [452, 110, 169, 508], 'vbox': [455, 113, 141, 501], 'extra': {'box_id': 3, 'occ': 1}},
#             {'tag': 'person', 'hbox': [559, 105, 53, 57], 'head_attr': {'ignore': 0, 'occ': 0, 'unsure': 0}, 'fbox': [520, 95, 163, 381], 'vbox': [553, 98, 70, 118], 'extra': {'box_id': 4, 'occ': 1}},
#             {'tag': 'person', 'hbox': [596, 40, 72, 83], 'head_attr': {'ignore': 0, 'occ': 0, 'unsure': 0}, 'fbox': [546, 39, 202, 594], 'vbox': [556, 39, 171, 588], 'extra': {'box_id': 5, 'occ': 1}},
#             {'tag': 'person', 'hbox': [731, 139, 69, 83], 'head_attr': {'ignore': 0, 'occ': 0, 'unsure': 0}, 'fbox': [661, 132, 183, 510], 'vbox': [661, 132, 183, 510], 'extra': {'box_id': 6, 'occ': 0}}]}

if not os.path.exists(roadlabels):
    os.makedirs(roadlabels)

for i0, item0 in enumerate(bbox):
    print(i0)
    # 建立i0的xml tree
    ID = item0['ID']  # 得到当前图片的名字
    imagename = roadimages + ID + '.jpg'  # 当前图片的完整路径
    savexml = roadlabels + ID + '.xml'  # 生成的.xml注释的名字

    # 获得图片的长宽
    # img = Image.open(imagename)
    # img_width = img.size[0]
    # img_height = img.size[1]

    gtboxes = item0['gtboxes']
    img_name = ID
    floder = 'CrowdHuman'
    print(imagename)
    im = cv2.imread(imagename)
    w = im.shape[1]
    h = im.shape[0]
    d = im.shape[2]

    doc = minidom.Document()  # 创建DOM树对象
    annotation = doc.createElement('annotation')  # 创建子节点
    doc.appendChild(annotation)  # annotation作为doc树的子节点

    folder = doc.createElement('folder')
    folder.appendChild(doc.createTextNode(floder))  # 文本节点作为floder的子节点
    annotation.appendChild(folder)  # folder作为annotation的子节点

    filename = doc.createElement('filename')
    filename.appendChild(doc.createTextNode(img_name + '.jpg'))
    annotation.appendChild(filename)

    # filename = doc.createElement('path')
    # filename.appendChild(doc.createTextNode('D:/BaiduNetdiskDownload/CrowdHuman_train/Images'))
    # annotation.appendChild(filename)

    source = doc.createElement('source')
    database = doc.createElement('database')
    database.appendChild(doc.createTextNode("Unknown"))
    source.appendChild(database)
    # annotation2 = doc.createElement('annotation')
    # annotation2.appendChild(doc.createTextNode("ICDAR POD2017"))
    # source.appendChild(annotation2)
    # image = doc.createElement('image')
    # image.appendChild(doc.createTextNode("image"))
    # source.appendChild(image)
    # flickrid = doc.createElement('flickrid')
    # flickrid.appendChild(doc.createTextNode("NULL"))
    # source.appendChild(flickrid)
    annotation.appendChild(source)

    # owner = doc.createElement('owner')
    # flickrid = doc.createElement('flickrid')
    # flickrid.appendChild(doc.createTextNode("NULL"))
    # owner.appendChild(flickrid)
    # na = doc.createElement('name')
    # na.appendChild(doc.createTextNode("cxm"))
    # owner.appendChild(na)
    # annotation.appendChild(owner)

    size = doc.createElement('size')
    width = doc.createElement('width')
    width.appendChild(doc.createTextNode("%d" % w))
    size.appendChild(width)
    height = doc.createElement('height')
    height.appendChild(doc.createTextNode("%d" % h))
    size.appendChild(height)
    depth = doc.createElement('depth')
    depth.appendChild(doc.createTextNode("%d" % d))
    size.appendChild(depth)
    annotation.appendChild(size)

    segmented = doc.createElement('segmented')
    segmented.appendChild(doc.createTextNode("0"))
    annotation.appendChild(segmented)

    # 下面是从odgt中提取三种类型的框并转为voc格式的xml的代码
    # 不需要的box种类整段注释即可
    for i1, item1 in enumerate(gtboxes):
        """
        # 提取可见框(visible box)的代码
        boxs = [int(a) for a in item1['vbox']]
        minx = str(boxs[0])
        miny = str(boxs[1])
        maxx = str(boxs[2] + boxs[0])
        maxy = str(boxs[3] + boxs[1])
        # print(box)
        object = doc.createElement('object')
        nm = doc.createElement('name')
        nm.appendChild(doc.createTextNode('vbox'))
        object.appendChild(nm)
        pose = doc.createElement('pose')
        pose.appendChild(doc.createTextNode("Unspecified"))
        object.appendChild(pose)
        truncated = doc.createElement('truncated')
        truncated.appendChild(doc.createTextNode("1"))
        object.appendChild(truncated)
        difficult = doc.createElement('difficult')
        difficult.appendChild(doc.createTextNode("0"))
        object.appendChild(difficult)
        bndbox = doc.createElement('bndbox')
        xmin = doc.createElement('xmin')
        xmin.appendChild(doc.createTextNode(minx))
        bndbox.appendChild(xmin)
        ymin = doc.createElement('ymin')
        ymin.appendChild(doc.createTextNode(miny))
        bndbox.appendChild(ymin)
        xmax = doc.createElement('xmax')
        xmax.appendChild(doc.createTextNode(maxx))
        bndbox.appendChild(xmax)
        ymax = doc.createElement('ymax')
        ymax.appendChild(doc.createTextNode(maxy))
        bndbox.appendChild(ymax)
        object.appendChild(bndbox)
        annotation.appendChild(object)
        savefile = open(savexml, 'w')
        savefile.write(doc.toprettyxml())
        savefile.close()
        """

        # 提取头部框(head box)的代码
        boxs = [int(a) for a in item1['hbox']]
        minx = str(boxs[0])
        miny = str(boxs[1])
        maxx = str(boxs[2] + boxs[0])
        maxy = str(boxs[3] + boxs[1])
        # print(box)
        object = doc.createElement('object')
        nm = doc.createElement('name')
        nm.appendChild(doc.createTextNode('hbox'))
        object.appendChild(nm)
        pose = doc.createElement('pose')
        pose.appendChild(doc.createTextNode("Unspecified"))
        object.appendChild(pose)
        truncated = doc.createElement('truncated')
        truncated.appendChild(doc.createTextNode("1"))
        object.appendChild(truncated)
        difficult = doc.createElement('difficult')
        difficult.appendChild(doc.createTextNode("0"))
        object.appendChild(difficult)
        bndbox = doc.createElement('bndbox')
        xmin = doc.createElement('xmin')
        xmin.appendChild(doc.createTextNode(minx))
        bndbox.appendChild(xmin)
        ymin = doc.createElement('ymin')
        ymin.appendChild(doc.createTextNode(miny))
        bndbox.appendChild(ymin)
        xmax = doc.createElement('xmax')
        xmax.appendChild(doc.createTextNode(maxx))
        bndbox.appendChild(xmax)
        ymax = doc.createElement('ymax')
        ymax.appendChild(doc.createTextNode(maxy))
        bndbox.appendChild(ymax)
        object.appendChild(bndbox)
        annotation.appendChild(object)
        savefile = open(savexml, 'w')
        savefile.write(doc.toprettyxml())
        savefile.close()


        # 提取全身框(full box)的标注
        boxs = [int(a) for a in item1['fbox']]
        # 左上点长宽--->左上右下
        minx = str(boxs[0])
        miny = str(boxs[1])
        maxx = str(boxs[2] + boxs[0])
        maxy = str(boxs[3] + boxs[1])
        # print(box)
        object = doc.createElement('object')
        nm = doc.createElement('name')
        nm.appendChild(doc.createTextNode('fbox'))  # 类名: fbox
        object.appendChild(nm)
        pose = doc.createElement('pose')
        pose.appendChild(doc.createTextNode("Unspecified"))
        object.appendChild(pose)
        truncated = doc.createElement('truncated')
        truncated.appendChild(doc.createTextNode("1"))
        object.appendChild(truncated)
        difficult = doc.createElement('difficult')
        difficult.appendChild(doc.createTextNode("0"))
        object.appendChild(difficult)
        bndbox = doc.createElement('bndbox')
        xmin = doc.createElement('xmin')
        xmin.appendChild(doc.createTextNode(minx))
        bndbox.appendChild(xmin)
        ymin = doc.createElement('ymin')
        ymin.appendChild(doc.createTextNode(miny))
        bndbox.appendChild(ymin)
        xmax = doc.createElement('xmax')
        xmax.appendChild(doc.createTextNode(maxx))
        bndbox.appendChild(xmax)
        ymax = doc.createElement('ymax')
        ymax.appendChild(doc.createTextNode(maxy))
        bndbox.appendChild(ymax)
        object.appendChild(bndbox)
        annotation.appendChild(object)
        savefile = open(savexml, 'w')
        savefile.write(doc.toprettyxml())
        savefile.close()

2. voc--->coco

#!/usr/bin/python

# pip install lxml

import sys
import os
import json
import xml.etree.ElementTree as ET

START_BOUNDING_BOX_ID = 1
# 根据之前转换好的xml格式的代码修改下面的类别字典
PRE_DEFINE_CATEGORIES = {"fbox": 1, "hbox": 2}
# If necessary, pre-define category and its id
#  PRE_DEFINE_CATEGORIES = {"aeroplane": 1, "bicycle": 2, "bird": 3, "boat": 4,
                            # "bottle":5, "bus": 6, "car": 7, "cat": 8, "chair": 9,
                            # "cow": 10, "diningtable": 11, "dog": 12, "horse": 13,
                            # "motorbike": 14, "person": 15, "pottedplant": 16,
                            # "sheep": 17, "sofa": 18, "train": 19, "tvmonitor": 20}

def get(root, name):
    vars = root.findall(name)
    return vars

def get_and_check(root, name, length):
    vars = root.findall(name)
    if len(vars) == 0:
        raise NotImplementedError('Can not find %s in %s.'%(name, root.tag))
    if length > 0 and len(vars) != length:
        raise NotImplementedError('The size of %s is supposed to be %d, but is %d.'%(name, length, len(vars)))
    if length == 1:
        vars = vars[0]
    return vars

def convert(xml_list, xml_dir, json_file):
    list_fp = xml_list
    json_dict = {"images": [], "type": "instances", "annotations": [],
                 "categories": []}
    categories = PRE_DEFINE_CATEGORIES
    bnd_id = START_BOUNDING_BOX_ID
    for img_id, line in enumerate(list_fp):
        line = line.strip()
        print("Processing %s" %(line))
        xml_f = os.path.join(xml_dir, line)
        tree = ET.parse(xml_f)
        root = tree.getroot()
        path = get(root, 'path')
        if len(path) == 1:
            filename = os.path.basename(path[0].text)
        elif len(path) == 0:
            filename = get_and_check(root, 'filename', 1).text
        else:
            raise NotImplementedError('%d paths found in %s'%(len(path), line))
        ## The filename must be a number
        image_id = img_id
        size = get_and_check(root, 'size', 1)
        width = int(get_and_check(size, 'width', 1).text)
        height = int(get_and_check(size, 'height', 1).text)
        image = {'file_name': filename, 'height': height, 'width': width,
                 'id':image_id}
        json_dict['images'].append(image)
        ## Cruuently we do not support segmentation
        #  segmented = get_and_check(root, 'segmented', 1).text
        #  assert segmented == '0'
        for obj in get(root, 'object'):
            category = get_and_check(obj, 'name', 1).text
            if category not in categories:
                new_id = len(categories)
                categories[category] = new_id
            category_id = categories[category]
            bndbox = get_and_check(obj, 'bndbox', 1)
            xmin = int(get_and_check(bndbox, 'xmin', 1).text) - 1
            ymin = int(get_and_check(bndbox, 'ymin', 1).text) - 1
            xmax = int(get_and_check(bndbox, 'xmax', 1).text)
            ymax = int(get_and_check(bndbox, 'ymax', 1).text)
            assert(xmax > xmin)
            assert(ymax > ymin)
            o_width = abs(xmax - xmin)
            o_height = abs(ymax - ymin)
            ann = {'area': o_width*o_height, 'iscrowd': 0, 'image_id':
                   image_id, 'bbox':[xmin, ymin, o_width, o_height],
                   'category_id': category_id, 'id': bnd_id, 'ignore': 0,
                   'segmentation': []}
            json_dict['annotations'].append(ann)
            bnd_id = bnd_id + 1

    for cate, cid in categories.items():
        cat = {'supercategory': 'none', 'id': cid, 'name': cate}
        json_dict['categories'].append(cat)
    json_fp = open(json_file, 'w')
    json_str = json.dumps(json_dict)
    json_fp.write(json_str)
    json_fp.close()


if __name__ == '__main__':
    xml_list = os.listdir('./Annotations')
    xml_dir = './Annotations'
    json_file = 'val.json'
    convert(xml_list, xml_dir, json_file)

参考文章: Pascal VOC数据格式转COCO数据格式脚本(Object Detection)

CrowdHuman数据集转成VOC格式并训练模型 CrowdHuman数据集转成VOC格式并训练模型 1. 介绍 The CrowdHuman dataset is large, rich-annotated and contains high diversity. CrowdHuman contains 15000, 4370 and 5000 images for training, validation, and testing, respectively. There are a total of 470K human instances f 阅读详情

相关推荐

【干货】CrowdHuman数据集标注格式odgt转COCO数据集标注格式json(附详细代码)

注:本以为很难,详细的看了一下odgt文件的数据存放方式和json文件的数据存放方式后,发现其实就是个读文件写文件的操作。只要把它们之间的数据进行对上就好了。 COCO数据集标注格式详解----object instances CrowdHuman数据集格式——odgt文件格式 上面两篇博客是博主在写转换函数 crowdhuman2coco.py的时候,先去对它们的数据格式了解并整理了...

Activewaste 1万+

CrowdHuman数据集

CrowdHuman数据集是旷世发布的用于行人检测的数据集,图片数据大多来自于google搜索。 CrowdHuman 数据集数据量比较大,训练集15000张,测试集5000张,验证集4370张。训练集和验证集中共有 470K 个实例,约每张图片包含23个人,同时存在各种各样的遮挡。每个人类实例都用头部边界框、人类可见区域边界框和人体全身边界框注释。 数据集可以在 http://www.crowd...

儒雅的小Z.的博客 1万+

【深度学习】处理crowdhuman数据集

因为它吧所有文件写入到了*.odgt文件中, 我以annotation_val.odgt为例进行解析。“extra”: { “ignore”: 0 }, // 是否忽略该标注(0=有效,1=忽略)“head_attr”: { “ignore”: 0 } // 头部是否有效。因为要把crownhuman的数据集处理成yolov格式。gtboxes ground truth 标注。然后每个item是一个图片的标注信息。其实它是一个巨大的json。fbox 完整人体框。

weixin_40293999的博客 780

CrowdHuman数据集介绍

CrowdHuman数据集是旷世发布的用于行人检测的数据集,图片数据大多来自于google搜索。 CrowdHuman 数据集数据量比较大,训练集15000张,测试集5000张,验证集4370张。训练集和验证集中共有 470K 个实例,约每张图片包含23个人,同时存在各种各样的遮挡。每个人类实例都用头部边界框、人类可见区域边界框和人体全身边界框注释。 数据集可以在 http://www.crowdhuman.org/ 进行下载,其中测试数据集没有公开标注。 CrowdHuman测试 hbox:head b

myh12138的博客 1万+

【干货】mmdetection使用coco格式的CrowdHuman数据集进行训练及测试(附调参过程)

注:从mmdetection使用coco数据集在faster rcnn训练和测试,到了解crowdhuman数据集标注格式,再到crowdhuman的标注格式转换成coco数据集标注格式,现在就到了最终目的了:训练转换后的Crowd Human数据集。 以下是博主这一过程中整理的记录: 【干货】用mmdetection,在COCO数据集上跑通faster R-CNN(测试、训练) COCO数据...

Activewaste 1万+

paddle - crowdHuman数据集训练人体识别模型

paddle paddle - crowdHuman数据集训练人体识别模型数据集annotation解析annotation json各项意义转换paddle yolo的数据格式输入哪些数据? 数据集annotation解析 使用paddle paddle yolo v3的模型,将这个数据集的json内容转换为xml格式。 annotation json各项意义 参考官网:http://www.crowdhuman.org/download.html 但说得并不明确,这里对照图片总结了一下: JSON{

fantasysolo的博客 2240

数据集CrowdHuman概述

人群场景下的人体检测是计算机视觉领域的重大挑战,现有数据集在人群密度和遮挡程度方面存在明显不足。Megvii团队提出的CrowdHuman数据集填补了这一空白,包含15,000张高密度图像(平均每图22.6人)和470,000个标注实例,提供全身体、可见区域和头部三种标注。实验表明,基于该数据集训练的模型在COCOPersons、Caltech等基准测试中表现出优异的跨数据集泛化能力。CrowdHuman为拥挤环境下人体检测研究提供了更全面的评估基准,对自动驾驶、智能监控等应用具有重要价值。

qq_46220313的博客 1360

CrowdHuman: 基于YOLOv10的行人检测与人群分析

随着深度学习技术的发展,计算机视觉领域的目标检测技术也得到了广泛应用。在众多目标检测任务中,行人检测在人群密集的环境中尤为重要,尤其是在智能监控、自动驾驶、公共安全等领域。人群中的行人检测具有独特的挑战,因为人群中行人之间的遮挡、姿态变化以及不同的尺度会使得检测任务变得更加复杂。本篇博客将介绍如何使用。

YOLO 609

CrowdHuman数据集格式 ——odgt文件格式

注:之前说要将Crowd Human数据集标注转换成COCO数据集标注格式,现在先来看一下odgt文件里的数据是怎么样保存的。 demo下的odgt标注文件 在Crowd Human数据集目录下,还有一个demo文件夹。这个demo是干么的呢,博主查了一下说是提取odgt里面的数据的?所以就先看里面的代码和odgt文件 data下面有一个get_human.odgt,大小才66k,方便打开。(原...

Activewaste 1万+

【目标检测】Yolov5训练Crowdhuman数据集

这篇文章的目的,1.解析Crowdhuman数据集;2.准备Crowdhuman相应配置,训练yolov5。 其中我的是将273271,1017c000ac1360b7.jpg,全部写为273271_1017c000ac1360b7.jpg 1.环境 ubuntu16.04 cuda10.1 cudnn7 python3.6 Cython matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.2 Pillow PyYAML&g

聿默的博客 5336

基于YOLOv10进行CrowdHuman数据集的目标检测:从数据集加载到UI展示

YOLOv10是YOLO系列中的一个新版本,在前几个版本的基础上进行了进一步优化,提升了检测速度和准确性。YOLO模型采用单一的卷积神经网络来同时预测目标的位置和类别,具备实时处理视频流和高效推理的能力。YOLOv10的特点:实时检测:能在实时视频流中快速定位和分类目标。高准确率:通过改进网络结构和损失函数,在各种场景中都能提供较高的准确性。多尺度检测:YOLOv10能够检测不同大小的目标,适应性更强。

YOLO 536

行人检测数据集CrowdHuman简介,odgt标注格式转为yolo格式

行人检测数据集CrowdHuman简介,odgt标注格式转为yolo格式

weixin_46221106的博客 3756

CrowdHuman数据集:基于YOLOv5的人群检测与目标识别

CrowdHuman数据集是一个专门用于行人检测的开源数据集,主要用于人群中行人的检测与定位。该数据集由多个复杂的场景组成,包括在不同视角、不同光照和不同背景条件下的人群图像。CrowdHuman数据集包含了多种人群密度的场景,能够有效地提升行人检测模型在复杂环境下的鲁棒性。在本文中,我们介绍了如何使用YOLOv5进行CrowdHuman数据集的行人目标检测。通过数据准备、YOLOv5训练、模型评估和UI实现等步骤,我们成功构建了一个实时行人检测系统。

YOLO 850

第121期 CrowdHuman密集行人数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 一、背景 在人工智能与计算机视觉领域,人群场景下的目标检测一直是一个具有挑战性的任务。特别是在人群密集、遮挡严重、背景复杂的场景...

weixin_36472718的博客 993

Flink SQL数据血缘实战:如何用Calcite追踪字段级数据流向(附源码示例)

本文深入探讨了如何利用Apache Calcite解析Flink SQL执行计划,实现字段级数据血缘的追踪。通过扩展Calcite的元数据处理器,特别是针对Flink特有的Snapshot等节点,文章提供了从获取优化后的逻辑计划到提取并可视化血缘关系的完整实战方案,并附有核心源码示例,帮助开发者构建实时数仓的数据治理能力。

weixin_29032337的博客 142

强化学习环境Gym库的介绍

Gym是一个用于进行强化学习实验的开源库,它提供了一个仿真环境,内置了多种仿真游戏,例如出租车游戏、悬崖游戏等,不同的游戏所用的网格、规则、奖励(reward)都不一样,适合为强化学习做测试。(1) 多种环境:Gym库内置了上百种实验环境,包括算法环境、简单文本环境、经典控制环境、Atari游戏环境、MuJoCo环境和机械控制环境等。(2) Gym提供多种环境供我们使用,这里以一个简单的CartPole-v0为例,首先导入gym库,然后创建一个CartPole-v0环境,通过调用gym.make方法实现。

ahah12345678的博客 2148

CrowdHuman数据集转成VOC格式【odgt提取xml】

数据集下载地址 CrowdHuman Dataset 里面训练集太大了,分成了三个train文件,都要下载下来后放在一个图像的文件夹下面。 还有个annotation_train.odgt是对应train。另外两个val是关于测试集的 数据解析 odgt里面是json格式,转换为voc可以使用的xml需要一下代码 from xml.dom import minidom import cv2 import os import json from PIL import Image roadlab

weixin_64064486的博客 2769

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2474

对Crowdhuman数据集处理,根据生成的train.txt分离数据集

根据train.txt和test.txt分离数据集

qq_44224801的博客 1220

查看电脑mac地址+主机名+用户名并导出

张三:李四,应公司要求,今天下班前必须将这张表格里面用户电脑的mac地址统计出来!李四:我该怎么办呢?一个一个查看,太没有效率了吧!对了,我可以做一个bat脚本啊!

拥抱着青春 1974

内存管理(二)——内存分段

内存分段

weixin_43844995的博客 2693

YOLOv5 添加 OTA,并使用 coco、CrowdHuman数据集进行训练。

yolov5 OTA 训练 coco128、coco、corwdhuamn 数据集

To_be_little的博客 1974

OrCAD Capture CIS 17.4 原理图绘制

OrCAD Capture CIS 17.4 原理图绘制

qq_38960013的博客 7634

Crowdhuman密集人群数据集 密集行人检测数据集的训练及应用 YOLOV8模型训练 行人聚集检测数据集

Crowdhuman密集人群数据集 密集行人检测数据集的训练及应用 YOLOV8模型训练 行人聚集检测数据集

2401_88440984的博客 1878

抖音直播间人气接口算法 抖音协议

抖音直播间人气接口算法 抖音协议 抖音算法

Q44804487的博客 1万+

RK3399平台开发系列讲解(内核入门篇)1.1、通过sysfs清楚了解设备的系统状况

文章目录1、不敢高声语,恐惊天上人:sysfs目的2、窥一斑而知全豹:sysfs目录介绍3、千丝万缕:sysfs中要素的关系4、数据观星:sysfs中相关结构体 1、不敢高声语,恐惊天上人:sysfs目的 我们想通过sys下面的目录和文件清楚的了解跑Liunx系统的嵌入式设备的系统状况。 2、窥一斑而知全豹:sysfs目录介绍 sysfs把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核的数据结构以及它们的属性。sysfs的一个目的就是展示设备驱动模型中各组件.

内核笔记 1万+
下一篇: Leetcode刷题(11) 打家劫舍系列问题
lzAllen
博客等级 码龄9年 11粉丝 34原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值