【論文閱讀】《PEACE: Empowering Geologic Map Holistic Understanding with MLLMs》

目錄

  • 前言
  • 一、研究背景與問題
    • 1-1、地質圖的重要性
    • 1-2、現有MLLMs的不足
  • 二、 主要貢獻
    • 2-1、GeoMap-Bench:首個地質圖理解評估基準
    • 2-2、GeoMap-Agent:首個地質圖專用AI代理
    • 2-3、實驗驗證與性能優勢
  • 三、關鍵技術
    • 3-1、 數據構建與預處理
    • 3-2、分層信息提取(HIE)
    • 3-3、 領域知識注入(DKI)
    • 3-4、 提示增強問答(PEQA)
    • 3-5、 評估方法設計
    • 3-6、工具與技術集成
  • 四、局限與展望
  • 附錄:
    • 1、Google Earth Engine
  • 總結


前言

這篇文章提出了一種名為PEACE的框架,旨在通過多模態大語言模型(MLLMs)增強地質圖的全方位理解。

一、研究背景與問題

1-1、地質圖的重要性

地質圖是地質學中的核心工具,通過可視化的方式呈現地球表層和地下的巖石分布、地質構造(如斷層、褶皺)及地層年代關系。其應用涵蓋多個關鍵領域:

  • 災害檢測:通過分析地質圖中的斷層活動、巖層穩定性等,評估地震、滑坡、地下水污染等自然災害的風險。例如,活躍斷層的分布可直接關聯區域地震概率。
  • 資源勘探:識別石油、天然氣、礦產等資源的潛在儲存區域。例如,背斜構造(巖層向上拱起)常作為石油儲集層,地質圖能幫助定位此類結構。
  • 土木工程:為基礎設施建設(如隧道、大壩)提供地下巖層條件信息,避免因地質不穩定導致的工程風險。
  • 科學研究:揭示地球演化歷史,例如通過地層序列推斷地質年代和古環境變化。

1-2、現有MLLMs的不足

盡管多模態大語言模型(MLLMs,如GPT-4、LLaVA)在通用圖像理解中表現出色,但在地質圖理解中存在顯著瓶頸,主要源于以下挑戰:

(1)高分辨率圖像處理難題:

  • 地質圖通常為高分辨率(如平均6,1462像素),遠超普通圖像的輸入限制。直接壓縮會導致細節丟失(如微小斷層符號模糊),而分塊處理需解決局部與全局信息的關聯問題。
  • 例如,一張1:50,000比例尺的地質圖可能包含數千個獨立符號,模型需同時捕捉微觀細節和宏觀結構。

(2)多關聯組件的復雜交互:

  • 地質圖包含七大核心組件(標題、比例尺、圖例、主圖、索引圖、剖面圖、地層柱狀圖)及數十種符號化標記(如顏色編碼的巖石類型、線狀斷層、面狀巖層邊界)。這些組件需聯合解讀,例如:(1)圖例與主圖關聯:不同顏色對應特定巖石類型(如紅色代表花崗巖),需模型將顏色映射到地質術語。(2)剖面圖與主圖聯動:垂直剖面圖需與平面主圖結合,以理解三維地質結構。
  • 組件間的空間和語義關聯增加了模型推理的復雜度。

(3)領域知識依賴性強:

  • 地質圖的符號系統高度專業化,需結合地質學、地理學、地震學等知識。例如:(1)斷層符號:需區分正斷層、逆斷層、走滑斷層,并關聯其活動性與地震風險。(2)地層年代:需理解國際地層年代表(如“侏羅紀”“白堊紀”)及其對應的巖石特征。
  • 通用MLLMs缺乏此類領域知識庫,導致回答模糊或錯誤。例如,GPT-4可能無法準確解釋“背斜構造中不透水層如何封閉油氣”。

二、 主要貢獻

2-1、GeoMap-Bench:首個地質圖理解評估基準

