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

rearrangement-challenge-2022环境使用学习(一)

搭建了rearrangement-challenge-2022的环境:
https://github.com/facebookresearch/habitat-challenge/tree/rearrangement-challenge-2022
habitat最大的缺点是对不同的版本非常的敏感。本文只是针对rearrangement-challenge-2022的学习。

文档一开始会很不完善,会慢慢的补齐。

1、如何使用配置文件初始化环境

主要使用 habitat.Env类进行初始化。传一个config参数,该参数可以通过habitat.get_config()得到,该函数需要指定一个配置文件的路径,举例如下:

import habitat
env = habitat.Env(config=habitat.get_config("/home/yons/LK/habitat-challenge/habitat-lab/configs/datasets/pointnav/habitat_test.yaml")    

配置环境的过程会打印很多信息如下:

# 2024-03-04 21:17:09,546 Initializing dataset PointNav-v1
# 2024-03-04 21:17:09,708 initializing sim Sim-v0
# [21:17:09:715104]:[Metadata] AttributesManagerBase.h(380)::createFromJsonOrDefaultInternal : <Dataset>: Proposing JSON name : default.scene_dataset_config.json from original name : default| This file does not exist.
# [21:17:09:715197]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (capsule3DSolid:capsule3DSolid_hemiRings_4_cylRings_1_segments_12_halfLen_0.75_useTexCoords_false_useTangents_false) created and registered.
# [21:17:09:715224]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (capsule3DWireframe:capsule3DWireframe_hemiRings_8_cylRings_1_segments_16_halfLen_1) created and registered.
# [21:17:09:715242]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (coneSolid:coneSolid_segments_12_halfLen_1.25_rings_1_useTexCoords_false_useTangents_false_capEnd_true) created and registered.
# [21:17:09:715258]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (coneWireframe:coneWireframe_segments_32_halfLen_1.25) created and registered.
# [21:17:09:715270]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (cubeSolid:cubeSolid) created and registered.
# [21:17:09:715282]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (cubeWireframe:cubeWireframe) created and registered.
# [21:17:09:715299]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (cylinderSolid:cylinderSolid_rings_1_segments_12_halfLen_1_useTexCoords_false_useTangents_false_capEnds_true) created and registered.
# [21:17:09:715314]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (cylinderWireframe:cylinderWireframe_rings_1_segments_32_halfLen_1) created and registered.
# [21:17:09:715326]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (icosphereSolid:icosphereSolid_subdivs_1) created and registered.
# [21:17:09:715369]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (icosphereWireframe:icosphereWireframe_subdivs_1) created and registered.
# [21:17:09:715397]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (uvSphereSolid:uvSphereSolid_rings_8_segments_16_useTexCoords_false_useTangents_false) created and registered.
# [21:17:09:715429]:[Metadata] AssetAttributesManager.cpp(121)::createObject : Asset attributes (uvSphereWireframe:uvSphereWireframe_rings_16_segments_32) created and registered.
# [21:17:09:715438]:[Metadata] AssetAttributesManager.cpp(110)::AssetAttributesManager : Built default primitive asset templates : 12
# [21:17:09:715778]:[Metadata] SceneDatasetAttributesManager.cpp(35)::createObject : File (default) not found, so new default dataset attributes created  and registered.
# [21:17:09:715787]:[Metadata] MetadataMediator.cpp(120)::createSceneDataset : Dataset default successfully created.
# [21:17:09:715798]:[Metadata] AttributesManagerBase.h(380)::createFromJsonOrDefaultInternal : <Physics Manager>: Proposing JSON name : ./data/default.physics_config.json from original name : ./data/default.physics_config.json| This file exists.
# [21:17:09:715881]:[Metadata] PhysicsAttributesManager.cpp(26)::createObject : JSON Configuration File (./data/default.physics_config.json) based physics manager attributes created and registered.
# [21:17:09:715890]:[Metadata] MetadataMediator.cpp(203)::setActiveSceneDatasetName : Previous active dataset  changed to default successfully.
# [21:17:09:715896]:[Metadata] MetadataMediator.cpp(175)::setCurrPhysicsAttributesHandle : Old physics manager attributes  changed to ./data/default.physics_config.json successfully.
# [21:17:09:715902]:[Metadata] MetadataMediator.cpp(66)::setSimulatorConfiguration : Set new simulator config for scene/stage : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb and dataset : default which is currently active dataset.
# Renderer: NVIDIA GeForce RTX 2080 Ti/PCIe/SSE2 by NVIDIA Corporation
# OpenGL version: 4.6.0 NVIDIA 510.108.03
# Using optional features:
#     GL_ARB_vertex_array_object
#     GL_ARB_ES2_compatibility
#     GL_ARB_separate_shader_objects
#     GL_ARB_robustness
#     GL_ARB_texture_storage
#     GL_ARB_invalidate_subdata
#     GL_ARB_texture_storage_multisample
#     GL_ARB_multi_bind
#     GL_ARB_direct_state_access
#     GL_ARB_get_texture_sub_image
#     GL_ARB_texture_filter_anisotropic
#     GL_KHR_debug
# Using driver workarounds:
#     no-forward-compatible-core-context
#     no-layout-qualifiers-on-old-glsl
#     nv-zero-context-profile-mask
#     nv-implementation-color-read-format-dsa-broken
#     nv-cubemap-inconsistent-compressed-image-size
#     nv-cubemap-broken-full-compressed-image-query
#     nv-compressed-block-size-in-bits
# [21:17:09:817318]:[Metadata] MetadataMediator.cpp(297)::getSceneInstanceAttributesByName : Dataset : default has no preloaded SceneInstanceAttributes or StageAttributes named : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb so loading/creating a new StageAttributes with this name, and then creating a SceneInstanceAttributes with the same name that references this stage.
# [21:17:09:817339]:[Metadata] AttributesManagerBase.h(380)::createFromJsonOrDefaultInternal : <Stage Template>: Proposing JSON name : data/scene_datasets/habitat-test-scenes/skokloster-castle.stage_config.json from original name : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb| This file does not exist.
# [21:17:09:817384]:[Metadata] AbstractObjectAttributesManagerBase.h(184)::createObject : File (data/scene_datasets/habitat-test-scenes/skokloster-castle.glb) exists but is not a recognized config filename extension, so new default Stage Template attributes created and registered.
# [21:17:09:817412]:[Metadata] SceneDatasetAttributes.cpp(47)::addNewSceneInstanceToDataset : Dataset : 'default' : Stage Attributes 'data/scene_datasets/habitat-test-scenes/skokloster-castle.glb' specified in Scene Attributes exists in dataset library.
# [21:17:09:817418]:[Metadata] SceneDatasetAttributes.cpp(84)::addNewSceneInstanceToDataset : Dataset : 'default' : Lighting Layout Attributes 'no_lights' specified in Scene Attributes but does not exist in dataset, so creating.
# [21:17:09:817426]:[Metadata] AttributesManagerBase.h(380)::createFromJsonOrDefaultInternal : <Lighting Layout>: Proposing JSON name : no_lights.lighting_config.json from original name : no_lights| This file does not exist.
# [21:17:09:817437]:[Metadata] LightLayoutAttributesManager.cpp(36)::createObject : File (no_lights) not found, so new default light layout attributes created and registered.
# [21:17:09:817445]:[Sim] Simulator.cpp(237)::createSceneInstance : Navmesh file location in scene instance : data/scene_datasets/habitat-test-scenes/skokloster-castle.navmesh
# [21:17:09:817455]:[Sim] Simulator.cpp(242)::createSceneInstance : Loading navmesh from data/scene_datasets/habitat-test-scenes/skokloster-castle.navmesh
# [21:17:09:817468]:[Nav] PathFinder.cpp(852)::loadNavMesh : NavMeshSettings aren't present, guessing that they are the default
# [21:17:09:817532]:[Sim] Simulator.cpp(244)::createSceneInstance : Navmesh Loaded.
# [21:17:09:817545]:[Scene] SceneGraph.h(85)::createDrawableGroup : Created DrawableGroup: 
# [21:17:09:817552]:[Assets] ResourceManager.cpp(297)::loadSemanticSceneDescriptor : SceneInstance : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb proposed Semantic Scene Descriptor filename : data/scene_datasets/habitat-test-scenes/skokloster-castle.scn
# [21:17:09:817560]:[Assets] ResourceManager.cpp(344)::loadSemanticSceneDescriptor : SSD File Naming Issue! Neither SceneInstanceAttributes-provided name : data/scene_datasets/habitat-test-scenes/skokloster-castle.scn  nor constructed filename : data/scene_datasets/habitat-test-scenes/info_semantic.json exist on disk.
# [21:17:09:817579]:[Assets] ResourceManager.cpp(1652)::ConfigureImporterManagerGLExtensions : Importing Basis files as BC7.
# [21:17:09:817696]:[Sim] Simulator.cpp(302)::createSceneInstance : Using scene instance-specified Light key : - no_lights -
# [21:17:09:817708]:[Metadata] MetadataMediator.cpp(66)::setSimulatorConfiguration : Set new simulator config for scene/stage : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb and dataset : default which is currently active dataset.
# [21:17:09:817723]:[Sim] Simulator.cpp(412)::instanceStageForSceneAttributes : Start to load stage named : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb with render asset : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb and collision asset : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb
# [21:17:09:817752]:[Assets] ResourceManager.cpp(691)::createStageAssetInfosFromAttributes : Frame :{"up":[0,0,1],"front":[0,1,0],"origin":[0,0,0]} for render mesh named : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb|{"up":[0,0,1],"front":[0,1,0],"origin":[0,0,0]} for semantic mesh named :  with type specified as semantic|Semantic Txtrs : False
# [21:17:09:817760]:[Assets] ResourceManager.cpp(507)::loadStage : Start load render asset data/scene_datasets/habitat-test-scenes/skokloster-castle.glb .
# [21:17:09:817765]:[Assets] ResourceManager.cpp(973)::loadStageInternal : Attempting to load stage data/scene_datasets/habitat-test-scenes/skokloster-castle.glb 
# [21:17:09:817779]:[Assets] ResourceManager.cpp(855)::loadRenderAsset : Loading general asset named: data/scene_datasets/habitat-test-scenes/skokloster-castle.glb
# [21:17:09:817785]:[Assets] ResourceManager.cpp(1652)::ConfigureImporterManagerGLExtensions : Importing Basis files as BC7.
# [21:17:10:458713]:[Assets] ResourceManager.cpp(2089)::loadMaterials : Building 2 materials for asset named 'skokloster-castle.glb' : 
# [21:17:10:458752]:[Assets] ResourceManager.cpp(2194)::loadMaterials : Idx 00:Flat.
# [21:17:10:458766]:[Assets] ResourceManager.cpp(2194)::loadMaterials : Idx 01:Flat.
# [21:17:10:516568]:[Sim] Simulator.cpp(439)::instanceStageForSceneAttributes : Successfully loaded stage named : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb
# [21:17:10:516599]:[Sim] Simulator.cpp(471)::instanceStageForSceneAttributes : 
# ---
# The active scene does not contain semantic annotations : activeSemanticSceneID_ = 0  
# ---
# [21:17:10:516615]:[Sim] Simulator.cpp(205)::reconfigure : CreateSceneInstance success == true for active scene name : data/scene_datasets/habitat-test-scenes/skokloster-castle.glb  with renderer.
# 2024-03-04 21:17:10,517 Initializing task Nav-v0    

这其中有很多子问题如下:

1.1 如何设置配置文件中要配置的参数

办法一:直接在yaml配置文件中修改

该方法简单直接不需要举例

办法二:在代码中修改

通过habitat.get_config()获取到config变量后,通过config.defrost()之后便可以在代码中设置一些变量,设置完后通过config.freeze()冻结配置参数

config=habitat.get_config("/home/yons/LK/habitat-challenge/habitat-lab/configs/datasets/pointnav/habitat_test.yaml"
config.defrost()
config.DATASET.SPLIT = "val"
config.freeze()

1.2 habitat.get_config在哪里定义

在…/habitat-challenge/habitat-lab/habitat/config/default.py中定义。该文件中定义了:
1) get_config()方法
2)所有配置变量的默认值

