当前位置: 首页 > news >正文

【学习计算机视觉算法的基础及基本编码-基于Python语言--实例教程】

Python视觉算法实际从0-1实例编码

  • 一、学习基础
  • 二、学习计算机视觉基础知识
  • 三、深度学习在计算机视觉中的应用
  • 四、实例项目
  • 五、实践与拓展

一、学习基础

  1. 数学基础

    • 线性代数
      • 学习矩阵、向量的基本概念,包括矩阵的加法、乘法、转置等运算。理解矩阵的秩、行列式等概念。
      • 学习特征值和特征向量,掌握其计算方法和应用,例如在主成分分析(PCA)等降维算法中的使用。
    • 微积分
      • 掌握一元函数的导数和积分,包括基本函数的求导公式,如多项式函数、指数函数、三角函数等。
      • 理解多元函数的偏导数和梯度,为优化算法中的梯度下降等做准备。
    • 概率论与统计学
      • 学习概率分布,如正态分布、均匀分布等。掌握期望、方差等统计量的计算。
      • 理解贝叶斯定理,这在计算机视觉中的概率推理问题中有重要应用。
  2. 编程语言基础

    • Python
      • 学习Python的基本语法,包括变量、数据类型(如整数、浮点数、字符串、列表、字典等)。
      • 掌握函数、类和模块的使用,学习如何编写和调用函数,创建类和对象,以及使用标准库和第三方库。
      • 熟悉Python的包管理工具pip,学会安装和管理第三方库。

二、学习计算机视觉基础知识

  1. 图像基础
    • 图像表示
      • 学习图像的数字表示,了解像素、灰度图像和彩色图像的存储格式(如RGB、HSV等)。
      • 掌握图像的基本操作,如读取、显示、保存图像,使用Python的OpenCV库完成这些操作。
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('Image', image)
# 等待按键
cv2.waitKey(0)
# 保存图像
cv2.imwrite('new_image.jpg', image)
- **解释**:- `cv2.imread('image.jpg')`:使用OpenCV的`imread`函数读取图像文件,将其存储为一个NumPy数组。- `cv2.imshow('Image', image)`:使用`imshow`函数显示图像,第一个参数是窗口名称,第二个参数是图像数组。- `cv2.waitKey(0)`:等待用户按下任意键,以保持窗口显示,直到用户操作。- `cv2.imwrite('new_image.jpg', image)`:使用`imwrite`函数将图像保存到文件。
  1. 传统计算机视觉算法
    • 边缘检测
      • 学习Sobel、Canny等边缘检测算法。使用OpenCV实现这些算法。
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# Sobel边缘检测
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel_combined = cv2.magnitude(sobel_x, sobel_y)
# Canny边缘检测
edges = cv2.Canny(image, 100, 200)
- **解释**:- `cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)`:以灰度模式读取图像。- `cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)`:对图像进行Sobel边缘检测,计算水平梯度,`cv2.CV_64F`表示输出图像的数据类型,`1, 0`表示计算x方向梯度,`ksize=3`是Sobel算子的大小。- `cv2.magnitude(sobel_x, sobel_y)`:计算梯度的幅值,得到综合的边缘信息。- `cv2.Canny(image, 100, 200)`:使用Canny算法进行边缘检测,100和200是低阈值和高阈值。- **角点检测**:- 学习Harris角点检测和Shi-Tomasi角点检测算法。
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Harris角点检测
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 标记角点
image[dst > 0.01 * dst.max()] = [0, 0, 255]
- **解释**:- `cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)`:将彩色图像转换为灰度图像。- `cv2.cornerHarris(gray, 2, 3, 0.04)`:使用Harris角点检测算法,`2`是邻域大小,`3`是Sobel算子的孔径大小,`0.04`是Harris角点检测的参数。- `image[dst > 0.01 * dst.max()] = [0, 0, 255]`:将检测到的角点标记为红色。

