YOLO训练自己的数据集 | 格式转换 | JSON、TXT、XML文件的相互转换

YOLO训练自己的数据集 | 格式转换 | 未完待续... 场景1.将JSON文件转换为TXT文件,并按照比例划分训练集、验证集、测试集☀需求分析🌙转换步骤🌙step 1.将JSON文件转换为XML文件step 2.将XML文件转换为TXT文件,并按照比例划分训练集、测试集、验证集 ------------------------------------------------------------------------------------------场景2.将JSON文件直接转换成TXT文件☀需求分析🌙转换步骤🌙 ------------------------------------------------------------------------------------------场景3.将TXT文件直接转换成JSON文件☀需求分析🌙转换步骤🌙 ------------------------------------------------------------------------------------------场景4.将TXT文件直接转换成XML文件☀需求分析🌙转换步骤🌙 场景1.将JSON文件转换为TXT文件,并按照比例划分训练集、验证集、测试集☀ 需求分析🌙 当我们在使用了Labelme等一系列数据标注软件后,便会得到与图片对应的JSON文件,但我们在训练YOLO模型之前,通常需要将标注数据转换为YOLO能识别的格式,也即TXT文件格式。再用于训练模型。而TXT格式是一种简单易读的文本格式,可以方便地手动修改标签中的信息,例如类别名称、边界框坐标等。将标签转换为TXT格式是为了方便后续的YOLO训练和测试,并提高工作效率。 转换步骤🌙 step 1.将JSON文件转换为XML文件 创建create_xml_anno.py文件 from xml.dom.minidom import Document class CreateAnno: def __init__(self, ): self.doc = Document() # 创建DOM文档对象 self.anno = self.doc.createElement('annotation') # 创建根元素 self.doc.appendChild(self.anno) self.add_folder() self.add_path() self.add_source() self.add_segmented() # self.add_filename() # self.add_pic_size(width_text_str=str(width), height_text_str=str(height), depth_text_str=str(depth)) def add_folder(self, floder_text_str='JPEGImages'): floder = self.doc.createElement('floder') ##建立自己的开头 floder_text = self.doc.createTextNode(floder_text_str) ##建立自己的文本信息 floder.appendChild(floder_text) ##自己的内容 self.anno.appendChild(floder) def add_filename(self, filename_text_str='00000.jpg'): filename = self.doc.createElement('filename') filename_text = self.

一百五十二、Kettle——Kettle9.3.0本地连接Hive3.1.2(踩坑,亲测有效,附截图)

