在谷歌colab运行YOLO系列(重要比在云服务器搭建运行快)

news2024/11/25 16:57:19

在谷歌colab运行YOLO系列(重要比在云服务器搭建运行快)

  • 一、谷歌云硬盘
  • 二、克隆 YOLOV5进行运行测试
    • 1,修改prepare文件中的参数
    • 2,修改voc.yaml
    • 3,修改yolov5s.yaml
    • 4,防止colab自动断开的方式(必须要做的)
    • 5,断点续训

一、谷歌云硬盘

BS 10 EPOCH 200 WORKER 16

https://drive.google.com/drive/my-drive
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

https://colab.research.google.com/drive/1GUyOrIBdNKRn0kzUPoydMZ17mC008Exn

此处类似notebook,可以修改名称

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

视频演示的是在darknet下运行如下
在这里插入图片描述

二、克隆 YOLOV5进行运行测试

cd /content/drive/MyDrive

前面进入了当前文件夹下了

然后克隆(这里建议不要克隆,直接上传文件到云端硬盘,上传YOLOV5,克隆的与本地不太一样)

!git clone https://github.com/ultralytics/yolov5

在这里插入图片描述

命令输错如下
在这里插入图片描述

克隆失败应该是没有git这个程序,那么直接上传YOLOV5的文件夹即可
在这里插入图片描述
在这里插入图片描述

直接克隆的YOLOV5太精简,安照上面格式添加weights权重文件夹,上传权重文件,传一个使用的即可s
在这里插入图片描述

视频中的修改配置等

在这里插入图片描述

!/usr/local/cuda/bin/nvcc --version

在这里插入图片描述

剩下的修改配置文件等就看YOLOV5的训练自己的数据集中的操作了

如何将我的数据集传到对应文件夹下,直接在云端硬盘界面上传数据集

如下:
在这里插入图片描述
在这里插入图片描述

这里上传已经预处理好的数据集

或者上传数据集然后 在线预处理等

执行python命令也要加感叹号
在这里插入图片描述

修改配置文件等可以直接在上面操作

上传权重文件先

直接克隆的YOLOV5太精简,安照上面格式添加weights权重文件夹,上传权重文件,传一个使用的即可s

上传数据集
在这里插入图片描述

这里将本地已经加压好的VOC原始数据集上传,还没有预处理的
预处理文件要根据自己的类别进行更改

1,修改prepare文件中的参数

在这里插入图片描述

修改配置文件

在这里插入图片描述

注意链接时要选择GPU这里的CPU感觉处理太慢

运行个CPU处理文件都这么慢
在这里插入图片描述

!python prepare_data.py

需要注意的是此处在线执行预处理,是比较慢一些的(下次直接在本地预处理,然后将预处理好的文件上传即可)

2,修改voc.yaml

修改配置文件

#download: bash data/scripts/get_voc.sh

上方注释掉,不需要在网络上下载数据集
注意还要将其重命名为voc_ball.yaml 或者不用
在这里插入图片描述

# download command/URL (optional) 
#download: bash data/scripts/get_voc.sh 
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 
3) list: [path1/images/, path2/images/] 
train: ./VOCdevkit/images/train/   
val: ./VOCdevkit/images/val/   

在这里插入图片描述

# number of classes 
nc: 1 
# class names 
names: ['ball']

3,修改yolov5s.yaml

这里的训练集路径,验证集路径

Nc为分类标签的个数,这里只有一个类别1
下面names是类别名称
在这里插入图片描述
在这里插入图片描述

在notebook中更换配置为GPU
在这里插入图片描述

!python train.py --data data/voc_ball.yaml --cfg models/yolov5s_ball.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 50 --workers 4 

在这里插入图片描述

这里发现使用其TPU也是运行很快,比自己的云服务器还要快一些

在这里插入图片描述

缺点就是必须保持网站的在线状态,这样的话我自己在云服务器登录此谷歌云盘,然后链接点击运行测试岂不就可以一直运行了(离线好像只能保存到1个小时?)