1、數據來源與構成:

  • 標準化數據源:整合來自美國地質調查局(USGS)和中國地質調查局(CGS)的公開地質圖,覆蓋不同區域(如北美、東亞)和比例尺(1:24,000至1:500,000),確保數據多樣性和專業性。
  • 數據集規模:包含124張高分辨率地質圖(平均分辨率6,1462像素)和3,864個標注問題,涵蓋中英文雙語環境。
  • 標注與驗證:通過人工標注與專家審核,記錄每張地圖的元數據(標題、比例尺、經緯度范圍)及組件信息(圖例顏色、巖石類型、斷層分布等),確保答案的準確性。

2、任務設計與評估維度:

(1)五大能力評估:

  • 提取(Extracting):獲取地圖基礎信息(如比例尺、經緯度范圍);
  • 定位(Grounding):根據名稱或意圖定位地圖組件(如“圖例的位置”);
  • 關聯(Referring):建立符號與語義的映射(如顏色對應巖石類型);
  • 推理(Reasoning):結合領域知識進行邏輯推斷(如“某區域是否存在斷層”);
  • 分析(Analyzing):綜合解讀復雜問題(如“評估區域地震風險”)。

(2)25項具體任務:例如:

  • 基礎任務:填空型問題(“地圖的標題是什么?”);
  • 復雜任務:多選題(“哪種巖石面積排名第三?”)與開放式問答題(“分析該區域資源潛力”)。

(3)創新性評估指標:

  • IoU檢測框重疊度:用于定位任務的精確度評估;
  • 集合交并比(IoU_set):評估連續或離散數據(如經緯度范圍)的重合度;
  • GPT-4o輔助評分:通過對比模型生成答案與專家標注答案的專業性、多樣性,評判開放式問題的質量。

2-2、GeoMap-Agent:首個地質圖專用AI代理

GeoMap-Agent通過模塊化設計解決MLLMs在地質圖理解中的三大挑戰,其核心模塊包括:

1、HIE(分層信息提取):

(1)分治策略:將高分辨率圖像按語義分割為子圖(如標題、圖例、主圖),利用檢測模型(如YOLOv10)識別組件邊界,逐塊提取信息。
(2)結構化元數據生成:整合子圖信息形成全局元數據,例如將圖例顏色映射到巖石類型,主圖區域關聯斷層分布。

2、DKI(領域知識注入):

(1)專家知識庫:引入地質學家、地理學家和地震學家的知識庫,動態匹配問題需求。例如:

  • 地質學知識:巖石分類表(3級結構,涵蓋335種巖石類型);
  • 地震學數據:調用USGS地震數據庫分析區域活動斷層。
    (2)工具池擴展:支持調用Google Earth Engine(GEE)API獲取人口密度、地形數據,增強分析維度。

3、PEQA(提示增強問答):

(1)多模態提示設計:

  • 上下文注入:將元數據與領域知識作為背景信息;
  • 思維鏈(CoT):要求模型分步驟推理(如“先定位斷層,再評估地震風險”);
  • 示例引導:提供標準答案格式(JSON結構)與示例;
  • 注意力增強:裁剪相關子圖(如聚焦特定區域)并嵌入提示。

(2)性能優化:通過提示工程將GPT-4o的答案準確率提升30%以上。

2-3、實驗驗證與性能優勢

在這里插入圖片描述

在這里插入圖片描述

三、關鍵技術

3-1、 數據構建與預處理

(1)數據來源與標準化:

  • 多源數據整合:從USGS(美國)和CGS(中國)獲取公開地質圖,覆蓋不同比例尺(1:24,000至1:500,000)、區域(北美、東亞)及語言(中英文)。
  • 格式統一化:將CGS的MapGIS格式轉換為柵格圖像,USGS的ArcGIS數據直接使用高分辨率柵格圖,確保輸入一致性。
  • 分辨率處理:平均分辨率達6,1462像素,通過自動化腳本批量處理圖像質量(如去噪、對比度調整)。