三、深度学习在计算机视觉中的应用

  1. 深度学习框架
    • TensorFlow
      • 学习TensorFlow的基本概念,包括张量、操作、计算图等。
      • 掌握如何使用TensorFlow搭建简单的神经网络,如多层感知机(MLP)。
import tensorflow as tf# 定义一个简单的MLP
model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dense(10)
])
# 编译模型
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
  • 解释

    • tf.keras.Sequential:用于创建一个顺序模型。
    • tf.keras.layers.Flatten(input_shape=(28, 28)):将输入的28x28图像展平为一维向量。
    • tf.keras.layers.Dense(128, activation='relu'):添加一个具有128个神经元的全连接层,使用ReLU激活函数。
    • tf.keras.layers.Dense(10):输出层,有10个神经元,用于分类任务。
    • model.compile:编译模型,指定优化器、损失函数和评估指标。
  • PyTorch

    • 学习PyTorch的张量操作,如创建、索引、切片、运算等。
    • 掌握如何使用PyTorch构建神经网络,包括自定义网络结构和使用预定义模块。
import torch
import torch.nn as nn
import torch.optim as optim# 定义一个简单的网络
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
# 定义优化器和损失函数
optimizer = optim.SGD(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
  • 解释
    • nn.Linear(28 * 28, 128):定义一个线性层,输入维度为28x28,输出维度为128。
    • torch.relu(self.fc1(x)):使用ReLU激活函数。
    • optimizer = optim.SGD(model.parameters(), lr=0.001):使用随机梯度下降优化器,学习率为0.001。
    • criterion = nn.CrossEntropyLoss():使用交叉熵损失函数。
  1. 卷积神经网络(CNN)实践
    • 使用TensorFlow构建CNN
import tensorflow as tfmodel = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
  • 解释

    • tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)):添加一个卷积层,32个3x3的卷积核,使用ReLU激活函数,输入形状为32x32x3的彩色图像。
    • tf.keras.layers.MaxPooling2D((2, 2)):添加一个2x2的最大池化层。
    • tf.keras.layers.Flatten():将特征图展平。
    • tf.keras.layers.Dense(64, activation='relu'):添加一个64个神经元的全连接层,使用ReLU激活函数。
    • tf.keras.layers.Dense(10):输出层,用于分类任务。
  • 使用PyTorch构建CNN

