windows10+cpu+pycharm跑yolov5

1、安装anaconda和pycharm,安装方法参考:

anaconda和pycharm安装(windows10 )-CSDN博客

2、创建yolov5环境,打开Anaconda Prompt命令打开cmd命令行窗口,如下所示:

输入:conda create -n yolov5,等待一会,输入y,回车。再等待一会,出现done,说明新环境创建成功!如下所示:

输入:conda activate yolov5激活环境,路径前出现(yolov5)就说明激活成功啦!如下所示:

3、下载YOLOv5 github项目,下载地址:https://github.com/ultralytics/yolov5

4、查看一下requirements.txt 里面的内容并下载所有的依赖包,先把清华源设置成默认,如果不修改默认源安装可能很慢,修改安装源方法:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

然后安装以下包:

pip install tqdm
pip install scipy
pip install pyyaml
pip install matplotlib
pip install opencv-python
pip install requests
pip install seaborn
pip install pandas

5、安装pytorch

先更新源:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

conda config --set show_channel_urls yes

进入官网https://pytorch.org/找到合适的版本,cpu版本如下:

在cmd命令终端输入以下命令安装:

conda install pytorch torchvision torchaudio cpuonly -c pytorch

等待一会,输入y,回车;再等待一会,出现done,说明Pytorch库导入成功。

在cmd命令终端输入以下命令查看pytorch版本:

python
import torch
print(torch,__version__)

版本信息如下所示(由于pytorch更新,版本号可能不同):

6、验证步骤3下载yolov5可运行:

a、进入步骤3下载的yolov5目录:yolov5-master,通过以下命令安装yolov5所需依赖包:
pip install -r requirements.txt。

b、输入:python detect.py,打印如下信息:

在yolov5-master\runs\detect\exp目录下有以下标注图片:

至此yolov5环境安装成功。

(如果报错一般时缺依赖包,可以通过以下两条命令再次安装相关包:

pip install ultralytics
pip install -r requirements.txt)

7、通过pycharm打开yolov5工程,鼠标放在yolov5-master目录上点击右键,选择pycharm打开,如下所示:

8、设置python解释器和conda的环境,点击Python Interpreter,然后点击Add Interpreter进行添加,如下图所示:

弹出以下界面,点击Conda Environment配置conda环境,设置conda.exe文件路径,然后点击ok,如下图所示:

点击Pipenv Environment配置python环境,设置python.exe路径,然后点击ok,如下所示:

环境设置成功后在pycharm软件右下角会显示python.exe对应的环境名称,如下所示:

9、在pycharm终端如下以下命令确认yolov5所需包是否安装全:

pip install -r requirements.txt

如果报缺少包错误就用:pip install + 包名进行安装。英文之前我们在cmd命令行下已经执行过这个命令,到这一步一般不会报错了。

10、验证yolov5在pycharm能正常运行,类似步骤6,在pycharm终端输入以下命令验证pycharm运行yolov5:

python detect.py

和步骤6相同运行成功后会在runs\detect\exp目录下生成对应的标注图片。

至此我们的开发环境准备工作就结束了,万里长城完成了第一步!

下面我们就用以上环境来训练我们的目标检测模型。

1、数据准备:

任何AI模型训练都需要数据,数据准备是模型训练第一步,这也是大数据时代数据的重要性。为了方便对数据进行管理我们在yolov5-master目录下创建如下目录结构:

数据分为测试集数据、验证集数据、测试集数据。三类数据说明可以参考这位博主的博客:

如何正确使用机器学习中的训练集、验证集和测试集?-CSDN博客

(a)训练集数据:

        这里我们以猫的图片作为训练集数据,感谢知乎这位博主的提供的数据下载路径:

猫狗识别之准备数据集 - 知乎 (zhihu.com)

        为了缩短测试时间,仅选取其中的50副猫的图片作为训练数据,放在own_datas\images\train目录下。

