Pytorch 图像增强 实现翻转裁剪色调等 附代码(全)

news2024/12/28 5:57:48

目录

  • 前言
  • 1. 裁剪
    • 1.1 中心裁剪
    • 1.2 随机裁剪
    • 1.3 随机尺寸裁剪
  • 2. 翻转
    • 2.1 水平翻转
    • 2.2 垂直翻转
    • 2.3 随机旋转
  • 3. 色调
    • 3.1 灰度变换
    • 3.2 色彩抖动
    • 3.3 随机翻转颜色
    • 3.4 随机调整锐度
    • 3.5 高斯模糊
  • 4. 边缘填充
  • 5. 仿射变换

前言

下文中有使用到plt,不懂的可看我这篇文章:python之Matplotlib详细分析(附代码)

数据比较少的时候使用数据增强是一个不错的选择

导入对应的包:

from PIL import Image
from torchvision import transforms as tfs

读取对应的照片:

# 此处的Path 该项目的相对路径 或者 绝对路径
# 读取 显示 照片
image = Image.open('scenery.jpg')
print(image.size)
image

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

数据增强的处理方式有如下

1. 裁剪

裁剪之前 先叙述一遍缩放(毕竟裁剪是基于缩放的基础)

from PIL import Image
from torchvision import transforms as tfs

# 原图尺寸为474 * 379
img = Image.open('scenery.jpg')

# 默认是300 * 300 
# 缩放原图到一定比例
img1 = tfs.Resize((300,300))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('474 * 379')
axs[0].imshow(img)

axs[1].set_title('300 * 300')
axs[1].imshow(img1)

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

1.1 中心裁剪

  • 核心函数:transforms.CenterCrop(size)

size 参数为int,将其原图 中心裁剪为设定尺寸
如果参数为(h,w),则裁剪的尺寸为(h,w)

from PIL import Image
from torchvision import transforms as tfs

# 打开对应的图片
img = Image.open('scenery.jpg')

# 默认是300 * 300 
img1 = tfs.CenterCrop(300)(img)
# 设置对应的尺寸为300 * 200 
img2 = tfs.CenterCrop((300,200))(img)

# 通过plt输出图片
import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('300 * 300')
axs[0].imshow(img1)

axs[1].set_title('300 * 200')
axs[1].imshow(img2)

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

1.2 随机裁剪

  • 核心函数:transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
参数具体说明
size1.为size,结果为size * size
2.为(h,w),结果为h * w
padding填充大小
1.为a,上下左右填充a
2.为(a,b)时,左右填充a个像素,上下填充b个像素
3.为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d
pad_if_need默认为False
为True,超出尺寸进行填充
fill通道填充的颜色
padding_mode填充模式
1.constant,像素值由fill填充
2.edge,图像边缘像素值填充
3.reflect,镜像填充,最后一个像素不镜像,也就是反射。1, 2, 3, 4 变为 3, 2, 1, 2, 3, 4, 3, 2
4.symmetric,镜像填充,最后一个像素镜像,也就是对称。1, 2, 3, 4 变为 2, 1, 1, 2, 3, 4, 4, 3
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 默认都300 * 300 
img1 = tfs.RandomCrop(300)(img)

# padding为填充元素
img2 = tfs.RandomCrop(300,padding=(16, 64))(img)

# fill填充的色彩
img3 = tfs.RandomCrop(300,padding=(16, 64),fill=(255, 255, 0))(img)

# 超出尺寸,该参数需要设置为True
img4 = tfs.RandomCrop(2000,pad_if_needed=True)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('img1')
axs[0].imshow(img1)

axs[1].set_title('img2')
axs[1].imshow(img2)

axs[2].set_title('img3')
axs[2].imshow(img3)

axs[3].set_title('img4')
axs[3].imshow(img4)

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


按照填充模式的代码:

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 填充模式为constant,默认本身也是constant
img1 = tfs.RandomCrop(500,padding=128,padding_mode='constant')(img)

# 填充模式为edge
img2 = tfs.RandomCrop(500,padding=128,padding_mode='edge')(img)

# 填充模式为reflect
img3 = tfs.RandomCrop(500,padding=128,padding_mode='reflect')(img)