(2)標注與元數據生成:

  • 人工標注:專家團隊手動標注地圖組件(標題、圖例、斷層)的邊界框(Bounding Box)、顏色編碼及巖石類型。
  • 結構化元數據:記錄每張地圖的經緯度范圍、比例尺、巖石面積統計、斷層分布等,形成標準化數據庫。
  • 驗證機制:通過交叉檢查(如雙人獨立標注)確保標注準確性,錯誤率控制在2%以下。

3-2、分層信息提取(HIE)

(1)分塊處理高分辨率圖像:

  • 語義分塊:將整張地質圖按組件(如標題、圖例、主圖)分割為子圖,采用YOLOv10檢測模型識別組件邊界。
  • 樹狀結構整合:以整圖為根節點,子圖為分支,構建層次化信息樹,確保局部與全局信息關聯。

(2)信息提取與融合:

  • 局部特征提取:對每個子圖使用GPT-4o生成描述性文本(如“圖例中紅色對應花崗巖”)。
  • 全局元數據合成:整合所有子圖信息,生成結構化元數據(如JSON格式),包含組件位置、符號語義及統計信息。

(3)技術優勢:

  • 解決高分辨率瓶頸:避免直接壓縮導致的細節丟失。
  • 提升處理效率:并行處理子圖,減少單次推理的計算負載。

代碼解析:

  1. 輸入:地質圖圖像路徑
  2. 輸出:結構化地質信息JSON文件
  3. 處理步驟
  • 檢查緩存 → 存在則直接返回
  • 初始化元數據結構
  • 地圖布局分析(定位各區域)
  • 區域裁剪與特殊處理
  • 圖例信息提取與知識補充
  • 基礎信息提取(使用大模型API)
  • 主地圖巖石分割
  • 保存結果并返回
