空管研一胡皓轩

三、YOLO推理

测试时,输入一张图片,将输出一个 7x7x30的张量表示图片中所有网格包含的物体以及该物体可能的2个位置和可信程度。每个网格预测的类别信息Pr(Class_{i} | Object)和边框预测的置信度信息Pr(Object) * IoU_{pred}^{truth}相乘,就得到每个边框的类别置信度得分。对于98个边框,首先将阈值小于0.2的得分清零,然后重新排序,最后再用NMS算法去掉重复率较大的边框。

input边框怎么去掉_怎么把文本框的边框去掉_去除input边框

四、以Tensorflow实践YOLOv3模型

# 載入套件

from yolo_keras_utils import *

from tensorflow.keras.layers import Conv2D

from tensorflow.keras.layers import Input

from tensorflow.keras.layers import BatchNormalization

from tensorflow.keras.layers import LeakyReLU

from tensorflow.keras.layers import ZeroPadding2D

from tensorflow.keras.layers import UpSampling2D

from tensorflow.keras.layers import add, concatenate

from tensorflow.keras.models import Model

# 測試

from tensorflow.keras.models import load_model

# image_filename = ‘../data/images_Object_Detection/zebra.jpg’ # 測試圖像

image_filename = ‘../data/YOLO4/data/kite.jpg’ # 測試圖像

model = load_model(‘./yolov3.h5’) # 載入模型

input_w, input_h = 416, 416 # YOLO v3 圖像尺寸

# 載入圖像,並縮放尺寸為 (416, 416)

image, image_w, image_h = load_image_pixels(image_filename, (input_w, input_h))

# 預測圖像

yhat = model.predict(image)

# 傳回偵測的物件資訊

print([a.shape for a in yhat])

# 輸出轉換

# 每個陣列內前兩個值為grid寬/高,後四個為 anchors 的作標與尺寸

anchors = [[116, 90, 156, 198, 373, 326], [30, 61, 62, 45, 59, 119], [10, 13, 16, 30, 33, 23]]

# 設定物件偵測的機率門檻

class_threshold = 0.6

# 依 anchors 的尺寸及機率門檻篩選 Bounding Box

boxes = list()

for i in range(len(yhat)):

boxes += decode_netout(yhat[i][0], anchors[i], class_threshold, input_h, input_w)

# 依原圖尺寸與縮放尺寸的比例, 校正 Bounding Box 尺寸

correct_yolo_boxes(boxes, image_h, image_w, input_h, input_w)

# 使用 non-maximal suppress,移除重疊的 Bounding Box

do_nms(boxes, 0.5)

# 取得 Bounding Box 資訊:座標、類別、機率

v_boxes, v_labels, v_scores = get_boxes(boxes, labels, class_threshold)

# 顯示執行結果

print(f’Bounding Box 個數:{len(v_boxes)}’)

for i in range(len(v_boxes)):

print(f’類別:{v_labels[i]}, 機率:{v_scores[i]}’)

# 繪圖

draw_boxes(image_filename, v_boxes, v_labels, v_scores)

怎么把文本框的边框去掉_去除input边框_input边框怎么去掉

五、以Tensorflow实践YOLOv4模型

# 載入套件

import time

from absl import app, flags, logging

from absl.flags import FLAGS

import sys

sys.path.append(‘../data/’)

import YOLO4.core.utils as utils

from YOLO4.core.yolov4 import YOLOv4, YOLOv3, YOLOv3_tiny, decode

from PIL import Image

import cv2

import numpy as np

import tensorflow as tf

# 設定 YOLO 模型參數

STRIDES = np.array([8, 16, 32])

ANCHORS = utils.get_anchors(“../data/YOLO4/data/anchors/yolov4_anchors.txt”, False)

NUM_CLASS = len(utils.read_class_names(“../data/YOLO4/data/classes/coco.names”))

XYSCALE = [1.2, 1.1, 1.05] # 縮放比例

input_size = 608