2 关于动作

…/habitat-lab/habitat/sims/habitat_simulator/actions.py中定义了默认的动作:

class _DefaultHabitatSimActions(Enum):STOP = 0MOVE_FORWARD = 1TURN_LEFT = 2TURN_RIGHT = 3LOOK_UP = 4LOOK_DOWN = 5

要执行动作需要初始化环境,然后通过HabitatSimActions获取动作,然后通过env.step执行动作

from habitat.sims.habitat_simulator.actions import HabitatSimActions
env = habitat.Env( config=habitat.get_config("/home/yons/LK/habitat-challenge/habitat-lab/configs/datasets/pointnav/habitat_test.yaml")
observations = env.reset()
action = HabitatSimActions.MOVE_FORWARD
observations = env.step(action)

一个通过键盘与环境交互的示例代码(quick_start3.py文件)如下:

import habitat
from habitat.sims.habitat_simulator.actions import HabitatSimActions
import cv2FORWARD_KEY="w"
LEFT_KEY="a"
RIGHT_KEY="d"
FINISH="f"
####下面是向上看和向下看的动作,并不是所有的agent都可以向上看和向下看
###一个问题是为什么没有后退的动作?
# LOOKUP_KEY="u"
# LOOKDOWN_KEY="j"def transform_rgb_bgr(image):return image[:, :, [2, 1, 0]]def example():#选择一个配置文件初始化环境(配置文件需要有什么参数?)env = habitat.Env(config=habitat.get_config("/home/yons/LK/habitat-challenge/habitat-lab/configs/datasets/pointnav/habitat_test.yaml"))print("Environment creation successful")observations = env.reset()  #print('type(observations):',type(observations))    #type(observations): <class 'habitat.core.simulator.Observations'>print('observations["rgb"].shape:',observations["rgb"].shape)  #observations["rgb"].shape: (480, 640, 3)# cv2.imshow("RGB", transform_rgb_bgr(observations["rgb"]))cv2.imshow("RGB", observations["rgb"])  ####不知道为啥要转化rgb信号的顺序,经过测试,不转换的确看着不自然。print("Agent stepping around inside environment.")count_steps = 0while not env.episode_over:keystroke = cv2.waitKey(0)  #等待用户输入,操纵agent左右转和前进,与环境进行交互if keystroke == ord(FORWARD_KEY):  #如果是敲击的我们在最上面定义的某个键,做对应的事情,并打印action = HabitatSimActions.MOVE_FORWARDprint("action: FORWARD")elif keystroke == ord(LEFT_KEY):action = HabitatSimActions.TURN_LEFTprint("action: LEFT")elif keystroke == ord(RIGHT_KEY):action = HabitatSimActions.TURN_RIGHTprint("action: RIGHT")elif keystroke == ord(FINISH):action = HabitatSimActions.STOPprint("action: FINISH")else:print("INVALID KEY")continueobservations = env.step(action)####env.step(action)里面的action是HabitatSimActions中定义的动作count_steps += 1# cv2.imshow("RGB", transform_rgb_bgr(observations["rgb"]))cv2.imshow("RGB", observations["rgb"])print("Episode finished after {} steps.".format(count_steps))if (action == HabitatSimActions.STOP# and observations["pointgoal_with_gps_compass"][0] < 0.2):print("you successfully navigated to destination point")else:print("your navigation was unsuccessful")if __name__ == "__main__":example()

3获取habitat-lab路径

通过habitat.utils.gym_definitions.base_dir获取

import habitat.utils.gym_definitions as habitat_gym
print('habitat_gym.base_dir:',habitat_gym.base_dir)

下面是一个例子:

import habitat.utils.gym_definitions as habitat_gym
print('habitat_gym.base_dir:',habitat_gym.base_dir)
import osimport gym
import gym.spaces as spaces
import numpy as npimport habitat
import habitat.utils.gym_definitions as habitat_gym
from habitat.core.embodied_task import Measure
from habitat.core.registry import registry
from habitat.core.simulator import Sensor, SensorTypes
from habitat.tasks.rearrange.rearrange_sensors import RearrangeReward
from habitat.tasks.rearrange.rearrange_task import RearrangeTask
from habitat.utils.render_wrapper import overlay_frame
from habitat.utils.visualizations.utils import observations_to_image
from habitat_sim.utils import viz_utils as vut# Quiet the Habitat simulator logging
os.environ["MAGNUM_LOG"] = "quiet"
os.environ["HABITAT_SIM_LOG"] = "quiet"def insert_render_options(config):# Added settings to make rendering higher resolution for better visualizationconfig.defrost()config.SIMULATOR.THIRD_RGB_SENSOR.WIDTH = 512config.SIMULATOR.THIRD_RGB_SENSOR.HEIGHT = 512config.SIMULATOR.CONCUR_RENDER = Falseconfig.SIMULATOR.AGENT_0.SENSORS.append("THIRD_RGB_SENSOR")config.freeze()return configimport importlib# If the import block fails due to an error like "'PIL.TiffTags' has no attribute
# 'IFD'", then restart the Colab runtime instance and rerun this cell and the previous cell.
import PILimportlib.reload(PIL.TiffTags)  # To potentially avoid PIL problemprint('habitat_gym.base_dir:',habitat_gym.base_dir)##################用habitat自己的方式###########################
with habitat.Env(config=insert_render_options(habitat.get_config(os.path.join(habitat_gym.base_dir,"configs/tasks/rearrange/pick.yaml",)))
) as env:observations = env.reset()  # noqa: F841print("Agent acting inside environment.")count_steps = 0# To save the videovideo_file_path = "data/example_interact.mp4"video_writer = vut.get_fast_video_writer(video_file_path, fps=30)while not env.episode_over:observations = env.step(env.action_space.sample())  # noqa: F841,随机动作info = env.get_metrics()render_obs = observations_to_image(observations, info)render_obs = overlay_frame(render_obs, info)video_writer.append_data(render_obs)count_steps += 1print("Episode finished after {} steps.".format(count_steps))video_writer.close()if vut.is_notebook():#此处并没有播放vut.display_video(video_file_path)

相关文章:

rearrangement-challenge-2022环境使用学习(一)

搭建了rearrangement-challenge-2022的环境&#xff1a; https://github.com/facebookresearch/habitat-challenge/tree/rearrangement-challenge-2022 habitat最大的缺点是对不同的版本非常的敏感。本文只是针对rearrangement-challenge-2022的学习。 文档一开始会很不完善&a…...

[Uniapp]携带参数跳转界面(两种方法)

一、方法1&#xff1a;路由携参 假设现在有两个界面&#xff1a;界面A和界面B。并要由界面A跳转到界面B&#xff0c;则我们可以使用 uni.navigateTo({}) 跳转界面时&#xff0c;将参数附加在URL后&#xff0c…...

Scrapy与分布式开发(2.1.2):python常用网络请求库httpx

Python httpx 模块详细讲解 一、引言 httpx 是一个用于发送 HTTP 请求的 Python 库&#xff0c;它提供了简单易用的 API&#xff0c;支持同步和异步请求&#xff0c;并且具有出色的性能和灵活性。httpx 是 requests 的一个现代替代品&#xff0c;它使用 httpcore 作为底层传输…...

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡&#xff1f; 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡&#xff1f; Nginx负载均衡可以大…...

windows/linux下其他位置调用指定nodejs脚本报错Error: Cannot find module ‘esm’

问题&#xff1a; 有一个nodejs脚本名为html2word,同目录下还有它对应的package.json&#xff0c;正常在html2word所在目录下执行脚本没问题&#xff0c;但是在其他目录执行时报错&#xff1a;Error: Cannot find module ‘esm’ 原因&#xff1a; 在其他位置执行node脚本时…...

2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。

一、这两天一直纠结一个问题&#xff0c;无论怎么修改&#xff0c;linux 分区老显示满&#xff0c;Use 100%&#xff0c;全部沾满。如下图的oem分区。 二、导致出现上面的原因是&#xff1a;SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…...

蓝桥杯倒计时 41天 - KMP 算法

KMP算法 KMP算法是一种字符串匹配算法&#xff0c;用于匹配模式串P在文本串S中出现的所有位置。 例如S“ababac&#xff0c;P“aba”&#xff0c;那么出现的所有位置是13。 在初学KMP时&#xff0c;我们只需要记住和学会使用模板即可&#xff0c;对其原理只需简单理解&#xff…...

《汇编语言》- 读书笔记 - 第13章-int 指令

《汇编语言》- 读书笔记 - 第13章-int 指令 13.1 int 指令13.2 编写供应用程序调用的中断例程中断例程&#xff1a;求一 word 型数据的平方主程序中断处理程序执行效果 中断例程&#xff1a;将一个全是字母&#xff0c;以0结尾的字符串&#xff0c;转化为大写主程序中断处理程序…...

深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例

条件语句 用于根据不同的条件执行不同的操作。Go中的条件可以是真或假。Go支持数学中常见的比较运算符&#xff1a; 小于 < 小于等于 < 大于 > 大于等于 > 等于 不等于 ! 此外&#xff0c;Go还支持常见的逻辑运算符&#xff1a; 逻辑与 && 逻辑或…...

大数据和机器学习在气象预报中的应用-张平文院士

报告链接&#xff1a;张平文院士 -- 大数据和机器学习在气象预报中的应用_哔哩哔哩_bilibili...

C#高级:Winform桌面开发中DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…...

java八股文复习-----2024/03/05----基础---反射,动态代理。序列化

来源一 大彬八股文 来源二 2023 20W字八股文 2024秋招八股文 1.Java创建对象有几种方式&#xff1f; Java创建对象有以下几种方式&#xff1a; 用new语句创建对象。使用反射&#xff0c;使用Class.newInstance()创建对象。调用对象的clone()方法。运用反序列化手段&#x…...

【人工智能】Anthropic发布强大的Claude3对齐GPT-4,大模型杂谈个人感想

北京时间3月5日&#xff0c;人工智能创业公司Anthropic宣布&#xff0c;推出其突破性的Claude 3系列模型。Claude 3系列包含三个子模型&#xff0c;分别为Claude 3 Haiku、Claude 3 Sonnet和Claude 3 Opus&#xff0c;它们提供不同程度的智能、速度和成本选择&#xff0c;以满足…...

基于openKylin与RISC-V的MindSpore AI项目实践

项目目标&#xff1a; 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型&#xff0c;并在RISC-V平台上进行训练和推理。根据RISC-V的特性&#xff0c;对MindSpore框架进行必要的优化。 目录 项目目标&#xff1a; 训练模型 编写训练代码&#xff0c;设…...

【牛客】VL64 时钟切换

描述 题目描述&#xff1a; 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频&#xff0c;现在要设计一个切换电路&#xff0c;sel选择时候进行切换&#xff0c;要求没有毛刺。 信号示意图&#xff1a; 波形示意图&#xff1a; 输入描述&#xff1a; clk0 clk1为时…...

Java设计模式——桥连模式

桥接模式简单来说就是通过将抽象部分和具体部分分离&#xff0c;使它们可以独立地变化。如果你的一个类存在多个变化维度&#xff08;如抽象和具体的实现&#xff09;。若使用继承来处理这些变化&#xff0c;将会导致类层次结构的急剧增加&#xff0c;难以管理和维护。并且&…...

数据结构与算法:堆排序和TOP-K问题

朋友们大家好&#xff0c;本节内容来到堆的应用&#xff1a;堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序&#xff0c;冒泡排序&#xff0c;快速排序&#xff08;qsor…...

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备&#xff08;UE&#xff09; …...

文件操作与IO(3) 文件内容的读写——数据流

目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本&#xff1a; 第二个带有byte数组的版本&#xff1a; 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本&#xff1a; 第二个写入整个数组版本&#xff1a; …...

《PyTorch深度学习实践》第十一讲卷积神经网络进阶

一、 1、卷积核超参数选择困难&#xff0c;自动找到卷积的最佳组合。 2、1x1卷积核&#xff0c;不同通道的信息融合。使用1x1卷积核虽然参数量增加了&#xff0c;但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成&#xff0c;要分清哪些是在Init里定义…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...