import cv2
import json
import collections
from tool_pool import geological_knwoledge_type
from utils import api, prompt, vision, common
from agents import geologist_agent# 定義分層信息提取類。
class hierarchical_information_extraction:def __init__(self):# 初始化地質學專家智能體self.geologist = geologist_agent()def digitalize(self, image_path):# 讀取圖像并且檢查緩存image = cv2.imread(image_path)# 從路徑中提取文件名。name = common.path2name(image_path)# 構建元數據緩存路徑meta_path = os.path.join(common.cache_path(), "meta", name + ".json")# 檢查緩存文件是否存在,如果存在的話,則直接從緩沖中讀取。if os.path.exists(meta_path):meta = json.loads(open(meta_path).read())return meta# get headers of geologic map# 初始化元數據結構meta = dict()meta["date"] = common.today_date() # 處理日期meta["name"] = name # 圖像名稱meta["version"] = "v1.0" #版本號meta["source"] = common.dataset_source # 數據來源meta["size"] = {"width": image.shape[1], "height": image.shape[0]} # 圖像的尺寸meta["regions"] = dict() # 初始化區域字典 meta["legend"] = dict() # 初始化圖例字典meta["information"] = dict() # 其他基礎信息meta["faults"] = None # 初始化斷層信息# get layout of geologic map.# 使用地質專家Agent分析地圖布局map_layout = self.geologist.get_map_layout(image_path)# 提取區域信息regions = map_layout["regions"]meta["regions"] = regions# crop each component in geologic map.# 創建字典存儲區域路徑和邊界框region_path_and_bbox = collections.defaultdict(list)# 遍歷所有檢測到的區域for region_name, region_bndboxes in regions.items():# 遍歷區域內所有邊界框for i, region_bndbox in enumerate(region_bndboxes):# 構建區域保存路徑region_path = os.path.join(common.cache_path(), "det", name, f"{region_name}_{i}.png")# 創建所需目錄common.create_folder_by_file_path(region_path)# 裁剪圖像并且保存到指定路徑vision.crop_and_save_image(image, region_bndbox, region_path)region_path_and_bbox[region_name].append((region_path, region_bndbox))# 特殊處理 主地圖區域if "main_map" == region_name:# crop latitude and longitude region of geologic map.lonlat_name = "lonlat"lonlat_region_path = os.path.join(common.cache_path(), "det", name, f"{lonlat_name}_{i}.png")common.create_folder_by_file_path(lonlat_region_path)vision.crop_corners_and_save_image(region_path, lonlat_region_path)region_path_and_bbox[lonlat_name].append((lonlat_region_path, None))# 特殊處理索引地圖區域elif "index_map" == region_name:# extend index map and add vision prompt.vision.annotate_image_with_directions(region_path, region_path)# get metadata of legend.# 提取圖例的元數據if len(region_path_and_bbox["legend"]) > 0:legend_path, legend_bndbox = region_path_and_bbox["legend"][0]# 通過地質專家代理獲取圖例元數據legend_metadata = self.geologist.get_legend_metadata(legend_path, legend_bndbox)# 提取圖例項legends = legend_metadata["legend"]# 為每個圖例補充地質知識for legend in legends.values():legend["lithology"] = self.geologist.get_knowledge(geological_knwoledge_type.Rock_Type, legend["text"])["rock_type"]legend["stratigraphic_age"] = self.geologist.get_knowledge(geological_knwoledge_type.Rock_Age, legend["text"])["rock_age"]meta["legend"] = legends# get basic information of geologic map.# 提取基礎信息region_names = ["title", "scale", "lonlat", "index_map"]for region_name in region_names:if region_name not in region_path_and_bbox:continue# 獲取區域路徑和邊界框region_path, region_bndbox = region_path_and_bbox[region_name][0]keys, instruction = prompt.get_component_instruction(region_name)# 構建多模態提示內容prompt_content = [{"type": "image_url", "image_url": {"url": api.local_image_to_data_url(region_path)}},{"type": "text", "text": instruction},]# 構建API請求信息messages = [{"role": "system", "content": prompt.system_prompt},{"role": "user", "content": prompt_content},]# 調用api獲取結構化響應answer = api.answer_wrapper(messages, structured=True)# 將響應轉化為python對象infos = eval(answer)# key_value_pairs = prompt.get_basic_information(region_name, infos)for key, value in key_value_pairs:meta["information"][key] = value# get statistic information of rock.# 檢查是否存在主地圖區域,并且進行巖石區域的分割。if len(region_path_and_bbox["main_map"]) > 0:main_map_path, main_map_bndbox = region_path_and_bbox["main_map"][0]vision.rock_region_seg(main_map_path, list(meta["legend"].values()))# output digitalization result of geologic map.# 保存數字化結果common.create_folder_by_file_path(meta_path)with open(meta_path, "w", encoding="utf-8") as f:f.write(json.dumps(meta, indent=4, ensure_ascii=False))return metaif __name__ == "__main__":image_path = "sample.jpg"hie = hierarchical_information_extraction()meta = hie.digitalize(image_path)print(meta)

3-3、 領域知識注入(DKI)

(1)專家知識庫構建:

  • 巖石分類表:3級結構(大類、亞類、具體巖石),涵蓋335種英文、256種中文巖石類型(如沉積巖→碎屑巖→礫巖)。
  • 地震與斷層數據庫:整合USGS地震記錄(1970年至今,震級>2.5)和GEM全球活動斷層數據庫。

(2)動態知識調用:

  • 問題驅動的知識匹配:根據問題類型(如地震風險評估)自動調用相關數據庫(如人口密度、地形數據)。
  • 多專家協作:地質學家、地理學家、地震學家的知識通過API(如Google Earth Engine)動態注入。

(3)工具池擴展:

  • GIS工具:調用ArcGIS API進行空間分析(如斷層緩沖區計算)。
  • OCR與顏色提取:從圖例子圖中提取文本(如巖石名稱)和顏色編碼(如RGB值對應特定巖石)。

代碼解析:

  • 專家代理模式:通過 seismologist_agent 和 geographer_agent 封裝領域知識獲取邏輯。代理內部調用專業數據庫或 API(未在代碼中展示)。
  • 緩存機制:知識結果保存為 JSON 文件,路徑為 ./cache/knowledge/{區域名稱}.json。避免重復計算,提升性能。
  • 動態知識篩選:使用大模型(如 GPT-4)動態判斷哪些知識類型與問題相關。示例:若問題關于“地震風險”,模型可能選擇 seismic 而忽略 geographical。
  • 坐標處理工具:common.convert_to_decimal:將度分秒格式(如 “120°00’E”)轉換為十進制(如 120.0)。common.is_valid_longitude/latitude:驗證坐標是否在有效范圍內(經度[-180,180],緯度[-90,90])