!python train.py --data data/voc_ball.yaml --cfg models/yolov5s_ball.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 50 --workers 8

现在测试workers为8即默认状态 会不会溢出内存
在2核2G下是溢出失败了,直接谷歌实验室的话不知道多久可以
在这里插入图片描述

在这里插入图片描述

再次重新运行发现可以了,此时即便是workers为8也是可以的,不会超出内存,并且运行速度也很快(比自己的云服务器2核2G的快多了)差不多10分钟能训练一轮,那50轮是500分钟大概(8,9个小时)

https://blog.csdn.net/bornfree5511/article/details/106980379

4,防止colab自动断开的方式(必须要做的)

方法一
在Firefox和Chrome中,在colab页面,按Ctrl+Shit+i,打开检查页面(也可以右击鼠标,选择“检查”),并切换到控制台或terminal标签,chrome中为Console。
粘贴以下代码:

function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click() 
}
setInterval(ConnectButton,60000);

执行了代码后,记下弹出的数字,那是intervalId,当想停止这段代码的执行时,只需要执行

clearInterval(intervalId)

就可以了,比如Id是340,那么就是clearInterval(340)。

在这里插入图片描述

浏览器打开状态最长运行时间是12小时

当浏览器关闭,最长运行使用则是90分钟

所以一个解决方案是在手机浏览器打开此实例运行(并且训练时长不要超过12小时)

在云服务器上使用还比较慢来,是国内服务器即便搭建小火箭访问国外也是慢,那么直接使用国外的云服务器访问怎样

半个小时才训练1轮bs16 workers8 谷歌实验室 TPU

如果连接上GPU呢?

还是无法连接到GPU

那么CPU也是可以的,那么就试试吧

算了等2C2G的训练完成了用它上面的网络测试

在海外云服务器上登陆谷歌实验室,链接如下,发现点击链接时链接的是GPU
https://colab.research.google.com/drive/1GUyOrIBdNKRn0kzUPoydMZ17mC008Exn

在这里插入图片描述

先进入到项目路径下

然后执行训练的代码如下

!python train.py --data data/voc_ball.yaml --cfg models/yolov5s_ball.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 50 --workers 8 

第一次运行错误,得再次运行播放
在这里插入图片描述

如上已经可以调用GPU了,训练速度及其快

5,断点续训

在这里插入图片描述

https://blog.csdn.net/weixin_38346042/article/details/119778080

当遭遇停电等不可预料的状态时,可以如上根据最新的pt文件再继续训练

注意断点续传,是需要前面后面环境相同的

即前面GPU后面还要GPU,否则训练报错

先关闭远程服务器,让其自己在那训练,浏览器先不关闭了

14:55开始,

15:11 已经到第8个轮次了,平均2分钟1个轮次,太快了太爽了

15:28 运行到18轮次

估计100分钟就训练完成了,之前使用云服务器2核2G训练了3天的。
也就一个小时40分钟

正好1个小时就完成了

这个算是跑通了

那么训练的服务器及方式不用担心了,那么此时需要管什么了

!/usr/local/cuda/bin/nvcc --version

我们可以查看GPU的版本
在这里插入图片描述

torch.cuda.is_available()
cuda是否可用;

torch.cuda.device_count()
返回gpu数量;

torch.cuda.get_device_name(0)
返回gpu名字,设备索引默认从0开始;

torch.cuda.current_device()
返回当前设备索引;

查看显卡信息如下

https://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html
查看谷歌实验室的硬件环境信息

!nvidia-smi

在这里插入图片描述

!lscpu

在这里插入图片描述

查看内存

!free -m

在这里插入图片描述

总内存 12991MB,也就是12G的内存

!uname -a

在这里插入图片描述
在这里插入图片描述

!cat /etc/issue

在这里插入图片描述

谷歌实验室是Ubuntu 18.04.5 LTS \n \l,
NVIDIA-SMI 470.57.02 Driver Version: 460.32.03 CUDA Version: 11.2
Intel® Xeon® CPU @ 2.30GHz