一、目的 由于先前使用的kettle8.2版本在Linux上安装后,创建共享资源库点击connect时页面为空,后来采用如下方法,在/opt/install/data-integration/ui/menubar.xul文件里添加如下代码 <menuitem id="file-openZiyuanku" label="openZiyuanku" command="spoon.openRepository()"/> 共享资源库创建后又遇到任务Save时为空的问题。 首先,在Windows本地安装的kettle8.2,无论有没有连接共享资源库,kettle任务都可以正常执行; 其次,在Linux上安装的kettle8.2启动后, 如果不连接共享资源库,那么kettle任务可以正常运行,没有问题。 只有在连接共享资源库后,kettle任务才无法保存,save页面为空,如下图所示 所以,这可能是kettle8.2与Linux的版本匹配问题,因此换成最新的版本kettle9.3尝试一下 二、版本说明 (一)kettle9.3.0 kettle9.3.0安装包网盘链接 链接:https://pan.baidu.com/s/1MS8QBhv9ukpqlVQKEMMHQA?pwd=dqm0 提取码:dqm0 (二)Hive3.1.2 (三)Hadoop3.1.3 三、前提准备 (一)安装前提:掌握Kettle8.2.0本地连接Hive3.1.2 因为我之前一直用的是kettle8.2,所以kettle9.3连接hive3.1.2时我就直接从kettle8.2的文件夹复制jar包 至于kettle8.2如何本地安装后连接hive,详情请参考鄙人拙作 http://t.csdn.cn/qyuDjhttp://t.csdn.cn/qyuDj (二)Windows本地解压即安装Kettle9.3.0 (三)注意Kettle9.3里MySQL驱动包的版本以及Hive312里MySQL驱动包的版本 1、Hive312的lib里面MySQL驱动包的版本是mysql-connector-java-5.1.37.jar 2、Kettle9.3里MySQL驱动包的版本 mysql-connector-java-5.1.37.jar ; mysql-connector-java-8.0.30.jar 四、安装步骤 (一)根据Hadoop版本在选择对应的文件(千万不要随便选!) 1、文件路径 D:\java\kettle\pdi-ce-9.3.0.0-428\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations 2、Hadoop版本与文件夹对应规则 3、选择文件,复制文件名(Hadoop版本与文件夹一定要匹配!) 因为我的Hadoop版本是Hadoop3.1.3,所以我选择的文件夹是hdp30 注意:kettle9.3的hdp30文件夹里最初只有hdp30\lib\pmr这一个文件夹,与kettle8.2里的hdp30文件夹最初状况大不相同,这也是困扰我许久的原因 (二)修改kettle里pentaho-big-data-plugin文件夹里的源文件plugin.properties 文件路径:D:\java\kettle\pdi-ce-9.3.0.0-428\data-integration\plugins\pentaho-big-data-plugin 只要设置 active.hadoop.configuration=hdp30 (三)根据kettle8.2的hdp30文件夹,把kettle9.3的hdp30文件夹相比而言缺少的部分复制过去 1、第一部分 把kettle8.2的hdp30文件夹里原先的hive、Hadoop的5个配置文件(Hbase文件非必需) 如果项目中kettle的使用过程需要用到Hbase则加上hbase-site.xml文件,如果没用到则不需要 复制到kettle9.3的hdp30文件夹 2、第二部分 把kettle8.2的hdp30\lib文件夹里除了pmr和client两个所有jar包 复制到kettle9.3的hdp30\lib文件夹 2023年8月16日续写 注意:经测试,其实还是只需要hive中hive开头的jar包以及hadoop-common-3.1.3.jar 修改后的kettle9.3的hdp30\lib如下 3、第三部分(与kettle8.2不同之处) 把hive的安装路径hive312/jdbc里的驱动包 复制到 kettle9.3的data-integration\lib文件下 文件路径:D:\java\kettle\pdi-ce-9.3.0.0-428\data-integration\lib (四)启动Hadoop和Hive服务,打开kettle9.3,连接Hive数据库 kettle9.3连接hive312,连接成功! (五)执行从Hive到ClickHouse的kettle任务,测试一下 kettle任务运行成功! (六)注意kettle里的中文乱码问题 解决措施:修改kettle9.3\data-integration里的文件Spoon.bat 文件路径:D:\java\kettle\pdi-ce-9.3.0.0-428\data-integration 注意:Kettle9.3的Spoon.bat文件原有的只是 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="

查找jdk安装路径并且切换多版本jdk

场景:为了重新学习Javaweb,在IDEA中需要下载jdk1.8版本和之前的jdk17版本冲突,所以需要进行转换 系统:win10 JDK下载官网 一.查找JDK安装路径 在切换多版本jdk步骤中需要先知道自己电脑中jdk安装路径 1.JDK已经配置环境 方法一 命令行(仅能找到最主要的一个JDK) 按win+r,在弹出框里输入cmd 进入命令行 输入java -version(中间有空格) 回车 这一步可以查看电脑是否成功安装了已配置环境的jdk 再输入java -verbose(中间有空格) 会出现很多代码,一般位置会出现在第一行和最后几行(我的没有出现就找了别的办法) 如果你的情况和我一样请看补充 补充 输入set java_home 或 echo %java_home% 方法二 查看环境变量(查找多个JDK) 设置->系统->关于->高级系统设置->环境变量 同时选中用户变量和系统变量中的Path 可以看到我之前安装的(我的环境变量有点乱,之前配制很多程序都重命名了,不是很好找😅) 2.jdk未配置环境变量(使用命令行) 该方法只适用1.8版本以及之前的版本,后面的版本没有jre文件 方法:在各盘中搜索jdk中的固有文件(比较麻烦) 以G盘为例 输入cd /d G:(进入G盘命令) 进入G盘后输入DIR /S jre 可以看见第三个目录就是我安装的路径 (第一个目录是由于中文名而引起的乱码) 二.JDK转换前的配置 1.我的两个jdk安装路径为 G:\jdk\1.8.0_381 D:\jdk17 第一步需要手动给jdk17生成一个jre文件夹 在此之前可以查看文件是否有jre文件夹 (1.8版本之后的版本都没有jre文件) 进去D:\jdk17 输入命令: bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre 显示: 结果显示(忘记提前查看了): 第二步配置环境变量 设置->系统->关于->高级系统设置->环境变量 1.在系统变量中添加变量 变量名:JAVA_HOME17 值:D:\jdk17 变量名:JAVA_HOME8 值:G:\jdk\1.8.0_381 变量名:JAVA_HOME 值:%JAVA_HOME17% (选值时选择浏览目录,找到文件目录点击确定即可)

Mac提示文件:已损坏,无法打开。你应该把它移到废纸篓

