时尚达人的深度学习:非洲服装检测

news2024/12/30 3:46:00

介绍

时尚在医疗、教育和农业等不同领域的人工智能领域并没有受到太多关注,包括机器学习、深度学习。这是因为时尚不被认为是一个关键领域.

时尚和文化在 AI 中并没有得到公正的对待。这是一个令人兴奋的项目,我们将在 8 种当地非洲服装之间建立一个分类器模型!

这不是一个常规项目,因为数据集是新的,并与此项目一起启动。请将此视为一个原创项目,为你的数据科学简历增添更多美感。

9bd3e4c725fc7d7bbb3c9a8fd15dcd76.png

检测非洲服装可以被认为是一个有趣的项目,同时可以提高深度学习和 TensorFlow 技能。根据部落识别这些非洲服装可以作为附加功能用于时尚应用程序。

另一个应用是当你在网上找到一件当地服装并想知道它是什么时。别担心。该模型可以帮助你了解它是什么,帮助解决这种不确定性。

在技术取代文化遗产的时代,最安全的方法是向 AI 传授我们的文化,这将帮助我们保护它。

Inuwa Mobarak Abraham

我们将开发一个能够检测 8 种文化服饰的机器学习非洲服饰检测模型。

在这个项目和文章中,我们将介绍时尚达人如何使用深度学习技术的真实世界原型的实际开发。我们将应用各种评估指标来确保深度学习模型的性能。

目录

  1. 问题陈述

  2. 数据集描述

  3. 项目管道

  4. 第 1 步:设置环境

  5. 第 2 步:导入依赖

  6. 第 3 步:加载数据集

  7. 第 4 步:数据清洗

  8. 第 5 步:图像数据预处理

  9. 第 6 步:数据可视化

  10. 第 7 步:模型训练

  11. 第 8 步:训练和评估

  12. 第 9 步:部署

  13. 结论

问题陈述

大多数文化正在消失于文明和技术之中。在非洲,文化遗产正在丢失和被遗忘。这就是这个项目的想法来源——试图保护这些文化,我们还可以开发智能系统,包括聊天机器人、图像标识符和文本转语音,以帮助对抗文化流失并帮助保护我们的遗产。

如前所述,我们将构建一个模型来帮助对尼日利亚和南非等国家/地区的八种当地非洲服饰进行分类。这是由于这些部落的在线数据可用。保存此模型将有助于外国人和下一代快速识别他们的文化产物。

94070902e908bf8dad3dd0e8e697070c.png

这一挑战将涵盖深度学习、TensorFlow 和数据来源。该项目的先决条件是了解机器学习模型管道和使用 jupyter notebooks 的经验。

数据集描述

非洲服装图像数据集是使用 Google Chrome 扩展程序从互联网上收集的。数据集是原始的和新的。

数据集地址:https://drive.google.com/drive/folders/1jhMG6vnsKqDm5uILBMLezU2Ll5ljWOZy?usp=sharing

数据集包含属于 8 个类别的图像。该目录包含属于 8 个训练类的 9784 个图像和属于 8 个模型验证类的 2579 个文件。

数据集:

  • 该数据集总共包含 12,363 张包含八个类别的图像。这些类别是非洲的部落。

  • 这些类别是:

  1. Adire(来自尼日利亚)

  2. Idgo(来自尼日利亚)

  3. Idoma(来自尼日利亚)

  4. Igala(来自尼日利亚)

  5. Tiv(来自尼日利亚)

  6. Tswana-Shweshwe(来自南非)

  7. Xhosa-South Africa(来自南非)

  8. Zulu(来自南非)

  • 数据集包含组织在 1 个文件夹中的图像的不同视图,其中 2 个子文件夹代表训练集和验证集。然后子文件夹相应地包含图像。

  • 有些类在图像数量上略有不平衡。

9d7a1f0c518df53de9d4ff5ca45632db.jpeg

项目管道

项目管道指导项目将如何进行。不要盲目构建,通过管道概览,任何人都可以了解项目是如何完成或将如何完成的。

以下是构建模型所涉及的步骤:

  • 设置环境

  • 导入依赖项

  • 加载数据集

  • 数据清洗

  • 图像数据预处理

  • 数据可视化

  • 模型训练

  • 训练与评估

  • 保存训练好的模型工件