(b)验证集数据:

        从下载的图片中选取另外50副作为验证数据,放在own_datas\images\val目录下,这里为了简单直接将train目录下的复制过来

(c)测试数据:

        最后再从下载的图片中选取50副作为测试数据,放在own_datas\images\test目录下。

2、给数据打标签,在Pycharm终端中输入:pip install pyqt5 labelme安装相关库,这两个库是用来给数据集打标签的。

安装完成后,在终端输入labelme,回车,弹出以下界面:

点击目录,选择own_datas\images\train目录,就会出现训练集里的图片。右键选择创建矩形,框出图片里的猫。如下图所示:

框选结束后,输入标签名cat,点击ok,这个标签就保存下来了。如果有多只猫猫,就继续框选。整张图片框选完毕后,点击下一副,根据提示把标注文件保存到路径yolov5-master\own_datas\labels\json中,文件的格式是.json。所有图片标注完毕后,可以在yolov5-master\own_datas\labels\json文件夹中看到与训练集图片数量相同且对应的50个.json文件。

3、将jason文件转换成.txt文件,因为yolov5只能识别.txt格式的标签,还需要把.json文件转换成.txt文件。在yolov5-master文件夹中新建json2txt.py文件,文件类容如下:

import json
import osname2id = {'cat': 0}  # 标签名称def convert(img_size, box):dw = 1. / (img_size[0])dh = 1. / (img_size[1])x = (box[0] + box[2]) / 2.0 - 1y = (box[1] + box[3]) / 2.0 - 1w = box[2] - box[0]h = box[3] - box[1]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def decode_json(json_floder_path, json_name):txt_name = 'C:/work/anaconda3_workspace/yolov5-master/own_datas/labels/txt/' + json_name[0:-5] + '.txt'# txt文件夹的绝对路径txt_file = open(txt_name, 'w+')json_path = os.path.join(json_floder_path, json_name)data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))img_w = data['imageWidth']img_h = data['imageHeight']for i in data['shapes']:label_name = i['label']if (i['shape_type'] == 'rectangle'):x1 = int(i['points'][0][0])y1 = int(i['points'][0][1])x2 = int(i['points'][1][0])y2 = int(i['points'][1][1])bb = (x1, y1, x2, y2)bbox = convert((img_w, img_h), bb)txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')if __name__ == "__main__":json_floder_path = 'C:/work/anaconda3_workspace/yolov5-master/own_datas/labels/json'# json文件夹的绝对路径json_names = os.listdir(json_floder_path)for json_name in json_names:decode_json(json_floder_path, json_name)
需要将其中以下两行改成自己的.txt文件存放路径和.json文件存放路径。
txt_name = 'C:/work/anaconda3_workspace/yolov5-master/own_datas/labels/txt/' + json_name[0:-5] + '.txt'
json_floder_path = 'C:/work/anaconda3_workspace/yolov5-master/own_datas/labels/json'

运行json2txt.py,结束后可以在yolov5-master\own_datas\labels\txt文件夹中看到对应的50个.txt文件。把txt文件夹中的文件全部复制到yolov5-master\own_datas\labels\train文件夹中。或者将上面的txt文件夹改成train= 'C:/work/anaconda3_workspace/yolov5-master/own_datas/labels/train/' + json_name[0:-5] + '.txt'。

用同样的方法生成val目录下的验证数据集的标签,将标签文件拷贝到:

yolov5-master\own_datas\labels\val目录下。

(注意:标签目录需要和数据集目录相同,否则会报无标签错误)

4、修改配置文件

(a)修改数据集配置文件:

        在yolov5-master\data路径下找到coco128.yaml文件,复制到yolov5-master\own_datas路径下,改名为cat.yaml。修改成以下类容:

path: own_datas # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: images/test # test images (optional)nc: 1  # number of classes
names: ['cat']  # class names

内容说明:

path:数据集根目录

train:训练数据集相对根目录路径

