当前位置: 首页 > news >正文

coco 2017数据集 类别提取并转换为yolo数据集

coco 2017数据集提取和转换

  • 本次分割的动物数据集 4G
  • 一. coco2017数据集结构
    • 标注文件解析
  • 二. 提取需要的类别重新封装成coco数据集(这里以动物类别为例)
  • 三. 转换为yolo 数据集

本次分割的动物数据集 4G

https://download.csdn.net/download/qq_26696715/87621195

一. coco2017数据集结构

总的结构如下:

├─cocotoyolo.py
├─getanimal.py
├─annotations
└─images├─train2017└─val2017

其中,images存放的是训练集、验证集的图片原图;annotations中存放的是标注文件:

2017/09/01  19:04        91,865,115 captions_train2017.json
2017/09/01  19:04         3,872,473 captions_val2017.json
2017/09/01  19:02       469,785,474 instances_train2017.json
2017/09/01  19:02        19,987,840 instances_val2017.json
2017/09/01  19:04       238,884,731 person_keypoints_train2017.json
2017/09/01  19:04        10,020,657 person_keypoints_val2017.json

标注文件解析

instances_xx2017.json 是一个COCO数据集的标注文件,包含了所有训练集图片的标注信息,字段含义如下:

  1. info:数据集的相关信息,如数据集名称、版本、年份等;
  2. licenses:数据集的许可证信息;
  3. images:训练集中所有图片的信息,包括图片ID、文件名、高度、宽度等;
  4. annotations:训练集中所有标注信息,包括标注ID、图片ID、类别ID、边界框坐标等;
  5. categories:所有类别的信息,包括类别ID、类别名称、超类别名称等。

具体解释如下:

  1. info:数据集的相关信息,包括数据集名称、版本、作者、年份等。例如,info 字段中可能包含以下信息:

    “info”: {
    “description”: “COCO 2017 Dataset”,
    “url”: “http://cocodataset.org”,
    “version”: “1.0”,
    “year”: 2017,
    “contributor”: “COCO Consortium”,
    “date_created”: “2017/09/01” }

  2. licenses:数据集的许可证信息,包括许可证ID、许可证名称等。例如,licenses 字段中可能包含以下信息:

    “licenses”: [
    {
    “id”: 1,
    “name”: “Attribution-NonCommercial-ShareAlike License”,
    “url”: “http://creativecommons.org/licenses/by-nc-sa/2.0/”
    } ]

  3. images:训练集中所有图片的信息,包括图片ID、文件名、高度、宽度等。例如,images 字段中可能包含以下信息:

    “images”: [
    {
    “id”: 1,
    “file_name”: “000000000009.jpg”,
    “height”: 480,
    “width”: 640,
    “date_captured”: “2013-11-14 17:02:52”,
    “license”: 1
    } ]

  4. annotations:训练集中所有标注信息,包括标注ID、图片ID、类别ID、边界框坐标等。例如,annotations 字段中可能包含以下信息:

    “annotations”: [
    {
    “id”: 1,
    “image_id”: 1,
    “category_id”: 1,
    “bbox”: [96.0, 120.0, 112.0, 80.0],
    “area”: 8960.0,
    “iscrowd”: 0
    } ]

  5. categories:所有类别的信息,包括类别ID、类别名称、超类别名称等。例如,categories 字段中可能包含以下信息:

    “categories”: [
    {
    “id”: 1,
    “name”: “person”,
    “supercategory”: “person”
    } ]

二. 提取需要的类别重新封装成coco数据集(这里以动物类别为例)

提取完成后的新文件夹为

├─animal_detection
│  ├─annotations
│  └─images
│      ├─train2017
│      └─val2017

提取代码 getanimal.py