Google colab 提供了一个实践环境来执行这样的深度学习任务。如果你没有在本地安装 GPU 进行深度学习,你可以在线使用 Google colab。它具有可访问的 GPU,这使得在大型数据集上的训练时间很短。

Google colab:https://www.analyticsvidhya.com/blog/2020/03/google-colab-machine-learning-deep-learning/

第 1 步:设置环境

本项目推荐环境为Google colab。但是,只要你对自己的行为有信心,就可以使用任何环境。Colab 友好而高效。

要查找环境,你可以谷歌搜索“Google Colaboratory”或访问:https://colab.research.google.com/

它是一个在线平台,因此你无需安装任何东西。它类似于 jupyter。因此,了解 Jupiter 就足以在这个项目中使用 Colab。

主页如下所示:

53fa734a748c1d5286e21c625c8cba21.jpeg

如上所示选择“文件”和“新建笔记本”。这应该会为你提供一个新的无标题笔记本,如下所示。

2931d2659912559cd2a3e70b5ea553ae.png

使用 Colab GPU

使用 Colab 的好处是可以使用免费的 GPU。我们必须将它添加到当前运行时才能使用它。你可以单击屏幕顶部选项卡中的“运行时”菜单,然后选择“更改运行时类型”,如下面的快照所示:

51a8f26d81ad623c72686aaa617ac61e.png

单击“更改运行时类型”将提供一个菜单,你可以在其中找到“硬件加速器”,单击下拉按钮并选择“GPU”作为硬件加速器。如下所示:

81535a994532086f29249f40598d82a3.png

这会使用该笔记本电脑的 GPU。完成后,会话开始。由于 GPU 是一种昂贵的资源,因此你不仅要使用这个 GPU,还要使用这个会话。这就是为什么如果你让这个会话闲置太久,会话就会结束,你将不得不通过启动会话来重新开始。你应该通过不使用同一用户帐户同时打开太多会话来管理此问题。

你可以选择 Google Colab Pro 来消除所有限制。

环境设置后的下一步是导入依赖项。

第 2 步:导入依赖

在编码开始时导入所有库是一个很好的做法。这将帮助人们轻松阅读和理解代码,而无需担心所使用的库。

有时一些库在项目开始时可能并不为人所知,直到需要时才知道。在这种情况下,我们总是可以回来将它们添加到这里。

#Importing Required Libraries
import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf #major backend

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential

在上面的代码中,我们导入了 TensorFlow,它将成为我们项目的重要后端。一个替代方案是 PyTorch 或 OpenCV,但我们选择 TensorFlow 是因为它的性能和可扩展性。它有一个非常干净、可读的代码库。

第 3 步:加载数据集

如前所述,我已经提供了数据集供使用。下面将创建并提供 GitHub 存储库。

你可以将数据集下载到你的设备,然后直接将其上传到你的个人谷歌驱动器,然后再实际执行后续步骤。

#Mounting Google Drive for dataset
from google.colab import drive
drive.mount('/content/drive')
#Dataset directory loading
import pathlib
data_dir = "/content/drive/MyDrive/MLProjects/dataset/african_attires"
data_dir_train = "/content/drive/MyDrive/MLProjects/dataset/african_attires/Train"
data_dir_validation = "/content/drive/MyDrive/MLProjects/dataset/african_attires/Validation"

注意:必须修改上面的代码片段以适合你的 Google Drive 中的位置。

第 4 步:数据清洗

使用的数据集被废弃了,一些图像在这个过程中被破坏了。虽然有些图像是可见的,但它们的二进制文件很糟糕。如果使用这些图像,将引发未知类型错误。

TensorFlow 对不一致的图像类型有一定的容忍度。像PyTorch这样的框架可能会接受这样的图像,但由于图像是在内部处理的,因此它仍然会影响其性能。

TensorFlow 接受的图像类型有位图、gif、jpeg 和 png。

import cv2 #major backend for data cleaning