val:验证数据集相对根目录路径

test:测试数据集相对根目录路径,因为测试是可以指定测试数据,因此这里也可以不设置

也可以不设置根目录,将其他目录设置成相对yolov5-master目录的路径,如下所示:

#path: own_datas # dataset root dir
train: own_datas/images/train # train images (relative to 'path') 128 images
val: iown_datas/mages/val # val images (relative to 'path') 128 images
test: own_datas/images/test # test images (optional)nc: 1  # number of classes
names: ['cat']  # class names

nc:标签数,这里只有一个

names:标签名,这里只有'cat'

(b)修改模型参数配置文件

在yolov5-master\models路径下找到yolov5s.yaml文件,同样复制到yolov5-master\own_datas路径下。选择yolov5s是因为,虽然它效果不太好,但是速度比较快。

打开yolov5s.yaml文件,需要修改的是这一行:

nc: 1  # number of classes

将标签数修改成1。

5、修改train.py训练执行文件

(a)修改parse_opt函数中以下红色标记行:

def parse_opt(known=False):"""Parses command-line arguments for YOLOv5 training, validation, and testing."""parser = argparse.ArgumentParser()parser.add_argument("--weights", type=str, default=ROOT / "yolov5s.pt", help="initial weights path")parser.add_argument("--cfg", type=str, default=ROOT / "own_datas/yolov5s.yaml", help="model.yaml path")parser.add_argument("--data", type=str, default=ROOT / "own_datas/cat.yaml", help="dataset.yaml path")parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/hyp.scratch-low.yaml", help="hyperparameters path")parser.add_argument("--epochs", type=int, default=100, help="total training epochs")parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch")parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)")parser.add_argument("--rect", action="store_true", help="rectangular training")parser.add_argument("--resume", nargs="?", const=True, default=False, help="resume most recent training")parser.add_argument("--nosave", action="store_true", help="only save final checkpoint")parser.add_argument("--noval", action="store_true", help="only validate final epoch")parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor")parser.add_argument("--noplots", action="store_true", help="save no plot files")parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations")parser.add_argument("--evolve_population", type=str, default=ROOT / "data/hyps", help="location for loading population")parser.add_argument("--resume_evolve", type=str, default=None, help="resume evolve from last generation")parser.add_argument("--bucket", type=str, default="", help="gsutil bucket")parser.add_argument("--cache", type=str, nargs="?", const="ram", help="image --cache ram/disk")parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training")parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu")parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%")parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class")parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer")parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode") parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)")parser.add_argument("--project", default=ROOT / "runs/train", help="save to project/name")parser.add_argument("--name", default="exp", help="save to project/name")parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment")parser.add_argument("--quad", action="store_true", help="quad dataloader")parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler")parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon")parser.add_argument("--patience", type=int, default=100, help="EarlyStopping patience (epochs without improvement)")parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2")parser.add_argument("--save-period", type=int, default=-1, help="Save checkpoint every x epochs (disabled if < 1)")parser.add_argument("--seed", type=int, default=0, help="Global training seed")parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify")# Logger argumentsparser.add_argument("--entity", default=None, help="Entity")parser.add_argument("--upload_dataset", nargs="?", const=True, default=False, help='Upload data, "val" option')parser.add_argument("--bbox_interval", type=int, default=-1, help="Set bounding-box image logging interval")parser.add_argument("--artifact_alias", type=str, default="latest", help="Version of dataset artifact to use")# NDJSON loggingparser.add_argument("--ndjson-console", action="store_true", help="Log ndjson to console")parser.add_argument("--ndjson-file", action="store_true", help="Log ndjson to file")return parser.parse_known_args()[0] if known else parser.parse_args()

修改说明:

parser.add_argument("--cfg", type=str, default=ROOT / "own_datas/yolov5s.yaml", help="model.yaml path")(指定模型配置文件)。