# 填充模式为symmetric
img4 = tfs.RandomCrop(500,padding=128,padding_mode='symmetric')(img)


import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('img1')
axs[0].imshow(img1)

axs[1].set_title('img2')
axs[1].imshow(img2)

axs[2].set_title('img3')
axs[2].imshow(img3)

axs[3].set_title('img4')
axs[3].imshow(img4)

截图如下:

在这里插入图片描述

1.3 随机尺寸裁剪

  • 核心函数:transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation=<InterpolationMode.BILINEAR: 'bilinear'>)
参数具体说明
size1.为size,结果为size * size
2.为(h,w),结果为h * w
scale随机裁剪面积比例,默认区间(0.08,1)之间随机取一个数
ratio随机长宽比,默认区间(3/4,4/3)之间随机取一个数
interpolation插值方法(PIL. Image. NEARESTPIL. Image. BILINEARPIL. Image. BICUBIC
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 裁剪的尺寸都是300 * 300
# 随机裁剪面积比例为0.1-1之间的一个数
img1 = tfs.RandomResizedCrop(300,scale=(0.1,1))(img)

# 随机裁剪长宽比为1-4/3之间的一个数
img2 = tfs.RandomResizedCrop(300,ratio=(1,4/3))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,3)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

axs[2].set_title('img2')
axs[2].imshow(img2)

截图如下:

在这里插入图片描述

2. 翻转

2.1 水平翻转

  • 核心函数:transforms.RandomHorizontalFlip(p=0.5)

p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# p为1一定翻转
# p为0.5 ,百分之50的概率可能会翻转也可能不会
img1 = tfs.RandomHorizontalFlip(p=1)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('flip horizontal')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

2.2 垂直翻转

  • 核心函数:transforms.RandomVerticalFlip(p=0.5)

p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# p为1一定翻转
# p为0.5 ,百分之50的概率可能会翻转也可能不会
# 注意区分与水平翻转的函数
img1 = tfs.RandomVerticalFlip(p=1)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1, 2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('flip vertical')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

2.3 随机旋转

  • 核心函数:transforms.RandomRotation(degrees, expand=False, center=None, fill=0, resample=None)
参数具体说明
degrees旋转角度
1.为a,在(-a,a)区间随机选择旋转角度
2.为(a,b),在在(a,b)区间随机选择旋转角度
expand图片超出尺寸是否显示完整图
1.默认False,超出不会显示完整图
2.True,超出会显示完整图
center旋转轴位置
默认中心旋转
resample重采样方法
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 逆时针旋转45
img1 = tfs.RandomRotation(degrees=(45, 45))(img)

# 逆时针旋转45,旋转超出区域启动扩展
img2 = tfs.RandomRotation(degrees=(45, 45), expand=True)(img)

# 逆时针旋转,图外区域填充颜色
img3 = tfs.RandomRotation(degrees=(45, 45), fill=(255, 255, 0))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

axs[2].set_title('img2')
axs[2].imshow(img2)

axs[3].set_title('img3')
axs[3].imshow(img3)

截图如下:

在这里插入图片描述

3. 色调

3.1 灰度变换

  • 核心函数:transforms.Grayscale(num_output_channels=1)