# Helper function for data cleaning
def check_images(s_dir, ext_list):
    bad_images=[] # empty array for storing bad images
    bad_ext=[]  # empty array for storing bad image extensions
    s_list= os.listdir(s_dir) # read the location where the images are stored
    for klass in s_list: # go through the image locations in the folders/classes
        klass_path=os.path.join (s_dir, klass)  
        print ('processing class directory ', klass)
        if os.path.isdir(klass_path):
            file_list=os.listdir(klass_path)
            for f in file_list:               
                f_path=os.path.join (klass_path,f)
                index=f.rfind('.')
                ext=f[index+1:].lower()
                if ext not in ext_list:  # looping for bad images
                    print('file ', f_path, ' has an invalid extension ', ext)
                    bad_ext.append(f_path)
                if os.path.isfile(f_path):
                    try:
                        img = cv2.imread(f_path)
                        shape = img.shape
                        image_contents = tf.io.read_file(f_path)
                        image = tf.image.decode_jpeg(image_contents, channels=3) # Checking the image internal structures to detect bad images
                    except Exception as e:
                        print('file ', f_path, ' is not a valid image file')
                        print(e)
                        bad_images.append(f_path)
                else:
                    print('*** fatal error, you a sub directory ', f, ' in class directory ', klass)
        else:
            print ('*** WARNING*** you have files in ', s_dir, ' it should only contain sub directories')
    return bad_images, bad_ext
#Calling the helper function
source_dir = data_dir_train
good_exts=["bmp", "gif", "jpeg", "png","jpg"] # list of acceptable extensions
bad_file_list, bad_ext_list=check_images(source_dir, good_exts)
if len(bad_file_list) !=0:
    print('improper image files are listed below')

print(bad_file_list)
print(bad_ext_list)

上面的代码循环遍历数据集并打印出不一致的数据类型。此处使用 OpenCV 来批判性地查看图像二进制文件。

第 5 步:图像数据预处理

我们可以将预处理保留到可视化之后。但是由于我们的图像是在线获取的并且可能不规则,因此最好在可视化之前尝试按照我们想要的方式对其进行预处理。

如果有模糊之类的问题,我们可以在可视化过程中看到它。

img_height,img_width=180,180 #setting image dimention
batch_size=32
#for train datset
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir_train,
  #validation_split=0.2,
  #subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

输出应打印在训练集中找到的文件数:找到属于 8 个类的 9784 个文件。

#for validation datset
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir_validation,
  #validation_split=0.2,
  #subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

输出应打印在训练集中找到的文件数:找到属于 8 个类的 2579 个文件。

第 6 步:数据可视化

我们可以在训练前看到我们的图像是什么样子的。此外,在没有首先看到数据集的情况下查看笔记本的人可以知道这些图像是什么样子的。它是数据的图形表示。在不经过整个数据集的情况下进行通信特别有效。

class_names = train_ds.class_names
print(class_names)

上面的代码片段首先按照模型使用它的顺序打印数据集的类的数组。这给出:

[‘Adire’, ‘Idgo’, ‘Idoma’, ‘Igala’, ‘Tiv’, ‘Tswana-Shweshwe’, ‘Xhosa-South Africa’, ‘Zulu’]
import matplotlib.pyplot as plt

# Lopping through the trainset for sample images 
plt.figure(figsize=(14, 14))
for images, labels in train_ds.take(1):
  for i in range(9):
    ax = plt.subplot(3, 3, i + 1)
    plt.imshow(images[i].numpy().astype("uint8"))
    plt.title(class_names[labels[i]])
    plt.axis("off")
06bd1862dfa50ca454ba0e67d1b73ebd.png

第 7 步:模型训练

此时,数据集已准备好用于训练。我们需要设置一些关键参数进行训练。

num_classes = 8 # number of classes is number of image directory