parser.add_argument("--data", type=str, default=ROOT / "own_datas/cat.yaml", help="dataset.yaml path")(指定数据集配置文件)

parser.add_argument("--epochs", type=int, default=100, help="total training epochs") (指定训练轮数,最好设置成大于100次,训练次数太少可能导致模型无效)

parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") (设置训练线程数,根据硬件配置设置,我笔记本配置比较低,如下所示,设置成8,如果电脑配置比较好,可以设置成16,如果运行train.py时退出可以设小点,还不行就设置成0)

6、修改完后就可以运行train.py进行模型训练了。

如果报以下错误:

C:\work\anaconda3\envs\yolov5\python.exe C:\work\anaconda3_workspace\yolov5-master\train.py 
Traceback (most recent call last):
  File "C:\work\anaconda3\envs\yolov5\Lib\site-packages\git\__init__.py", line 140, in <module>
    refresh()
  File "C:\work\anaconda3\envs\yolov5\Lib\site-packages\git\__init__.py", line 127, in refresh
    if not Git.refresh(path=path):
           ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\work\anaconda3\envs\yolov5\Lib\site-packages\git\cmd.py", line 455, in refresh
    raise ImportError(err)
ImportError: Bad git executable.
The git executable must be specified in one of the following ways:
    - be included in your $PATH
    - be set via $GIT_PYTHON_GIT_EXECUTABLE
    - explicitly set via git.refresh()

All git commands will error until this is rectified.

This initial message can be silenced or aggravated in the future by setting the
$GIT_PYTHON_REFRESH environment variable. Use one of the following values:
    - quiet|q|silence|s|silent|none|n|0: for no message or exception
    - warn|w|warning|log|l|1: for a warning message (logged at level CRITICAL, displayed by default)
    - error|e|exception|raise|r|2: for a raised exception

Example:
    export GIT_PYTHON_REFRESH=quiet


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\work\anaconda3_workspace\yolov5-master\train.py", line 104, in <module>
    GIT_INFO = check_git_info()
               ^^^^^^^^^^^^^^^^
  File "C:\work\anaconda3\envs\yolov5\Lib\contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\work\anaconda3_workspace\yolov5-master\utils\general.py", line 401, in check_git_info
    import git
  File "C:\work\anaconda3\envs\yolov5\Lib\site-packages\git\__init__.py", line 142, in <module>
    raise ImportError("Failed to initialize: {0}".format(_exc)) from _exc
ImportError: Failed to initialize: Bad git executable.
The git executable must be specified in one of the following ways:
    - be included in your $PATH
    - be set via $GIT_PYTHON_GIT_EXECUTABLE
    - explicitly set via git.refresh()

All git commands will error until this is rectified.

This initial message can be silenced or aggravated in the future by setting the
$GIT_PYTHON_REFRESH environment variable. Use one of the following values:
    - quiet|q|silence|s|silent|none|n|0: for no message or exception
    - warn|w|warning|log|l|1: for a warning message (logged at level CRITICAL, displayed by default)
    - error|e|exception|raise|r|2: for a raised exception

解决方式:

在train.py中添加以下类容:

正常运行信息如下:

上图表示正在进行第一轮训练,训练时间比较久,先去干点别的吧...

等了差不多一个半小时后显示如下:

表示训练结束,生成的相关文件保存在:yolov5-master\runs\train\exp目录下。如果是第一次训练目录为yolov5-master\runs\train\exp,每运行一次train.py,序号加1。生成的模型文件为:runs/train/exp4/weights/best.pt。

7、测试模型

打开detect.py文件,修改如下红色标记行:

def parse_opt():"""Parses command-line arguments for YOLOv5 detection, setting inference options and model configurations."""parser = argparse.ArgumentParser()parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "runs/train/exp/weights/best.pt", help="model path or triton URL") parser.add_argument("--source", type=str, default=ROOT / "own_datas/images/test", help="file/dir/URL/glob/screen/0(webcam)")parser.add_argument("--data", type=str, default=ROOT / "own_datas/cat.yaml", help="(optional) dataset.yaml path")