import os
import json
import shutil# 定义要提取的类别
categories = ['bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe']# 定义数据集路径
data_dir = './'# 定义输出路径
output_dir = './animal_detection'# 创建输出目录
if not os.path.exists(os.path.join(output_dir, 'annotations')):os.makedirs(os.path.join(output_dir, 'annotations'))os.makedirs(os.path.join(output_dir, 'images', 'train2017'))os.makedirs(os.path.join(output_dir, 'images', 'val2017'))'''
训练集
'''
# 加载原始instances文件
with open(os.path.join(data_dir, 'annotations', 'instances_train2017.json'), 'r') as f:train_instances = json.load(f)# 筛选动物类别的id
# 筛选动物类别的id
animal_ids = []
new_categories = []
for c in train_instances['categories']:if c['name'] in categories:animal_ids.append(c['id'] )new_categories.append(c)# 筛选出验证集中包含动物的图片id
train_image_ids = set()
new_train_annotations = []
for ann in train_instances['annotations']:if ann['category_id'] in animal_ids:train_image_ids.add(ann['image_id'])new_train_annotations.append(ann)new_images = []
# 复制验证集中包含动物的图片到输出目录
for image in train_instances['images']:if image['id'] in train_image_ids:new_images.append(image)shutil.copy(os.path.join(data_dir, 'images', 'train2017', image['file_name']), os.path.join(output_dir, 'images', 'train2017'))# 构造新的instances文件
new_train_instances = {'info': train_instances['info'],'licenses': train_instances['licenses'],'images':new_images,'annotations': new_train_annotations,'categories': new_categories
}# 保存新的instances文件
with open(os.path.join(output_dir, 'annotations', 'instances_train2017.json'), 'w') as f:json.dump(new_train_instances, f)'''
验证集
'''
with open(os.path.join(data_dir, 'annotations', 'instances_val2017.json'), 'r') as f:val_instances = json.load(f)# 筛选动物类别的id
animal_ids = []
new_categories = []
for c in val_instances['categories']:if c['name'] in categories:animal_ids.append(c['id'] )new_categories.append(c)# 筛选出验证集中包含动物的图片id
val_image_ids = set()
new_val_annotations = []
for ann in val_instances['annotations']:if ann['category_id'] in animal_ids:val_image_ids.add(ann['image_id'])new_val_annotations.append(ann)new_images = []
# 复制验证集中包含动物的图片到输出目录
for image in val_instances['images']:if image['id'] in val_image_ids:new_images.append(image)shutil.copy(os.path.join(data_dir, 'images', 'val2017', image['file_name']), os.path.join(output_dir, 'images', 'val2017'))new_val_instances = {'info': val_instances['info'],'licenses': val_instances['licenses'],'images': new_images,'annotations': new_val_annotations,'categories': new_categories
}with open(os.path.join(output_dir, 'annotations', 'instances_val2017.json'), 'w') as f:json.dump(new_val_instances, f)

三. 转换为yolo 数据集

转换后生成

├─animal_detection
│  ├─classes.txt
│  ├─train2017.txt
│  ├─val2017.txt
│  ├─annotations
│  ├─images
│  │  ├─train2017
│  │  └─val2017
│  └─label

转换代码 cocotoyolo.py

#COCO 格式的数据集转化为 YOLO 格式的数据集
#--json_path 输入的json文件路径
#--save_path 保存的文件夹名字,默认为当前目录下的labels。import os
import json
from tqdm import tqdmdef convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = box[0] + box[2] / 2.0y = box[1] + box[3] / 2.0w = box[2]h = box[3]
#round函数确定(xmin, ymin, xmax, ymax)的小数位数x = round(x * dw, 6)w = round(w * dw, 6)y = round(y * dh, 6)h = round(h * dh, 6)return (x, y, w, h)if __name__ == '__main__':#这里根据自己的json文件位置,换成自己的就行root = "animal_detection/"json_trainfile = root+'annotations/instances_train2017.json' # COCO Object Instance 类型的标注json_valfile = root+'annotations/instances_val2017.json' # COCO Object Instance 类型的标注ana_txt_save_path = root+'labels/'  # 保存的路径traindata = json.load(open(json_trainfile, 'r'))valdata = json.load(open(json_valfile, 'r'))# 重新映射并保存class 文件if not os.path.exists(ana_txt_save_path):os.makedirs(ana_txt_save_path)id_map = {} # coco数据集的id不连续!重新映射一下再输出!with open(os.path.join(root, 'classes.txt'), 'w') as f:# 写入classes.txtfor i, category in enumerate(traindata['categories']):f.write(f"{category['name']}\n")id_map[category['id']] = i'''保存train txt'''# print(id_map)#这里需要根据自己的需要,更改写入图像相对路径的文件位置。list_file = open(os.path.join(root, 'train2017.txt'), 'w')for img in tqdm(traindata['images']):filename = img["file_name"]img_width = img["width"]img_height = img["height"]img_id = img["id"]head, tail = os.path.splitext(filename)ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')for ann in traindata['annotations']:if ann['image_id'] == img_id:box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))f_txt.close()#将图片的相对路径写入train2017或val2017的路径list_file.write('./images/train2017/%s.jpg\n' %(head))list_file.close()'''保存val txt'''# print(id_map)#这里需要根据自己的需要,更改写入图像相对路径的文件位置。list_file = open(os.path.join(root, 'val2017.txt'), 'w')for img in tqdm(valdata['images']):filename = img["file_name"]img_width = img["width"]img_height = img["height"]img_id = img["id"]head, tail = os.path.splitext(filename)ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')for ann in valdata['annotations']:if ann['image_id'] == img_id:box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))f_txt.close()#将图片的相对路径写入train2017或val2017的路径list_file.write('./images/val2017/%s.jpg\n' %(head))list_file.close()