import torch
import torch.nn as nn
import torch.optim as optimclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(3, 32, 3)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3)self.fc1 = nn.Linear(64 * 6 * 6, 64)self.fc2 = nn.Linear(64, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = self.pool(x)x = torch.relu(self.conv2(x))x = self.pool(x)x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = CNN()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
  • 解释
    • nn.Conv2d(3, 32, 3):定义一个输入通道为3,输出通道为32,卷积核大小为3x3的卷积层。
    • nn.MaxPool2d(2, 2):定义一个2x2的最大池化层。
    • self.fc1 = nn.Linear(64 * 6 * 6, 64):定义一个全连接层,输入维度为池化后特征图展平的大小,输出为64。

四、实例项目

  1. 图像分类项目
    • 数据集:使用MNIST、CIFAR-10等公开数据集。
    • 使用TensorFlow实现
import tensorflow as tf
from tensorflow.keras.datasets import mnist# 加载数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255# 构建模型
model = tf.keras.Sequential([tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D((2, 2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
  • 解释
    - mnist.load_data():加载MNIST数据集。
    - train_images = train_images.reshape((60000, 28, 28, 1)):将训练图像数据重塑为适合CNN输入的形状。
    - model.fit(train_images, train_labels, epochs=5, batch_size=64):训练模型,使用64的批量大小,训练5个周期。

    • 使用PyTorch实现
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])
# 加载数据集
trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
testset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=True)# 定义模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 32, 3)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(32, 64, 3)self.fc1 = nn.Linear(64 * 5 * 5, 64)self.fc2 = nn.Linear(64, 10)def forward(self, x):x = torch.relu(self.conv1(x))x = self.pool(x)x = torch.relu(self.conv2(x))x = self.pool(x)x = torch.flatten(x, 1)x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = Net()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()# 训练模型
for epoch in range(5):for images, labels in trainloader:optimizer.zero_grad()output = model(images)loss = criterion(output, labels)loss.backward()optimizer.step()# 评估模型
correct = 0
total = 0
with torch.no_grad():for images, labels in testloader:output = model(images)_, predicted = torch.max(output.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))
  • 解释
    - transforms.Compose:组合多个数据转换操作,包括转换为张量和归一化。
    - datasets.MNIST:加载MNIST数据集。
    - torch.utils.data.DataLoader:创建数据加载器,用于批量加载数据。
    - for epoch in range(5):训练模型5个周期,每个周期遍历训练数据。
  1. 目标检测项目
    • 使用TensorFlow
      • 可以使用TensorFlow的Object Detection API。首先需要安装相关的API,并使用预训练的模型(如SSD、Faster R-CNN等)。
    • 使用PyTorch
      • 可以使用PyTorch的Detectron2库,它提供了一系列预训练的目标检测模型和方便的训练、评估工具。

五、实践与拓展

  1. 数据增强
    • 学习在深度学习中使用数据增强技术,如旋转、翻转、裁剪等。使用OpenCV或相应深度学习框架的工具。
import torchvision.transforms as transforms
# 定义数据增强操作
transform = transforms.Compose([transforms.RandomRotation(10),transforms.RandomHorizontalFlip(),transforms.RandomCrop(28, padding=4)
])
  • 解释
    - transforms.RandomRotation(10):随机旋转图像,角度范围为正负10度。
    - transforms.RandomHorizontalFlip():随机水平翻转图像。
    - transforms.RandomCrop(28, padding=4):随机裁剪图像,大小为28x28,带有4像素的填充。
  1. 超参数优化

    • 学习如何调整模型的超参数,如学习率、批量大小、网络结构等。可以使用手动调整、网格搜索、随机搜索等方法。
  2. 模型部署

    • 学习将训练好的模型部署到实际应用中,如使用TensorFlow Serving或PyTorch的TorchServe,将模型部署到服务器上,为客户端提供服务。

预告:《利用Python库进行计算机视觉算法的实践》

相关文章:

【学习计算机视觉算法的基础及基本编码-基于Python语言--实例教程】

Python视觉算法实际从0-1实例编码 一、学习基础二、学习计算机视觉基础知识三、深度学习在计算机视觉中的应用四、实例项目五、实践与拓展 一、学习基础 数学基础 线性代数: 学习矩阵、向量的基本概念,包括矩阵的加法、乘法、转置等运算。理解矩阵的秩、…...

从零搭建一个Vue3 + Typescript的脚手架——day1

1.开发环境搭建 (1).配置vite vite简介 Vite 是一个由尤雨溪开发的现代化前端构建工具,它利用了浏览器对 ES 模块的原生支持,极大地提升了开发服务器的启动速度和热更新效率。Vite 不仅适用于 Vue.js,还支持 React、Svelte 等多种框架&…...

Pgsql存储占用分析

基础命令 -- 查询表大小 SELECT pg_total_relation_size(table_name);-- 查询表大小(不带索引) SELECT pg_table_size(table_name);-- 查询表索引大小 SELECT pg_indexes_size(table_name);-- 查询表具体大小 SELECT pg_relation_size(table_name); SEL…...

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率(3D Occupancy)预测的目的是预测三维空间中的每个体素是否被占有,如果被占有,则对应的体素将被标记。3D Semant…...

Elasticsearch:使用全文搜索在 ES|QL 中进行过滤 - 8.17

8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法&#xf…...

《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统

目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …...

引领图像编辑领域的新潮流!Edicho:实现跨图像一致编辑的新方法(港科蚂蚁)

在图像处理领域,如何实现跨图像的一致编辑一直是技术挑战。传统方法往往局限于单张图像的编辑,难以保证多张图像间编辑效果的一致性。香港科技大学、蚂蚁集团、斯坦福大学和香港中文大学联合提出Edicho,这一难题迎来了全新的解决方案。 总结如…...

459. 重复的子字符串【力扣】——kmp拼接字符串解法

常规kmp解答 class Solution { public:void getNext(int *next,string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0 && s[i]!s[j]){jnext[j-1];}if(s[i]s[j]) j;next[i]j;}}bool repeatedSubstringPattern(string s) {if(s.size()0) return false;i…...

fpga 的时钟管理模块pll 跟 dcm

FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;中的时钟管理模块&#xff08;Clock Management Module, CMM&#xff09;是用于生成和管理内部时钟信号的关键组件。两个常见的CMM类型是PLL&#xff08;Phase-Locked Loop&#xff0c;…...

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …...

1Hive概览

1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…...

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解&#xff1a;UNION 注入&#xff08;UNION SQL Injection&#xff09; 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集&#xff0c;可以获取数据库中未授权的数据。这种注入技术要…...

IoTDB 常见问题 QA 第三期

关于 IoTDB 的 Q & A IoTDB Q&A 第三期持续更新&#xff01;我们将定期汇总我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;查询最新值 & null 数据相加方…...

RabbitMQ---消息确认和持久化

&#xff08;一&#xff09;消息确认 1.概念 生产者发送消息后&#xff0c;到达消费端会有以下情况&#xff1a; 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除&#xff0c;那么就可能会导致&#xff0c;消息处理异常想要再获取这条消息的时…...

《鸿蒙Next旅游应用:人工智能赋能个性化与智能导览新体验》

随着鸿蒙Next的推出&#xff0c;旅游应用迎来了全新的发展机遇&#xff0c;借助人工智能技术能为用户带来更出色的个性化推荐和智能导览服务。 鸿蒙Next与人工智能融合优势 鸿蒙Next拥有强大的分布式能力和原生智能体验。其能打破设备界限&#xff0c;实现多设备协同&#xf…...

微信小程序获取当前页面路径,登录成功后重定向回原页面

&#x1f935; 作者&#xff1a;coderYYY &#x1f9d1; 个人简介&#xff1a;前端程序媛&#xff0c;目前主攻web前端&#xff0c;后端辅助&#xff0c;其他技术知识也会偶尔分享&#x1f340;欢迎和我一起交流&#xff01;&#x1f680;&#xff08;评论和私信一般会回&#…...

【9.2】Golang后端开发系列--Gin路由定义与实战使用

文章目录 一、Gin 框架路由的基本定义方式1. 简单路由创建2. 路由参数3. 查询参数 二、商业大项目中的路由定义和服务调用1. 路由模块化2. 路由组和中间件3. 中间件的使用4. 服务层调用5. 错误处理6. 版本控制7. 路由注册 一、Gin 框架路由的基本定义方式 1. 简单路由创建 使…...

【微信小程序】let和const-综合实训

let 和 const 都是用于声明变量的关键字&#xff0c;它们与传统的 var 关键字相比&#xff0c;有很多不同之处。 let 声明块级作用域变量&#xff0c;可再赋值&#xff1b;const 声明块级作用域常量&#xff0c;不可再赋值。 以下是它们的详细介绍&#xff1a; 一、基本概念…...

图匹配算法(涵盖近似图匹配)

【图数据管理与挖掘-第四讲&#xff08;子&#xff09;图匹配算法&#xff08;涵盖近似图匹配&#xff09; 北京大学2021暑期-邹磊教授】https://www.bilibili.com/video/BV1zh411q7PW?vd_source7c2b5de7032bf3907543a7675013ce3a 图同构&#xff1a; 定义&#xff1a; 给定…...

java线程——Thread

java线程——Thread 基本步骤示例优劣总结 继承Thread类是Java中实现多线程的一种方式。使用时创建一个新的类&#xff0c;该类继承自java.lang.Thread&#xff0c;并重写其run()方法&#xff0c;在方法中定义线程执行的任务逻辑。 基本步骤 1、创建一个子类&#xff1a;定义一…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...