BEVFormer報錯(預測場景與真值場景的sample_token不匹配)

在運行test.py時報錯:

BEVFormer/projects/mmdet3d_plugin/datasets/nuscnes_eval.py: init()函數報錯

assert set(self.pred_boxes.sample_tokens) == set(self.gt_boxes.sample_tokens), \"Samples in split doesn't match samples in predictions."

一、評估流程:

整體流程:

數據預處理:CustomNuScenesDataset (projects/mmdet3d_plugin/datasets/nuscenes_dataset.py)加載多幀數據,支持點云和圖像的聯合輸入,增加了夜晚場景的專項處理。
評估流程:NuScenesEval_custom (projects/mmdet3d_plugin/datasets/nuscnes_eval.py) 提供靈活的評估框架,支持按可見性、場景重疊等條件過濾數據,計算指標并可視化結果。

  • results_nusc.json 加載檢測結果,包含6019個樣本
  • 通過 get_night_scenes() 獲取val子集中的15個夜晚場景
  • 過濾檢測結果,只保留這15個夜晚場景的602幀數據
  • 將過濾后的結果保存為新的json文件:filtered_results_nusc.json
  • 使用 NuScenesEval_custom 進行評估:
    • 加載真值(GT)數據
    • 計算檢測指標(mAP、NDS等)
    • 生成評估報告

results_nusc.json 文件中的內容

test/bevformer_base/Fri_Mar_21_01_24_36_2025/pts_bbox/results_nusc.json:

{"meta": {"use_lidar": false,"use_camera": true,"use_radar": false,"use_map": false,"use_external": true},"results": {"sample_token_1": [{"sample_token": "xxx","translation": [x, y, z],"size": [l, w, h],"rotation": [w, x, y, z],"velocity": [vx, vy],"detection_name": "car","detection_score": 0.9,"attribute_name": "vehicle.parked"},// ... 更多檢測結果],// ... 更多樣本}
}

二、錯誤原因分析

NuScenesEval_custom load_gt函數加載了整個 eval_set**(這里是 val)**的 ground truth 數據,而不是只加載與過濾后預測結果對應的樣本
結果是預測數據只有 602 個樣本的 token,而 ground truth 有 6019 個樣本的 token,導致斷言失敗。

三、解決方案

修改 NuScenesEval_custom 的初始化邏輯,確保 ground truth 只加載與預測結果匹配的樣本 token,而不是整個 eval_set 的所有樣本。可以通過以下步驟實現:

  1. 獲取預測結果的樣本 token: 在加載預測結果后,提取 self.pred_boxes.sample_tokens
  2. 過濾Ground Truth: 修改load_gt調用,使用預測結果的樣本 token 集合來過濾 ground truth 數據。
  3. 更新 _evaluate_single: 將過濾后的樣本 token 傳遞給 NuScenesEval_custom,確保評估只針對這602 個樣本。

在projects/mmdet3d_plugin/datasets/nuscnes_eval.py中的__init__中加入:# 只加載與預測結果匹配的 ground truthpred_sample_tokens = set(self.pred_boxes.sample_tokens)if verbose:print(f"Loading ground truth for {len(pred_sample_tokens)} predicted samples...")self.gt_boxes = load_gt(self.nusc, self.eval_set, DetectionBox_modified, verbose=verbose)self.gt_boxes = filter_by_sample_token(self.gt_boxes, pred_sample_tokens, verbose=verbose)# 驗證樣本 token 匹配assert set(self.pred_boxes.sample_tokens) == set(self.gt_boxes.sample_tokens), \"Samples in split don't match samples in predictions after filtering."

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

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

相關文章

網絡安全威脅與防護措施(下)

8. 惡意軟件(Malware) **惡意軟件(Malware,Malicious Software)**是指旨在通過破壞、破壞或未經授權訪問計算機系統、網絡或設備的程序或代碼。惡意軟件通常用于竊取敏感信息、破壞系統、竊取資源、干擾正常操作&…

基于springboot的母嬰商城系統(018)

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本母嬰商城系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據信息&am…

shell 腳本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 檢查外網連接 echo "檢查外網連接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外網通訊良好!" elseecho "網絡連接失敗&#x…

使用OBS進行webRTC推流參考

參考騰訊云官方文檔: 云直播 OBS WebRTC 推流_騰訊云 說明非常詳細,分為通過WHIP和OBS插件的形式進行推流。 注意:通過OBS插件的形式進行推流需要使用較低的版本,文檔里有說明,需要仔細閱讀。

Excel 小黑第18套

對應大貓18 .txt 文本文件,點數據 -現有鏈接 -瀏覽更多 (文件類型:可以點開文件看是什么分隔的) 雙擊修改工作表名稱 為表格添加序號:在數字那修改格式為文本,輸入第一個序號樣式(如001&#…

快速入手-基于Django的mysql配置(三)

Django開發操作數據庫更簡單,內部提供了ORM框架。比如mysql,舊版本用pymysql對比較多,新的版本采用mysqlclient。 1、安裝mysql模塊 pip install mysqlclient 2、Django的ORM主要做了兩件事 (1)CRUD數據庫中的表&am…

【總結篇】java多線程,新建線程有幾種寫法,以及每種寫法的優劣勢

java多線程 新建線程有幾種寫法,以及每種寫法的優劣勢 [1/5]java多線程 新建線程有幾種寫法–繼承Thread類以及他的優劣勢[2/5]java多線程-新建線程有幾種寫法–實現Runnable接口以及他的優劣勢[3/5]java多線程 新建線程有幾種寫法–實現Callable接口結合FutureTask使用以及他的…

基于YOLOv8與ByteTrack的車輛行人多目標檢測與追蹤系統

作者主頁:編程千紙鶴 作者簡介:Java領域優質創作者、CSDN博客專家 、CSDN內容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構師設計經驗、多年校企合作經驗,被多個學校常年聘為校外企業導師,指導學生畢業設計并參…

【芯片驗證】面試題·對深度為60的數組進行復雜約束的技巧

朋友發給我的芯片驗證筆試題,覺得很有意思,和大家分享一下。 面試題目 class A中一個長度為60的隨機數組rand int arr[60],如何寫約束使得: 1.每個元素的值都在(0,100]之間,且互不相等; 2.最少有三個元素滿足勾股數要求,比如數組中包含3,4,5三個點; 請以解約束最快…

springmvc中使用interceptor攔截

HandlerInterceptor 是Spring MVC中用于在請求處理之前、之后以及完成之后執行邏輯的接口。它與Servlet的Filter類似,但更加靈活,因為它可以訪問Spring的上下文和模型數據。HandlerInterceptor 常用于日志記錄、權限驗證、性能監控等場景。 ### **1. 創…

【網絡協議】基于UDP的可靠協議:KCP

TCP是為流量設計的(每秒內可以傳輸多少KB的數據),講究的是充分利用帶寬。而 KCP是為流速設計的(單個數據包從一端發送到一端需要多少時間),以10%-20%帶寬浪費的代價換取了比 TCP快30%-40%的傳輸速度。TCP信…

【論文閱讀】Contrastive Clustering Learning for Multi-Behavior Recommendation

論文地址:Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年來,多行為推薦模型取得了顯著成功。然而,許多模型未充分考慮不同行為之間的共性與差異性,以…

藍橋杯2023年第十四屆省賽真題-子矩陣

題目來自DOTCPP: 暴力思路(兩個測試點超時): 題目要求我們求出子矩陣的最大值和最小值的乘積,我們可以枚舉矩陣中的所有點,以這個點為其子矩陣的左上頂點,然后判斷一下能不能構成子矩陣。如果可…

centos 磁盤重新分割,將原來/home 下部分空間轉移到 / 根目錄下

上次重裝系統時,不小心將一半磁盤放在了 /home 下面,運行一段時間后,發現/home 空間沒有怎么用,反而是/ 目錄報警說磁盤用完了,準備將 /home下的空間分一部分給主目錄 / 先查看下 空間分布情況 df -lh 可以看到&…

【C#語言】C#同步與異步編程深度解析:讓程序學會“一心多用“

文章目錄 ?前言?一、同步編程:單線程的線性世界🌟1、尋找合適的對象?1) 🌟7、設計應支持變化 ?二、異步編程:多任務的協奏曲?三、async/await工作原理揭秘?四、最佳實踐與性能陷阱?五、異步編程適用場景?六、性能對比實測…

Redis命令詳解--集合

Redis set 是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據,常用命令: SADD key member1 [member2...] 向集合添加一個或多個成員 SREM key member1 [member2...] 移除集合中一個或多個成員 SMEMBERS key 獲…

學習筆記 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件將 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改為 app.UseSwagger(); app.UseSwaggerUI(); 二.安裝ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…

配置 VSCode 的 C# 開發環境

1. 安裝必要的依賴 1.1 VSCode 擴展 安裝 C# 相關插件(如 C#、C# Extensions 等)。 1.2 .NET SDK 下載地址:.NET SDK 下載頁面 1.3 安裝檢測 在命令行輸入以下命令,如果正確返回了版本號,則表示 .NET SDK 安裝成…

從零搭建微服務項目Pro(第6-1章——Spring Security+JWT實現用戶鑒權訪問與token刷新)

前言: 在現代的微服務架構中,用戶鑒權和訪問控制是非常重要的一部分。Spring Security 是 Spring 生態中用于處理安全性的強大框架,而 JWT(JSON Web Token)則是一種輕量級的、自包含的令牌機制,廣泛用于分…

使用HAI來打通DeepSeek的任督二脈

一、什么是HAI HAI是一款專注于AI與科學計算領域的云服務產品,旨在為開發者、企業及科研人員提供高效、易用的算力支持與全棧解決方案。主要使用場景為: AI作畫,AI對話/寫作、AI開發/測試。 二、開通HAI 選擇CPU算力 16核32GB,這…