在云上jupylab(codelab)常用的shell命令

news2024/11/25 16:34:23

1、切换当前文件目录位置:

%cd  /project/train/

2、删除目标文件夹和文件夹下面的内容,注意这个r是不能少的:

!rm  -r /project/train/src_repo/dataset

3、创建数据集相关文件夹

!mkdir /project/train/src_repo/dataset

4、复制指定后缀名的文件到,指定的文件夹下面

!cp /home/data/2711/*.xml /project/train/src_repo/dataset/Annotations

5、执行.py文件,前面加上!python即可

!python /project/train/src_repo/dataset/voc_label.py

6、使用bash命令执行指定的.sh文件

!bash /project/train/src_repo/run.sh

7、对xml文件进行标签处理转变为coco数据标签格式常用的python代码如下:

先对数据集进行分类(训练集,测试集,验证集)

import os  
import random  
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--xml_path', type=str, help='input xml label path')
parser.add_argument('--txt_path', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 1.0
train_percent = 0.9  
xmlfilepath = opt.xml_path  
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)  
if not os.path.exists(txtsavepath):
  os.makedirs(txtsavepath)

num=len(total_xml)  
list=range(num)  

ftrainval = open(txtsavepath + '/trainval.txt', 'w')  
ftest = open(txtsavepath + '/test.txt', 'w')  
ftrain = open(txtsavepath + '/train.txt', 'w')  
fval = open(txtsavepath + '/val.txt', 'w')  

for i in list:
    name=total_xml[i][:-4]+'\n'  
    ftrainval.write(name)  
    if i%7 == 0:
        fval.write(name)
    else:
        ftrain.write(name)  

ftrainval.close()  
ftrain.close()  
fval.close()  
ftest.close()  

这段代码主要做的是将一些XML标签文件进行划分,分成训练集、验证集、测试集三部分。

首先,代码导入了三个模块:osrandomargparse

然后,使用argparse模块创建了一个命令行参数解析器,并添加了两个命令行参数:--xml_path 和 --txt_path。这两个参数分别用于指定输入的XML标签路径和输出的TXT标签路径。

之后,代码定义了两个变量:trainval_percent 和 train_percent,分别设置为1.0和0.9。这两个变量可能是用于设置训练集和总数据集的比例,但在这个代码段中并未使用。

然后,代码获取了用户通过命令行参数指定的XML文件路径和TXT文件保存路径,并列出了指定路径下的所有XML文件。

如果指定的TXT文件保存路径不存在,代码会创建这个路径。

接着,代码定义了四个文件对象:ftrainvalftestftrainfval,用于写入四个不同的TXT文件。

最后,代码遍历了所有的XML文件,将每个文件的名称(去掉后缀)写入到ftrainval文件中。每写入7个文件名,就将下一个文件名写入到fval文件中,其他的都写入到ftrain文件中。

在完成所有写入操作后,代码关闭了所有文件对象。

这样,就完成了将XML标签文件划分成训练集、验证集和测试集的操作。需要注意的是,这个代码段并没有使用随机打乱数据,也没有按照实际的比例划分数据集,可能还需要进一步的处理才能满足实际需求。

下面这个是读取xml文件的内容,并且写入到指定的txt文件下面

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=['train', 'val', 'test']
classes = ['head']

abs_path = os.getcwd()
def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    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('/home/data/2718/%s.xml'%( image_id))  
    out_file = open('/project/train/src_repo/dataset/labels/%s.txt'%(image_id), 'w')
    tree=ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        #difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes :
            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)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

for image_set in sets:
    if not os.path.exists('/project/train/src_repo/dataset/labels/'):
        os.makedirs('/project/train/src_repo/dataset/labels/')
    image_ids = open('/project/train/src_repo/dataset/ImageSets/Main/%s.txt'%(image_set)).read().strip().split()
    list_file = open('/project/train/src_repo/dataset/%s.txt'%(image_set), 'w')
    for image_id in image_ids:
        list_file.write('/project/train/src_repo/dataset/images/%s.jpg\n'%(image_id))
        convert_annotation(image_id)
    list_file.close()   

首先,导入了一些需要的模块,包括xml.etree.ElementTree用于解析XML文件,pickle用于序列化和反序列化Python对象,os用于操作系统相关的操作,getcwd获取当前工作目录,listdir列出一个目录中的文件名,join连接路径的元素。

然后,定义了一些变量,包括三个数据集名称sets和一个类别名称classes

接下来,定义了一个函数convert,它接收两个参数:sizebox。这个函数将一个矩形框(box)转换为标准化的形式。标准化的过程是将矩形框的左上角坐标(x,y)和宽度高度(w,h)进行变换,变换的公式是:x = (box[0] + box[1])/2.0 - 1 和 y = (box[2] + box[3])/2.0 - 1,并且 w = box[1] - box[0] 和 h = box[3] - box[2]。然后这个函数返回转换后的坐标和尺寸。

再下面,定义了一个函数convert_annotation,这个函数用于处理单个图片的XML标注文件。它首先打开图片的XML文件,解析XML树,获取到图片的大小以及所有的对象(在这里是目标)。然后对于每一个目标,如果它在类别列表中,就获取其边界框并使用上述的转换函数进行转换,然后将类别ID和转换后的边界框写入到一个新的文本文件中。

最后,对于每个数据集,首先检查输出文件夹是否存在,如果不存在就创建。然后读取该数据集的所有图片ID,对于每个图片ID,调用上述函数处理其对应的XML文件,然后将图片的路径写入到一个新的文本文件中。

需要注意的是,这段代码假设所有的图片和标注文件都在指定的路径下,如果不在这个路径下需要进行相应的修改。另外,这段代码处理的是VOC格式的XML标注文件,如果你使用的是其他格式的标注文件可能需要进行一些修改。

最后注意 CoCo数据集的格式是每一行作为一个label(包含分类序号,中心点的坐标,宽度,高度,都需要进行归一化)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1179412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch tensor 数据类型快速转换三种方法

目录 1 通用,简单,CPU/GPU tensor 数据类型转换 2 tensor.type()方法 CPU tensor 数据类型转换 GPU tensor 数据类型转换 3 tensor.to() 方法,CPU/GPU tensor 数据类型转换 1 通用,简单, CPU/GPU tensor 数据类型转换 tensor.double():…

Educational Codeforces Round 157 (A--D)视频详解

Educational Codeforces Round 157 &#xff08;A--D&#xff09;视频详解 视频链接A题代码B题代码C题代码D题代码 视频链接 Educational Codeforces Round 157 &#xff08;A–D&#xff09;视频详解 A题代码 #include<bits/stdc.h> #define endl \n #define deb(x)…

高频SQL50题(基础版)-2

文章目录 主要内容一.SQL练习题1.577-员工奖金代码如下&#xff08;示例&#xff09;: 2.1280-学生们参加各科测试的次数代码如下&#xff08;示例&#xff09;: 3.570-至少有5名直接下属的经理代码如下&#xff08;示例&#xff09;: 4.1934-确认率代码如下&#xff08;示例&a…

C#,数值计算——偏微分方程,Relaxation的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Relaxation { private Relaxation() { } public static void sor(double[,] a, double[,] b, double[,] c, double[,] d, double[,] e, double[,] f, double[,] u, double rjac) …

大型Bat面试知识总结分享—AMS在Android起到什么作用?简单的分析下Android的源码

面试官: AMS在Android起到什么作用&#xff0c;简单的分析下Android的源码 心理分析&#xff1a;这道题在发生在大多数场景下。面对这道题 很多求职很茫然&#xff0c;不知道该如何说起。AMS本身比较复杂难以理解。工作多年也很难弄清AMS的作用&#xff0c;其实我们大可从以下几…

企业数字化转型与供应链效率-基准回归复刻(2007-2022年)

参照张树山&#xff08;2023&#xff09;的做法&#xff0c;本团队对来自统计与决策《企业数字化转型与供应链效率》一文中的基准回归部分进行复刻。文章实证检验企业数字化转型对供应链效率的影响。用年报词频衡量上市公司数字化转型程度&#xff0c;以库存周转天数来衡量供应…

大数据疫情分析及可视化系统 计算机竞赛

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

西门子S7-200SMART 通过向导实现S7通信的具体组态步骤示例

西门子S7-200SMART 通过向导实现S7通信的具体组态步骤示例 具体步骤可参考以下内容: 打开编程软件STEP7-Micro/WIN SMART在“工具”菜单的“向导”"区域单击"Get/Put"按钮,启动PUT/GET向导, 在弹出的“Get/Put”向导界面种添加操作步骤名称并添加注释。 点…

洛谷P1102 A-B数对 详细解析及AC代码

P1102 A-B数对 前言题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码经典二分&#xff08;O(nlgn)&#xff09;酷炫哈希&#xff08;O(n)&#xff09; 后话额外测试用例样例输入 #2样例输出 #2 王婆卖瓜 题目来源 前言 酷&…

OpenAI 年度大戏即将揭晓,5 大剧透全方位曝光

北京时间 11 月 7 日凌晨 2 点&#xff0c;2023 年度最受关注的 AI 活动 OpenAI DevDay 将正式揭晓。2022 年 11 月&#xff0c;OpenAI 正式发布了 ChatGPT&#xff0c;这个改变整个 AI 发展进程和轨迹的颠覆性产品。OpenAI 选择在 ChatGPT 发布一周年之际举行这次活动&#xf…

Git 基础知识回顾及 SVN 转 Git 自测

背景 项目开发过程中使用的版本控制工具是 SVN&#xff0c;Git 多有耳闻&#xff0c;以前也偶尔玩过几次&#xff0c;但是工作中不用&#xff0c;虽然本地也有环境&#xff0c;总是不熟练。 最近看一本网络开源技术书时&#xff0c;下载源码部署了一下&#xff0c;又温故了一…

socket编程中的EINTR是什么?

socket编程中的EINTR是什么? 在socket编程中&#xff0c;我们时常在accept/read/write等接口调用的异常处理的部分看到对于EINTR的处理&#xff0c;例如下面这样的语句&#xff1a; repeat: if(read(fd, buff, size) < 0) {if(errno EINTR)goto repeat;elseprintf("…

时间序列预测中的数据分析->周期性、相关性、滞后性、趋势性、离群值等特性的分析方法

本文介绍 本篇文章给大家介绍的是&#xff0c;当我们在进行有关时间序列相关的工作或者实验时&#xff0c;需要对数据进行的一些数据分析操作(包括周期性、相关性、滞后性、趋势性、离群值等等分析)的方法。在本篇文章中会以实战的形式进行讲解&#xff0c;同时提供运行代码和…

求1~100000之间所有的“水仙花数”,并输出

这里所指的水仙花数&#xff0c;并不是严格意义上的水仙花数&#xff0c;我们先查看一下水仙花数是什么 水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数、阿姆斯壮…

IOC容器创建bean实例的4种方式

&#x1f388;个人公众号:&#x1f388; :✨✨✨ 可为编程✨ &#x1f35f;&#x1f35f; &#x1f511;个人信条:&#x1f511; 知足知不足 有为有不为 为与不为皆为可为&#x1f335; &#x1f349;本篇简介:&#x1f349; 本篇记录IOC容器创建bean实例的4种方式&#xff0c;…

mysql联合索引和最左匹配问题。

1引言&#xff1a; 如果频繁地使⽤相同的⼏个字段查询&#xff0c;就可以考虑建⽴这⼏个字段的联合索引来提⾼查询效率。⽐如对 于联合索引 test_col1_col2_col3&#xff0c;实际建⽴了 (col1)、(col1, col2)、(col, col2, col3) 三个索引。联合 索引的主要优势是减少结果集数量…

深入理解Python中的布尔值:真与假

Python作为一门强大的编程语言&#xff0c;具有丰富的数据类型和逻辑运算&#xff0c;其中布尔&#xff08;Boolean&#xff09;值在控制程序流程和逻辑决策中扮演着关键的角色。本文将深入探讨Python中的布尔值&#xff0c;解释什么是真&#xff08;True&#xff09;和假&…

pytorch加载的cifar10数据集,到底有没有经过归一化

pytorch加载cifar10的归一化 pytorch怎么加载cifar10数据集torchvision.datasets.CIFAR10transforms.Normalize()进行归一化到底在哪里起作用&#xff1f;【CIFAR10源码分析】 torchvision.datasets加载的数据集搭配Dataloader使用model.train()和model.eval() pytorch怎么加载…

Paste v4.1.2(Mac剪切板)

Paste for Mac是一款运行在Mac OS平台上的剪切板小工具&#xff0c;拥有华丽的界面效果&#xff0c;剪切板每一条记录可显示&#xff08;预览&#xff09;文本&#xff0c;图片等记录的完整内容&#xff0c;可以记录最近指定条数的剪切板信息&#xff0c;方便用户随时调用&…

输电线路AR可视化巡检降低作业风险

随着现代工业的快速发展&#xff0c;各行业的一线技术工人要处理的问题越来越复杂&#xff0c;一些工作中棘手的问题迫切需要远端专家的协同处理。但远端专家赶来现场往往面临着专家差旅成本高、设备停机损失大、专业支持滞后、突发故障无法立即解决等痛点。传统的远程协助似乎…