YOLOv3网络模型prototxt修改
本章节所有的代码样例都不能直接复制到网络模型中使用,需要用户根据使用的网络模型,自行调整相应参数,比如bottom、top中的参数要和具体网络模型中的bottom、top一一对应,并且bottom和top对应的参数顺序不能更改。
- upsample算子upsample_param属性参数修改。
参见支持Caffe算子清单,需要将原始算子prototxt中的scale:2修改为scale:1 stride:2。
对比情况如图1所示,其中左边为原始算子prototxt,右边是适配昇腾AI处理器的prototxt。
- 新增三个Yolo算子。
由于Yolo算子+DetectionOutput算子才是特征检测网络完整的后处理逻辑,根据原始算子prototxt所示,在增加YoloV3DetectionOutput算子之前需要先增加三个Yolo算子。
根据支持Caffe算子清单,该算子有1个输入,3个输出,根据上述原则,构造的Yolo算子代码样例如下:- 算子1代码样例:
layer { bottom: "layer82-conv" top: "yolo1_coords" top: "yolo1_obj" top: "yolo1_classes" name: "yolo1" type: "Yolo" yolo_param { boxes: 3 coords: 4 classes: 80 yolo_version: "V3" softmax: true background: false } }
- 算子2代码样例:
layer { bottom: "layer94-conv" top: "yolo2_coords" top: "yolo2_obj" top: "yolo2_classes" name: "yolo2" type: "Yolo" yolo_param { boxes: 3 coords: 4 classes: 80 yolo_version: "V3" softmax: true background: false } }
- 算子3代码样例:
layer { bottom: "layer106-conv" top: "yolo3_coords" top: "yolo3_obj" top: "yolo3_classes" name: "yolo3" type: "Yolo" yolo_param { boxes: 3 coords: 4 classes: 80 yolo_version: "V3" softmax: true background: false } }
- 算子1代码样例:
- 最后一层增加YoloV3DetectionOutput算子。
对于YOLOv3网络,参考扩展算子列表在原始prototxt文件的最后增加后处理算子层YoloV3DetectionOutput ,参见支持Caffe算子清单,YoloV3DetectionOutput算子有十个输入,两个输出;根据该原则,构造的后处理算子代码样例如下:
layer { name: "detection_out3" type: "YoloV3DetectionOutput" bottom: "yolo1_coords" bottom: "yolo2_coords" bottom: "yolo3_coords" bottom: "yolo1_obj" bottom: "yolo2_obj" bottom: "yolo3_obj" bottom: "yolo1_classes" bottom: "yolo2_classes" bottom: "yolo3_classes" bottom: "img_info" top: "box_out" top: "box_out_num" yolov3_detection_output_param { boxes: 3 classes: 80 relative: true obj_threshold: 0.5 score_threshold: 0.5 iou_threshold: 0.45 pre_nms_topn: 512 post_nms_topn: 1024 biases_high: 10 biases_high: 13 biases_high: 16 biases_high: 30 biases_high: 33 biases_high: 23 biases_mid: 30 biases_mid: 61 biases_mid: 62 biases_mid: 45 biases_mid: 59 biases_mid: 119 biases_low: 116 biases_low: 90 biases_low: 156 biases_low: 198 biases_low: 373 biases_low: 326 } }
- 新增输入:
由于YoloV3DetectionOutput算子有img_info输入,故模型输入时增加该输入。对比情况如图2所示,其中左边为原始算子prototxt,右边是适配昇腾AI处理器的prototxt。
代码样例如下,参数为[batch,4],4表示netH、netW、scaleH、scaleW四个维度。其中netH、netW为网络模型输入的HW,scaleH、scaleW为原始图片的HW。
input: "img_info" input_shape { dim: 1 dim: 4 }
父主题: 样例参考