提交 e545ea9b 编写于 作者: J Jiageng Zhang 提交者: A. Unique TensorFlower

Internal change

PiperOrigin-RevId: 525585347
上级 b2539e5e
......@@ -90,6 +90,7 @@ connected to a new, more powerful backbone if a person chose to.
| Yolo-v4 csp |
| Yolo-v4 large |
| Yolo-v7 |
| Yolo-v7-tiny |
## Requirements
[![TensorFlow 2.11](https://img.shields.io/badge/TensorFlow-2.11-FF6F00?logo=tensorflow)](https://github.com/tensorflow/tensorflow/releases/tag/v2.11.0)
......
......@@ -309,3 +309,33 @@ def coco_yolov7() -> cfg.ExperimentConfig:
)
return config
@exp_factory.register_config_factory('coco_yolov7tiny')
def coco_yolov7_tiny() -> cfg.ExperimentConfig:
"""COCO object detection with YOLOv7-tiny."""
config = coco_yolov7()
config.task.model.input_size = [416, 416, 3]
config.task.model.backbone.yolov7.model_id = 'yolov7-tiny'
config.task.model.decoder.yolov7.model_id = 'yolov7-tiny'
config.task.model.norm_activation.activation = 'leaky'
config.task.model.anchor_boxes.boxes = [
Box(box=[10, 13]),
Box(box=[16, 30]),
Box(box=[33, 23]),
Box(box=[30, 61]),
Box(box=[62, 45]),
Box(box=[59, 119]),
Box(box=[116, 90]),
Box(box=[156, 198]),
Box(box=[373, 326]),
]
config.task.model.loss.cls_weight = 0.5
config.task.model.loss.obj_weight = 1.0
config.task.train_data.parser.aug_rand_translate = 0.1
config.task.train_data.parser.mosaic.mixup_frequency = 0.05
config.task.train_data.parser.mosaic.aug_scale_min = 0.5
config.task.train_data.parser.mosaic.aug_scale_max = 1.5
config.trainer.optimizer_config.learning_rate.cosine.alpha = 0.01
return config
......@@ -68,6 +68,44 @@ _BLOCK_SPEC_SCHEMAS = {
]
}
# Define YOLOv7-tiny variant.
_YoloV7Tiny = [
['convbn', -1, 3, 2, 32, False], # 0-P1/2
['convbn', -1, 3, 2, 64, False], # 1-P2/4
['convbn', -1, 1, 1, 32, False],
['convbn', -2, 1, 1, 32, False],
['convbn', -1, 3, 1, 32, False],
['convbn', -1, 3, 1, 32, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 64, False], # 7
['maxpool2d', -1, 2, 2, 'same', False], # 8-P3/8
['convbn', -1, 1, 1, 64, False],
['convbn', -2, 1, 1, 64, False],
['convbn', -1, 3, 1, 64, False],
['convbn', -1, 3, 1, 64, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 128, True], # 14
['maxpool2d', -1, 2, 2, 'same', False], # 15-P4/16
['convbn', -1, 1, 1, 128, False],
['convbn', -2, 1, 1, 128, False],
['convbn', -1, 3, 1, 128, False],
['convbn', -1, 3, 1, 128, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 256, True], # 21
['maxpool2d', -1, 2, 2, 'same', False], # 22-P5/32
['convbn', -1, 1, 1, 256, False],
['convbn', -2, 1, 1, 256, False],
['convbn', -1, 3, 1, 256, False],
['convbn', -1, 3, 1, 256, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 512, True], # 28
]
# Define YOLOv7 variant.
_YoloV7 = [
['convbn', -1, 3, 1, 32, False], # 0
......@@ -133,6 +171,7 @@ _YoloV7 = [
# Aggregates all variants for YOLOv7 backbones.
BACKBONES = {
'yolov7-tiny': _YoloV7Tiny,
'yolov7': _YoloV7,
}
......
......@@ -91,6 +91,69 @@ _BLOCK_SPEC_SCHEMAS = {
],
}
# Define specs for YOLOv7-tiny variant. It is recommended to use together with
# YOLOv7-tiny backbone.
_YoloV7Tiny = [
['convbn', -1, 1, 1, 256, False],
['convbn', -2, 1, 1, 256, False],
['maxpool2d', -1, 5, 1, 'same', False],
['maxpool2d', -2, 9, 1, 'same', False],
['maxpool2d', -3, 13, 1, 'same', False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 256, False],
['concat', [-1, -7], -1, False],
['convbn', -1, 1, 1, 256, False], # 8
['convbn', -1, 1, 1, 128, False],
['upsample2d', -1, 2, 'nearest', False],
['convbn', '4', 1, 1, 128, False], # route from backbone P4
['concat', [-1, -2], -1, False],
['convbn', -1, 1, 1, 64, False],
['convbn', -2, 1, 1, 64, False],
['convbn', -1, 3, 1, 64, False],
['convbn', -1, 3, 1, 64, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 128, False], # 18
['convbn', -1, 1, 1, 64, False],
['upsample2d', -1, 2, 'nearest', False],
['convbn', '3', 1, 1, 64, False], # route from backbone P3
['concat', [-1, -2], -1, False],
['convbn', -1, 1, 1, 32, False],
['convbn', -2, 1, 1, 32, False],
['convbn', -1, 3, 1, 32, False],
['convbn', -1, 3, 1, 32, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 64, False], # 28
['convbn', -1, 3, 2, 128, False],
['concat', [-1, 18], -1, False],
['convbn', -1, 1, 1, 64, False],
['convbn', -2, 1, 1, 64, False],
['convbn', -1, 3, 1, 64, False],
['convbn', -1, 3, 1, 64, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 128, False], # 36
['convbn', -1, 3, 2, 256, False],
['concat', [-1, 8], -1, False],
['convbn', -1, 1, 1, 128, False],
['convbn', -2, 1, 1, 128, False],
['convbn', -1, 3, 1, 128, False],
['convbn', -1, 3, 1, 128, False],
['concat', [-1, -2, -3, -4], -1, False],
['convbn', -1, 1, 1, 256, False], # 44
['convbn', 28, 1, 1, 128, True],
['convbn', 36, 1, 1, 256, True],
['convbn', 44, 1, 1, 512, True],
]
# Define specs YOLOv7 variant. The spec schema is defined above.
# It is recommended to use together with YOLOv7 backbone.
_YoloV7 = [
......@@ -161,6 +224,7 @@ _YoloV7 = [
# Aggregates all variants for YOLOv7 decoders.
DECODERS = {
'yolov7-tiny': _YoloV7Tiny,
'yolov7': _YoloV7,
}
......@@ -257,13 +321,13 @@ class YoloV7(tf.keras.Model):
return inputs
def _group_layer_inputs(self, from_index, inputs, outputs):
if not outputs:
return inputs[max(inputs.keys())]
if isinstance(from_index, list):
return [self._group_layer_inputs(i, inputs, outputs) for i in from_index]
if isinstance(from_index, int):
# Need last layer output from backbone.
if len(outputs) + from_index == -1:
return inputs[max(inputs.keys())]
return outputs[from_index]
return inputs[from_index] # from_index is a string.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册