1CPU 1核12G 的

使用的python版本为3.7.11的版本

在这里插入图片描述

1核16G的

方法登录云服务器,安装chrome浏览器(登录谷歌云端硬盘及实验室进行测试)

发现每天有限制使用谷歌免费的GPU

那么尝试其他的云服务器的免费的GPU资源

腾讯云
https://cloud.tencent.com/act/pro/freegpu
7天免费试用

先等等吧,准备一下自己的数据集

数据集如何准备(只准备一个零件的还是多个零件都准备,然后全部的定位)

那么进行两个目标检测(一个零件的类别)

一个(缺陷的类别)

https://www.zhihu.com/question/271520755

发现很多的GPU服务器厂商,一周的话48元钱

那么直接租借一周如何

https://featurize.cn/?s=db3893519c0f42f0a047494763888c3f
https://matpool.com/edu
在这里插入图片描述

报错如上

原因找到,通过prepare转换的标签文件全部是空的,所以在本地转换为标签文件再进行上传
在这里插入图片描述
在这里插入图片描述

先在本地运行将数据集分类好,再进行上传分类好的数据集

Prepare预处理之后的文件是空的这怎么办

终于找到问题了(prepare准备数据集的时候也是需要改参数的)

936 882 正好找到54个了,下面将其一一删除即可

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__09-47-35-21.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__09-51-26-3.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__09-51-26-5.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__09-53-29-10.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__09-53-29-17.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-01-16-10.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-02-42-11.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-02-42-4.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-07-29-13.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-07-29-2.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-07-29-3.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-12-15-19.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-12-15-20.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-10.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-11.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-12.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-2.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-4.jpg


E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-8.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-16-02-9.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-14.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-16.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-17.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-18.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-19.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-2.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-20.jpg
E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-21.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-22.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-23.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-3.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-5.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-6.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-7.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-01__10-17-41-8.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-42-52-24.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-44-12-2.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-44-12-20.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-51-21-3.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-55-37-15.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-55-37-19.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-55-37-5.jpg


E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-55-37-6.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-55-37-7.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__10-57-26-4.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-17-10-18.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-17-10-22.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-17-10-8.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-18-41-22.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-18-41-23.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-24-50-19.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-26-06-10.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-26-06-8.jpg

E:\工业零件数据集\LZC_Data\VOCdevkit_mobian\VOCdevkit\VOC2007\JPEGImages\Image__2021-09-02__11-26-06-9.jpg

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

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

相关文章

今日指数项目个股描述功能实现

个股描述功能实现 1 个股描述功能实现说明 1)原型示意 2)接口说明 功能描述:个股主营业务查询接口 服务路径:/api/quot/stock/describe 服务方法:GET 请求参数:code #股票编码 响应参数: {…

Koa2项目实战3 (koa-body,用于处理 HTTP 请求中的请求体)

以用户注册接口为例,需要在请求里携带2个参数:用户名(user_name)和密码(password)。 开发者需要在接口端,解析出user_name 、password。 在使用Koa开发的接口中,如何解析出请求携带…

八、Drf解析器

八、解析器 8.1概念 解析用户请求发送过来的数据(常用的是JSON) 请求类型: get: ​ 方式1: http://127.0.0.1/web/?arg1v1&arg2v2 ​ 方式2:通过请求头发送 post: ​ 请求头: ​ content-typ…

数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)

数据库管理247期 2024-10-04 数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)1 分区、表空间和Chunk(块)2 表空间组3 分片表4 分片表族5 复制表6 在所有分片上创建的非表对象总结 数据库管理-第247期 …

C++——模板进阶、继承

文章目录 一、模板1. 非类型模板参数2. 模板的特化函数模板特化类模板特化1. 全特化2. 偏特化部分特化参数更进一步的限制 二、继承1. 概念2. 定义定义格式 3. 继承基类成员访问⽅式的变化4. 继承类模板5.基类和派⽣类间的转换6. 继承中的作⽤域隐藏规则: 7. 派⽣类…

LinuxO(1)调度算法