一般不设置,默认单通道灰度,如果需要三通道灰度,则对应将其值改为3即可

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 灰度变换
img1 = tfs.Grayscale()(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('gray')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

3.2 色彩抖动

  • 核心函数:transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
参数具体说明
brightness亮度
1.元组(min, max),给定区间随机变换,不可有负值
2.浮点数,亮度范围为[max(0, 1 - brightness), 1 + brightness]
contrast对比度。规则同上
saturation饱和度。规则同上
hue色调
1.元组(min, max),给定区间随机变换,不可有负值
2.浮点数,色调范围为[-hue, hue]区间随机变换
整体区间范围为[0,0.5] or [-0.5,0.5]
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 亮度设置3
img1 = tfs.ColorJitter(brightness=(3, 3))(img)

# 对比度设置3
img2 = tfs.ColorJitter(contrast=(3, 3))(img)

# 饱和度设置3
img3 = tfs.ColorJitter(saturation=(3, 3))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('brightness')
axs[1].imshow(img1)

axs[2].set_title('contrast')
axs[2].imshow(img2)

axs[3].set_title('saturation')
axs[3].imshow(img3)

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

3.3 随机翻转颜色

  • 核心函数:transforms.RandomInvert(p=0.5)
    p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 随机翻转图片颜色
img1 = tfs.RandomInvert(p=0.5)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

3.4 随机调整锐度

  • 核心函数:transforms.RandomAdjustSharpness(sharpness_factor, p=0.5)

sharpness_factor 该参数为调整锐度,0为模糊,1为原图。随着数字越大,锐度越高,没有设置锐度上限
p为概率值,如果p为1,百分百翻转。p为0.5 ,百分之50的概率可能会翻转也可能不会

from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 随机调转图片锐度
img1 = tfs.RandomAdjustSharpness(200)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

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

3.5 高斯模糊

  • 核心函数:transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0))
参数具体说明
kernel_size模糊半径(奇数)
sigma正态分布标准差
1.为(min, max),在(min, max)区间随机取一个数
2.浮点数,则为该数
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# size为11,标准差为10
img1 = tfs.GaussianBlur(11,10)(img)

# size为51,标准差为10
img2 = tfs.GaussianBlur(51,10)(img)

# size为101,标准差为100
img3 = tfs.GaussianBlur(101,100)(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

axs[2].set_title('img2')
axs[2].imshow(img2)

axs[3].set_title('img3')
axs[3].imshow(img3)

截图如下:

在这里插入图片描述

4. 边缘填充

  • 核心函数:transforms.Pad(padding, fill=0, padding_mode=‘constant’)
参数具体说明
padding拓展大小
1.为a,上下左右填充a
2.为(a,b)时,左右填充a个像素,上下填充b个像素
3.为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d
fill填充值
默认0,黑色。也可填充三通道
padding_mode填充模式
1.constant,像素值由fill填充
2.edge,图像边缘像素值填充
3.reflect,镜像填充,最后一个像素不镜像,也就是反射。1, 2, 3, 4 变为 3, 2, 1, 2, 3, 4, 3, 2
4.symmetric,镜像填充,最后一个像素镜像,也就是对称。1, 2, 3, 4 变为 2, 1, 1, 2, 3, 4, 4, 3
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 第一个参数:扩充的宽度
# 第二个参数:填充颜色
img1 = tfs.Pad(100,fill=(0, 0, 255))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,2)

axs[0].set_title('original')
axs[0].imshow(img)

axs[1].set_title('img1')
axs[1].imshow(img1)

截图如下:

在这里插入图片描述

5. 仿射变换

该含义为:旋转、平移、缩放、扭曲等组合

  • 核心函数:transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0)
参数具体说明
degrees随机旋转角度范围,0为不旋转
translate水平和垂直平移因子
为(a, b),水平平移位置为 (-img_width * a , img_width * a)该区间随机选择一个数。垂直平移为 (-img_height * b , img_height * b)该区间随机选择一个数
scale缩放因子
为(a, b),在(a, b)区间随机选择一个数
shear随机扭曲角度范围
为(a, b),在(a, b)区间随机选择一个数
resample重采样
fillcolor填充色彩,可三通道填充
from PIL import Image
from torchvision import transforms as tfs

img = Image.open('scenery.jpg')

# 随机旋转
img1 = tfs.RandomAffine(45)(img)

# 随机平移
img2 = tfs.RandomAffine(0, (0.7, 0))(img)

# 随机缩放
img3 = tfs.RandomAffine(0, None, (3, 5))(img)

# 随机扭曲
img4 = tfs.RandomAffine(0, None, None, (45, 90))(img)

import matplotlib.pyplot as plt
axs = plt.figure().subplots(1,4)

axs[0].set_title('img1')
axs[0].imshow(img1)

axs[1].set_title('img2')
axs[1].imshow(img2)

axs[2].set_title('img3')
axs[2].imshow(img3)

axs[3].set_title('img4')
axs[3].imshow(img4)

截图如下:

在这里插入图片描述

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

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