import os
os.sys.path.append(f"{os.path.dirname(os.path.realpath(__file__))}/..")
import json
from utils import api, prompt, vision, common
from agents import geographer_agent, seismologist_agent# 領域知識注入,主要用于結合地理學家和地震學家的專業知識,回答與低質和地震風險相關的問題。
class domain_knowledge_injection:def __init__(self):# 初始化地震學專家智能體和地理學專家智能體self.seismologist = seismologist_agent()self.geographer = geographer_agent()# 知識選擇def select(self, question, knowledge):# 調用select篩選出與問題相關的知識。# 提取知識類型列表knowledge_types = list(knowledge.keys())# 構造提示詞,要求模型返回需要的知識類型(JSON格式)# 使用大模型動態判斷哪些知識類型與問題相關examples = '{"required_knowledge_types": %s}' % knowledge_typesinstructions = [{"type": "text", "text": f"The given question is '{question}'."},{"type": "text", "text": f"The knowledge types from expert group are {', '.join(knowledge_types)}."},{"type": "text", "text": f'What are the helpful knowledge types among them to answer the givenquestion, the example is {examples}, only respond with JSON format.\n'},]# prompt.system_prompt:你是地質學和地圖學方面的專家,主要研究地質圖。messages = [{"role": "system", "content": prompt.system_prompt},{"role": "user", "content": instructions},]# 調用api獲取回答answer = api.answer_wrapper(messages, structured=True)# 解析返回的json,篩選知識try:answer = eval(answer)keys = answer["required_knowledge_types"]except:keys = list()# 返回篩選后的知識。selected_knowledge = dict()for key in keys:if key in knowledge:selected_knowledge[key] = knowledge[key]return selected_knowledgedef consult(self, question, meta):# 咨詢,根據地理坐標獲取專家知識,并且緩存結果以提高效率# 檢查地理坐標元數據是否存在if meta is None:print("Missing metadata in DKI module", flush=True)return None# 檢查是否有緩存的知識文件knowledge_path = os.path.join(common.cache_path(), "knowledge", meta["name"] + ".json")# 如果存在的話,就加載文件if os.path.exists(knowledge_path):knowledge = json.loads(open(knowledge_path).read())else:longitude_range = meta["information"]["longitude"]longitude_range = list(map(lambda x: common.convert_to_decimal(x), longitude_range))latitude_range = meta["information"]["latitude"]latitude_range = list(map(lambda x: common.convert_to_decimal(x), latitude_range))# 拿到地理坐標元素min_lon = min(longitude_range)max_lon = max(longitude_range)min_lat = min(latitude_range)max_lat = max(latitude_range)if common.is_valid_longitude(min_lon) and \common.is_valid_longitude(max_lon) and \common.is_valid_latitude(min_lat) and \common.is_valid_latitude(max_lat):# 地震學家根據經緯度獲取到具體的知識。seismic_data = self.seismologist.get_knowledge(min_lon, min_lat, max_lon, max_lat)
#                print('-'*100)
#                print(seismic_data)
#                print('-'*100)# 地理學家根據經緯度獲取到具體的知識geographical_data = self.geographer.get_knowledge(min_lon, min_lat, max_lon, max_lat)# 匯總地震學家和地理學家的知識knowledge = seismic_data | geographical_dataelse:knowledge = dict()# output external knowledge of geologic map.# 保存知識到緩存文件,把文件寫入,common.create_folder_by_file_path
(knowledge_path)with open(knowledge_path, "w", encoding="utf-8") as f:f.write(json.dumps(knowledge, indent=4, ensure_ascii=False))# 調用select來篩選知識dataset_sourceselected_knowledge = self.select(question, knowledge)return selected_knowledgeif __name__ == "__main__":meta = {
#        "name": "E4901","name": "E4xxx","information": {# 東經120°-121°"longitude": ["113°00'E","114°00'E"],# 北緯30.5°-31.5°"latitude": ["34°33'N","35°00'N"]}}# 根據這張地質圖,請分析一下該地區的地震4/1AUJR-x5DDA9A8GLHUMp0fMS0JIImB0RyKKOjV0B14irVsu6kC9-smiO5n1g風險等級。question = "Based on this geologic map, please analyze the seismic risk level in this area?"dki = domain_knowledge_injection()# prompt.system_promptexternal_knowledge = dki.consult(question, meta)print(external_knowledge)