概念 在Linux中,O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的,与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列,一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…

阳台山足球营地的停车位探寻

阳台山足球营地的环境是真好哈。停车场名称:阳台山森林公园配套停车场。应该很多爬山的人车子也停在这里。而且我没想到的,阳台山的山泉水还有不少居民每天提着空桶去山上装。看来环境是真的很好哈 停车场有地面和地下停车场,停车位个数查不…

Linux驱动开发(速记版)--设备模型

第八十章 设备模型基本框架-kobject 和 kset 80.1 什么是设备模型 设备模型使Linux内核处理复杂设备更高效。 字符设备驱动适用于简单设备,但对于电源管理和热插拔,不够灵活。 设备模型允许开发人员以高级方式描述硬件及关系,提供API处理设备…

若依使用(二次开发)

RouYi-MT RouYi-MT下载: 下载地址 RouYi-MT的使用(修改若依代码中文件夹得统一包名) 将对应的Springboot文件压缩成压缩包。 填写对应的参数,生成修改后的文件。 开发步骤 1.创建子项目到RouYi-springboot中,添加…

简单易懂的springboot整合Camunda 7工作流入门教程

简单易懂的Spring Boot整合Camunda7入门教程 因为关于Spring Boot结合Camunda7的教程在网上比较少,而且很多都写得有点乱,很多概念写得太散乱,讲解不清晰,导致看不懂,本人通过研究学习之后就写出了这篇教学文档。 介…

我的创作纪念日一年

目录 机缘 收获 日常 成就 憧憬 机缘 我之所以开始写CSDN博客,源于一段特殊的时光。去年此时,我独自待在实验室,周围的世界仿佛与我无关。没有旅游,没有与朋友的欢聚,情感的挫折和学业的压力如潮水般袭来。在这样的…

2025舜宇招聘【内推码】

【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇集团2025届全球校园招聘正式启动!!! 专业需求:机械、自动化、电子、电气、通信、控制、测控、计算机、软件、物理、光学等专业; 工作地点:宁波余姚、浙江杭州、广东…

97. UE5 GAS RPG 实现闪电链技能(二)

书接上回,如果没有查看上一篇文章的同学推荐先看上一章,我们接着实现闪电链技能。 在上一章最后,我们实现了闪电链的第一条链,能够正确显示特效,接下来,我们先实现它的音效和一些bug修复。 我们在多端网络里…

(9)MATLAB瑞利衰落信道仿真2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、瑞利衰落信道二、瑞利衰落信道建模三、仿真结果二、高斯随机变量和瑞利随机变量后续 前言 本文首先给出瑞利衰落信道模型,并根据瑞利衰落变量估…

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介:云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用,这期来说一说数组的基本使用 HelloJNI.java:实现myArray函数,把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…

AI编程工具的崛起:效率提升的未来在哪里?

你正在使用的编程工具会被淘汰吗?AI编程工具正在改变这一切! 在日益忙碌的开发世界里,工具的选择决定了开发者的工作效率。在过去的十年里,从代码编辑器到版本控制工具,各种工具帮助开发者逐步优化了工作流程&#xf…

C/C++逆向:函数逆向分析-调用约定分析

在进行函数逆向分析时,分析其函数调用约定具有非常重要的作用,因为调用约定直接影响了函数的参数传递、返回值、栈管理、寄存器使用等多个方面,不同的编译器和平台可能有不同的默认调用约定,识别调用约定可以帮助判断代码是由哪种…

HTB:Mongod[WriteUP]

连接至HTB服务器并启动靶机 靶机IP:10.129.99.33 分配IP:10.10.16.12 1.How many TCP ports are open on the machine? 使用nmap对靶机进行全端口TCP脚本、服务扫描: nmap -sC -sV -T4 -p- {TARGET_IP} 可以看到靶机共开放TCP端口2个&…

LC108-将有序数组转化为二叉搜索树(二叉平衡树)

文章目录 1 题目2 思路3 ACM完整代码参考 1 题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树 示例: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释&#xff1…