Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
CaoY 836aaeb794 | 2 years ago | |
---|---|---|
310_infer | 2 years ago | |
model_utils | 2 years ago | |
scripts | 2 years ago | |
src | 2 years ago | |
310eval.py | 2 years ago | |
README.md | 2 years ago | |
default_config.yaml | 2 years ago | |
eval.py | 2 years ago | |
export.py | 2 years ago | |
requirements.txt | 2 years ago | |
train.py | 2 years ago |
You only look once(YOLO)是最先进的实时物体检测系统。YOLOv3非常快速和准确。
先前的检测系统重新利用分类器或定位器来执行检测,将模型应用于多个位置和尺度的图像。图像的高分区域被认为是检测。
YOLOv3使用了完全不同的方法。该方法将单个神经网络应用于全图像,将图像划分为区域,并预测每个区域的边界框和概率。这些边界框由预测概率加权。
YOLOv3使用了一些技巧来改进训练,提高性能,包括多尺度预测、更好的主干分类器等等,详情见论文。
而YOLOv3-tiny是YOLOv3的简化版,修改了backbone,而且只保留了两个预测分支,速度特别快,可以满足性能要求。
论文: YOLOv3: An Incremental Improvement.Joseph Redmon, Ali Farhadi,
University of Washington
YOLOv3使用DarkNet53执行特征提取,这是YOLOv2中的Darknet-19和残差网络的一种混合方法。DarkNet53使用连续的3×3和1×1卷积层,并且有一些快捷连接,而且DarkNet53明显更大,它有53层卷积层。
而YOLOv3-tiny使用conv+maxpooling混合叠加执行特征提取,backbone特征结构如下:
backbone:
# [from, number, module, args]
[[-1, 1, Conv, [16, 3, 1]], # 0
[-1, 1, nn.MaxPool2d, [2, 2, 0]], # 1-P1/2
[-1, 1, Conv, [32, 3, 1]],
[-1, 1, nn.MaxPool2d, [2, 2, 0]], # 3-P2/4
[-1, 1, Conv, [64, 3, 1]],
[-1, 1, nn.MaxPool2d, [2, 2, 0]], # 5-P3/8
[-1, 1, Conv, [128, 3, 1]],
[-1, 1, nn.MaxPool2d, [2, 2, 0]], # 7-P4/16
[-1, 1, Conv, [256, 3, 1]],
[-1, 1, nn.MaxPool2d, [2, 2, 0]], # 9-P5/32
[-1, 1, Conv, [512, 3, 1]],
[-1, 1, nn.ZeroPad2d, [[0, 1, 0, 1]]], # 11
[-1, 1, nn.MaxPool2d, [2, 1, 0]], # 12
]
目标检测部分特征结构如下:
head:
[[-1, 1, Conv, [1024, 3, 1]],
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, Conv, [512, 3, 1]], # 15 (P5/32-large)
[-2, 1, Conv, [128, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 8], 1, Concat, [1]], # cat backbone P4
[-1, 1, Conv, [256, 3, 1]], # 19 (P4/16-medium)
[[19, 15], 1, Detect, [nc, anchors]], # Detect(P4, P5)
]
使用的数据集:COCO 2017
├── dataset
├── coco2017
├── annotations
│ ├─ train.json
│ └─ val.json
├─ train2017
│ ├─picture1.jpg
│ ├─ ...
│ └─picturen.jpg
└─ val2017
├─picture1.jpg
├─ ...
└─picturen.jpg
.
└─YOLOv3-tiny
├─310_infer
├─inc
└─utils.h # 推理代码头文件
├─src
├─main.cc # 主要推理代码
└─utils.cc # 工具函数
├─aipp.cfg # aipp配置文件
├─build.sh # cmake项目配置脚本
└─CMakeLists.txt # CMakeLists.txt
├─model_utils
├─__init__.py # python初始化文件
├─config.py # 获取.yaml配置参数
├─device_adapter.py # 根据参数设置获取云上或者本地设备参数
├─local_adapter.py # 获取本地设备参数
└─moxing_adapter.py # 获取云上设备参数及云上数据准备
├─scripts
├─run_standalone_train.sh # 在Ascend中启动单机训练(1卡)
├─run_distribute_train.sh # 在Ascend中启动分布式训练(8卡)
├─run_eval.sh # 在Ascend910中启动评估
└─run_infer_310.sh # 在Ascend310中启动评估
├─src
├─__init__.py # python初始化文件
├─distributed_sampler.py # 数据集迭代器
├─initializer.py # 参数初始化器
├─logger.py # 日志函数
├─loss.py # 损失函数
├─lr_scheduler.py # 生成学习率
├─transforms.py # 多尺度等预处理数据
├─util.py # 工具函数
├─yolo_dataset.py # 创建数据集
├─yolo_tiny.py # YOLOv3-tiny网络结构
├─weight
└─mytiny.ckpt # YOLOv3-tiny预训练模型
├─default_config.yaml # 参数配置
├─hccl__tools.py # 生成hccl配置文件
├─README.md # YOLOv3相关说明
├─eval.py # 评估网络
└─train.py # 训练网络
train.py中主要参数如下:
可选参数:
-h, --help 显示此帮助消息并退出。
--Device_target 实现代码的设备:“Ascend" | "GPU"。默认设置:"Ascend"。
--data_dir DATA_DIR 训练数据集目录。
--per_batch_size PER_BATCH_SIZE
训练批次大小。默认设置:32。
--pretrained_model PRETRAINED_Model
预训练模型。默认设置:""。
--resume_yolov3 RESUME_YOLOV3
YOLOv3的ckpt文件,用于微调。默认设置:""。
--lr_scheduler LR_SCHEDULER
学习率调度器,选项:exponential,cosine_annealing。默认设置:cosine_annealing。
--lr LR 学习率。默认设置:0.001。
--lr_epochs LR_EPOCHS
lr changing轮次,用“,”分隔。默认设置:220,250。
--lr_gamma LR_GAMMA 降低lr的exponential lr_scheduler因子。默认设置:0.1。
--eta_min ETA_MIN cosine_annealing调度器中的eta_min。默认设置:0。
--T_max T_MAX cosine_annealing调度器中的T-max。默认设置:320。
--max_epoch MAX_EPOCH
训练模型的最大轮次数。默认设置:320。
--warmup_epochs WARMUP_EPOCHS
热身轮次。默认设置:0。
--weight_decay WEIGHT_DECAY
权重衰减因子。默认设置:0.0005。
--momentum MOMENTUM 动量。默认设置:0.937。
--loss_scale LOSS_SCALE
静态损失等级。默认设置:1024。
--label_smooth LABEL_SMOOTH
CE中是否使用标签平滑。默认设置:0。
--label_smooth_factor LABEL_SMOOTH_FACTOR
独热平滑强度。默认设置:0.1。
--log_interval LOG_INTERVAL
日志记录迭代间隔。默认设置:100。
--ckpt_path CKPT_PATH
检查点保存位置。默认设置:outputs/。
--ckpt_interval CKPT_INTERVAL
保存检查点间隔。默认设置:None。
--is_save_on_master IS_SAVE_ON_MASTER
在主进程序号或所有进程序号上保存ckpt。1为主进程序号, 0为所有进程序号。默认设置:1。
--is_distributed IS_DISTRIBUTED
是否分布训练,1表示是,0表示否,默认设置:1。
--rank RANK 分布式本地排名。默认设置:0。
--group_size GROUP_SIZE
设备进程总数。默认设置:1。
--need_profiler NEED_PROFILER
是否使用调优器。0表示否,1表示是。默认设置:0。
--training_shape TRAINING_SHAPE
固定训练形状。默认设置:""。
--resize_rate RESIZE_RATE
多尺度训练的调整率。默认设置:None。
运行以下命令。如果在GPU上运行,请在python命令中添加--device_target=GPU
```python
python train.py \
--data_dir=/data/COCO2017 \
--pretrained_backbone=weight/mytiny.ckpt \
--is_distributed=0 \
--lr=0.01 \
--T_max=320 \
--max_epoch=320 \
--warmup_epochs=4 \
--ignore_threshold=0.5 \
--training_shape=416 \
--lr_scheduler=cosine_annealing > log.txt 2>&1 &
上述python命令将在后台运行,您可以通过log.txt
文件查看结果。
对于Ascend设备,使用shell脚本训练示例(单卡)
#单卡训练
bash run_standalone_train.sh /data/COCO2017 weight/mytiny.ckpt
对于Ascend设备,使用shell脚本分布式训练示例(8卡)
#8卡训练
bash run_distribute_train.sh /data/COCO2017 weight/mytiny.ckpt rank_table_8p.json
在modelarts上进行8卡训练(Ascend)
(1)上传代码到桶里
(2)上传预训练模型到桶里,或者使用转换好的mytiny.ckpt
(3)上传数据集到桶里
(4)设置代码目录、启动文件、数据集、训练输出位置、作业日志路径
(5)设置参数:
在网页设置参数 checkpoint_url = obs://your_checkpoint_path
在网页设置参数 enable_modelarts=True
在网页设置参数 per_batch_size=32
在网页设置参数 is_distributed=1
在网页设置参数 pretrained_model= mytiny.ckpt
(6)设置节点
(7)创建训练作业
运行以下命令。如果在GPU上运行,请在python命令中添加--device_target=GPU
。
python eval.py --data_dir=/data/COCO2017 --pretrained=weight/0-320_146560.ckpt --testing_shape=416 > log.txt 2>&1 &
或者
bash run_eval.sh /data/COCO2017/ weight/0-320_146560.ckpt
上述python命令将在后台运行,您可以通过log.txt文件查看结果。测试数据集的mAP如下:
# log.txt
=============coco eval result=========
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.162
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.352
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.128
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.048
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.170
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.267
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.164
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.258
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.280
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.108
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.298
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.427
python export.py --ckpt_file [CKPT_PATH] --file_name [FILE_NAME] --file_format [FILE_FORMAT]
参数ckpt_file
是必需的,目前,EXPORT_FORMAT
必须在 ["AIR", "MINDIR"]中进行选择,建议首选MINDIR。
在执行推理之前,需要通过export.py导出mindir文件。
目前仅可处理batch_Size为1,由于使用了DVPP硬件进行图片处理,因此图片必须满足JPEG编码格式,否则将会报错。
# Ascend310 推理
bash run_infer_310.sh [MINDIR_PATH] [DATA_PATH] [ANNO_PATH] [DEVICE_ID]
DEVICE_ID
可选,默认值为 0。
推理结果保存在当前路径,可在acc.log中看到最终精度结果。
=============coco eval result=========
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.164
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.357
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.128
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.051
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.173
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.269
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.165
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.259
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.282
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.110
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.300
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.433
参数 | YOLOv3-tiny |
---|---|
资源 | Ascend 910;CPU 192核;内存 2048G; |
上传日期 | 2021-08-24 |
MindSpore版本 | 1.2.1 |
数据集 | COCO2017 |
训练参数 | epoch=320,batch_size=32,lr=0.001,momentum=0.937,ignore_threshold=0.5 |
优化器 | Momentum |
损失函数 | 带logits的Sigmoid交叉熵 |
输出 | 边界框和标签 |
损失 | 39 |
速度 | 1卡:145.3毫秒/步; |
总时长 | 8卡:18小时 |
参数 | YOLOv3-tiny |
---|---|
资源 | Ascend 910 |
上传日期 | 2021-08-24 |
MindSpore版本 | 1.2.1 |
数据集 | COCO2017,5000张图像 |
batch_size | 1 |
输出 | mAP0.5:0.95=0.164, mAP0.5=0.357 |
在distributed_sampler.py、transforms.py、yolo_dataset.py文件中有随机种子。
yolov3-tiny using MindSpore
Python Shell C++ Text HAProxy
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》