3-4、 提示增強問答(PEQA)

(1)多模態提示設計:

  • 上下文注入:將HIE提取的元數據(如“圖例中#5D1C1C對應頁巖”)和DKI提供的領域知識(如“背斜構造易儲油”)作為背景信息。
  • 思維鏈(CoT)引導:要求模型分步推理(如“首先定位斷層,其次分析活動性,最后評估地震風險”)。
  • 示例驅動:提供標準答案格式(JSON結構)和示例問題-答案對,減少模型輸出偏差。
  • 注意力增強:裁剪與問題相關的子圖(如聚焦某區域斷層)并嵌入提示,引導模型關注關鍵區域。

(2)性能優化策略:

  • 結構化輸出:強制模型以JSON格式回答,便于后續解析與評估。
  • 迭代修正:通過反饋機制(如檢測答案與元數據的一致性)自動修正錯誤。

3-5、 評估方法設計

(1)定量指標:

  • IoU檢測框重疊度:用于定位任務(如“圖例位置”),計算預測框與標注框的交并比。
  • 集合交并比(IoU_set):評估連續數據(如經緯度范圍)或離散集合(如相鄰區域名稱)的重合度。
  • 分類準確率:多選題(MCQ)和填空題(FITB)的直接匹配率。

(2)定性評估:

  • GPT-4o輔助評分:對開放式問題(如“分析地震風險”),由GPT-4o對比模型答案與專家標注,從多樣性、專業性和具體性三個維度打分。
  • 人工審核:專家團隊對復雜答案進行最終審核,確保評估結果的可靠性。

(3)模塊化測試:

  • 消融實驗:分別關閉HIE、DKI、PEQA模塊,分析各模塊對性能的貢獻(如HIE使基礎任務提升40%)。
  • 跨模型適配性:測試不同基礎模型(如GPT-4o、GPT-4o-mini)的表現,驗證框架的通用性。

3-6、工具與技術集成

檢測模型:YOLOv10用于地圖組件檢測,訓練時采用1,000張標注地圖,IoU閾值設為0.8,確保高精度定位。

GIS與數據庫接口:

  • Google Earth Engine(GEE):調用人口密度(WorldPop)和土地利用(ESA WorldCover)數據。
  • USGS地震API:實時獲取歷史地震記錄,支持動態風險評估。

工具API

  1. population_density_api:根據經緯度坐標來統計人口密度。
  2. landcover_type_api: 調用ESA WorldCover全球土地覆蓋數據集,計算指定地理區域內各類土地覆蓋類型(如森林、農田、城市)的面積占比。
  3. active_fault_db: 處理活動斷層數據庫的查詢
  4. history_earthquake_db: 歷史地震數據工具。

四、局限與展望

局限性:

  • 復雜巖石模式識別仍有挑戰;
  • 中文地質圖(CGS)表現略遜于英文(USGS);
  • 開放式問題的自動評估需進一步優化。

未來方向:

  • 擴展專家知識庫和工具池;
  • 探索監督微調(Supervised Fine-Tuning)提升模型性能;
  • 將框架推廣至高分辨率、多組件、領域知識依賴的其他場景(如醫學影像)。

附錄:

1、Google Earth Engine

Google Earth Engine官方文檔: https://developers.google.cn/earth-engine/guides/access?hl=zh-cn

  • 注冊用于商業或者非商業用途
  • 創建新的Cloud項目
  • 激活Earth Engine API
    在這里插入圖片描述

項目預覽界面:
在這里插入圖片描述
Google Earth Engine API的進一步使用:https://developers.google.com/earth-engine/guides/python_install?hl=zh_CN
在這里插入圖片描述

參考文章:

官方GitHub
Google Earth Engine官方文檔: https://developers.google.cn/earth-engine/guides/access?hl=zh-cn

總結

這份愛多隆重,憑什么落空,那些海誓山盟,形色匆匆。凜冽的寒冬,與誰相擁,第五季節的朦朧,深情萬種。親愛的不要哭,他愛你在無人處,推開清晨的霧,恍惚間被他觸碰,以為得到了救贖,可是他最后的溫度,我留不住。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82412.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡通信技術與協議(八)----關于IS-IS的基礎概念

關于IS-IS最早是ISO為CLNP(Connectionless Network Protocol,無連接網絡協議)而設計的一種動態路由協議。 目錄 這里提到了CLNP這個概念,在這里解釋一下: CLNS由以下三個協議構成: 那么為什…

網絡原理1

協議 在網絡通信中,協議是非常重要的概念。協議是在網絡通信過程中的約定。發送方和接收方需要提前商量好數據的格式,才能確保正確進行溝通。 應用層協議 應用層,對應著應用程序,是跟我們程序員打交道最多的一層。調用操作系統…

【運維】統信UOS操作系統aarch64自制OpenSSH 9.6p1 rpm包(含ssh-copy-id命令)修復漏洞

為修復如下OpenSSH漏洞,openssh從8.2升級至9.6,然而并未找到統信9.6的rpm源,所以自己動手制作,折騰了一天,在此記錄一下 準備工作 檢查版本 cat /etc/os-releaseuname -a如圖當前環境為aarch64架構,在其…

CI/CD 持續集成、持續交付、持續部署

CI/CD 是 持續集成(Continuous Integration) 和 持續交付/持續部署(Continuous Delivery/Deployment) 的縮寫,代表現代軟件開發中通過自動化流程快速、可靠地構建、測試和發布代碼的實踐。其核心目標是 減少人工干預、…

Spring Boot 應用中實現配置文件敏感信息加密解密方案

Spring Boot 應用中實現配置文件敏感信息加密解密方案 背景與挑戰 🚩一、設計目標 🎯二、整體啟動流程 🔄三、方案實現詳解 ??3.1 配置解密入口:EnvironmentPostProcessor3.2 通用解密工具類:EncryptionTool 四、快速…

OpenCV CUDA模塊特征檢測------角點檢測的接口createMinEigenValCorner()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數創建一個 基于最小特征值(Minimum Eigenvalue)的角點響應計算對象,這是另一種經典的角點檢測方法&…

性能優化 - 理論篇:CPU、內存、I/O診斷手段

文章目錄 Pre引言1. CPU 性能瓶頸1.1 top 命令 —— 多維度 CPU 使用率指標1.2 負載(load)——任務排隊情況1.3 vmstat 命令 —— CPU 繁忙與等待 2. 內存性能瓶頸2.1 操作系統層面的內存分布2.2 top 命令 —— VIRT / RES / SHR 三個關鍵列2.3 CPU 緩存…

GPIO的內部結構與功能解析

一、GPIO總體結構 總體構成 1.APB2(外設總線) APB2總線是微控制器內部連接CPU與外設(如GPIO)的總線,負責CPU對GPIO寄存器的讀寫訪問,支持低速外設通信 2.寄存器 控制GPIO的配置(輸入/輸出模式、上拉/下拉等&#x…

汽車總線分析總結(CAN、LIN、FlexRay、MOST、車載以太網)

目錄 一、汽車總線技術概述 二、主流汽車總線技術對比分析 1. CAN總線(Controller Area Network) 2. LIN總線(Local Interconnect Network) 3. FlexRay總線 4. MOST總線(Media Oriented Systems Transport&#x…

WordPress 6.5版本帶來的新功能

WordPress 6.5正式上線了!WordPress團隊再一次為我們帶來了許多新的改進。在全球開發者的共同努力下,WordPress推出了許多新的功能,本文將對其進行詳細總結。 Hostease的虛擬主機現已支持一鍵安裝最新版本的WordPress。對于想要體驗WordPres…

【vue+ts】找不到模塊“./App.vue”或其相應的類型聲明

報錯&#xff1a;找不到模塊“./App.vue”或其相應的類型聲明。 原因&#xff1a;typescript只能理解.ts文件&#xff0c;無法理解.vue文件。 解決&#xff1a;在src/env.d.ts下添加&#xff1a; /// <reference types"vite/client" /> // 三斜線引用告訴編譯…

Nginx+Tomcat 負載均衡群集

目錄 一&#xff0c;部署Tomcat 1&#xff0c;案例概述 2&#xff0c;案例前置知識點 &#xff08;1&#xff09;Tomcat簡介 &#xff08;2&#xff09;應用場景 3&#xff0c;案例實施 3.1&#xff0c;實施準備 &#xff08;1&#xff09;關閉firewalld防火墻 &#…

Spring Boot Actuator未授權訪問漏洞修復

方案1&#xff1a;在網關的配置文件里增加以下配置 management:endpoints:web:exposure:include: []enabled-by-default: falseendpoint:health:show-details: ALWAYS 方案二&#xff1a;直接在nginx配置攔截actuator相關接口 location /actuator { return 403; …

動態規劃之網格圖模型(二)

文章目錄 動態規劃之網格圖模型&#xff08;二&#xff09;LeetCode 931. 下降路徑最小和思路Golang 代碼 LeetCode 2684. 矩陣中移動的最大次數思路Golang 代碼 LeetCode 2304. 網格中的最小路徑代價思路Golang 代碼 LeetCode 1289. 下降路徑最小和 II思路Golang 代碼 LeetCod…

React 編譯器

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

mac下通過anaconda安裝Python

本次分享mac下通過anaconda安裝Python、Jupyter Notebook、R。 anaconda安裝 點擊&#x1f449;https://www.anaconda.com/download&#xff0c; 點擊Mac系統安裝包&#xff0c; 選擇Mac芯片&#xff1a;蘋果芯片 or intel芯片&#xff0c; 選擇蘋果芯片圖形界面安裝&#x…

Pandas 技術解析:從數據結構到應用場景的深度探索

序 我最早用Python做大數據項目時&#xff0c;接觸最早的就是Pandas了。覺得對于IT技術人員而言&#xff0c;它是可以屬于多場景的存在&#xff0c;因為它的本身就是數據驅動的技術生態中&#xff0c;對于軟件工程師而言&#xff0c;它是快速構建數據處理管道的基石&#xff1…

【循環神經網絡RNN第一期】循環神經網絡RNN原理概述

目錄 &#x1f9e0; 什么是循環神經網絡&#xff08;RNN&#xff09;&#xff1f;&#x1f501; RNN 的結構圖&#x1f504; RNN 的“記憶”與問題RNN梯度推導 &#x1f9ec; LSTM&#xff1a;解決長期依賴問題&#x1f9f1; LSTM 的核心結構LSTM總結 參考 人類在思考的時候&am…

代碼隨想錄算法訓練營 Day60 圖論Ⅹ Bellmen_ford 系列算法

圖論 題目 94. 城市間貨物運輸 I Bellmen_ford 隊列優化算法 SPFA 大家可以發現 Bellman_ford 算法每次松弛 都是對所有邊進行松弛。 但真正有效的松弛&#xff0c;是基于已經計算過的節點在做的松弛。 本圖中&#xff0c;對所有邊進行松弛&#xff0c;真正有效的松弛&#…

Juce實現Table自定義

Juce實現Table自定義 一.總體展示概及概述 在項目中Juce中TableList往往無法滿足用戶需求&#xff0c;頭部和背景及背景顏色設置以及在Cell中添加自定義按鈕&#xff0c;所以需要自己實現自定義TabelList&#xff0c;該示例是展示實現自定義TableList&#xff0c;實現自定義標…