文章目录 一、电脑信息二、打开任何来源设置三、更改应用程序拓展属性四、Venture 13简介 一、电脑信息 我的是新版的Venture 13的系统。UI改的比较多。与之前的配置还是有很大的区别的。 打开下载的软件,显示已经损坏,打不开。抛开软件本身的问题外,一般是Mac系统对于非认证的第三方软件限制很严格。 二、打开任何来源设置 苹果已经取消了允许“任何来源”的选项。如果不启用“任何来源”的选项,那第三方软件很有可能会受到影响。 打开系统自带的终端执行以下命令。-为英文的。 sudo spctl --master-disable 执行后查看 三、更改应用程序拓展属性 如果还不行,执行一下命令。 # sudo xattr -cr 软件路径 sudo xattr -cr /Applications/Cloud\ Studio.app 其中软件路径:打开 “访达”(Finder)进入 “应用程序” 目录,找到该软件图标,将图标拖到刚才的终端窗口里面。会得到路径。 四、Venture 13简介 苹果 macOS 13 Ventura 正式版发布:台前调度、连续互通相机等来了。 苹果 macOS 13 Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中,台前调度可让用户在专注于眼前工作的同时,也能在各类 App 与窗口之间无缝切换。 Mac 用户可利用连续互通相机将 iPhone 用作网络摄像头。依托连续互通功能,Mac 可以自动识别并使用附近 iPhone 的摄像头,无需用户进行唤醒或选中的操作,iPhone 还可与 Mac 建立无线连接。 连续互通相机则为所有 Mac 电脑带来多项新功能,包括人物居中和人像模式,还有新推出的摄影室灯光。此外,连续互通相机还能利用 iPhone 的超广角摄像头实现桌面视图功能,同时显示用户的面部和办公桌台面的俯视图。 FaceTime 通话 App 也可使用接力功能,让用户在一台 Apple 设备上开启 FaceTime 通话后,可无缝切换至附近的另一台 Apple 设备上继续通话。用户可以先在 iPhone 或 iPad 上进行 FaceTime 通话,然后只需一次点按,便可将通话切换至 Mac 上,又或者先使用 Mac 开启通话,在需要离开座位时将通话切换至 iPhone 或 iPad 上。

Redis数据库的可视化工具AnotherRedisDesktopManager使用+抖音直播小玩法实践

一、它是什么 Another Redis DeskTop Manager 是一个开源项目,提供了以可视化的方式管理 Redis 的功能,可供免费下载安装,也可以在此基础上进行二次开发,主要特点有: 支持 Windows 平台和 MacOS 平台 支持查询 Key、查看单个 Key、Redis 运行状态 支持 String、List、Hash、Set、Zset 类型的可视化添加、修改与删除 二、下载方式 1.GitHub下载 2.Gitee下载 三、如何使用 3.1 新建连接 地址:Redis服务端地址 端口:默认 6379 密码:设置的Redis密码 连接名称:所新建连接的名称,不填会根据地址和端口自动生成 3.2 查看连接 3.3 添加数据 一般情况下,不会直接在可视化工具中进行添加数据等操作,而是通过业务代码对Redis进行操作,可视化工具用来查看数据。在可视化工具操作数据一般用于业务测试。 3.4 设置 可以设置语言,主题颜色等 3.5 查看日志 查看操作日志,方便回溯。 四、实际使用案例讲解 4.1 分库 分为用户库和排行榜库 DB1是用户库,DB4是排行榜库。 4.2 库中字段的含义 r0是积分,r1捣蛋。w是周,w23则表示23周。 r0和r1 和类似,只是字段多少差异 cw consecutive win连胜 cl consecutive lose连输 ranking排名 rankingc排名变化正上升,负下降(之前默认是-1,现已改0) 4.3 查看排行榜 这边有个小技巧,查询的时候需要勾选,查询才会更精准。 对比: 未勾选 勾选 4.4 查看排行榜中用户名称和头像 以上面的第一名为例,到用户库db1中搜索UID,然后可以看到对应的名字和头像

PostgreSQL建立自增主键的两种方法

一、 准备工作 首先创建一张表: create table test( id int primary key, age int ) 二、 第一种方法----创建序列达到自增的效果 1. 创建序列 pgsql里,有种东西叫自增,很像mysql里的约束。建立一个自增的序列,每次需要获取自增主键时,调用一下这个序列就可以了。建立自增主键的序列的语法: CREATE SEQUENCE test_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 CACHE 1; INCREMENT BY : 每次序列增加(或减少)的步长MINVALUE : 序列最小值,NO MINVALUE表示没有最小值MAXVALUE : 序列最大值,NO MAXVALUE表示没有最大值START WITH :以什么序列值开始CYCLE : 序列是否循环使用OWNED BY : 可以直接指定一个表的字段,也可以不指定。 需要自增主键的时候,调用nextval(序列名)就可以了: test=# select nextval('test_id_seq'); nextval --------- 1 2. 序列的相关方法 相关的方法如下(regclass 表示序列的名称): 函数返回类型描述currval( regclass )bigint获取指定序列最近一次使用netxval后的数值,如果没有使用nextval而直接使用currval会出错lastval()bigint返回最近一次用 nextval 获取的任意序列的数值nextval( regclass )bigint递增序列并返回新值setval( regclass,bigint )bigint设置序列的当前数值setval( regclass,bigint ,boolean )bigint设置序列的当前数值以及 is_called 标志,如果为true则立即生效,如果为false,则调用一次nextval后才会生效 需要什么值就去找具体的函数就行了。

