| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 9 天前 | ||
| 8 天前 | ||
| 23 天前 | ||
| 23 天前 | ||
| 8 天前 | ||
| 23 天前 | ||
| 7 天前 |
Yolo
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:对YOLOv2/v3目标检测网络的检测特征图进行数据重组和激活处理,将原始卷积输出转换为检测框坐标、目标置信度和类别概率三个输出,供后续Yolov3DetectionOutput算子使用。
-
计算公式:
输入x的shape为(N, boxes*(coords+1+classes), H, W),通道维度C按(elem, box)排列,即先排列所有锚框的x坐标,再排列所有锚框的y坐标,依此类推。
坐标处理:
- x, y坐标做sigmoid激活
- w, h坐标直接搬移(move),输出时w和h位置交换,输出排列为(x, y, h, w)
sigmoid(x)=11+exp(−x)sigmoid(x) = \frac{1}{1 + exp(-x)}
目标置信度和类别概率根据yolo_mode处理,yolo_mode由yolo_version、softmax和background三个属性决定:
- YOLO_MODE_1(V3,或V2且softmax=false且background=false):obj=sigmoid, classes=sigmoid
- YOLO_MODE_2(V2且softmax=true且background=false):obj=sigmoid, classes=softmax
- YOLO_MODE_3(V2且softmax=false且background=true):obj=move, classes=sigmoid
- YOLO_MODE_4(V2且softmax=true且background=true):obj和classes一起做softmax
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 卷积层输出特征图,shape为(N, boxes*(coords+1+classes), H, W),通道维度C=boxes*(coords+1+classes),按(elem, box)排列。支持NCHW数据排布。 | float16、float32 | ND |
| coord_data | 输出 | 检测框坐标,shape为(N, boxes*coords, CeilX(H*W*2+32,32)/2),通道排列为(x, y, h, w)。输出最后一维使用ceilx内存对齐,有效数据为前H*W个元素。 | float16、float32 | ND |
| obj_prob | 输出 | 目标置信度,shape为(N, CeilX(boxes*H*W*2+32,32)/2)。输出最后一维使用ceilx内存对齐,有效数据为前boxes*H*W个元素。 | float16、float32 | ND |
| classes_prob | 输出 | 类别概率,shape为(N, classes, CeilX(boxes*H*W*2+32,32)/2)。输出最后一维使用ceilx内存对齐,有效数据为前boxes*H*W个元素。 | float16、float32 | ND |
| boxes | 属性 | 锚框数量,取值大于0,默认值为3(YOLOv2默认5)。 | Int | - |
| coords | 属性 | 坐标参数数,固定为4,对应x, y, w, h,默认值为4。 | Int | - |
| classes | 属性 | 预测类别数,取值范围[1, 1024],默认值为80。 | Int | - |
| yolo_version | 属性 | YOLO版本,取值为"V2"或"V3",默认值为"V3"。 | String | - |
| softmax | 属性 | 是否对类别概率做softmax,仅yolo_version为"V2"时有效,默认值为false。 | Bool | - |
| background | 属性 | obj和classes操作类型控制,仅yolo_version为"V2"时有效,默认值为false。 | Bool | - |
| softmaxtree | 属性 | 固定为false,未使用,默认值为false。 | Bool | - |
约束说明
- 输入x必须为4维NCHW格式,shape为(N, boxes*(coords+1+classes), H, W)。
- 通道维度C必须满足C = boxes*(coords+1+classes),否则结果未定义。
- coords固定为4,对应x, y, w, h四个坐标值。
- boxes必须大于0。
- classes取值范围为[1, 1024]。
- H和W必须大于0,即H*W > 0,不支持空空间维度。
- yolo_version仅支持"V2"或"V3"。
- 输入x必须为连续tensor。
- float16输入时中间计算提升到float32精度。
- 输出coord_data的通道排列为(x, y, h, w),注意w和h位置与输入相比发生交换。
- softmax和background属性仅当yolo_version为"V2"时有效。
- 输出shape的最后一维使用ceilx内存对齐,与canndev的1.0 infershape一致:
- coord_data最后一维:CeilX(HW2+32, 32)/2,有效数据为前H*W个元素,padding区域补零。
- obj_prob最后一维:CeilX(boxesHW2+32, 32)/2,有效数据为前boxesH*W个元素,padding区域补零。
- classes_prob最后一维:CeilX(boxesHW2+32, 32)/2,有效数据为前boxesH*W个元素,padding区域补零。
- CeilX(size, align) = (size + align - 1) / align * align,其中size为元素数乘以2(float16占2字节),align为32(32字节对齐)。
- 算子为确定性实现:sigmoid使用标准公式1/(1+exp(-x)),softmax使用max-subtraction数值稳定的3-pass实现(每线程独立顺序累加,无跨线程归约),相同输入多次运行结果完全一致。
- float16输入时中间计算提升到float32精度,最终结果转回float16。float16 subnormal值([2^-24, 2^-14))通过手动构造位模式保留,绕过硬件FTZ(Flush-To-Zero)模式。
- 算子采用多核多线程并行:基于GetBlockIdx/GetBlockNum的全局核索引,每核512线程,Grid-Stride循环分配工作量。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_yolo | 通过算子IR构图方式调用Yolo算子,参见算子调用完成算子编译和验证。 |