using System; using System.Collections.Generic; using System.Text; using Tensorflow; using static Tensorflow.Binding; namespace TensorFlowNET.Examples.ImageProcessing.YOLO { class backbone { public static (Tensor, Tensor, Tensor) darknet53(Tensor input_data, Tensor trainable) { return tf_with(tf.variable_scope("darknet"), scope => { input_data = common.convolutional(input_data, filters_shape: new int[] { 3, 3, 3, 32 }, trainable: trainable, name: "conv0"); input_data = common.convolutional(input_data, filters_shape: new int[] { 3, 3, 32, 64 }, trainable: trainable, name: "conv1", downsample: true); foreach (var i in range(1)) input_data = common.residual_block(input_data, 64, 32, 64, trainable: trainable, name: $"residual{i + 0}"); input_data = common.convolutional(input_data, filters_shape: new[] { 3, 3, 64, 128 }, trainable: trainable, name: "conv4", downsample: true); foreach (var i in range(2)) input_data = common.residual_block(input_data, 128, 64, 128, trainable: trainable, name: $"residual{i + 1}"); input_data = common.convolutional(input_data, filters_shape: new[] { 3, 3, 128, 256 }, trainable: trainable, name: "conv9", downsample: true); foreach (var i in range(8)) input_data = common.residual_block(input_data, 256, 128, 256, trainable: trainable, name: $"residual{i + 3}"); var route_1 = input_data; input_data = common.convolutional(input_data, filters_shape: new int[] { 3, 3, 256, 512 }, trainable: trainable, name: "conv26", downsample: true); foreach (var i in range(8)) input_data = common.residual_block(input_data, 512, 256, 512, trainable: trainable, name: $"residual{i + 11}"); var route_2 = input_data; input_data = common.convolutional(input_data, filters_shape: new[] { 3, 3, 512, 1024 }, trainable: trainable, name: "conv43", downsample: true); foreach (var i in range(4)) input_data = common.residual_block(input_data, 1024, 512, 1024, trainable: trainable, name: $"residual{i + 19}"); return (route_1, route_2, input_data); }); } } }