# Define Sequential model with 3 layers
model = Sequential([
  layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
  layers.Conv2D(16, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(32, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Conv2D(64, 3, padding='same', activation='relu'),
  layers.MaxPooling2D(),
  layers.Flatten(),
  layers.Dense(128, activation='relu'),
  layers.Dense(num_classes,activation='softmax')
])

下面简要解释其中一些参数和术语:

ReLU: 是“rectified linear unit”的缩写(写作ReLU)。它是一种激活函数,用于将非线性引入深度学习模型。这解决了模型可能面临所谓的“梯度消失问题”的问题。

padding: 模型内核处理图像时添加到图像边缘的像素数。

activation: 它是决定神经元是否应该被激发的参数。这有助于在预测时重视参数。

layers:这用于设置模型将训练的层的性质。

Conv2D: 此参数有助于过滤和确定通过形成卷积来组合的内核数。

#Setting the training parameters
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
epochs=10 #setting the number of passes in the model
history = model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs
)

上面的代码在 10 个时期训练模型,这意味着它遍历数据集 10 次,并且每次都在学习时做出预测。如下所示:

Epoch 1/10
/usr/local/lib/python3.9/dist-packages/keras/backend.py:5585: UserWarning: "`sparse_categorical_crossentropy` received `from_logits=True`, but the `output` argument was produced by a Softmax activation and thus does not represent logits. Was this intended?
  output, from_logits = _get_logits(
306/306 [==============================] - 498s 2s/step - loss: 1.2685 - accuracy: 0.5346 - val_loss: 3.3806 - val_accuracy: 0.2602
Epoch 2/10
306/306 [==============================] - 56s 179ms/step - loss: 0.7726 - accuracy: 0.7296 - val_loss: 3.9734 - val_accuracy: 0.3695
Epoch 3/10
306/306 [==============================] - 56s 181ms/step - loss: 0.4911 - accuracy: 0.8325 - val_loss: 4.3418 - val_accuracy: 0.3808
Epoch 4/10
306/306 [==============================] - 56s 180ms/step - loss: 0.2632 - accuracy: 0.9153 - val_loss: 5.4616 - val_accuracy: 0.4102
Epoch 5/10
306/306 [==============================] - 57s 183ms/step - loss: 0.1420 - accuracy: 0.9586 - val_loss: 6.2114 - val_accuracy: 0.4188
Epoch 6/10
306/306 [==============================] - 57s 183ms/step - loss: 0.0970 - accuracy: 0.9747 - val_loss: 7.2962 - val_accuracy: 0.4234
Epoch 7/10
306/306 [==============================] - 56s 181ms/step - loss: 0.0831 - accuracy: 0.9787 - val_loss: 6.9264 - val_accuracy: 0.4122
Epoch 8/10
306/306 [==============================] - 57s 182ms/step - loss: 0.0637 - accuracy: 0.9859 - val_loss: 7.9563 - val_accuracy: 0.4331
Epoch 9/10
306/306 [==============================] - 57s 180ms/step - loss: 0.0523 - accuracy: 0.9879 - val_loss: 7.9776 - val_accuracy: 0.4234
Epoch 10/10
306/306 [==============================] - 56s 178ms/step - loss: 0.0655 - accuracy: 0.9828 - val_loss: 8.0845 - val_accuracy: 0.4149

第 8 步:训练和评估

为了评估我们的模型性能,我们查看训练损失、准确性以及验证损失和准确性。

训练损失:训练损失提供了一个指标,用于评估我们的深度学习模型如何适合训练集。它估计模型在训练集上的误差值。

训练准确度:训练准确度表示模型识别其训练图像的能力。我们的模型在这里显示出很高的训练准确性,这意味着它训练得很好。但我们必须通过引入验证集来证明这一点,看看它是否真的学得很好。

验证损失:我们合并了训练损失和验证损失,这是一种常见的做法。验证损失显示了我们的模型与验证集的拟合程度。与训练损失相比,这里的错误很高。

验证准确性:此处的验证集访问训练结果的真实性。我们的项目显示平均准确率为 43%。这意味着我们的模型需要更多的训练。要做的事情可能是增加数据集大小或相应地调整一些参数。

第 9 步:部署

最后,要退出我们的模型训练以进行部署,需要保存模型以供进一步使用。这是使用keras 中的 save_model 函数在此处完成的。该模型可以用作 Web 或本地应用程序中的工件。

#saving the model
tf.keras.models.save_model(model,'my_model.hdf5')

结论

在本文中,我们训练了一个深度学习模型来对非洲当地服饰的图像进行预测和分类。我们从网上收集了 12,000 多张图片,并将它们分为 8 类服装,包括 Adire、Idgo、Idoma、Igala、Tiv、Tswana-Shweshwe、Africa 和 Zulu。

虽然准确率表现一般,但我们可以通过添加更多图像或调整参数来进一步改进这个个人项目。

该模型可以使用 streamlit、Heroku 或任何 Web 服务进行部署。甚至在你的机器上进行本地部署。

要点:

  • 该项目涵盖了时尚达人使用的深度学习技术的真实世界原型的实际开发。应用了各种合适的评估指标。

  • 非洲着装检测的数据集是从互联网上收集的。数据集是原始的和新的,链接在文章末尾可用。

  • 该数据集包含属于 8 个类别的图像。该目录包含属于 8 个训练类的 9784 个图像和属于 8 个模型验证类的 2579 个文件。

  • 推荐的环境是Google colab,模型的开发平均准确率为43%。

链接:

  • GitHub 存储库:https://github.com/inuwamobarak/african_attire_detector

  • 数据集地址:https://drive.google.com/drive/folders/1jhMG6vnsKqDm5uILBMLezU2Ll5ljWOZy?usp=sharing

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

23f434f1bdc237aba83c0fca20ef988f.jpeg

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

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

相关文章

科大讯飞版ChatGPT,厉害了!

前几天科大讯飞的星火认知大模型发布了,我刚好有朋友在科大讯飞工作,于是就第一时间体验了一波。 一番体验下来确实比我预想的效果要好,没想到国产模型的效果还不错,我试了很多方面,比如通用常识功能、写作功能、学习能…

2023 开源之夏来啦!报名 MegEngine 项目,赢取万元奖金!

“开源软件供应链点亮计划-暑期2023”是一项面向高校学生的暑期活动,为高校学生提供了绝佳的、友好开放的交流平台。使学生可以真正投身于开源软件的开发维护,得到资深开源软件开发者指导的机会,获得丰硕的活动奖金,并帮助学生获取…

【送书】前端系列14集-Vue3-setup

送书活动:挑选1名粉丝同学哦 免费包邮送。截止时间:2023/5/18号 19 : 00参与底部评论区说说:请在评论中分享你的阅读收获。 前端工程化:基于Vue.js 3.0的设计与实践实战 页面浏览量(Page View,PV&#xff…

【004】C++数据类型之字符类型(char)详解

C数据类型之字符类型详解 引言一、背景知识二、字符常量三、字符变量四、键盘(输入设备)给字符变量赋值五、字符常量和字符串常量的区别六、案例:字符大小写转换总结 引言 💡 作者简介:专注于C/C高性能程序设计和开发&…

知识变现海哥|为什么你无法将学到的知识变现

秋叶大叔在公众号里发了这样一篇文章《为什么今天的年轻人更要读大学?》,文章里提到这样一个观点:一个人的专业能力要获得优质的回报,还需要学一样「变现技能」。 我不由得想问一个问题:你真的理解变现能力吗&#xf…

微信公众号服务号客服对接-唯一客服系统文档中心

微信公众号客服功能,需要公众号为认证的服务号,可以实现公众号模板消息提醒,网页授权获取到微信的昵称头像,机器人或AI自动回复功能等 微信公众号后台设置 【设置与开发】【基本配置】 设置好公众号的AppID AppSecret IP白名单 【…

亚马逊云科技助力默沙东,用数字化技术赋能医药市场营销

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在全球药企中,默沙东是封神的存在。提及其明星药物,我们接种的乙肝疫苗、麻疹疫苗、宫颈癌九价疫苗、快速短效麻醉剂、抗生素青霉素钾等药物皆出自于默沙东。 2022年,全球药企TOP 10营业收…

ChatGPT国内免费使用方法有哪些?

目录 ChatGPT介绍:一、ChatGPT是什么?二、ChatGPT发展:三、ChatGPT 优点:四、国内使用ChatGPT方法五、结语: ChatGPT介绍: 一、ChatGPT是什么? ChatGPT 是一个基于语言模型 GPT-3.5 的聊天机器人,ChatGPT模型是Instruct GPT的姊妹模型(siblingmodel&a…

Lighttpd服务器安装

目录 >1服务器安装配置 1.解压 2.进入源码目录,创建文件夹web 3.执行configure脚本文件 4.执行Makefile文件 >2目录创建及文件移动 1.将源码目录lighttpd-1.4.54下web文件夹移动到某个路径下 2.在web目录下创建文件夹(config、log、run、www&#…

jsp+springboot酒店客房管理系统 i59uz

(1)管理员模块:系统记录管理员号以及密码,以及对权限的设置,对酒店进行信息管理,对房客进行信息的登记和修改,以及对酒店的信息进行维护。 Spring Boot 是 Spring 家族中的一个全新的框架&#…

【JVM】2. 类加载子系统

文章目录 2.1. 内存结构概述🍒2.2. 类加载器与类的加载过程🍒2.2.1 加载阶段🍓🍓2.2.2 链接阶段🍓🍓2.2.3 初始化阶段🍓🍓 2.3. 类加载器分类🍒2.3.1. 虚拟机自带的加载器…

基于自适应特征融合网络的地铁OD流预测

1 导读 本论文于2023年发表于交通领域顶刊《IEEE Transactions on Intelligent Transportation Systems》。文章针对OD流预测中存在的三点问题,即复杂动态的时空依赖性、数据稀疏性和不完整性以及容易受到外部因素影响展开研究,提出了一个自适应特征融合…

遇到一个同事,喜欢查其他同事的BUG,然后截图发工作大群里,还喜欢甩锅,该怎么办?...

职场上都有哪些奇葩同事? 一位网友吐槽: 遇到一个同事,喜欢查同级别同事的bug,截图发工作群,甚至发大群里,还喜欢甩锅,该怎么办? 职场工贼,人人喊打,网友们纷…

LCHub:网易数帆汪源:低代码仍然被“误会”,市场明年会迎拐点

LCHub:2023年四月底,在北京见到网易副总裁、网易杭州研究院执行院长、网易数帆总经理汪源,他展现出对于低代码、生成式AI技术非常开放的分享状态。汪源是网易杭州研究院执行院长,他负责的研究院在2006年已经成立,早期的网易数帆就是研究院的技术团队,支撑网易公司的数个主…

【MySQL聚合查询】轻松实现数据统计

1、聚合查询 聚合查询:行和行之间的运算 1.1 聚合函数 常见的聚合函数: count:数量 sum:求和 avg:求平均值 max:最大值 min:最小值 1.2 聚合函数的使用 1.2.1 count 函数 现在有一个 class 表&a…

【Python每日一练】总目录(2023.2.18~5.18)共90篇

2023.2.18~2023.5.18 连载三个月共90篇,暂停更 Python 2023.05 2023.05.11-2023.05.18 20230518 20230517 1. 最大连续1的个数 I Max Consecutive Ones 🌟 2. 最大连续1的个数 II Max Consecutive Ones 🌟🌟 3. 最大连续1的个…

什么是K-近邻算法?

一、什么是K-近邻算法? K近邻算法(K-Nearest Neighbors,简称KNN)是一种基本的分类和回归算法。它的基本原理是通过测量样本之间的距离来对未知样本进行分类或预测。KNN算法被归类为一种“懒惰学习”(lazy learning&am…

【K8s】安全认证与DashBoard

文章目录 一、概述1、客户端2、认证、鉴权与准入控制 二、认证管理1、认证方式2、HTTPS证书认证 三、授权管理1、授权与RBAC2、Role 与 ClusterRole3、RoleBinding 与 ClusterRoleBinding4、案例:创建一个只能管理dev空间下Pods资源的账号 四、准入控制五、DashBoar…

【ARMv8 编程】A64 流控制指令

A64 指令集提供了许多不同种类的分支指令。对于简单的相对分支,即那些从当前地址偏移的分支,使用 B 指令。无条件简单相对分支可以从当前程序计数器位置向后或向前分支最多 128MB。 有条件的简单相对分支,其中条件代码附加到 B,具…

用Pin对二进制文件自动脱壳

Intel Pin Intel Pin在可执行二进制代码中插入一些探测函数,用于观察、记录、分析宿主代码执行过程中的一些与计算机体系结构相关的特性,如访存指令,寄存器内容,寄存器地址等,通过Pin提供的API可以编写各种分析函数,这样程序运行完以后,统计和分析结果也同时产生,分析…