584

阿木币

1

精华

1462 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

发表于 2023-10-27 15:27:34 2642 浏览 0 回复

不想敲代码,如何快速实现数据标注、模型训练、高效部...

SpireView简介

SpireView自动化标注工具可以减少人工标注的成本和时间,从而降低整个深度学习项目的成本。让更多的企业和组织参与深度学习项目,促进深度学习技术的发展和应用。


数据标注

1、下载SpireView标注软件,推荐下载最新版本,从百度网盘下载并解压。

https://gitee.com/amovlab1/spireview.git


2、双击 SpireView.exe 打开标注软件,点击 Tools→Settings...在 saving path一栏填写一个英文路径,用于保存标注的文件。

注意:所有的标注文件都会存储在这个文件夹中。

1.png

3、点击 Input→Image Dir选择待标注图像文件夹,导入待标注图像。

4、点击 Tools→Annotate Image选择标注类型,其中Box Label指矩形框标注,Instance Label指分割标注。

2.png

5、在弹出的界面中,修改 label为待标注目标类别,该界面无需关闭,完成单张标注后,左右方向键(-/→)切换上/下一张,标注结果自动保存。

6、鼠标滚轮放大缩小图像,按住左键移动可视图像区域,左键点击2个点将目标框包围(矩形框标注时)。

3.png

7、标注时,如果点错,鼠标右键可以取消。标注完成后, 如果不满意,可以左键点击绿色边框(边框会变红,如下图所示),按 Delete 删除。

4.png

8、标注多个类别时,修改标签即可。

5.png

9、全部标注完成后,Ctrl+O选择标注格式并输出结果。此处我们选择Yolo detection format;如果是训练分割网络,额外选中output segs,点击OK在保存路径下生成YOLO格式训练文件;对于YOLO训练来说,我们需要scaled_images文件夹、Yolo_labels文件夹和Yolo_categories.names文件。

注意:如下两个文件夹是我们训练所需要的。

6.png


模型训练

1、训练准备:

在训练服务器/工作站计算机(带有12G显存以上的Nvidia显卡,推荐Ubuntu系统,需要安装CUDA 10.2+、PyTorch 1.7+) 上新建文件夹 [PATH-TO-YOUR-DATA]/images/train , 文件夹用于存放上一步骤中scaled_images文件夹内训练图片;新建文件夹 [PATH-TO-YOUR-DATA]/labels/train,文件夹用于存放Yolo_labels文件夹内训练标注。


模型结构(以YOLOv5算法为例):Yolov5发布的预训练模型,包含yolov5l.pt、yolov5l6.pt、yolov5m.pt、yolov5m6.pt、yolov5s.pt、yolov5s6.pt、yolov5x.pt、yolov5x6.pt等。针对不同大小的网络整体架构(n, s, m, l, x)都是一样的,只不过会在每个子模块中采用不同的深度和宽度,分别应对yaml文件中的depth_multiple和width_multiple参数。

7.png

2、下载YOLOv5-v7代码。

  1. git clone https://gitee.com/amovlab1/yolov5-v7.git
  2. cd yolov5-v7
  3. pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
复制代码

3、对于训练目标检测网络,复制一份 [PATH-TO-yolov5-v7]/data/coco128.yaml 并自定义命名,对于训练目标分割网络,复制一份 [PATH-TO- yolov5-v7]/data/coco128-seg.yaml 并自定义命名;修改`.yaml`文件内`path、train、val`,并根据`Yolo_categories.names`文件中的类别名称修改`names`,具体如下:

  1. # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
  2. path: [PATH-TO-YOUR-DATA]  # dataset root dir
  3. train: images/train  # train images (relative to 'path') 128 images
  4. val: images/val  # val images (relative to 'path') 128 images
  5. test:  # test images (optional)

  6. # Classes
  7. names:
  8. 0: person
  9. 1: car
复制代码

4、训练且标矩形框检测网络,执行以下命令:

  1. cd  [PATH-TO-yolov5-v7]
  2. python3 train.py  \
  3. --weights weights/yolov5s6.pt   \
  4. -cfg  models/hub/yolov5s6.yaml \
  5. --data [PATH-TO-YOUR-yaml]\
  6. --hyp data/hyps/hyp.scratch-med.yaml  \
  7. --epochs 50 \
  8. --batch-size 8 \
  9. --imgsz 1280
复制代码