修改说明:

parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "runs/train/exp4/weights/best.pt", help="model path or triton URL")(设置训练出来的模型文件)

arser.add_argument("--source", type=str, default=ROOT / "own_datas/images/test", help="file/dir/URL/glob/screen/0(webcam)") (设置测试文件存放位置)

parser.add_argument("--data", type=str, default=ROOT / "own_datas/cat.yaml", help="(optional) dataset.yaml path") (设置数据配置文件,也可以不该直接采用data目录下的coco128.yaml文件)

运行detect.py,运行结束后会在yolov5-master\runs\detect\exp目录下生成标注图片。

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

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

相关文章

【大模型】Hugging Face下载大模型的相关文件说明

Hugging Face下载大模型文件说明 1.前言 ​ 上图是毛毛张在HuggingFace的官网上的ChatGLM-6B大模型的所有文件,对于初学者来说,对于上面的文件是干什么的很多小伙伴是很迷糊的,根本不知道是干什么的,毛毛张接下来将简单讲述一下上面的每个文件的作用。 2.文件说明 在Hug…

FL Studio21最新官方完整免费版水果音乐制作软件下载

作为音乐制作软件专家&#xff0c;对于FL Studio21这款功能强大的音乐制作软件有着深入的了解&#xff0c;它为用户提供了从创作到后期制作的完整工作流程。以下是对其各项功能的全面、准确且详细的介绍&#xff1a; FL Studio 21 Win-安装包下载如下: https://wm.makeding.c…

vue项目部署服务器,因为跨域设置nginx.config要修改的配置

下面是我在vue项目中vite.config.js设置的配置代理 对于部署项目需要使用nginx进行vue项目的话&#xff0c;需要对nginx的配置文件进行如下修改即可

linux操作系统虚拟机的环境配置

目录 一、虚拟机安装&#xff08;类似硬件的安装&#xff09; &#xff08;1&#xff09;创建虚拟机 &#xff08;2&#xff09;创建虚拟机 二、IP和主机名称配置 1、设置VM上的IP 2、设置我们电脑上VMnet8的IP 3、设置虚拟机上的IP 主机名称映射 以下是设置主机名映射…

linux系统adb调试工具

adb的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用。通过adb可以在Eclipse中通过DDMS来调试Android程序&#xff0c;说白了就是调试工具。 adb的工作方式比较特殊&#xff0c;采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯&#xff0c;默认情况下adb会…

实时工业控制系统的创新整合:PLC4X与CnosDB的高效数据采集与存储

在当代工业自动化系统中&#xff0c;实时监测和数据分析变得至关重要。本文将介绍如何通过集成Apache PLC4X与CnosDB&#xff0c;实现对工业控制系统中的PLC设备进行高效数据采集和存储&#xff0c;为工程师们提供更强大的数据分析和监测工具。 PLC的定义 PLC是可编程逻辑控制…

哈希表|242.有效的字母异位词

