如有錯(cuò)誤,懇請(qǐng)指出。
在之后的時(shí)間內(nèi),可能會(huì)學(xué)習(xí)與點(diǎn)云相關(guān)的知識(shí),進(jìn)一步學(xué)習(xí)基于點(diǎn)云的3D目標(biāo)檢測(cè)。然后,為了快速入門這個(gè)領(lǐng)域,想使用mmdetection3d開源算法庫(kù)來(lái)嘗試訓(xùn)練一些經(jīng)典的3d目標(biāo)檢測(cè)模型,比如:SECOND,PointPillars,3D-SSD等等。之后重點(diǎn)是詳細(xì)介紹KITTI數(shù)據(jù)集的一系列評(píng)估標(biāo)準(zhǔn)。
1. mmdet3d安裝過(guò)程
其中,推薦安裝python=3.7
的虛擬環(huán)境,因?yàn)樵趉itti數(shù)據(jù)集可視化過(guò)程中需要使用到mayavi包,而這個(gè)包的vtk依賴不支持python 3.8版本。
# 創(chuàng)建虛擬環(huán)境
conda create --name openmmlab python=3.7 -y
conda activate openmmlab
# 安裝深度學(xué)習(xí)框架
# Linux
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3
# Windows
pip install torch==1.11.0+cu102 torchvision==0.12.0+cu102 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu102
# 安裝mmdet3d開源算法庫(kù)
pip install openmim
mim install mmcv-full
mim install mmdet
mim install mmsegmentation
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
pip install -e .
ps:在linux可能出現(xiàn)的問(wèn)題不會(huì)有太多,但是如果是window中安裝,出現(xiàn)pycocotools無(wú)法正常安裝的問(wèn)題,原因是沒有vc++的編譯器,安裝一個(gè)visual studio 2019的專業(yè)版就可以正常安裝了mmdet了,而mmdet的依賴就是pycocotools。
這個(gè)問(wèn)題的詳細(xì)解決方法見:error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
2. KITTI數(shù)據(jù)集準(zhǔn)備
在官網(wǎng)下載對(duì)應(yīng)的數(shù)據(jù):http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
安裝官方文檔對(duì)數(shù)據(jù)進(jìn)行組織:https://mmdetection3d.readthedocs.io/zh_CN/latest/datasets/kitti_det.html
ps:官方提供的數(shù)據(jù)切分指令如果wget無(wú)法正常下載訪問(wèn),可以在/etc/hosts
中自行添加網(wǎng)頁(yè)的IP地址(IP地址的查詢服務(wù)鏈接:https://www.ip138.com/),例如:
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/test.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/test.txt
這個(gè)問(wèn)題的詳細(xì)解決方法,我也用博客貼出:Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|0.0.0.0|:443… failed
處理后的文件夾結(jié)構(gòu)應(yīng)該如下:
kitti
├── ImageSets
│ ├── test.txt
│ ├── train.txt
│ ├── trainval.txt
│ ├── val.txt
├── testing
│ ├── calib
│ ├── image_2
│ ├── velodyne
│ ├── velodyne_reduced
├── training
│ ├── calib
│ ├── image_2
│ ├── label_2
│ ├── velodyne
│ ├── velodyne_reduced
│ ├── planes (optional)
├── kitti_gt_database
│ ├── xxxxx.bin
├── kitti_infos_train.pkl
├── kitti_infos_val.pkl
├── kitti_dbinfos_train.pkl
├── kitti_infos_test.pkl
├── kitti_infos_trainval.pkl
├── kitti_infos_train_mono3d.coco.json
├── kitti_infos_trainval_mono3d.coco.json
├── kitti_infos_test_mono3d.coco.json
├── kitti_infos_val_mono3d.coco.json
這里我不太理解mmdet3d轉(zhuǎn)換出來(lái)的這些.pkl與.coco.json文件,所以下面寫了個(gè)測(cè)試代碼來(lái)對(duì)其進(jìn)行詳細(xì)了解。
2.1 了解 .coco.json 文件
對(duì)于 .coco.json 后綴的文件,可以通過(guò)兩種方式對(duì)其進(jìn)行讀取,如下所示:
# 方法1:
json_path = r'../data/kitti/kitti_infos_train_mono3d.coco.json'
with open(json_path, 'r') as fr:
json_file = json.load(fr)
# 方法2:
cocojson_path = '../data/kitti/kitti_infos_train_mono3d.coco.json'
cocojson_file = mmcv.load(cocojson_path)
ps:如果由于某些原因?qū)е耲son文件的內(nèi)容被情況,也就是變成了一個(gè)空的.coco.json文件,這時(shí)候使用以上的兩種方法讀取數(shù)據(jù)是會(huì)報(bào)錯(cuò)的,這一點(diǎn)需要尤其注意。(在測(cè)試過(guò)程中我就是出現(xiàn)了這個(gè)題,還排查了許久的原因)
其中,查看kitti_infos_train_mono3d.coco.json
和 kitti_infos_test_mono3d.coco.json
內(nèi)容如下所示,有固定字段組成的字典形式,由annotation、images、categories組成,其中訓(xùn)練集有標(biāo)注信息,而驗(yàn)證集沒有標(biāo)注信息,其字段信息如下所示:
其中的images又是由多個(gè)字典組成,如下所示:
不過(guò)在訓(xùn)練的時(shí)候,我看見配置文件中其實(shí)使用的pkl文件,所以這里生成的.coco.json文件更多的可能是使用一些2D的經(jīng)典目標(biāo)檢測(cè)算法來(lái)訓(xùn)練kitti數(shù)據(jù)集的。也就是說(shuō),生成的.coco.json文件,使得我們可以使用mmdetection的開源算法庫(kù)(檢測(cè)2d的算法)來(lái)訓(xùn)練kitti數(shù)據(jù)集。
2.2 了解 .pkl 文件
使用一般的手段是不能正常讀取.pkl文件的,np.fromfile 與 json.load 都不能正常讀取,因?yàn)檫@是mmdet中獨(dú)特的數(shù)據(jù)存儲(chǔ)格式。對(duì)于網(wǎng)上沒有這種文件的詳細(xì)介紹,此時(shí)就可以轉(zhuǎn)換思路通過(guò)如何生成 .pkl 文件入手,知道了其如何生成就應(yīng)該知道其存儲(chǔ)的內(nèi)容是什么。
在代碼層面,首先在 tools/create_data.py
中的 kitti_data_pre
函數(shù)中,作為數(shù)據(jù)處理的入口。之后可以發(fā)現(xiàn),代碼中是通過(guò) mmcv.dump 與 mmcv.load 來(lái)進(jìn)行pkl格式數(shù)據(jù)與.coco.json格式數(shù)據(jù)的寫入與導(dǎo)出,但是數(shù)據(jù)本身就是一個(gè)字典形式。具體的構(gòu)造在 get_kitti_image_info
函數(shù)中,函數(shù)的相關(guān)注釋如下:
KITTI annotation format version 2:
{
[optional]points: [N, 3+] point cloud
[optional, for kitti]image: {
image_idx: ...
image_path: ...
image_shape: ...
}
point_cloud: {
num_features: 4
velodyne_path: ...
}
[optional, for kitti]calib: {
R0_rect: ...
Tr_velo_to_cam: ...
P2: ...
}
annos: {
location: [num_gt, 3] array
dimensions: [num_gt, 3] array
rotation_y: [num_gt] angle array
name: [num_gt] ground truth name array
[optional]difficulty: kitti difficulty
[optional]group_ids: used for multi-part object
}
}
這里,直接利用 mmcv.load 來(lái)讀取 kitti_test.pkl 數(shù)據(jù),pkl_file = mmcv.load(file=pkl_path)
,其內(nèi)容如下所示:
可以發(fā)現(xiàn),其作為一個(gè)列表元素,每個(gè)訓(xùn)練數(shù)據(jù)都被構(gòu)建成了一個(gè)字典。每個(gè)字典由4大部分組成:inage、point_cloud、calib、annos。其與注釋內(nèi)容是相符合的,其中可以使用 mmcv.track_iter_progress
可以按順序?qū)ψ值溥M(jìn)行提取:for info in mmcv.track_iter_progress(kitti_infos)
其中,對(duì)于這4個(gè)部分,官方資料中有解釋到:https://mmdetection3d.readthedocs.io/zh_CN/latest/datasets/kitti_det.html
可以發(fā)現(xiàn),其實(shí)這里的annos就是kitti中的label文件的數(shù)據(jù)。而對(duì)于label_2的介紹,可以參考https://blog.csdn.net/qq_37534947/article/details/106628308,label文件是kitti中object的標(biāo)簽和評(píng)估數(shù)據(jù),以“000001.txt”文件為例,包含樣式如下:
每一行代表一個(gè)object,每一行都有16列分別表示不同的含義,具體如下:
-
第1列(字符串):代表物體類別(type)
總共有9類,分別是:Car、Van、Truck、Pedestrian、Person_sitting、Cyclist、Tram、Misc、DontCare。其中DontCare標(biāo)簽表示該區(qū)域沒有被標(biāo)注,比如由于目標(biāo)物體距離激光雷達(dá)太遠(yuǎn)。為了防止在評(píng)估過(guò)程中(主要是計(jì)算precision),將本來(lái)是目標(biāo)物體但是因?yàn)槟承┰蚨鴽]有標(biāo)注的區(qū)域統(tǒng)計(jì)為假陽(yáng)性(false positives),評(píng)估腳本會(huì)自動(dòng)忽略DontCare區(qū)域的預(yù)測(cè)結(jié)果。 -
第2列(浮點(diǎn)數(shù)):代表物體是否被截?cái)啵╰runcated)
數(shù)值在0(非截?cái)啵┑?(截?cái)啵┲g浮動(dòng),數(shù)字表示指離開圖像邊界對(duì)象的程度。 -
第3列(整數(shù)):代表物體是否被遮擋(occluded)
整數(shù)0、1、2、3分別表示被遮擋的程度。 -
第4列(弧度數(shù)):物體的觀察角度(alpha)
取值范圍為:-pi ~ pi(單位:rad),它表示在相機(jī)坐標(biāo)系下,以相機(jī)原點(diǎn)為中心,相機(jī)原點(diǎn)到物體中心的連線為半徑,將物體繞相機(jī)y軸旋轉(zhuǎn)至相機(jī)z軸,此時(shí)物體方向與相機(jī)x軸的夾角,如圖1所示。 -
第5~8列(浮點(diǎn)數(shù)):物體的2D邊界框大小(bbox)
四個(gè)數(shù)分別是xmin、ymin、xmax、ymax(單位:pixel),表示2維邊界框的左上角和右下角的坐標(biāo)。 - 第9~11列(浮點(diǎn)數(shù)):3D物體的尺寸(dimensions)分別是高、寬、長(zhǎng)(單位:米)
- 第12-14列(整數(shù)):3D物體的位置(location)分別是x、y、z(單位:米),特別注意的是,這里的xyz是在相機(jī)坐標(biāo)系下3D物體的中心點(diǎn)位置。
- 第15列(弧度數(shù)):3D物體的空間方向(rotation_y)取值范圍為:-pi ~ pi(單位:rad),它表示,在照相機(jī)坐標(biāo)系下,物體的全局方向角(物體前進(jìn)方向與相機(jī)坐標(biāo)系x軸的夾角)
- 第16列(整數(shù)):檢測(cè)的置信度(score)要特別注意的是,這個(gè)數(shù)據(jù)只在測(cè)試集的數(shù)據(jù)中有。
2.3 .bin文件、.pkl文件、.coco.json文件的查看代碼
如何查看KITTI數(shù)據(jù)集涉及的這些.bin文件,以及mmdetection3d統(tǒng)一的.pkl與.coco.json格式,以下我寫了個(gè)代碼已實(shí)現(xiàn)對(duì)這些文件的查看。
參考代碼:
import numpy as np
import os
import json
import mmcv
# os.chdir(path='')
root = os.getcwd()
print(root)
bin_path = '../data/kitti/kitti_gt_database/1000_Car_0.bin'
pkl_path = '../data/kitti/kitti_infos_train.pkl'
# 原來(lái)是 test_mono3d.coco.json由于名稱的問(wèn)題,讀取不了數(shù)據(jù)
json_path = r'../data/kitti/test.json'
os.path.exists(bin_path), "{} is not exists".format(bin_path)
os.path.exists(json_path), "{} is not exists".format(json_path)
bin_file = np.fromfile(file=bin_path, dtype=np.float32, count=-1)
pkl_file = np.fromfile(file=pkl_path, dtype=np.float32, count=-1)
print(bin_file.shape)
print(pkl_file.shape)
# with open(json_path, 'r') as fr:
# json_file = json.load(fr)
# print(json_file)
pkl_path = '../data/kitti/kitti_infos_train.pkl'
kitti_infos = mmcv.load(file=pkl_path)
# print(pkl_file)
json_path = r'../data/kitti/kitti_infos_train_mono3d.coco.json'
with open(json_path, 'r') as fr:
json_train_file = json.load(fr)
# print(json_file)
cocojson_path = '../data/kitti/kitti_infos_test_mono3d.coco.json'
json_test_file = mmcv.load(cocojson_path)
補(bǔ)充:使用 mmcv.load 不僅僅可以讀取,coco.json和.pkl文件,其一共支持5種格式的數(shù)據(jù)格式。如下所示:
file_handlers = {
'json': JsonHandler(),
'yaml': YamlHandler(),
'yml': YamlHandler(),
'pickle': PickleHandler(),
'pkl': PickleHandler()
}
3. KITTI數(shù)據(jù)集訓(xùn)練
如果你在單個(gè)機(jī)器上啟動(dòng)多個(gè)任務(wù),比如,在具有8塊顯卡的機(jī)器上進(jìn)行2個(gè)4塊顯卡訓(xùn)練的任務(wù),你需要為每個(gè)任務(wù)指定不同的端口(默認(rèn)為29500)以避免通信沖突。
如果你使用 dist_train.sh
啟動(dòng)訓(xùn)練任務(wù),可以在命令中設(shè)置端口:
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4
端口的設(shè)置還有另外的兩種方法:
# 方法1:通過(guò) --options 設(shè)置端口
CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} --options 'dist_params.port=29500'
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} --options 'dist_params.port=29501'
# 方法2:通過(guò)修改配置文件(來(lái)設(shè)置不同的通信端口
dist_params = dict(backend='nccl', port=29500)
dist_params = dict(backend='nccl', port=29501)
詳細(xì)的訓(xùn)練過(guò)程這里就不貼出來(lái)的,和mmdetection、mmfewshot等的訓(xùn)練過(guò)程是一樣的。詳細(xì)可以參考:MMOpenLab使用專欄
經(jīng)過(guò)測(cè)試,出現(xiàn)的使用問(wèn)題:
1)訓(xùn)練MVXNET:彈出非法訪問(wèn)的問(wèn)題(解決方法是降低學(xué)習(xí)率,以實(shí)現(xiàn)單卡運(yùn)行的學(xué)習(xí)率配置)
2)訓(xùn)練Point RCNN:占用顯存不斷增加,最終溢出(官方還沒有修復(fù)這個(gè)問(wèn)題)
成功測(cè)試的算法:SECOND、3D-SSD、PointPillars、Part-A2、SASSD
4. KITTI數(shù)據(jù)集評(píng)估標(biāo)準(zhǔn)
以PointPillars為例,訓(xùn)練完之后會(huì)有一個(gè)評(píng)估結(jié)果(以下結(jié)果是截取了Car這個(gè)類的結(jié)果,還有另外兩個(gè)類的結(jié)果沒有放上來(lái))
----------- AP11 Results ------------
Car AP11@0.70, 0.70, 0.70:
bbox AP11:90.5385, 89.3699, 86.2703
bev AP11:89.6290, 86.8373, 79.6047
3d AP11:85.9857, 76.4022, 73.5934
aos AP11:90.38, 88.89, 85.46
Car AP11@0.70, 0.50, 0.50:
bbox AP11:90.5385, 89.3699, 86.2703
bev AP11:90.6688, 89.9088, 89.0676
3d AP11:90.6654, 89.8380, 88.8712
aos AP11:90.38, 88.89, 85.46
Overall AP11@easy, moderate, hard:
bbox AP11:79.9252, 74.4630, 71.3123
bev AP11:77.1720, 68.2989, 63.5469
3d AP11:73.1700, 62.1137, 58.4967
aos AP11:74.50, 68.65, 65.49
----------- AP40 Results ------------
Car AP40@0.70, 0.70, 0.70:
bbox AP40:95.6966, 92.1547, 87.4279
bev AP40:92.4469, 88.1739, 83.6487
3d AP40:87.8139, 76.5133, 73.3604
aos AP40:95.51, 91.61, 86.58
Car AP40@0.70, 0.50, 0.50:
bbox AP40:95.6966, 92.1547, 87.4279
bev AP40:95.9824, 94.8116, 91.7013
3d AP40:95.9314, 94.6114, 90.0106
aos AP40:95.51, 91.61, 86.58
Overall AP40@easy, moderate, hard:
bbox AP40:82.7911, 75.4843, 71.5740
bev AP40:78.7391, 68.7362, 64.2875
3d AP40:74.1775, 61.6529, 57.5156
aos AP40:76.47, 68.73, 64.88
對(duì)于上述的結(jié)果,下面分別對(duì)特定的名詞進(jìn)行解釋說(shuō)明:
4.1 bbox、bev、3d、aos
深度學(xué)習(xí)算法的檢測(cè)指標(biāo)通常由bbox、bev、3d、aos四個(gè)檢測(cè)指標(biāo),其含義分別如下所示:
- bbox:2D檢測(cè)框的準(zhǔn)確率
- bev:BEV視圖下檢測(cè)框的準(zhǔn)確率
- 3d:3D檢測(cè)框的準(zhǔn)確率
- aos:檢測(cè)目標(biāo)旋轉(zhuǎn)角度的準(zhǔn)確率
4.2 AP11與AP40
- AP11:表示11點(diǎn)插值平均精度,在kitti 3D中R11={0,0.1,0.2,……,1},是等間距的recall level
- AP40:表示40點(diǎn)插值平均精度,將R11修改為R40={1/40,2/40,3/40,……,1},同樣是等間距的recall level
ps:論文《Disentangling Monocular 3D Object Detection》證明AP11是不準(zhǔn)確的,因?yàn)楫?dāng)模型可以提供一個(gè)精度極小,僅僅是>0的一個(gè)單一目標(biāo),此時(shí)R=0時(shí)的精度即為1,那么AP11的平均精度即為1/11,這個(gè)精度已經(jīng)超過(guò)了很多的方法,所以是不合理的。所以后續(xù)修改為AP40。
4.3 Car AP11@0.70, 0.70, 0.70與Car AP11@0.70, 0.50, 0.50
- AP11@0.70, 0.70, 0.70分別代表bbox,bev,3d在0.70閾值下的平均精度
- AP11@0.70, 0.50, 0.50分別代表bbox,bev,3d在0.70,0.50,0.50不同閾值下的平均精度
這里可以發(fā)現(xiàn),評(píng)估bbox只有0.70這個(gè)閾值,所以可以發(fā)現(xiàn)bbox的兩行數(shù)據(jù)都是一樣的,而對(duì)于bev與3d來(lái)說(shuō),0.50的閾值比0.70的閾值要寬松,所以第二組的結(jié)果(閾值0.50)一般要比第一組的結(jié)果(閾值0.70)要高。
4.4 bbox AP11:90.5385, 89.3699, 86.2703
無(wú)論是bbox,還是bev、3d、aos,每個(gè)評(píng)價(jià)指標(biāo)在某一個(gè)閾值下都會(huì)有3組結(jié)果,這三組結(jié)果分別對(duì)應(yīng)的是easy、moderate和hard下的評(píng)估結(jié)果。難度越來(lái)越大,所以數(shù)值也越來(lái)越小,所以這三組數(shù)值一般是呈遞減狀態(tài)。
4.5 mAP
一般論文中的實(shí)驗(yàn)結(jié)果都會(huì)貼上一個(gè)mAP的最終結(jié)果,這個(gè)結(jié)果就是moderate mAP的結(jié)果。比如,在剛剛的PointPillars實(shí)驗(yàn)結(jié)果中,對(duì)于car類別的AP11結(jié)果如下所示,其中76.4022就是作為car這個(gè)類基準(zhǔn)排名的主要指標(biāo)。
Car AP11@0.70, 0.70, 0.70:
3d AP11:85.9857, 76.4022, 73.5934
而對(duì)于全部3個(gè)類別的AP11結(jié)果如下所示,那么62.1137就是作為3類(3 Class)基準(zhǔn)排名的主要指標(biāo)。
Overall AP11@easy, moderate, hard:
3d AP11:73.1700, 62.1137, 58.4967
現(xiàn)在,來(lái)查看mmdetection3d中PointPillars的結(jié)果:
可以發(fā)現(xiàn),其實(shí)剛剛我跑出來(lái)的結(jié)果Class的AP是76.4022,而3 Class的AP是62.137。這個(gè)結(jié)果和官方跑出來(lái)的77.6和64.07差不多。使用以下指令,來(lái)測(cè)試剛剛訓(xùn)練好的PointPillars的最新模型:
python tools/test.py configs/pointpillars/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class.py \
work_dirs/hv_pointpillars_secfpn_6x8_160e_kitti-3d-3class/latest.pth \
--eval mAP
輸出結(jié)果:
可以看見,無(wú)論是Car=76.4022還是3 Class=62.1137,都與訓(xùn)練時(shí)期的驗(yàn)證結(jié)果差不多,所以訓(xùn)練期間的驗(yàn)證結(jié)果還是可信的。
4.6 aos(Average Orientation Similarity)
aos的名稱為平均方向相似性(這里是利用了AP11來(lái)進(jìn)行計(jì)算),計(jì)算公式如下:
其中,r代表物體檢測(cè)的召回率。在因變量r下,方向相似性s∈[0,1]被定義為所有預(yù)測(cè)樣本與ground truth余弦距離的歸一化:
其中D?表示在召回率r下所有預(yù)測(cè)為正樣本的集合,?θ(i) 表示檢出物體i的預(yù)測(cè)角度與ground truth的差。為了懲罰多個(gè)檢出匹配到同一個(gè)ground truth,如果檢出i已經(jīng)匹配到ground truth設(shè)置δi = 1,否則δi = 0。
簡(jiǎn)要分析:我們希望aos的值越大越好,越大也就說(shuō)明預(yù)測(cè)角度與ground truth的值越相似,那么這個(gè)是如何實(shí)現(xiàn)的呢。在余弦函數(shù)中,如果預(yù)測(cè)角度與ground turth的值越接近,那么它們差值就越接近0,余弦值是越靠近1,也就是余弦越大,那么整個(gè)公式的求和平均也是越大的。而如果預(yù)測(cè)值與ground truth不像,嚴(yán)重預(yù)測(cè)錯(cuò)誤,那么其差值就會(huì)變大,一個(gè)比較大的差值在余弦公式中是比較小的,甚至可能是負(fù)數(shù),導(dǎo)致1+cos的結(jié)果很小,從而使得整體的結(jié)果偏小。所以aos公式可以一定程度的判斷方向的預(yù)測(cè)正確性。
4.7 easy、moderate、hard的定義
KITTI數(shù)據(jù)集中easy、moderate、hard根據(jù)標(biāo)注框是否被遮擋、遮擋程度和框的高度進(jìn)行定義的,具體數(shù)據(jù)如下:
- 簡(jiǎn)單:最小邊界框高度:40像素,最大遮擋級(jí)別:完全可見,最大截?cái)啵?5%
- 中等:最小邊界框高度:25像素,最大遮擋水平:部分遮擋,最大截?cái)啵?0%
- 困難:最小邊界框高度:25像素,最大遮擋級(jí)別:難以看到,最大截?cái)啵?0%
參考資料:
1. MMDet3d官方文檔
2. What is the resuls meaning? #185
3. KITTI數(shù)據(jù)集3d目標(biāo)檢測(cè)的評(píng)價(jià)的含義
4. 機(jī)器學(xué)習(xí)算法評(píng)估指標(biāo)——3D目標(biāo)檢測(cè)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-787458.html
5. 點(diǎn)云感知算法面試知識(shí)點(diǎn)(一)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-787458.html
到了這里,關(guān)于MMDetection3d對(duì)KITT數(shù)據(jù)集的訓(xùn)練與評(píng)估介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!