解决vue3前端获取文件的绝对路径问题

解决vue3前端获取文件的绝对路径问题 公司的项目是基于vue3的,由于需求需要前端获取用户选的文件的绝对路径。但是浏览器处于安全策略无法获取真实的文件路径,只能拿到相对路径或者是D:\fakepath\xxxx. 看了网上很多方法都很坑,明明没拿到路径非说拿到了,浪费了很多时间,这里要说单纯依靠vue是解决不了的!! 最后选择了引入electron来获取文件的绝对路径。项目已经使用electron进行了打包,所以是可以通过electron方式运行的,现在需要的就是vue的代码中引入electron,进行打开文件管理器,实现文件路径获取。 首先要安装相关的包: npm install --save-dev electron npm install --save-dev electron-builder 所有的界面代码都是在vue项目中完成的所以vue中不再需要preload.js background.js这些文件 electron的通信是通过ipcRenderer实现的 在需要通信的文件中进行调用 const { ipcRenderer } = require('electron') 这时候会报错,错误显示是node_modules/electron/index.js文件中引入fs.existsSync语句造成的 百度查资料得知原因是: (1)、首先在渲染进程属于浏览器端,没有集成Node的环境,所以类似 fs 这样的Node的基础包是不可以使用。 (2)、因为没有Node环境,所以这种属于node api的require关键词是不可以使用的。 (3)、electron5.x的node集成环境默认是关闭的,这之前的版本是默认开启的 方案是在主进程中集成 Nodejs,也就是添加配置nodeIntegration: true vue.config.js配置: pluginOptions: { electronBuilder: { nodeIntegration: true, contextIsolation: false, } } 然后通过使用window.require代替require来引入electron,因为前者不会被webpack编译,在渲染进程require关键字就是表示node模块的系统渲染进程: const { ipcRenderer } = window.require('electron') 这时候又出现 window.require is not a function .错误,这是因为工程是在本地浏览器运行的,识别不了electron中的api,只要保证在electron应用程序下运行就不会报错 解决:npm install --save is-electron function importStudy() { if (isElectron()) { window.

创建Maven项目,JDBC连接mysql数据库 超详细的步骤!!

文章目录 1. 新建数据库(1)打开 MySQLWorkbench(2)新建数据库 test_db(2)新建表 user(3)给user表新增两条数据 2.新建maven项目3.在maven配置文件pom.xml文件中添加mysql驱动器依赖配置并加载依赖如果依赖下载失败,如下图 4. 新建包5. 在包下新建主类6. 运行项目7. 运行结果-控制台打印如下图 1. 新建数据库 请自行安装mysql,安装教程这里不出示啦~~,mysql安装完成后按以下步骤来新建数据、新建表 (1)打开 MySQLWorkbench 安装好mysql之后,找到安装位置打开 MySQLWorkbench (2)新建数据库 test_db (2)新建表 user (3)给user表新增两条数据 2.新建maven项目 3.在maven配置文件pom.xml文件中添加mysql驱动器依赖配置并加载依赖 <!-- 继承Springboot的父项目 父级项目的作用:在父级项目中,规定好依赖的版本 子项目带入依赖的时候可以不写版本号,会依赖父级项目的版本 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> </parent> <dependencies> <!-- 引入SpringBoot的web支持 如果 groupId 和 父级项目一样,说明都是SpringBoot的依赖 可以不写版本号 会依赖父级项目的版本 spring-boot-starter-web 是web环境启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加MySQL驱动器的依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> </dependencies> 如果依赖下载失败,如下图 解决方案: 4. 新建包 输入包名,输入完成后回车 5. 在包下新建主类 MysqlConnectionDemo1文件的代码如下

解决 IDEA出现 java: 程序包javax.servlet不存在 问题

错误信息如图所示: 解决如下: 1.点击File → Project Strcture 2.转到如下页面:第一步:点击Libraries,第二步:点击+ 3.出现New Project Library,点击Java 4.弹出如下页面:在Tomcat解压文件夹下选择lib文件找到servlet-api.jar,点击ok 5.应用该包,如图所示,点击Apply即可 完成以上步骤Tomcat就可以运行啦!

【Java】Web应用的文件上传下载

🎄欢迎来到@边境矢梦°的csdn博文🎄 🎄本文主要梳理Web应用的文件上传下载🎄 🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕 目录 📂 文件上传下载介绍🗂️ 📂 第一章:上传轻松,让文件飞!🚀 📤基本原理(很细致, 也很易懂) 📂 第二章:下载无障碍,一键畅享!🔗 📥基本原理 📌MIME类型 📂 第三章:细节!🗂️ 📂 文件上传下载介绍🗂️ 文件的上传和下载,是常见的功能。 后面项目就使用了文件上传下载。 如果是传输大文件,一般用专门工具或者插件 文件上传下载需要使用到两个包 , 需要导入 说明: 📂 第一章:上传轻松,让文件飞!🚀 📤基本原理(很细致, 也很易懂) 注 : 其实主要就是DiskFileItemFactory 用于构建一个解析上传数据的工具对象 ServletFileUpload 创建一个解析上传数据的工具对象 List<FileItem> 解析器把表单提交的text/文件, 封装到 FileItem 文件项中 (多个FileItem构成的List) 客户端向服务器发送HTTP POST请求,其中包含要上传的文件数据。通常,这是通过HTML表单提交实现的。Tomcat服务器接收到该请求并将其路由到对应的Servlet。Servlet通过使用Apache Commons FileUpload库或Java Servlet API提供的multipart/form-data解析器来处理文件上传请求。解析器会读取请求的内容,并将文件数据分解为多个部分。对于每个文件部分,解析器会创建一个FileItem对象,该对象表示文件或表单字段。=== > 上传的文件的相关信息,如文件名、大小、内容等。如果使用的是Apache Commons FileUpload库,通常会使用DiskFileItemFactory类来创建FileItem对象,该对象负责存储文件数据。文件数据可以按照事先设定的大小阈值存储在内存中,或者超过阈值时被写入磁盘上的临时文件。这取决于DiskFileItemFactory的配置。Servlet通过遍历所有的FileItem对象来获取文件的相关信息,如文件名、大小、类型等,并将文件保存到指定的目录中。在完成文件上传后,Servlet可以对上传的文件进行进一步操作,如文件处理、保存到数据库等。 🌰示例 : 点击圆圈选择图片并输入文字上传到服务器 ✍️ 代码 : @WebServlet(urlPatterns = {"/fileUploadServlet"}) public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //System.

stable-diffusion的webui和comfyuig共享模型路径

1.修改上图extra_model_paths.yaml.example为extra_model_paths.yaml #Rename this to extra_model_paths.yaml and ComfyUI will load it #config for a1111 ui #all you have to do is change the base_path to where yours is installed a111: base_path: path/to/stable-diffusion-webui/ checkpoints: models/Stable-diffusion configs: models/Stable-diffusion vae: models/VAE loras: | models/Lora models/LyCORIS upscale_models: | models/ESRGAN models/RealESRGAN models/SwinIR embeddings: embeddings hypernetworks: models/hypernetworks controlnet: models/ControlNet #other_ui: # base_path: path/to/ui # checkpoints: models/checkpoints # gligen: models/gligen # custom_nodes: path/custom_nodes 2.将base_path: path/to/stable-diffusion-webui/修改成你的/stable-diffusion-webui安装路径(例如:base_p: D:/stable-diffusion-webui) 做个记录

python微信PC端自动化-获取聊天记录

背景 目前已有许多微信客户端的自动化工具,可供我们自动获取聊天记录、发送消息等等。不过微信网页版现在已无法登录,因此一些python库如itchat、wxpy等已经无法使用了(基于网页)。 现在有大佬开发出了一个好玩的微信自动化python库——wxauto。wxauto基于uiautomation、win32gui等自动化工具,利用windows桌面协议模拟用户的鼠标、键盘事件,实现对微信PC端的自动化操作,可供我们用于开发微信聊天机器人、群管理机器人等等。 github地址:https://github.com/cluic/wxauto 项目准备 1. 微信PC客户端 (注:这里最好把微信客户端升级至较新版本) 2. python3.x 3. wxauto pip install wxauto -i https://pypi.tuna.tsinghua.edu.cn/simple 具体方法 1. 获取默认窗口的聊天记录 不指定好友或微信群时,获取微信客户端当前显示的窗口聊天记录。获取范围是当前窗口滚动条所能达到的范围。 from wxauto import * wx = WeChat() # 获取当前微信客户端 wx.GetSessionList() # 获取会话列表 def get_default_messages(): # 调用wxauto中的方法:GetAllMessage msgs = wx.GetAllMessage for msg in msgs: print('%s : %s' % (msg[0], msg[1])) if __name__ == '__main__': get_default_messages() 2. 获取指定好友或群聊天记录 若想指定获取某人或者某个微信群的聊天记录,wxauto中有一个ChatWith的方法,可以指定获取的聊天窗口: def ChatWith(self, who, RollTimes=None): ''' 打开某个聊天框 who : 要打开的聊天框好友名,str; * 最好完整匹配,不完全匹配只会选取搜索框第一个 RollTimes : 默认向下滚动多少次,再进行搜索 ''' self.

人工智能原理概述 - ChatGPT 背后的故事

大家好,我是比特桃。如果说 2023 年最火的事情是什么,毫无疑问就是由 ChatGPT 所引领的AI浪潮。今年无论是平日的各种媒体、工作中接触到的项目还是生活中大家讨论的热点,都离不开AI。其实对于互联网行业来说,自从深度学习出来后就一直很火。但由于之前 AI 在可变现能力方面,最广泛的应用是推荐算法,导致普罗大众对 AI 这个词也有点乏味了。不过2022年11月 ChatGPT 横空出世,短短在两个月内迅速破圈,月活用户达到一亿成为全球的顶级产品。有人说这是 AI 技术的奇点,AI 很快就能代替更多的工作;也有人说它总会说套话,只是一个更聪明的聊天机器人罢了。无论如何不可否认的是,人工智能就是下个技术革命的开始。AI 并不会淘汰人类,AI 只会淘汰不会使用 AI 的人类。 目录 一、人工智能历史二、机器学习2.1 预测函数2.2 代价函数2.3 梯度计算 三、深度学习3.1 神经网络3.2 CNN3.3 模型 = 黑匣子3.4 显卡 = 算力 四、ChatGPT 原理4.1 LLM4.2 生成过程4.3 训练过程4.4 Prompt 五、总结 一、人工智能历史 虽然 AI 出现在大众视野中的时间并不长,但相关理论在上个世纪就已经有了雏形。 1940年,控制论中阐述探索调节系统的跨学科研究,它用于研究控制系统的结构、局限和发展。这是关于人、动物和机器如何相互控制和通信的科学研究。1943年,美国神经科学家麦卡洛克、皮茨提出神经网络,并制作了一个模型叫 M-P 模型。1950年,随着计算机科学、神经科学、数学的发展,图灵发表了一个跨时代的论文,提出了一个很有哲理的The Imitation Game也称为图灵测试。大意是指:人与机器聊天的过程中,如果无法发现对方是机器,则称为通过图灵测试。1956年,马文明.斯基、约翰.麦卡锡、克劳德.香农(信息论奠基者)举行了一个会议:达特茅斯会议。其主要议题就是人们到底能否像人一样思考,并且出现了 AI 这个词。1966年,MIT 的聊天机器人Eliza, 之前的系统都是基于 PatternMatching 模式匹配,基于规则的。1997年,IBM 深蓝战胜了象棋冠军。多伦多大学的辛顿将反向传播算法BP引入到人工智能当中;纽约大学的杨立昆,著名贡献就是卷积神经网络CNN;蒙特利尔大学的本吉奥(神经概率语言模型、生成对抗性网络)。2010年,机器学习里面的一个领域 Artificial Neural Networks 人工人神经网络开始闪光。 二、机器学习 机器学习的常见任务就是通过训练算法,自动发现数据背后的规律,不断改进模型,然后做出预测。机器学习中的算法众多,其中最经典的算法当属:梯度下降算法。它可以帮我们去处理分类、回归的问题。通过y=wx+b这种式子线性拟合,让结果趋近于正确值。 2.1 预测函数 假设我们有一组因果关系的样本点,分别代表一组有因果关系的变量。比如是房子的价格和面积,人的身高和步幅等等。常识告诉我们,他们的分布是正比例的。首先,梯度下降算法会确定一个小目标–预测函数,也就是一条过原点的直线 y = wx。我们的任务就是设计一个算法,让这个机器可以拟合这些数据,帮助我们算出直线的参数w。 一个简单的办法就是随机选一条过原点的直线,然后计算所有样本点和它的偏离程度。再根据误差大小来调整直线斜率 w

大疆算法笔试题目解析(二)计算机视觉

二、计算机视觉(100分) 1.(20分)(特征点匹配)给定两幅图像 A A A和 B B B,要求对两幅图中的特征点 x i , i = 1 , . . , m , x_i, i=1,..,m, xi​,i=1,..,m,和 x i ′ , j = 1 , . . , n x_i',j=1,..,n xi′​,j=1,..,n进行匹配。特征点的结构为:{ x , y x,y x,y坐标,128 位描述子},即 x = { i n t x , i n t y , f l o a t d e s c [ 128 ] } x=\{int\,x,int\,y,float \hspace{2pt} desc[128]\} x={intx,inty,floatdesc[128]}.

Java课程设计——学生寝室管理系统的设计与实现

1.基本思路 首先用JFrame类创建初界面、登录界面、教师用户注册界面、学生用户注册界面、教师功能界面、学生功能界面、管理员功能界面。 然后各界面添加各自的按钮,并对按钮进行事件监听,通过类方法或jdbc连接数据库实现相应的功能。 再用JFrame类装JTable,JTable装数据库中的数据。 最后通过更改背景颜色、添加图片或图标丰富界面内容。 2.课程设计报告中可能需要的素材 2.01功能框架图 2.02 系统E-R图 2.03数据库里创建的的用户表 2.04 数据库里创建的的学生宿舍信息表 2.05添加功能流程图 2.06修改功能流程图 2.07删除功能流程图 2.08注册流程图 2.09系统流程图 2.10管理员功能界面流程图 3.数据库脚本 学生宿舍信息表以学籍号作为主码 用户信息表以用户名作为主码 //创建学生宿舍数据库 create database stu-dor; //进入学生宿舍数据库 use stu_dor; //创建学生宿舍信息表(学籍号作为主码) create table Dinfo(name char(20) not null, -> sno char(9) check(sno>200000000 and sno<203000000)primary key, -> sex char(2) check(sex in('男','女'))not null, -> age smallint, -> bno char(4) check(bno in('左一','左二','右一','右二')), -> Dno int check(Dno>99 and Dno<700)not null, -> Sapb smallint check(Sapb>00 and Sapb<31)not null -> ); //创建用户信息表(用户名作为主码) create table user(username char(200)primary key,password char(200)not null); //插入管理员用户名和密码数据 insert into user values('Admin','123456'); //插入学生宿舍信息数据 insert into Dinfo values('李勇','202105122','男',19,'左一',100,01); insert into Dinfo values('江城','202105123','男',19,'左二',100,01); insert into Dinfo values('王弘文','202105124','男',19,'右一',100,01); insert into Dinfo values('刘烨伟','202105125','男',19,'右二',100,01); insert into Dinfo values('沈希文','202105126','男',19,'左一',101,01); insert into Dinfo values('宁鸿恩','202105127','男',19,'左二',101,01); insert into Dinfo values('孙玄华','202105128','男',19,'右一',101,01); insert into Dinfo values('秦哲瀚','202105129','男',19,'右二',101,01); insert into Dinfo values('王梦琪','202105130','女',21,'左一',401,18); insert into Dinfo values('梨香巧','202105131','女',21,'左二',401,18); insert into Dinfo values('刘代云','202105132','女',20,'右一',401,18); insert into Dinfo values('李海莲','202105133','女',21,'右二',401,18); insert into Dinfo values('周千萍','202105134','女',20,'左一',402,18); insert into Dinfo values('曹芷巧','202105135','女',20,'左二',402,18); insert into Dinfo values('钱冬云','202105136','女',19,'右一',402,18); insert into Dinfo values('沈笑白','202105137','女',22,'右二',402,18); 4.

MQ的快速入门及RabbitMQ的五种工作模式

目录 MQ基本知识 MQ基本概念 MQ概述 MQ的优势和劣势 优势 劣势 RabbitMQ 简介 基础架构 相关概念 JMS RabbitMQ安装 在线拉取镜像 安装MQ 访问控制台(http://ip地址:15672) 工作模式 简单模式(生产者消费者模式) Work Queues 工作队列模式 Pub/Sub 订阅模式 Routing 路由模式 Topics 通配符模式 Springboot集成RabbitMQ MQ基本知识 MQ基本概念 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。 MQ概述 MQ,消息队列,存储消息的中间件 分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信 发送方称为生产者,接收方称为消费者 MQ的优势和劣势 优势 应用解耦 当我们通过直接通过订单系统下单会进行一系列操作,比如会咨询库存系统,查询对应的商品是否有充足的库存,此时如果库存系统挂了,那整个系统就陷入瘫痪 使用 MQ 使得应用间解耦,提升容错性和可维护性。订单系统此时直接与MQ这一中间件对接,即使后面系统瘫痪,订单系统也不会瘫痪 异步提速 一个下单操作耗时:20 + 300 + 300 + 300 = 920ms 用户点击完下单按钮后,需要等待920ms才能得到下单响应,太慢! 使用MQ之后,用户点击完下单按钮后,只需等待25ms就能得到下单响应 (20 + 5 = 25ms)。 提升用户体验和系统吞吐量(单位时间内处理请求的数目)。 削峰填谷 在一瞬间面对大量并发请求时,系统可能直接崩溃 引入MQ之后,可以先将大量请求都缓冲到MQ中,再通过MQ缓慢向系统发送请求,达到削峰填谷的作用 劣势 系统可用性降低、 系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。如何保证MQ的高可用?

【数据结构】反转链表、链表的中间节点、链表的回文结构(单链表OJ题)

正如标题所说,本文会图文详细解析三道单链表OJ题,分别为: 反转链表 (简单) 链表的中间节点 (简单) 链表的回文结构 (较难) 把他们放在一起讲的原因是: 反转链表 和 链表的中间节点 是 链表的回文结构 的基础 为什么这样说?请往下看: 目录 1. 反转链表 做题思路 画图理解 代码实现 2. 链表的中间节点 做题思路 画图理解 代码实现 3. 链表的回文结构 做题思路 画图理解 代码实现 1. 反转链表 LeetCode链接:206. 反转链表 - 力扣(LeetCode) 💭做题思路 遍历链表,改变每个节点的链接方向,使其链向前节点如果是第一个节点,使其链向 NULL 这里需要3个指针: cur 指向当前需要修改的节点 prev 记录 cur 的前一个节点, cur 要链向此节点 next 记录 cur 的后一个节点,避免 cur 改变链接方向后找不到下个节点 🎨画图理解 ✍️代码实现 struct ListNode* reverseList(struct ListNode* head) { struct ListNode* cur = head; struct ListNode* prev = NULL; while (cur !

Hadoop Hbase Hive 版本对照一览

这里写目录标题 一、Hadoop 与 Hbase 版本对照二、Hadoop 与 Hive 版本对照 官网内容记录,仅供参考 一、Hadoop 与 Hbase 版本对照 二、Hadoop 与 Hive 版本对照

Java发送form-data请求

在Java中发送form-data请求,可以使用Apache HttpClient或OkHttp这样的HTTP客户端库来发送请求。 一、HttpClient 1.添加依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> 2.代码 package request; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import java.io.File; import java.io.IOException; public class FormDataExample { public static void main(String[] args) throws IOException { String url = "http://127.0.0.1:3000/aaa/fileUpload.jsp"; MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addTextBody("text2", "value1"); builder.addTextBody("text3", "value2"); builder.addBinaryBody("file1", new File("D:\\fanwei\\学习\\工具地址.txt"), ContentType.APPLICATION_OCTET_STREAM, "filename2.txt"); String StringResult = sendPostFormData(url, builder); System.out.println(StringResult); } /** * @param url 请求地址 * @param builder * @return */ public static String sendPostFormData(String url, MultipartEntityBuilder builder){ String StringResult = "

编程小白必看!Visual Studio 2022详细安装使用教程(C/C++编译器)

目录 【前言】 一、Visual Studio 2022简介 二、Visual Studio 2022下载安装 1.Visual Studio 2022下载地址 2.Visual Studio 2022安装 2.1下载完成后点击打开安装 2.2安装完毕以后需要重启软件,点击确定。 三、Visual Studio 2022使用教程 【最后】 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨系列专栏:C语言初阶、代码小游戏🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 【前言】 今天给大家推荐的编程软件是Visual Studio 2022,对于初学C语言的同学,Visual Studio 2022还是比较容易上手的,下面我来给大家详细讲解其安装使用教程。 一、Visual Studio 2022简介 微软在官方开发博客中宣布,于2021年夏季发布 Visual Studio 2022 的首个预览版,2022 版本更快、更易于使用、更轻量级,专为学习者和构建工业规模解决方案的人设计。64 位版的 Visual Studio 不再受内存限制困扰,主 devenv.exe 进程不再局限于 4GB,用户可以打开、编辑、运行和调试最大和最复杂的解决方案。 二、Visual Studio 2022下载安装 1.Visual Studio 2022下载地址 Visual Studio 2022官方下载 点进去可以看到有三个版本,这里我们只需要下载Community 2022(社区版)就好,这个版本是完全免费的。 2.Visual Studio 2022安装 2.1下载完成后点击打开安装 下一步对于C语言初学者来说应该选择C++的桌面开发,其它的话学C语言期间暂时用不到。等到以后可以继续进来修改所以暂时不点。 默认语音包为中文(简体) 安装位置可以自行选择,完成以后就可以点击安装了。 2.2下载安装过程中不成功,网速0KB/s怎么办 问题原因: 出现这类问题,是电脑DNS设置问题,只需要修改电脑的DNS即可。 修改DNS 一般笔记本电脑上网有两种情况,以太网和WiFi。