力扣题目链接 bool isAnagram(char* s, char* t) {int len_s strlen(s), len_t strlen(t);if(len_s ! len_t) {return false;}int table[26];memset(table, 0, sizeof(table));for(int i 0; i < len_s; i) {table[s[i] - a];}for(int i 0; i < len_t; i) {table[t[i…

Unity 关节:铰链、弹簧、固定、物理材质:摩檫力、 特效:拖尾、

组件-物理-关节&#xff1a;铰链&#xff08;类似门轴&#xff09; 自动动作、多少力可以将其断开、 弹簧可以连接另一个刚体&#xff08;拖动即可&#xff09; 固定一般是等待一个断裂力&#xff0c;造成四分五裂的效果。 物理材质 设置摩檫力&#xff0c;则可以创造冰面的…

复制表

目录 复制表 将部门 30 的所有员工信息保存在 emp30 表中 将复杂查询结果创建为表 只将 emp 表的结构复制为 empnull 表 从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 复制表 严格来说&#xff0c;复制表不是复制操作&am…

【NR 定位】3GPP NR Positioning 5G定位标准解读(七)- GNSS定位方法

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

Java积累

文章目录 java积累IDEA快捷键 java积累 Arrays.asList(args)&#xff1a; 将args转为列表的形式输出 常犯的错误&#xff1a;经常直接就new新的了。应该用上面的的。 new Date()是年月日时分秒。 LocalDate.now()是年月日 IDEA快捷键 Ctrl Alt B : 显示实现该类或者接口…

01hadoop概念

大数据与Hadoop 大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 Hadoop是什么&#xff1f; Hadoop是一种分析和处理海量数据的…

2024年掌握人工智能的顶级课程

[AI 课程推荐] 谷歌、微软、哈佛大学, DeepLearning.AI都发布了免费的人工智能和ChatGPT的课程。 以下是 2024 年掌握人工智能的顶级课程: GOOGLE - 生成式人工智能学习路径微软- 为每个人提供生成式人工智能微软 - 人工智能初学者入门哈佛 - CS50 的 Python 人工智能简介Deep…

mysql的安装启动

下载 2.解压后放在某个目录下&#xff1a; 3.修改系统变量 4.修改配置文件 &#xff08;创建一个ini文件放在解压后的目录下&#xff09; 内容如下 5.初始化mysql 1.用管理员模式下输入&#xff1a; mysqld --initialize --console C:\WINDOWS\system32>mysqld --initia…

Java面试必考题之线程的生命周期,结合源码,透彻讲解!

写在开头 在前面的几篇博客里&#xff0c;我们学习了Java的多线程&#xff0c;包括线程的作用、创建方式、重要性等&#xff0c;那么今天我们就要正式踏入线程&#xff0c;去学习更加深层次的知识点了。 第一个需要学的就是线程的生命周期&#xff0c;也可以将之理解为线程的…

JVM运行时数据区——对象的实例化内存布局与访问定位

文章目录 1、对象的实例化1.1、创建对象的方式1.2、创建对象的步骤 2、对象的内存布局3、对象的访问定位3.1、对象访问的定位方式3.2、使用句柄访问3.3、使用指针访问 4、小结 平时大家经常使用new关键字来创建对象&#xff0c;那么我们创建对象的时候&#xff0c;怎么去和运行…

ABAP接口-RFC连接(ABAP TO ABAP)

目录 ABAP接口-RFC连接&#xff08;ABAP TO ABAP&#xff09;创建ABAP连接RFC函数的调用 ABAP接口-RFC连接&#xff08;ABAP TO ABAP&#xff09; 创建ABAP连接 事务代码&#xff1a;SM59 点击创建&#xff0c;填写目标名称&#xff0c;选择连接类型&#xff1a; 填写主机名…

pycharm查看Tensor的完整数据

通常debug时&#xff0c;Tensor的数据呈现如下图&#xff0c;只显示开头几个值和结尾几个值&#xff0c;中间被省略&#xff1a; 解决方法&#xff1a; 右击想查看的数据&#xff0c;选择Evaluate Expression 输入如下命令&#xff0c;就会出现View as Array提示&#xff0c;…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:LoadingProgress)

用于显示加载动效的组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 LoadingProgress() 创建加载进展组件。 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使…

2024年k8s最新版本使用教程

2024年k8s最新版本使用教程 3. YAML语言入门3.1 基本语法规则3.2 支持的数据结构3.3 其他语法 4 资源管理4.1 k8s资源查询4.2 资源操作命令4.3 资源操作方式4.3.1 命令行方式4.3.2 YAML文件方式 5 Namespace5.1 查看命名空间5.2 创建命名空间5.3 删除命名空间5.4 命名空间资源限…