相关文章

doker中的Jenkins容器配置github

1、在Jenkins插件 管理中下载github plugin和ssh和git插件 2、在Jenkins->系统管理->系统配置->github下配置凭据认证&#xff0c;添加凭证页面类型选择secret text 3、添加凭证页面secret栏输入githu token&#xff0c;其他任意输入 4、github token获取&#xf…

FANUC机器人零点复归的报警原因分析和零点标定相关步骤

FANUC机器人零点复归的报警原因分析和零点标定相关步骤 FANUC机器人零点复归时需要将机器人的机械信息与位置信息同步,来定义机器人的物理位置。 机器人通过闭环伺服系统来控制机器人各运动轴,当用户通过示教器点动机器人时,经过主板分析此命令后,带动电机旋转,电机上的SP…

软件测试入门概念

满足用户期望或正式规定文档&#xff08;合同、标准、规范&#xff09;所具有的条件和权能&#xff0c;包含用户需求和软件需求。 用户需求&#xff1a; 五花八门的用户需求&#xff0c;该需求比较简略。 软件需求&#xff1a; 又叫功能需求&#xff0c;该需求会详细描述开发…

SLAM本质剖析-Boost之Geometry函数大全(二)

4. 点云处理 4.1 add_point 将一个点添加到另一个点 4.2 add_value 将相同的值添加到点的每个坐标 4.3 assign_point 用另一个点指定一个点 4.4 assign_value 为点的每个坐标指定相同的值 4.5 cross_product 计算两个向量的叉积 4.7 divide_point 将一点除以另一点…

Python用27行代码绘制一幅满天星

前言 大家早好、午好、晚好吖 ❤ ~ 每一个孩子都像星空中的一颗星星&#xff0c;散发着自己所特有的光芒照亮着整个夜空。 今天就带大家用27行Python代码绘制一幅满天星吧。 全局设置 在绘制满天星的过程中要运用到turtle工具&#xff0c;它是Python的标准库&#xff0c;也可…

堆排序+TOPK问题

文章目录一.堆排序1.使用向上还是向下调整建堆好&#xff1f;(1)向上调整算法建堆的时间复杂度1. 完整过程(2)向下调整算法建堆的时间复杂度1.完整过程(3)总结2. 排升序(1) 建小堆(2) 建大堆3. 堆排序时间复杂度统计4.完整代码二 、 TOPK问题1. 概念2.两种方法第一种缺陷第二种…

【论文阅读】(2017)The late acceptance Hill-Climbing heuristic

文章目录一、摘要二、Late Acceptance Hill Climbing三、LAHC技术性能的研究3.1 Benchmark problems3.2 Experimental software3.3 Experiments四、LAHC性能评估4.1 评估方法4.2 LAHC不同变体的性能4.3 LAHC与其他技术的比较4.4 LAHC的规模独立性五、Conclusions and future wo…

Salesforce架构师常见问题(上)

Salesforce架构师需要花费大量时间来绘制、讨论、建立和设计稳健的端到端解决方案。架构师角色不仅仅是处理解决方案这么简单&#xff0c;还需要在企业级组织中与多个业务部门打交道。 因此&#xff0c;Salesforce架构师面试需要从以下3个方面准备&#xff1a; Part.1 分享工…

快速理解 JVM 内存模型 对象组成 对象内存分配

快速理解 JVM 内存模型 & 对象组成 & 对象内存分配 JVM 内存模型 JVM 内存模型分为首先在线程纬度可以分为两部分 一部分是 线程共享&#xff1a; 堆、元空间 堆 &#xff1a; 大多数 new 的对象都存在于堆内&#xff0c;也是 GC 主要回收的空间&#xff0c;占据 J…

涨薪跳槽利器,清华大咖总结的 Java 核心突击讲,一应俱全

前言 今天在这里分享一位读者粉丝的经历&#xff1a; 本人双非本科&#xff0c;没拿什么过奖&#xff0c;现在毕业也有三年时间了&#xff0c;大四感觉能力有点不足&#xff0c;进了一家小型的互联网公司实习&#xff1b;期间报名了个线上培训课程&#xff0c;一直在持续学习…