5、训练实例分割网络,执行以下命令:

  1. cd [PATH-TO-yolov5-v7]
  2. python3 segment/train.py  \
  3. --weights weights/yolov5s-seg.pt   \
  4. --cfg models/segment/yolov5s-seg.yaml \
  5. --data [PATH-TO-YOUR-yaml]\
  6. --hyp data/hyps/hyp.scratch-low.yaml   \
  7. --epochs 50 \
  8. --batch-size 8 \
复制代码

6、关于4、5的参数说明如下:

  1. [--weights:预训练的网络模型,用来初始化网络权重,可以从以下地址下载,下载后放到 [PATH-TO-yolov5-v7]/weights中
  2. ·https:/download.amovlab.com/model/yolov5-7/yolov5s.pt
  3. ·https:/download.amovlab.com/model/yolov5-7/yolov5s6.pt
  4. ·https:/download.amovlab.com/model/yolov5-7/yolov5s-seg.pt
  5. [--cfg:定义网络结构,如models/yolov5s.yaml、models/hub/yolov5s6.yaml、models/segment/yolov5s-seg.yaml
  6. ·--data:训练数据描述文件,为刚刚自定义的.yaml 文件
  7. [--hyp:训练网络的一些超参数设置
  8. ·--epochs:训练迭代次数
  9. [--batch-size:批大小,每次训练输入至网络模型的图片数目
  10. [-- iimgsz:训练时输入图片的尺寸,640或1280
  11. 注意:
复制代码

注意:

使用yolov5s.pt 或 yolov5-seg.pt 权重时,imgsz应为640;

使用yolov5s6.pt权重时, imgsz应为1280。


部署应用

训练平台.pt→.wts模型转换

1、在训练完成后

  1. [PATH-TO-yolov5-v7]/runs/train      目录下为检测训练结果
  2. [PATH-TO-yolov5-v7]/runs/train-seg      目录下为分割训练结果
复制代码

2、转换模型,运行如下代码(需要自行修改.pt 权重文件路径和生成 wts 文件的相应名称):

  1. cd [PATH-TO-yolov5-v7]
  2. python3 gen_wts.py -w runs/train/exp/weights/best.pt -o yolov5s.wts -t detect/seg
复制代码

注意:

检测模型选择'detect’,分类模型选择‘seg’。


  • 实际运行平台.wts→.engine 模型转换

1、检测模型转换

在装好SpireCVSDK 的设备平台上运行(任意路径下):


  1. SpireCVDet -s [PATH-TO-YOUR-WTS] [PATH-TO-YOUR-ENGINE] CLS_NUM s/s6
复制代码

其中:


  1. [PATH-TO-YOUR-WTS] : 指上一步生成的.wts 文件路径
  2. [PATH-TO-YOUR-ENGINE]: 指接下来要生成的.engine 文件路径
  3. `CLS_NUM`:指目标类别数
  4. `s`或`s6`:指不同网络模型
复制代码

注意:

1. `s`为640分辨率输入的网络,生成 engine 文件命名规则为DatasetName.engine;

2. `s6`为1280分辨率输入的网络,生成`engine`文件命名规则为DatasetName_HD.engine。

例如:

  1. SpireCVDet -s yolov5s.wts COCo.engine 80 s
  2. SpireCVDet -s yolov5s6.wts COCO_HD.engine 80 s6
复制代码

2、分割模型转换

在装好SpireCVSDK 的设备平台上运行(任意路径下):

  1. SpireCVSeg -s [PATH-TO-YOUR-WTS] [PATH-TO-YOUR-ENGINE] CLS_NUM s
复制代码

其中:

  1. [PATH-TO-YOUR-WTS]:指上一步生成的.wts 文件路径
  2. [PATH-TO-YOUR-ENGINE]:指接下来要生成的.engine文件路径(需要以`_SEG`结尾)
  3. CLS_NUM:指目标类别数
  4. s:指不同网络模型(目前分割网络只支持640分辨率输入)
复制代码

例如:

  1. SpireCVSeg -s yolov5s-seg.wts COCO_SEG.engine 80 s
复制代码


  • 实际部署


按照SpireCVSDK的格式,通过上述过程我们得到了最终的`DatasetName.engine`、`DatasetName_HD.engine`、`DatasetName_SEG.engine`权重文件,将权重文件重命名并放置在`~/SpireCV/models`文件夹内。


针对自定义数据集,需要修改~/SpireCV/sv_algorithm_params.json文件,例如,自定义数据集名称为DatasetName , 该名称要与权重文件名 称对应。数据集中有两类目标,分别是person和car, 以下是参数修改示例:


注意:

当inputSize=640 且 withsegmentation=false 时,则运行 DatasetName.engine;

当inputSize=1280且withSegmentation=false时,则运行DatasetName_HD.engine;

当inputSize=640且withSegmentation=true时,则运行DatasetName_SEG.engine;


  1. {
  2. "CommonObjectDetector":{
  3. "dataset" :"DatasetName",// 这里写哪个Dataset就执行相应的检测模型(如PersonVehicle, Drone, COCo, AnotherDatasetName)
  4. "inputSize":640,
  5. "nmsThrs":0.6,
  6. "scoreThrs":0.4,
  7. "useWidthorHeight":1,
  8. "withSegmentation":false,
  9. "datasetDatasetName":{
  10. "person":[- 1,- 1],
  11. "car":[- 1,- 1]
  12. },
  13. "datasetAnotherDatasetName":{
  14. "another_category": [-1, -1]
  15. },
  16. "datasetPersonVehicle": {
  17. "person":[0.5,1.8],
  18. "car":[4. 1,1.5],
  19. "bus":[10,3],
  20. "truck":[- 1,- 1],
  21. "bike":[- 1,- 1],
  22. "train":[- 1,- 1],
  23. "boat":[-1,-1],
  24. "aeroplane":[-1,-1]
  25. },
  26. "datasetDrone":{
  27. "drone":[0.4,0.2]
  28. },
  29. "datasetCOCO":{
  30. "person":[-1,-1],
  31. "bicycle":[-1,-1], }
  32. }
  33. }
复制代码

精度评估(以COCO数据集为例)



  • 安装相关环境


1、C++环境:

本功能C++部分完全依赖于SpireCV的开发环境,如需安装 SpireCV (开源版),请参考“ SDK安装 ”,安装地址如下:

[url=https://docs.amovlab.com/Spire_C ... K%E5%AE%89%E8%A3%85]https://docs.amovlab.com/Spire_CV_Amov/#/src/%E5%BF%AB%E9%80%9F%E4%BD%BF%E7%94%A8/SDK%E5%AE%89%E8%A3%85/SDK%E5%AE%89%E8%A3%85[/url]


2、Python 环境:

  1. #1.安装pip
  2. #由于Ubuntu自带pip, 可以直接使用以下命令检查是否已经安装pip:
  3. pip3 --version

  4. #如果已经安装了pip, 则会显示当前pip的版本号,否则会提示未找到pip命令。
  5. #如未安装pip, 则使用以下命令进行安装:
  6. sudo apt-get install python3-pip
  7. #安装完成后,再次使用以下命令检查pip是否已经安装成功:
  8. pip3 --version

  9. #2.使用pip安装Python 模块
  10. #安装opencv-python
  11. pip3 install opencv-python
  12. #安装pycocotools
  13. pip3 install pycocotools
复制代码


  • 数据集准备


可使用下述链接,下载val2017数据集;请将val2017.zip 解压到当前文件夹下:

  1. cd <path to SpireCV>
  2. wget https://download.amovlab.com/model/val2017.zip
复制代码


  • 安装相关环境


1、使用检测算法精度评价的具体细节可以参考以下2个部分:

  1. 通用目标检测类:sv::CommonObjectDetector-算法参数文件:~/ SpireCV/sy  algorithm  params,ison
复制代码

其中相关检测算法精度配置参数(sv_algorithm_params.json中),详细说明如下:

  1. dataset: 数据集名称,代表使用该数据集训练的模型进行检测,本功能需将其改为"COCO";
  2. scoreThrs:得分阈值,仅输出目标置信度大于该阈值的目标,本功能需将其改为"0.001";
复制代码

2、使用eval_mAP_on_coco_val.cpp文件对COCO模型进行检测。

  1. #编译例程
  2. cd  <path to SpireCV/build>
  3. sudo make install
  4. #运行检测算法精度检测(完成此步骤,大概需要30min)
  5. ./EvaLModelOnCocoVal
复制代码

3、使用pd2coco_json.py文件将第二步中输出的结果转为COCO格式的json文件。

4、使用coco_eval.py文件对结果进行评估,并输出算法精度。

  1. cd <path to SpireCV/samples/test/eval_mAP_on_coco_val>
  2. #第三步:将预测结果转为COCO格式的json文件
  3. python3 pd2coco_json.py
  4. #第四步:对预测结果进行评估,并输出算法精度
  5. python3 coco_eval.py
复制代码

8.png


                               
登录/注册后可看大图




- End -



阿木实验室:为机器人研发提供开源软硬件工具和课程服务,让研发更高效!

硬件工程师:yinyue199506(欢迎洽谈合作)

课程助手:jiayue199506 (领取学习资料包)


技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。




扫一扫浏览分享
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表