yolov4_weights_path = “../data/YOLO_weights/yolov4.weights”

# 讀取測試影像

import matplotlib.pyplot as plt

image_path = ‘../data/YOLO4/data/kite.jpg’

original_image = cv2.imread(image_path)

original_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)

original_image_size = original_image.shape[:2]

plt.imshow(original_image)

# 前置處理

image_data = utils.image_preporcess(np.copy(original_image),

[input_size, input_size])

image_data = image_data[np.newaxis, …].astype(np.float32)

# 結合模型結構與權重檔,建立模型

input_layer = tf.keras.layers.Input([input_size, input_size, 3])

feature_maps = YOLOv4(input_layer, NUM_CLASS)

bbox_tensors = []

for i, fm in enumerate(feature_maps):

bbox_tensor = decode(fm, NUM_CLASS, i)

bbox_tensors.append(bbox_tensor)

# 模型結構

model = tf.keras.Model(input_layer, bbox_tensors)

# 載入權重

utils.load_weights(model, yolov4_weights_path)

model.summary()

# 預測

pred_bbox = model.predict(image_data)

# 找出 Bounding Box

pred_bbox = utils.postprocess_bbbox(pred_bbox, ANCHORS, STRIDES, XYSCALE)

bboxes = utils.postprocess_boxes(pred_bbox, original_image_size, input_size, 0.25)

# 使用NMS,移除重疊的 Bounding Box

bboxes = utils.nms(bboxes, 0.213, method=’nms’)

# 原圖加框

image = utils.draw_bbox(original_image, bboxes, classes=utils.read_class_names(“../data/YOLO4/data/classes/coco.names”))

image = Image.fromarray(image)

# 顯示結果

plt.imshow(image)

image.show()

去除input边框_input边框怎么去掉_怎么把文本框的边框去掉

空管研一张正源

本周对A*算法进行了深入的学习

A*(A-star)算法是一种常用的启发式搜索算法,用于在图中找到最短路径。它结合了Dijkstra算法的精确性和贪婪算法的效率,能够快速找到最优解。

A*算法的原理如下:

1. 初始化一张图,其中每个节点都有一个代价值(一般是到目标节点的估计代价)和一个启发式函数值(一般是从起始节点到当前节点的路径代价加上到目标节点的估计代价)。

2. 使用一个优先队列来存储待扩展的节点,其中节点的顺序由代价值和启发式函数值决定。

3. 将起始节点加入队列,并将其代价值和启发式函数值设为0。

4. 从队列中选出代价值和启发式函数值最小的节点,标记为当前节点。

5. 如果当前节点是目标节点,则找到了最短路径,算法终止。

6. 否则,将当前节点标记为已访问,并遍历当前节点的所有邻居节点。

7. 对于每个邻居节点,计算从起始节点到该节点的路径代价,以及从该节点到目标节点的估计代价,并更新邻居节点的代价值和启发式函数值。

8. 如果邻居节点还未加入队列或其新的代价值小于之前的值,则将其加入队列。

9. 重复步骤4至步骤8,直到找到最短路径或队列为空。

A*算法的优点:

1. 可以找到最短路径,保证结果的准确性。

2. 通过合理的启发式函数选择,可以在大规模图中高效地搜索,节省计算资源。

3. 可以用于解决多种问题,不仅限于寻找最短路径。

A*算法的缺点:

1. 对于某些情况,启发式函数可能不准确,导致无法找到最优解或搜索时间过长。

2. 需要存储和更新大量的节点信息,对内存要求较高。

3. 在无法找到最短路径的情况下,可能需要搜索整个图才能确定。

以下是复现图,绿色代表起点,黄色代表终点,灰色即为最短路径。

input边框怎么去掉_怎么把文本框的边框去掉_去除input边框

input边框怎么去掉_去除input边框_怎么把文本框的边框去掉

空管研一闫恒志

对目标检测算法中损失函数的学习

input边框怎么去掉_去除input边框_怎么把文本框的边框去掉

