广西民族大学高级人工智能课程—头歌实践教学实践平台-目标检测

代码文件

"""YOLO_v3 Model Defined in Keras."""
from functools import wraps
import numpy as np
import tensorflow as tf
from keras import backend as K
from keras.layers import Conv2D, Add, ZeroPadding2D, UpSampling2D, Concatenate, MaxPooling2D
from keras.layers.advanced_activations import LeakyReLU
from keras.layers.normalization import BatchNormalization
from keras.models import Model
from keras.regularizers import l2
from yolov3.utils import compose

# your code
K.clear_session()

@wraps(Conv2D)
def DarknetConv2D(*args, **kwargs):
    """Wrapper to set Darknet parameters for Convolution2D."""
    darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)}
    darknet_conv_kwargs['padding'] = 'valid' if kwargs.get('strides') == (2, 2) else 'same'
    darknet_conv_kwargs.update(kwargs)
    return Conv2D(*args, **darknet_conv_kwargs)
def DarknetConv2D_BN_Leaky(*args, **kwargs):
    """Darknet Convolution2D followed by BatchNormalization and LeakyReLU."""
    no_bias_kwargs = {'use_bias': False}
    no_bias_kwargs.update(kwargs)
    return compose(
        DarknetConv2D(*args, **no_bias_kwargs),
        BatchNormalization(),
        LeakyReLU(alpha=0.1))