相关文章:

keepalived利用VRRP Script进行资源监控 原创

https://blog.51cto.com/wangguishe/5789247 https://www.cnblogs.com/musen/p/11101676.html...

研究生课题选题

从物理需求出发,不是从某个新方法出发。为了达到最好的研究目标,创造自己的理论和方法永远是第一性的。提出问题,必须有清晰的物理观念,明确的物理要求。解决问题,尽可能用数学描述方法,避免局限于技巧性综合。专注是取得成功的有效方法。必须下决心专注于一个研究问题,…...

「杂题乱刷」AT_abc354_f

大家一起来做下这个典题。 链接(at) 链接(luogu) 我们很容易可以想到处理前后缀的最长上升子序列的长度,然后容易 \(O(n \log_2 n)\) 预处理。 做完了。点击查看代码 /* Tips: 你数组开小了吗? 你MLE了吗? 你觉得是贪心,是不是该想想dp? 一个小时没调出来,是不是该考虑换…...

H2 数据库介绍(2)--使用

本文主要介绍 H2 的基本使用,文中所使用到的软件版本:Java 1.8.0_341、H2 2.2.224、PostgreSQL 驱动 42.5.5。 1、嵌入式(本地)模式 直接使用 JDBC 连接数据库即可,如果数据库不存在会自动创建。 1.1、持久数据库@Test public void localFile() throws SQLException {String…...

ray tracing in one weekend - 5

dielectric 水、玻璃、钻石等透明材料都是电介质。当光线照射到它们身上时,它会分裂成反射光线和折射(透射)光线。我们将通过在反射和折射之间随机选择来处理这个问题,每次相互作用只产生一个散射射线。 折射程度 : 是根据两个介质折射率的差值决定的。 Refraction Snells L…...

二分图的最大匹配(匈牙利算法)代码

二分图的最大匹配代码 #include <bits/stdc++.h> using namespace std;const int N = 505, M = 100005; int h[N], e[M], ne[M], idx; int match[N]; bool st[N]; int n1, n2, m;void add(int a, int b) {e[idx] = b; //e[idx]存放的是第idx条边的终点ne[idx] = h[a]; //…...

coco 2017数据集 类别提取并转换为yolo数据集

coco 2017数据集提取和转换本次分割的动物数据集 4G一. coco2017数据集结构标注文件解析二. 提取需要的类别重新封装成coco数据集&#xff08;这里以动物类别为例&#xff09;三. 转换为yolo 数据集本次分割的动物数据集 4G https://download.csdn.net/download/qq_26696715/8…...

jdk线程池技术

jdk线程池ThreadPoolExecutor的7个参数 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize &l…...

keepalived+nginx 双机热备搭建

keepalivednginx 双机热备搭建一、准备工作1.1 准备两台centos7.91.2 nginx 与 keepalived软件 双机安装1.3 ip分配1.4 修改主机名1.5 关闭selinux&#xff08;双机执行&#xff09;1.6 修改hosts&#xff08;双机执行&#xff09;二、安装keepalived2.1 执行一下命令安装keepa…...

【云原生】容器编排技术Docker Compose

为什么需要Docker ComposeDocker Compose介绍Docker Compose安装Docker Compose版本介绍Docker Compose基本命令介绍Docker Compose实战Docker Compose Yml文件介绍总结为什么需要Docker Compose Docker帮助我们解决服务的打包安装的问题&#xff0c;随着而来的问题就是服务过…...

String、StringBuilder、StringBuffer的四大区别解析

面试官问&#xff1a;String、StringBuilder、StringBuffer有什么区别么&#xff1f; 这个问题是个高频问题&#xff0c;所以今天从源码上进行深度刨析他们的区别。 如何回答&#xff1a; 从四个点出发&#xff1a; 1、可变/不可变类 String是不可变类。他被被final修饰&…...

【C#进阶】C# 匿名方法

序号系列文章18【C#进阶】C# 事件19【C#进阶】C# 集合类20【C#进阶】C# 泛型文章目录前言1、什么是匿名方法&#xff1f;2、delegate 运算符3、Lambda 表达式3.1、Lambda 表达式的自然类型3.2、Lambda 表达式的显示返回类型4、关于匿名方法的总结结语前言 &#x1f4fa; hello大…...

C++并发编程之二 在线程间共享数据

文章目录1.1 互斥锁&#xff08;mutex&#xff09;保护共享数据1.1.1 std::mutex 的成员函数 std::mutex::lock() 和std::mutex::unlock() (不推荐使用)1.1.2 使用std::lock_guard保护共享数据1.1.3 使用std::unique_lock保护共享数据1.2 保护共享数据的其他方式1.2.1 初始化过…...

FL Studio和Cubase哪个容易一些 FL Studio和Cubase修音哪个好

FL Studio和Cubase哪个容易一些&#xff1f;FL Studio是很适合新手使用的宿主软件。FL Studio和Cubase修音哪个好&#xff1f;FL Studio和Cubase在修音方面各有千秋。 一、FL Studio和Cubase哪个容易一些 FL Studio是很适合新手上手的宿主软件&#xff0c;这得益于FL Studio独…...

限定学校|在站博士后省公派新加坡国立大学从事博后研究

Y博士为国内在站博士后&#xff0c;我们向其推荐了人社部博管办国外博士后派出项目及所在省的相关项目&#xff0c;最终助其获得新加坡国立大学的博士后邀请函&#xff0c;鉴于该导师名列全球高被引科学家榜单&#xff0c;顺利获批省国际培养博士后资助项目&#xff0c;如期出国…...

信息技术最全总结(备考教资)

信息技术 备考教资信息技术知识点总结&#xff0c;欢迎收藏&#xff01;需要xmind和备考书籍的可以评论区留言。 第一部分-学科专业知识 第一章-信息技术基础知识 信息与信息技术概述 信息概述 信息的定义 信息本身不是实体信息是通过文字、数字、图像、图形、声音、视频等方…...

spring5(三):IOC操作Bean管理(基于xml方式)

IOC操作Bean管理&#xff08;基于xml方式&#xff09;前言一、基于 xml 方式创建对象二、基于 xml 方式注入属性1. 使用 set 方法进行属性注入2. 使用有参数构造进行属性注入3. p 名称空间注入简化操作&#xff08;了解&#xff09;三、xml 注入其它类型属性1. 字面量2. 注入属…...

Vue的快速上手

一、创建一个 Vue 应用 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js在本篇中&#xff0c;我们将介绍如何在本地搭建 Vue 单页应用。创建的项目将使用基于 Vite 的构建设置&#xff0c;并允许我们使用 Vue 的单文件组件 (SFC)。 确保你安装了最新版本的 Node.js&…...

通过ELK+kafka采集微服务日志

在springboot微服务中采集日志推送kafka背景整体流程图快速搭建kafkazk开发环境通过logback记录日志到kafka快速搭建ELK环境Kibana查看&#xff0c;统计日志背景 在分布式的项目中&#xff0c;各功能模块产生的日志比较分散&#xff0c;同时为满足性能要求&#xff0c;同一个微…...

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年&#xff0c;随着AI聊天机器人GhatGPT在世界范围内持续火爆&#xff0c;极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈&#xff0c;成为全民讨论热点。 AIGC是指在确定主题下&#xff0c;由算法模型自动生成内容&#xff0c;包括单模态内容如文本、图像、音频…...

01-死磕QNX someip

1. vsomeip3.1.20版本 环境配置 export COMMONAPI_CONFIG/etc/commonapi.ini export LD_LIBRARY_PATH/sdcard/someip:$LD_LIBRARY_PATH export VSOMEIP_CONFIGURATION/etc/vsomeip-service.json export VSOMEIP_APPLICATION_NAMEHelloWorldSomeIPService sysctl -w net.ine…...

OTFS输入输出关系

目录 1. OTFS输入输出关系的矩阵表示 1.1 OTFS&#xff1a;矩阵表示 1.2 OTFS发射机的实现 1.2.1 传统的OTFS调制 ISFFT 海森堡变换 1.2.2 基于IDZT的OTFS调制 1.3 OTFS接收机的实现 1.3.1 传统的OTFS解调 维格纳变换 SFFT 1.3.2 基于DZT的OTFS解调 Appendix-Matlab C…...

Java的抽象类和接口

目录 一 、抽象类 1、抽象类概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 二、接口 1、接口的概念 2、语法规则 3、接口使用 4、接口特性 5、实现多个接口 6、接口间的继承 7、抽象类和接口的区别 8、接口使用实例 9、Clonable 接口和深拷贝 三、Object类…...

作为一个女测试员是什么样的体验?

面试时极度紧张&#xff0c;语无伦次&#xff0c;觉得肯定没戏&#xff0c;最后却拿到高薪offer。 工作之后我听同事们讲&#xff0c;测试总监面试官并没打算要我&#xff0c;但身边的人都问他&#xff1a; 那个小姐姐什么时候来报道&#xff1f;... 于是在众人的期待的目光…...

移动端 REM 适配

Vant 中的样式默认使用 px 作为单位&#xff0c;如果需要使用 rem 单位&#xff0c;推荐使用以下两个工具&#xff1a; postcss-pxtorem 是一款 postcss 插件&#xff0c;用于将单位转化为 rem lib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配置到项目中完成 R…...

哈希表【leetcode】

笔记&#xff1a;代码随想录 理论 概念 哈希表&#xff08;hash table&#xff0c;散列表&#xff09;&#xff1a;是根据关键码的值而直接访问的数据结构&#xff0c;说白&#xff0c;数组就是一张哈希表。 哈希函数&#xff1a;把变量直接映射为表上的索引。 哈希碰撞&a…...

【Gem5】有关gem5模拟器的资料导航

网上有关gem5模拟器的资料、博客良莠不齐&#xff0c;这里记录一些总结的很好的博客与自己的学习探索。 一、gem5模拟器使用入门 官方的教程&#xff1a; learning_gem5&#xff1a;包括gem5简介、修改扩展gem5的示例、Ruby相关的缓存一致性等。gem5 Documentation&#xff1…...

R语言中apply系列函数详解

文章目录applylapply, sapply, vapplyrapplytapplymapplyR语言的循环效率并不高&#xff0c;所以并不推荐循环以及循环嵌套。为了实现循环功能的情况下&#xff0c;兼顾效率&#xff0c;R语言提供了apply系列函数&#xff0c;用于对规则的数据进行函数式的迭代处理。 apply a…...

AOP的另类用法 (权限校验自定义注解)

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 AOP的另类用法 (权限校验&&自定义注解) 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649…...

【机器学习】机器学习建模调参方法总结

文章目录一、前言1.1 数据来源1.2 理论简介二、知识总结2.1 回归分析2.2 长尾分布2.3 欠拟合与过拟合2.4 正则化2.5 调参方法2.5.1 贪心调参 &#xff08;坐标下降&#xff09;2.5.2 网格调参GridSearchCV2.5.3 贝叶斯调参三、建模与调参3.1 线性回归3.1.1 模型建立3.1.2 查看训…...

Python数据分析师|Pandas之基础知识

版权声明&#xff1a;原创不易&#xff0c;本文禁止抄袭、转载&#xff0c;侵权必究&#xff01; 目录一、数据分析简介二、数据分析简介三、数据查看四、知识总结五、作者Info一、数据分析简介 随着科技的发展&#xff0c;数据变得尤为重要&#xff0c;甚至有着“数据为王”&…...

macOS 13.3(22E252)/12.6.4/11.7.5正式版发布

系统介绍 3 月 28 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.3 更新&#xff08;内部版本号&#xff1a;22E252&#xff09;苹果今天还发布了macOS Monterey 12.6.4和macOS Big Sur 11.7.5&#xff0c;本次更新距离上次发布隔了 42 天。 macOS Ventura 带来…...

速度与兼容性功能大比拼:7款浏览器测评,哪一款更好用

还在为使用哪款浏览器而发愁吗&#xff1f;电脑配置低&#xff0c;又想浏览网页顺畅、下载速度快&#xff0c;那么就要挑选功能齐全、速度快的浏览器。话不多说&#xff0c;给大家做了7款浏览器的最全测评&#xff0c;看看2023年哪个浏览器更好用&#xff0c;更适合自己。 本次…...

【建议收藏】2023年中高级软件测试大厂面试秘籍,为你保驾护航金三银四,直通大厂

前言 从几十份顶级面试仓库和300多篇高质量面经中总结出一份全面成体系化的软件测试高级面试题集。 随着软件测试岗位技术发展的成熟&#xff0c;自动化、性能、框架等一下子就进入了我们的视野内&#xff0c;同时&#xff0c;软件测试自身的技术栈也正在不断扩展&#xff0c…...

Cinema 4D 2023.1.3安装包下载及安装教程

[软件名称]:Cinema 4D 2023.1.3 [软件大小]: 1.0GB [安装环境]: Win11/Win 10 [软件安装包下载]: https://pan.quark.cn/s/c2324deaa028 CINEMA 4D字面意思是4D电影&#xff0c;不过其本身就是3D的表现软件&#xff0c;由德国Maxon Computer开发&#xff0c;以极高的运算速度和…...

IDEA vs Eclipse:使用体验对比

1. 概述 IDEA 和 Eclipse 都是常见的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于编写和调试代码。它们都有一些共同的功能&#xff0c;例如代码编辑器、调试器、版本控制等等。但是在具体的使用体验上&#xff0c;它们有很多不同之处。 本文将对 IDEA 和 Eclip…...

新手学SpringCloud前需知道的5点

目录 第一点&#xff1a; 什么是微服务架构 第二点&#xff1a;为什么需要学习Spring Cloud 第三点&#xff1a; Spring Cloud 是什么 第四点&#xff1a; SpringCloud的优缺点 1、SpringCloud优点 2、SpringCloud缺点 第五点&#xff1a; SpringCloud由什么组成 1&…...

Java集合—HashMap为什么2倍扩容 、HashMap的key允许空值而Hashtable却不允许

目录 1. Java集合—HashMap为什么2倍扩容 1.1 从源码分析 2. 为什么HashMap的key允许空值&#xff0c;而Hashtable却不允许 2.1 从源码分析 1. Java集合—HashMap为什么2倍扩容 HashMap的初始容量都是2的n次幂的形式存在的&#xff0c;而扩容也是2倍的原来的容量进行扩容&a…...

国内、外(翻)的新闻网站推荐

也许有很多朋友和我一样&#xff0c;小小螺丝天天关注国家大事&#xff0c;总喜欢在茶余饭后关注下国内外新闻&#xff0c;除了新闻广播和电视之外还能有哪些方式呢&#xff1f;今天就给大家盘点总结一下。 一、国内 1.今日头条&#xff1a;链接&#xff1a;今日头条 推荐等…...

PHP初级教程------------------(2)

目录 运算符 赋值运算符 算术运算符 比较运算符 逻辑运算符 连接运算符 错误抑制符 三目运算符 自操作运算符 ​编辑 计算机码 位运算符 运算符优先级 流程控制 控制分类 顺序结构 分支结构 If分支 ​ Switch分支 循环结构 For循环 while循环 do-while循环 循环控制 ​ …...

js的递归函数——实现可收放的树形菜单

递归函数实现树形菜单创建假数据或者请求接口数据定义递归函数&#xff0c;处理数据调用函数&#xff0c;渲染页面效果展示完整代码树形菜单是一种常见的网站导航方式&#xff0c;它通常由多个层级的菜单项组成&#xff0c;每个菜单项可以有子菜单项。在JavaScript中&#xff0…...

如何高效搭建资产管理平台?众安科技告诉你答案是图技术

本⽂整理⾃ NebulaGraph x 阿⾥云计算巢专场中众安保险的⼤数据应⽤⾼级专家曾⼒带来的《众安资产在 NebulaGraph 的应⽤实践》分享&#xff0c;视频⻅链接。 ⼤家好&#xff0c;我是众安数据科学应⽤中⼼的曾⼒&#xff0c;今天很⾼兴在这⾥可以跟⼤家分享 NebulaGraph 在众安…...

使用mybatis-plus-generator配置一套适合你的CRUD

1、maven引入 mybatis-plus-generator 和模板引擎&#xff0c;你也可以使用freemarker之类的&#xff0c;看个人 <!-- mybatisplus代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactI…...

vue门户网站,滚动到可视化区域展示动画效果方案

1.准备两个工具库&#xff1a; &#xff08;1.1&#xff09; animate.css&#xff1a;动画库 &#xff08;动画效果展示&#xff1a;Animate.css | A cross-browser library of CSS animations.&#xff09; &#xff08;1.2&#xff09;wowjs: 负责滚动到可视化区域&#xff…...

【0180】PG内核读取pg_hba.conf并创建HbaLine记录(1)

文章目录 1. pg_hba.conf文件是什么?2. postmaster何时读取pg_hba.conf?2.1 pg内核使用pg_hba.conf完成客户端认证的原理2.2 读取pg_hba.conf的几个模块3. pg内核读取pg_hba.conf过程3.1 VFD机制获取文件描述符3.2 根据fd读取文件内容相关阅读: 【0178】DBeaver、pgAdmin I…...

【五】线程安全VS线程不安全

1. Java内存模型的特征 Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立。下面逐个看下哪些操作实现这三个特性&#xff1a; 1.1 原子性&#xff08;Atomicity&#xff09; 由Java内存模型来直接保证的原子性变量操作包括 read、load、assig…...

【大屏设计方案】

大屏设计方案一、非等比放大(填充满整个屏幕)目的屏幕比例大小和设计稿的差的不多目的屏幕比例大小和设计稿的差很多二、等比放大&#xff08;比如16&#xff1a;9&#xff09;解决方案之后就可以用rem了&#xff0c;有两种便利的方式&#xff1a;也可以用media 根据不同的屏幕…...

input 标签原生实现数字选择器

在使用开源的UI框架时&#xff0c;实现数字选择器很容易&#xff0c;直接拷贝就行&#xff0c;如iview、elementui...等。但有时项目不使用第三方样式库&#xff0c;这样的话UI控件只能自己实现。笔者就遇到过这样的情况&#xff0c;自己实现数字选择器&#xff0c;下面分享下实…...

大数据项目实战之数据仓库:用户行为采集平台——第3章 用户行为日志

第3章 用户行为日志 3.1 用户行为日志概述 用户行为日志的内容&#xff0c;主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式&#xff0c;有代码…...

zookeeper 学习(一):简单认识zookeeper

zookeeper 学习(一)&#xff1a;简单认识zookeeper zk官网 zk是什么&#xff1f; highly reliable distributed coordination. 来自官网&#xff0c;高可用的分布式协调服务&#xff0c;应用最多的场景就是用来做其他服务中间件的协调者&#xff0c;我最开始接触zk &#xff0c…...

IP 归属用 Ip2region 就够了

文章目录Ip2region 简介是什么特性支持的编程语言案例实操依赖获取IP输入流转化解析IP测试抖音、微博、小红书等各平台相继上线" 网络用户IP地址显示功能"&#xff0c; 境外显示 国家&#xff0c; 境内显示到 省市&#xff0c;且该功能无法关闭&#xff0c;IP地址为强…...

最小生成树kruskal-修建公路1

题目描述 L 城一共有 N 个小区。 小明是城市建设的规划者,他计划在城市修 M 条路,每修建一条路都要支付工人们相应的工钱(需要支付的工钱 = 路的长度)。 然而小明所拿到的经费并不够支付修建 M 条路的工钱,于是迫于无奈,他只能将计划改变为修建若干条路,使得 N 个小区之…...

Linux常用命令汇总

一、文件和文件夹操作 1、进入某一文件夹&#xff1a; cd xxx/yyy/简便记忆&#xff1a;改变目录&#xff0c;change directory&#xff0c;cd 2、复制文件到另一个文件&#xff1a; cp xxx/xxx.yyy ddd/rrr.zzz简便记忆&#xff1a;复制&#xff0c;copy&#xff0c;cp 第…...

vue部署包可配置后台接口地址

有时候一个部署包可能要应用于不同服务器&#xff0c;这就需要频繁更换后台地址。 由此引申出了部署包可直接配置后台地址的需求&#xff0c;这样就不需要频繁打包了。 方法 1. public 新增 config.js 文件&#xff08;会被恶意修改地址&#xff0c;不安全&#xff09; publi…...

企业电子采购系统:采购过程更规范,更透明

满足采购业务全程数字化&#xff0c; 实现供应商管理、采购需求、全网寻源、全网比价、电子招 投标、合同订单执行的全过程管理。 电子招标采购&#xff0c;是指在网上寻源和采购产品和服务的过程。对于企业和企业主来说&#xff0c;这是个既省钱又能提高供应链效率的有效方法…...

php 修改服务器文件上传大小限制

输入docker cp mlfnginx:/etc/nginx/conf.d/pl.conf .输入vimpl.conf 修改nginx配置文件移动到图中所示位置client_max_body_size 按键盘”i”对图中的xxM修改成需要的大小&#xff0c;然后按”esc”&#xff0c;在按”:wq”&#xff0c;最后按回车键输入docker cp ./pl.con…...

5.18国际博物馆日丨看吉林文物里的“显眼包”

现如今,博物馆是“历史”与“网红”的结合体。人们逛博物馆,大都有了自己的方式,比如寻找“显眼包”。一些馆藏文物因外形喜感、憨态可掬,被大家亲切称为“博物馆显眼包”,这些“显眼包”,吸引了不少游客专程去逛馆打卡。5.18国际博物馆日,一起去吉林省各地的博物馆里看…...

同学被冰块卡喉 小学生“海姆立克”法施救

本文转自【央视新闻客户端】;“海姆立克”急救法大家可能已经比较熟悉了。日前,浙江绍兴柯桥一名小学生被冰块卡喉,旁边的同学机智地用“海姆立克”急救法帮他化险为夷。公共场所视频显示,5月8日傍晚,绍兴柯桥的五年级学生李乐鑫和另两名同学一起往家走。突然,身边的男生…...

1个简单动作,就能判断膝盖疼是不是有问题

俗话说得好,人老先老腿,膝关节是人体最主要的承重关节之一,结构复杂灵活,因此也是全身各关节中最容易“生病”的关节。据统计,60 岁以上男性中 60%~70% 的人都患有骨关节炎,女性患病比例则更高。膝关节骨关节炎可以导致关节疼痛,尤其在活动时更明显,严重时可出现关节功…...

突破性能瓶颈: Java 22的性能提升之旅

Java 22带来的性能改进&#xff0c;特别是在垃圾回收&#xff08;GC&#xff09;方面的优化&#xff0c;对于实时系统有着显著的影响。实时系统要求在保证高响应性的同时&#xff0c;还需要保持较高的可靠性和稳定性。以下是一些关键点&#xff0c;展示了Java 22性能改进对于实…...

MMDetection内三个实用工具详解:日志分析、结果分析、混淆矩阵

实用工具目录 一、日志分析使用方法实际案例 二、结果分析pkl结果文件生成使用方法实际案例 三、混淆矩阵使用方法实际案例遇到的UserWarning解决方案 MMDetection官方除了训练和测试脚本&#xff0c;他们还在 mmdetection/tools/ 目录下提供了许多有用的工具。本帖先为大家重点…...

单位内部防泄密策略与技术实践

在信息时代&#xff0c;企业内部数据安全至关重要&#xff0c;尤其是涉及核心竞争力的重要文件&#xff0c;员工的不当操作或恶意泄露都可能给企业带来重大损失。本文将从制度建设、技术防护、以及日常管理三个方面入手&#xff0c;探讨如何构建一套行之有效的内部防泄密体系&a…...

汇凯金业:贵金属投资如何操作

投资贵金属虽然可能看起来令人生畏&#xff0c;但只要你知道如何操作&#xff0c;就可能会变得实际可行。以下是操作贵金属投资的基本步骤&#xff1a; 1. 了解市场 第一步是学习贵金属投资的基础知识&#xff0c;了解市场的运作方式&#xff0c;类型的区别(如黄金、白银、铂…...

Find My资讯|苹果 iOS 17.5 率先执行跨平台反跟踪器标准

苹果和谷歌公司于 2023 年 5 月宣布推出“检测预期外位置追踪器”&#xff08;Detecting Unwanted Location Trackers&#xff09;行业标准&#xff0c;经过 1 年多的打磨之后&#xff0c;该标准目前已通过 iOS 17.5 部署到 iPhone 上。谷歌也将为运行 Android 6.0 或更高版本的…...

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.8

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;优化算法 (Optimization algorithms)2.8 Adam 优化算法(Adam optimization algor…...

数据分析案例-印度美食数据可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

c# 多线程同时只读不写DataTable的数据有没有可能出错,如果多线程并发读修改DataTable,如何处理,多线程同时修改DataTable数据

在C#中&#xff0c;如果多个线程同时执行只读操作&#xff08;即不修改DataTable的内容&#xff09;&#xff0c;从理论上讲&#xff0c;应该是安全的。因为只读操作不会改变DataTable的状态&#xff0c;所以不会出现数据竞争或一致性问题。然而&#xff0c;实际情况可能会受到…...

16 | 缓存策略:如何使用缓存来减少磁盘IO?

使用内存作为缓存来加速应用程序的访问速度,是几乎所有高性能系统都会采用的方法 选择只读缓存还是读写缓存? 使用缓存,首先你就会面临选择读缓存还是读写缓存的问题。他们唯一的区别就是,在更新数据的时候,是否经过缓存。 Kafka 使用的 PageCache,它就是一个非常典型…...