NVIDIA 7th SkyHackathon(六)Tao 目标检测模型训练与评估
admin
2024-03-03 14:23:07
0

1.模型准备

1.1 安装 NGC CLI

使用 NGC CLI 来获得预训练模型,关于 NGC 的详细信息可访问 官网 中的 SETUP 了解

# 创建 NGC CLI 目录
%env CLI=ngccli_cat_linux.zip
mkdir -p $LOCAL_PROJECT_DIR/ngccli# 移除之前安装的 NGC CLI
rm -rf $LOCAL_PROJECT_DIR/ngccli/*# 下载并解压 NGC CLI
wget "https://ngc.nvidia.com/downloads/$CLI" -P $LOCAL_PROJECT_DIR/ngccli
unzip -u "$LOCAL_PROJECT_DIR/ngccli/$CLI" -d $LOCAL_PROJECT_DIR/ngccli/
rm $LOCAL_PROJECT_DIR/ngccli/*.zip # 添加 NGC CLI 到环境变量中
os.environ["PATH"]="{}/ngccli:{}".format(os.getenv("LOCAL_PROJECT_DIR", ""), os.getenv("PATH", ""))

1.2 安装预训练模型

# 查看目前 NGC 上可下载的关于目标检测的预训练模型
ngc registry model list nvidia/tao/pretrained_object_detection:*# 创建保存预训练模型的目录
mkdir -p $LOCAL_EXPERIMENT_DIR/pretrained_resnet18/# 下载选择的预训练模型
ngc registry model download-version nvidia/tao/pretrained_object_detection:resnet18 --dest $LOCAL_EXPERIMENT_DIR/pretrained_resnet18#查看预训练模型是否下载成功
ls -l $LOCAL_EXPERIMENT_DIR/pretrained_resnet18/pretrained_object_detection_vresnet18

1.3 设置模型参数

打开 $LOCAL_SPECS_DIR/ssd_train_resnet18_kitti.txt,根据实际需要,修改模型参数,其中:

  • batch_size_per_gpu:定义 batch_size 大小,(若 GPU 显存不大,可以调小一点,以免出现 out of memory)
  • num_epochs:定义会训练多少轮,第一次训练建议不小于 80
  • validation_period_during_training:定义训练验证轮次,可直观看出训练的效果变化
random_seed: 42
ssd_config {aspect_ratios_global: "[1.0, 2.0, 0.5, 3.0, 1.0/3.0]"scales: "[0.05, 0.1, 0.25, 0.4, 0.55, 0.7, 0.85]"two_boxes_for_ar1: trueclip_boxes: falsevariances: "[0.1, 0.1, 0.2, 0.2]"arch: "resnet"nlayers: 18freeze_bn: falsefreeze_blocks: 0
}
training_config {batch_size_per_gpu: 32num_epochs: 80enable_qat: falselearning_rate {soft_start_annealing_schedule {min_learning_rate: 5e-5max_learning_rate: 2e-2soft_start: 0.15annealing: 0.8}}regularizer {type: L1weight: 3e-5}
}
eval_config {validation_period_during_training: 5average_precision_mode: SAMPLEbatch_size: 16matching_iou_threshold: 0.5
}
nms_config {confidence_threshold: 0.01clustering_iou_threshold: 0.6top_k: 200
}
augmentation_config {output_width: 300output_height: 300output_channel: 3
}
dataset_config {data_sources: {tfrecords_path: "/home/alex/7th_sky_hackathon/data/tfrecords/kitti_train*"}include_difficult_in_training: truetarget_class_mapping {key: "cardboard"value: "cardboard"}target_class_mapping {key: "bottle"value: "bottle"}target_class_mapping {key: "banane"value: "banane"}validation_data_sources: {label_directory_path: "/home/alex/7th_sky_hackathon/data/val/label"image_directory_path: "/home/alex/7th_sky_hackathon/data/val/image"}
}

2.模型训练

首先在 $LOCAL_EXPERIMENT_DIR 中创建模型输出文件夹 experiment_dir_unpruned_final,保存训练结果

之后,使用 tao 套件进行训练,各参数如下:

  • –gpus:几个 GPU
  • –gup_index:使用哪个 GPU
  • -e:训练的设置文件
  • -r:训练模型输出文件夹
  • -k:秘钥
  • -m:预训练模型
tao ssd train --gpus 1 -- gpu_index=$GPU_INDEX -e $SPECS_DIR/ssd_train_resnet18_kitti.txt -r $USER_EXPERIMENT_DIR/experiment_dir_unpruned_final -k $KEY -m $USER_EXPERIMENT_DIR/7th/pretrained_resnet18/pretrained_object_detection_vresnet18/resnet_18.hdf5

训练完成后,可在 $USER_EXPERIMENT_DIR/experiment_dir_unpruned_final/weights 目录下,查看每轮训练出的模型

文件 ssd_training_log_resnet18.csv 中,记录了所有模型的精度,文件具体内容如下:

epoch,AP_banane,AP_bottle,AP_cardboard,loss,lr,mAP,validation_loss
1,nan,nan,nan,27.146854,8.2377446e-05,nan,nan
2,nan,nan,nan,17.637777,0.00013572087,nan,nan
3,nan,nan,nan,15.214624,0.00022360678,nan,nan
4,nan,nan,nan,13.826463,0.00036840313,nan,nan

选择 mAP 最大的模型作为最好的模型

%set_env EPOCH=080

3.模型评估

选择好模型后,使用 tao 套件,可对模型进行评估

tao ssd evaluate --gpu_index=$GPU_INDEX  -e $SPECS_DIR/ssd_train_resnet18_kitti.txt -m $USER_EXPERIMENT_DIR/experiment_dir_unpruned_final/weights/ssd_resnet18_epoch_$EPOCH.tlt -k $KEY

4.模型剪枝

首先在目录 $USER_EXPERIMENT_DIR 下建立存储剪枝模型的目录 experiment_dir_pruned

之后使用 tao 工具套件对模型进行剪枝,各参数如下:

  • -m:要剪枝的模型
  • -o:剪枝后的输出
  • -ep:剪枝的方式
  • -pth:剪枝的阈值
  • -k:秘钥
tao ssd prune --gpu_index=$GPU_INDEX -m $USER_EXPERIMENT_DIR/experiment_dir_unpruned_final/weights/ssd_resnet18_epoch_$EPOCH.tlt -o $USER_EXPERIMENT_DIR/experiment_dir_pruned/ssd_resnet18_pruned.tlt -eq intersection -pth 0.6 -k $KEY

在经过剪枝后,需要对模型重新训练、评估,步骤同上

相关内容

热门资讯

安卓系统的如何测试软件,从入门... 你有没有想过,你的安卓手机里那些神奇的软件是怎么诞生的呢?它们可不是凭空出现的,而是经过一系列严格的...
小米8安卓系统版本,安卓系统版... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,小米8这款手机自从上市以来,就凭借着出色...
华为手机安卓系统7以上,创新体... 你有没有发现,最近华为手机越来越受欢迎了呢?尤其是那些搭载了安卓系统7.0及以上版本的机型,简直让人...
儿童英语免费安卓系统,儿童英语... 哇,亲爱的家长朋友们,你是否在为孩子的英语学习发愁呢?别担心,今天我要给你带来一个超级好消息——儿童...
ios系统切换安卓系统还原,还... 你有没有想过,有一天你的手机从iOS系统切换到了安卓系统,然后再从安卓系统回到iOS系统呢?这听起来...
灵焕3装安卓系统,引领智能新体... 你知道吗?最近手机圈里可是掀起了一股热潮,那就是灵焕3这款神器的安卓系统升级。没错,就是那个曾经以独...
安卓系统指南针软件,探索未知世... 手机里的指南针功能是不是让你在户外探险时倍感神奇?但你知道吗,安卓系统中的指南针软件可是大有学问呢!...
华为是不用安卓系统了吗,迈向自... 最近有个大新闻在科技圈里炸开了锅,那就是华为是不是不再使用安卓系统了?这可不是一个简单的问题,它涉及...
安卓系统热点开启失败,排查与解... 最近是不是你也遇到了安卓系统热点开启失败的小麻烦?别急,让我来给你详细说说这个让人头疼的问题,说不定...
小米max2系统安卓,安卓系统... 你有没有听说过小米Max2这款手机?它那超大的屏幕,简直就像是个移动的电脑屏幕,看视频、玩游戏,那叫...
电池健康怎么保持安卓系统,优化... 手机可是我们生活中不可或缺的好伙伴,而电池健康度就是它的生命力。你有没有发现,随着使用时间的增长,你...
安卓手机怎么调系统颜色,安卓手... 你有没有发现,你的安卓手机屏幕颜色突然变得不那么顺眼了?是不是也想给它换换“脸色”,让它看起来更有个...
安卓系统清粉哪个好,哪款清粉工... 手机用久了,是不是觉得卡得要命?别急,今天就来聊聊安卓系统清理垃圾哪个软件好。市面上清理工具那么多,...
华为被限制用安卓系统,挑战安卓... 你知道吗?最近科技圈可是炸开了锅!华为,这个我们耳熟能详的名字,竟然因为一些“小插曲”被限制了使用安...
安卓系统是不是外国,源自外国的... 你有没有想过,我们每天离不开的安卓系统,它是不是外国货呢?这个问题听起来可能有点奇怪,但确实很多人都...
安卓系统缺少文件下载,全面解析... 你有没有发现,用安卓手机的时候,有时候下载个文件真是让人头疼呢?别急,今天就来聊聊这个让人烦恼的小问...
kktv系统刷安卓系统怎么样,... 你有没有听说最近KKTV系统刷安卓系统的事情?这可是个热门话题呢!咱们一起来聊聊,看看这个新玩意儿到...
安卓系统连接电脑蓝牙,操作指南... 你有没有遇到过这种情况:手机里堆满了各种好用的应用,可就是想找个方便快捷的方式,把手机里的音乐、照片...
安卓车机11.0系统包,智能驾... 你有没有发现,最近你的安卓车机系统好像悄悄升级了呢?没错,就是那个安卓车机11.0系统包!这可不是一...
安卓系统最高到多少,从初代到最... 你有没有想过,你的安卓手机系统升级到哪一步了呢?是不是好奇安卓系统最高能到多少呢?别急,今天就来带你...