input边框怎么去掉_怎么把文本框的边框去掉_去除input边框

CIoU损失函数相对于侧长w和h的梯度为:

去除input边框_怎么把文本框的边框去掉_input边框怎么去掉

在式中,

分别为目标框和预测框的宽高,b和bgt分别对应于预测框中心和真实框的中心。ρ2表示这俩中心点之间的欧氏距离,c表示两个框的最小闭包区域(同时包含了预测框和真实框的最小矩形框)的对角线长度。

虽然CIoU损失函数包含了对于边界框回归的考虑,包括重叠面积,中心点距离,和纵横比,当预测框和真实框的宽度和高度长宽比呈线性关系时,在CIoU损失函数中包含相对比例的惩罚项并不影响回归过程。

CIoU的优缺点

优点:

形状不变性: CIOU 损失函数在设计上考虑了目标框的形状信息,通过引入修正因子,使得损失对于不同形状的目标框更具鲁棒性。这使得模型更容易捕捉目标的准确形状。

对定位精度的敏感性: CIOU 损失函数对目标框的位置预测更为敏感,因为它考虑了目标框的对角线距离。这有助于提高目标检测模型在定位目标时的精度。

全面性: CIOU 损失函数综合考虑了位置、形状和方向等多个因素,使得模型更全面地学习目标框的特征。这有助于提高模型在复杂场景中的性能。

缺点:

计算复杂性: 相较于传统的 IOU 损失函数,CIOU 涉及了更多的计算步骤,包括完整交叉面积的计算和修正因子的引入。这导致 CIOU 的计算复杂性较高,可能增加模型训练的计算负担。

参数敏感性: CIOU 中的一些参数,如修正因子的权重参数 (),可能对损失函数的性能产生较大影响。在实际应用中,需要仔细调节这些参数以获得最佳的模型性能。

训练难度: 由于 CIOU 考虑了更多的信息,模型可能需要更多的数据和更长的训练时间来充分学习这些信息。这可能使得模型对于小规模数据集的训练更为困难。

已知yolov5使用的CIOU loss ,CIOU loss 同时考虑到回归框宽高比例以及真实框与预测框中心距离,但是存在一个问题,他仅仅将宽高比例作为影响因子,如果说有两个框中心点与原始图保持一致,宽高比例相同但是宽高的值不同,按照CIOUloss损失可能一致与回归目标不相符。具体见下图蓝色框为真实标签,外红框与内红框比例一致,中心点一致。基于此提出EIOU_loss。

怎么把文本框的边框去掉_input边框怎么去掉_去除input边框

EIOU loss 改进点

00001.将原始的宽高比例,改为宽高值回归,将红色框的宽度与真实(蓝色)宽度进行损失,红色长度与真实长度进行回归。

因此将原来

CIOU loss= IOUloss+中心点损失+长宽比例损失

改为

EIOU loss =IOUloss+中心点损失+宽损失+长损失

怎么把文本框的边框去掉_input边框怎么去掉_去除input边框

Cw和Ch分别是两个矩形的闭包的宽和高

评价指标

·AP表示每个类的预测精度,而mAP表示所有类的平均AP,作为整个模型的总体精度的指标。mAP包括两种形式:一种是mAP@0.5,它表示在IOU阈值为0.5时的mAP值,当预测框和标注框之间的交集(IOU)超过0.5时,目标框被认为是正样的。mAP@.5:.95(mAP@[0.5:0.95])

表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。

去除input边框_input边框怎么去掉_怎么把文本框的边框去掉

AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。

空管研一华翔

本周第一部分的学习内容,是探索模型融合与改进方向的可行性。

学习改进利用时序预测的模型,对于提高长时依赖时序预测的精度尤为重要,在实际模型运行过程中,单一模型的运用在精度和拟合程度上有所缺陷,因此考虑通过多个方面学习模型的融合与改进,来完成相应的时序预测任务。

首先要理解和选择好基本模型,通过了解不同的时序预测模型及其适用场景,从而逐步实现模型的融合与改进。时序预测主要的模型包括:

ARIMA(自回归积分滑动平均模型):适用于线性时间序列数据,且数据应具有一定的稳定性。

LSTM(长短期记忆网络):一种特殊的循环神经网络(RNN),能够学习长期依赖信息。

GRU(门控循环单元):与LSTM类似,但结构更简单,参数更少,适合于资源有限的情况。

Transformer:依赖于自注意力机制,适合于处理长序列数据,并在并行化处理方面表现出色。

其次就是在对于时序数据的特征工程方面,进行有效的特征工程是提高预测精度的关键。这包括:时间特征提取:从时间戳中提取年、月、日、小时等信息;滑动窗口特征:利用过去一段时间内的统计量(如平均值、最大值、最小值等)作为特征;差分特征:计算时序数据的一阶或多阶差分,有助于消除趋势和季节性。

为提高对长时依赖的预测能力,考虑利用以下高级模型和技术:

双向LSTM/GRU:不仅考虑过去的信息,还考虑未来的信息,对于某些时序预测任务非常有效。

Transformer和自注意力机制:通过自注意力机制,模型能够关注到序列中任意两点之间的关系,非常适合长序列的预测。

时间卷积网络(TCN):利用卷积神经网络处理时序数据,特别是其扩展卷积层能够捕捉长期依赖。

集成学习和模型融合,通过结合多个模型的预测结果来提高整体预测的准确性。常见的方法包括:

简单平均

多个模型预测结果的平均值

加权平均

根据模型的性能给予不同的权重

堆叠(Stacking)

使用一个新的模型来学习如何最佳地结合不同模型的预测

超参数调整和模型优化,使用如网格搜索(Grid Search)和随机搜索(Random Search)等方法对模型的超参数进行优化。进一步,可以利用贝叶斯优化等更高级的方法来寻找最优的超参数配置。

本周第二部分的学习内容,是更广度地学习时序预测的相关论文,即A Survey of Deep Learning and Foundation Models for Time Series Forecasting。来源于UGA的John A. Miller, Mohammed Aldosari, Farah Saeed, Nasid Habib Barna, Subas Rana, I. Budak Arpinar, Ninghao Liu

这篇论文试图提出并解决以下问题:

1. 对于时间序列预测,深度学习的优势一直未能充分展现出来。

2. 在大流行病预测领域,存在一些挑战,包括训练数据不足、对累积科学知识的不了解以及模型的可解释性。

3. 发展基础模型(具有广泛预训练的大型深度学习模型)以便在充分的训练数据可用之前理解模式并获取知识,以及利用知识图谱和科学领域知识进行预测模型的改进。

同时,相关研究主要包括包括以下内容:

1. 对于时间序列预测,研究了深度学习模型的效果,如TCN和LSTM的比较。

2. 对于时间序列预测,研究了基于Transformer的模型,包括稀疏注意力、掩码和预训练等方面的进展。

3. 研究了使用对比学习和自动编码器等技术来改进多变量时间序列预测的方法。

4. 研究了基于知识图谱和大型语言模型的时间序列预测模型的改进。

5. 进行了多种建模技术的效果比较研究,包括GPT4TS、PatchTST、FEDformer、Autoformer、Stationary、Etsformer、Informer、Reformer等模型的比较分析。

这些研究旨在提高时间序列预测的准确性、可解释性和效率,并为未来的研究提供了方向。

以及在Transformers运用于时序预测上,这篇文章提出了Sparse Attention的概念,以减少注意力的复杂度。

探讨了掩码和预训练对于Transformers在时序预测中的应用。

讨论了Transformer++架构和State-Space Models等方法对于提高时序预测效果的潜力。

探讨了Transformers在时序预测中的可解释性和解释性的改进方法。

对比了Transformers与其他模型(如TCN和LSTM)在时序预测中的效果。

限时特惠:本站每日持续更新海内外内部创业教程,一年会员只需88元,全站资源免费下载点击查看详情
站长微信:nnxmw123