超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)

文章目录1.项目部署规划2.前置工作2.1修改后端配置文件ip2.2修改前端Vue项目运行端口2.3修改前端对应的服务器ip2.4后端项目打包2.4.1解决打包问题2.4.2项目打包&#xff0c;本地运行jar包测试2.5前端项目打包2.6开放端口2.7配置安全组规则3.Docker安装4.拉取镜像5.编写Dockerf…

挂耳式蓝牙耳机哪家的好用,推荐几款实用的挂耳式耳机

时代在进步&#xff0c;而我们也顺势享受着进步过程中所产生的物件&#xff0c;就如骨传导和传统耳机&#xff0c;年轻人更多时候会偏向于骨传导耳机&#xff0c;毕竟骨传导的最大的特点就是佩戴舒适的同时&#xff0c;开放式耳道的设计能够更好的让中耳炎说拜拜。但近期市面上…

Hi,运维,你懂Java吗-No.3:java系统的启动

作为运维&#xff0c;你不一定要会写Java代码&#xff0c;但是一定要懂Java在生产跑起来之后的各种机制。 本文为《Hi&#xff0c;运维&#xff0c;你懂Java吗》系列文章 第三篇&#xff0c;敬请关注后续系列文章 欢迎关注 龙叔运维&#xff08;公众号&#xff09; 持续分享运…

浅谈一下:Java学习中不得不知道的:static (静态)成员

下面笔者&#xff0c;按照之前的Student进行简单的说明&#xff1a; class Student {private String name ;private int age ;private String classRoom ;//上课教室public Student(String name, int age) {this.name name;this.age age;}public void doClass() {System.out…

五、 通信协议

协议&#xff1a;约定&#xff0c;就好比我们来自不同的地方&#xff0c;如果都用各自的家乡话&#xff0c;那么肯定无法沟通&#xff0c;这时我们规定双方都说普通话&#xff0c;这样就可以沟通了&#xff0c;而这个规定就是“协议” 网络通信协议&#xff1a;速率、传输码率…

SpringCloud - 服务注册中心

文章目录1.服务注册中心2.Eureak服务注册中心2.1 Eureka服务注册与发现2.1.1 单机Eurake构建步骤(1) 创建EurekaServer服务注册中心(2) EurekaClient服务注册2.1.2 Eureka集群构建步骤(1) 创建第多个EureakServer注册中心(2) 修改host(模拟)(3) 修改YML配置2.1.3 集群配置Eurek…

搞定企业视频直播:硬件设备、直播网络环境和设备连接说明

阿酷TONY / 2022-11-22 / 原创 / 长沙 / 1.直播硬件设备 电脑硬件推荐配置&#xff1a; 系统&#xff1a;win7系统以上&#xff0c;macOS 10.13.6以上 显卡&#xff1a;独立2G显卡或以上 CPU&#xff1a;i5或以上 内存&#xff1a;4G或以上 选配硬件&#xff1a; …

我有 7种 实现web实时消息推送的方案,7种!

技术交流&#xff0c;公众号&#xff1a;程序员小富 大家好&#xff0c;我是小富&#xff5e; 我有一个朋友&#xff5e; 做了一个小破站&#xff0c;现在要实现一个站内信web消息推送的功能&#xff0c;对&#xff0c;就是下图这个小红点&#xff0c;一个很常用的功能。 不过…

打印机不能正常打印怎么办

第一种&#xff1a;更换驱动&#xff0c;在官网上下载相应的驱动而后安装 第一步&#xff1a;添加打印机和扫描仪 第二步&#xff1a;点击——>我需要的打印机不在列表中 第三步;①如果是USB连接则选择添加本地打印机 ②如果是网络打印机&#xff0c;则选择使用TCP/IP添加…

kubernetes 安装与部署

kubernetes 安装与部署 环境almalinux,centos,rockylinux,redhat的9.1版本使用containerd容器运行时kubernetes v1.25.4root用户 1.设置主机名 2.禁用防火墙 3.禁用selinux 4.禁用swap 5.同步时间 5.桥接流量 6.安装nerdctl-full 7.确认cgroup驱动默认为systemd 8.安装kubead…