def resblock_body(x, num_filters, num_blocks):
    '''A series of resblocks starting with a downsampling Convolution2D'''
    # Darknet uses left and top padding instead of 'same' mode
    x = ZeroPadding2D(((1, 0), (1, 0)))(x)
    x = DarknetConv2D_BN_Leaky(num_filters, (3, 3), strides=(2, 2))(x)
    for i in range(num_blocks):
        y = compose(
            DarknetConv2D_BN_Leaky(num_filters // 2, (1, 1)),
            DarknetConv2D_BN_Leaky(num_filters, (3, 3)))(x)
        x = Add()([x, y])
    return x
def darknet_body(x):
    '''Darknet body having 52 Convolution2D layers'''
    x = DarknetConv2D_BN_Leaky(32, (3, 3))(x)
    x = resblock_body(x, 64, 1)

    # 添加缺失的两层 resn 层
    x = resblock_body(x, 128, 2)  # 第一层 resn 层,num_filters 为 128
    x = resblock_body(x, 256, 8)  # 第二层 resn 层,num_filters 为 256

    x = resblock_body(x, 512, 8)
    x = resblock_body(x, 1024, 4)
    return x

def make_last_layers(x, num_filters, out_filters):
    '''6 Conv2D_BN_Leaky layers followed by a Conv2D_linear layer'''
    x = compose(
        DarknetConv2D_BN_Leaky(num_filters, (1, 1)),
        DarknetConv2D_BN_Leaky(num_filters * 2, (3, 3)),
        DarknetConv2D_BN_Leaky(num_filters, (1, 1)),
        DarknetConv2D_BN_Leaky(num_filters * 2, (3, 3)),
        DarknetConv2D_BN_Leaky(num_filters, (1, 1)))(x)

    # 添加最后的两层
    y = compose(
        DarknetConv2D_BN_Leaky(num_filters * 2, (3, 3)),
        DarknetConv2D(out_filters, (1, 1)))(x)

    return x, y

def yolo_body(inputs, num_anchors, num_classes):
    """Create YOLO_V3 model CNN body in Keras."""
    darknet = Model(inputs, darknet_body(inputs))
    x, y1 = make_last_layers(darknet.output, 512, num_anchors * (num_classes + 5))

    # 添加中间层
    x = compose(
        DarknetConv2D_BN_Leaky(256, (1, 1)),
        UpSampling2D(2))(x)
    x = Concatenate()([x, darknet.layers[152].output])
    x, y2 = make_last_layers(x, 256, num_anchors * (num_classes + 5))

    # 添加最后的层
    x = compose(
        DarknetConv2D_BN_Leaky(128, (1, 1)),
        UpSampling2D(2))(x)
    x = Concatenate()([x, darknet.layers[92].output])
    x, y3 = make_last_layers(x, 128, num_anchors * (num_classes + 5))

    return Model(inputs, [y1, y2, y3])

# 其余代码保持不变

def tiny_yolo_body(inputs, num_anchors, num_classes):
    '''Create Tiny YOLO_v3 model CNN body in keras.'''
    x1 = compose(
        DarknetConv2D_BN_Leaky(16, (3, 3)),
        MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
        DarknetConv2D_BN_Leaky(32, (3, 3)),
        MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
        DarknetConv2D_BN_Leaky(64, (3, 3)),
        MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
        DarknetConv2D_BN_Leaky(128, (3, 3)),
        MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
        DarknetConv2D_BN_Leaky(256, (3, 3)))(inputs)
    x2 = compose(
        MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'),
        DarknetConv2D_BN_Leaky(512, (3, 3)),
        MaxPooling2D(pool_size=(2, 2), strides=(1, 1), padding='same'),
        DarknetConv2D_BN_Leaky(1024, (3, 3)),
        DarknetConv2D_BN_Leaky(256, (1, 1)))(x1)
    y1 = compose(
        DarknetConv2D_BN_Leaky(512, (3, 3)),
        DarknetConv2D(num_anchors * (num_classes + 5), (1, 1)))(x2)
    x2 = compose(
        DarknetConv2D_BN_Leaky(128, (1, 1)),
        UpSampling2D(2))(x2)
    y2 = compose(
        Concatenate(),
        DarknetConv2D_BN_Leaky(256, (3, 3)),
        DarknetConv2D(num_anchors * (num_classes + 5), (1, 1)))([x2, x1])
    return Model(inputs, [y1, y2])
def yolo_head(feats, anchors, num_classes, input_shape, calc_loss=False):
    """Convert final layer features to bounding box parameters."""
    num_anchors = len(anchors)
    # Reshape to batch, height, width, num_anchors, box_params.
    anchors_tensor = K.reshape(K.constant(anchors), [1, 1, 1, num_anchors, 2])
    grid_shape = K.shape(feats)[1:3]  # height, width
    grid_y = K.tile(K.reshape(K.arange(0, stop=grid_shape[0]), [-1, 1, 1, 1]),
                    [1, grid_shape[1], 1, 1])
    grid_x = K.tile(K.reshape(K.arange(0, stop=grid_shape[1]), [1, -1, 1, 1]),
                    [grid_shape[0], 1, 1, 1])
    grid = K.concatenate([grid_x, grid_y])
    grid = K.cast(grid, K.dtype(feats))
    feats = K.reshape(
        feats, [-1, grid_shape[0], grid_shape[1], num_anchors, num_classes + 5])
    # Adjust preditions to each spatial grid point and anchor size.
    box_xy = (K.sigmoid(feats[..., :2]) + grid) / K.cast(grid_shape[::-1], K.dtype(feats))
    box_wh = K.exp(feats[..., 2:4]) * anchors_tensor / K.cast(input_shape[::-1], K.dtype(feats))
    box_confidence = K.sigmoid(feats[..., 4:5])
    box_class_probs = K.sigmoid(feats[..., 5:])
    if calc_loss == True:
        return grid, feats, box_xy, box_wh
    return box_xy, box_wh, box_confidence, box_class_probs
def yolo_correct_boxes(box_xy, box_wh, input_shape, image_shape):
    '''Get corrected boxes'''
    box_yx = box_xy[..., ::-1]
    box_hw = box_wh[..., ::-1]
    input_shape = K.cast(input_shape, K.dtype(box_yx))
    image_shape = K.cast(image_shape, K.dtype(box_yx))
    new_shape = K.round(image_shape * K.min(input_shape / image_shape))
    offset = (input_shape - new_shape) / 2. / input_shape
    scale = input_shape / new_shape
    box_yx = (box_yx - offset) * scale
    box_hw *= scale
    box_mins = box_yx - (box_hw / 2.)
    box_maxes = box_yx + (box_hw / 2.)
    boxes = K.concatenate([
        box_mins[..., 0:1],  # y_min
        box_mins[..., 1:2],  # x_min
        box_maxes[..., 0:1],  # y_max
        box_maxes[..., 1:2]  # x_max
    ])
    # Scale boxes back to original image shape.
    boxes *= K.concatenate([image_shape, image_shape])
    return boxes
def yolo_boxes_and_scores(feats, anchors, num_classes, input_shape, image_shape):
    '''Process Conv layer output'''
    box_xy, box_wh, box_confidence, box_class_probs = yolo_head(feats,
                                                                anchors, num_classes, input_shape)
    boxes = yolo_correct_boxes(box_xy, box_wh, input_shape, image_shape)
    boxes = K.reshape(boxes, [-1, 4])
    box_scores = box_confidence * box_class_probs
    box_scores = K.reshape(box_scores, [-1, num_classes])
    return boxes, box_scores
def yolo_eval(yolo_outputs,
              anchors,
              num_classes,
              image_shape,
              max_boxes=20,
              score_threshold=.6,
              iou_threshold=.5):
    """Evaluate YOLO model on given input and return filtered boxes."""
    num_layers = len(yolo_outputs)
    anchor_mask = [[6, 7, 8], [3, 4, 5], [0, 1, 2]] if num_layers == 3 else [[3, 4, 5], [1, 2, 3]]  # default setting
    input_shape = K.shape(yolo_outputs[0])[1:3] * 32
    boxes = []
    box_scores = []
    for l in range(num_layers):
        _boxes, _box_scores = yolo_boxes_and_scores(yolo_outputs[l],
                                                    anchors[anchor_mask[l]], num_classes, input_shape, image_shape)
        boxes.append(_boxes)
        box_scores.append(_box_scores)
    boxes = K.concatenate(boxes, axis=0)
    box_scores = K.concatenate(box_scores, axis=0)
    mask = box_scores >= score_threshold
    max_boxes_tensor = K.constant(max_boxes, dtype='int32')
    boxes_ = []
    scores_ &
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机网络安全基础试题及答案 2008年01月09日 22:03 第一章: 1,信息安全定义:为了防止对知识,事实,数据或功能未经授权而使用,误用,未经 授权修改或拒绝使用而采取的措施。 第二章 1,攻击的类型:访问攻击(信息保密性攻击,修改攻击(信息完整性攻击,拒绝访问攻 击,否认攻击。 2,访问攻击类型:监听,窃听,截听。 3,修改攻击类型:更改攻击,插入攻击,删除攻击. 4,什么是warchalking?:warchalking是指在办公楼外面的道路旁边画的粉笔标 记。这些标记用来标识附近有哪些无线网络可以使用,便于个人更容易接入这些网络。 第三章 1,黑客动机:挑战,贪婪,恶意。 2,黑客技术的类型:开放共享,糟糕的密码,编程中的漏洞,社会工程,缓存溢出,拒 绝服务。 3,缓存溢出:为了攻击系统而占满计算机系统空间,或者允许黑客具有对系统的提升 权限的过程,就是试图在计算机内存空间中缓存过多的信息。原因是由于应用程序中存 在漏洞,而在将用户数据复制到另一个变量中时没有检查数据的复制量,可以通过检查程 序的源代码来发现。 4.Ip哄骗:攻击者通过伪造计算机的ip地址来实施攻击的攻击策略。原理:因为数 据包中无法验证ip地址,因此黑客可以修改数据包的源地址,随心所欲的修改数据包的 来源。黑客首先确认他的目标,之后判断isn中使用的累加数,一旦isn累加数确定之后 ,黑客可以使用假的源ip地址向目标发送tcp syn数据包.目标就以tcp syn ack 数据包响应,发送到假冒源ip地址。 5。特洛伊木马:是外表看上去有用的程序,但是实际上是破坏计算机系统,或者为 攻击者收集识别信息和密码信息的恶意代码。 6.病毒:寄生在合法代码上的恶意代码,在执行时,它干扰计算机操作或者破坏信息 。传统的病毒通过可执行文件或命令文件来执行,但是它们现在已经扩展到了数据文件 ,被称为宏病毒。 7。蠕虫病毒:无需受害者的帮助而自行从一个系统蔓延到另一个系统的程序。它们修 改目标系统并自行扩散,进而对网络上的其他系统实施攻击。 8,黑客必须完成以下两种工作才能监听交换网络:让交换机发送通信给交换网络, 或者让交换机发送通信给所有端口。 9.通过复制mac或者哄骗arp或点dns,可以欺骗交换机发送通信给嗅闻器. 第四章 攻击 机密性 完整性 可用性 责任性 访问 是 是 修改 是 是 拒绝服务 是 否认 是 是 1. 信息的特性:机密性,整体性,可用性,责任性。 2. 可用性:在信息系统中,可用性是指提供服务,是用户能够访问信息,应用程序 和系统,进而完成其任务的安全服务。 3. 机密性:为机构提供安全的信息环境服务。如果使用正确,机密性仅仅允许授权的用户访 问信息. 4. 机密性机制:为了确保机构信息的安全性而制定的机制,它包括物理控制,计算机 访问控制和文件加密. 第六章 1,策略包含的三个部分: 1目的:说明创建这个策略或过程的原因,以及机构预期从中获得哪些利益。 2:范围:规定其适用的范围. 3:责任:规定哪些人对正确实现该策略或过程负有责任。 第七章 1.薄弱点:潜在的攻击途径,可以存在于计算机系统和网络中或者管理过程中。 2.威胁的三个要素:目标(可能受到攻击的一个安全方面,作用者(进行威胁的人或机构 ,事件(构成威胁的行为类型。 3。作用者的三个特性:访问(作用者所具有的接近目标的能力,知识(作用者所具有的 关于目标的信息级别和类型,动机(作用者所具有的发动对目标的威胁的理由. 第八章 1。信息安全的过程:评估,策略,实现,培训,审核. 2。审核:功能包括策略遵守审核,定期项目评估和新的项目评估,入侵检测。保证 与策略相关的控制经过了正确的配置. 第十章 1。防火墙:一种网络的访问控制设备(可以是硬件,也可以是软件,用于适当的通信通 过,从而保护机构的网络或者计算机系统。类型:应用层防火墙和数据包过滤防火墙。 第十一章 1. 虚拟专用网络(vpn:特点:通信数据是经过加密的,远程站点是经过认证的,可以使用多 种协议,连接是点对点的。组成部分:vpn服务器,加密算法,认证系统,vpn协议. 第十二章 1加密:使信息变得混乱,从而对未经授权的人隐藏信息,而允许经过授权的人访问信 息。。 2。加密提供的三种安全服务的部分服务:机密性,完整性,责任性。 私钥加密:发送者(消息—-》私钥算法-- 》密文(不安全的传输介质——>私钥算法——》接受者(消息 公钥加密:明文——》加密算法——》密文——》加密算法——》明文 3.私钥加密和公钥加密的区别:私钥加密用于加密信息的密钥与解密信息的密钥相同 ,私钥加密不提供认证,拥有密钥的任何人都可以创建和发送有效信息,私钥加密的速度 快,而且和容易在软件和硬件中实现。公钥加密使用两个密钥一个密钥用于加密

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值