当前位置: 首页 > news >正文

全国水利建设市场信用信息平台网站谷歌官网入口

全国水利建设市场信用信息平台网站,谷歌官网入口,龙海网站开发,php做简易网站在前文中我们基于经典的YOLOv5开发构建了钢铁产业产品智能自动化检测识别系统#xff0c;这里本文的主要目的是想要实践应用DETR这一端到端的检测模型来开发构建钢铁产业产品智能自动化检测识别系统。 DETR (DEtection TRansformer) 是一种基于Transformer架构的端到端目标检…在前文中我们基于经典的YOLOv5开发构建了钢铁产业产品智能自动化检测识别系统这里本文的主要目的是想要实践应用DETR这一端到端的检测模型来开发构建钢铁产业产品智能自动化检测识别系统。 DETR (DEtection TRansformer) 是一种基于Transformer架构的端到端目标检测模型。与传统的基于区域提议的目标检测方法如Faster R-CNN不同DETR采用了全新的思路将目标检测问题转化为一个序列到序列的问题通过Transformer模型实现目标检测和目标分类的联合训练。 DETR的工作流程如下 输入图像通过卷积神经网络CNN提取特征图。 特征图作为编码器输入经过一系列的编码器层得到图像特征的表示。 目标检测问题被建模为一个序列到序列的转换任务其中编码器的输出作为解码器的输入。 解码器使用自注意力机制self-attention对编码器的输出进行处理以获取目标的位置和类别信息。 最终DETR通过一个线性层和softmax函数对解码器的输出进行分类并通过一个线性层预测目标框的坐标。 DETR的优点包括 端到端训练DETR模型能够直接从原始图像到目标检测结果进行端到端训练避免了传统目标检测方法中复杂的区域提议生成和特征对齐的过程简化了模型的设计和训练流程。 不受固定数量的目标限制DETR可以处理变长的输入序列因此不受固定数量目标的限制。这使得DETR能够同时检测图像中的多个目标并且不需要设置预先确定的目标数量。 全局上下文信息DETR通过Transformer的自注意力机制能够捕捉到图像中不同位置的目标之间的关系提供了更大范围的上下文信息。这有助于提高目标检测的准确性和鲁棒性。 然而DETR也存在一些缺点 计算复杂度高由于DETR采用了Transformer模型它在处理大尺寸图像时需要大量的计算资源导致其训练和推理速度相对较慢。 对小目标的检测性能较差DETR模型在处理小目标时容易出现性能下降的情况。这是因为Transformer模型在处理小尺寸目标时可能会丢失细节信息导致难以准确地定位和分类小目标。 首先看下实例效果   简单看下数据集 PyTorch训练代码和DETRDEDetection-TRansformer的预训练模型。我们用Transformer替换了完全复杂的手工制作的对象检测管道并将Faster R-CNN与ResNet-50匹配使用一半的计算能力FLOP和相同数量的参数在COCO上获得42个AP。 官方项目地址在这里如下所示 可以看到目前已经收获了超过1.2w的star量还是很不错的了。 DETR整体数据流程示意图如下所示 官方也提供了对应的预训练模型可以自行使用 本文选择的预训练官方权重是detr-r50-e632da11.pth首先需要基于官方的预训练权重开发能够用于自己的 个性化数据集的权重如下所示 pretrained_weights torch.load(./weights/detr-r50-e632da11.pth) num_class 10 1 pretrained_weights[model][class_embed.weight].resize_(num_class1,256) pretrained_weights[model][class_embed.bias].resize_(num_class1) torch.save(pretrained_weights,./weights/detr_r50_%d.pth%num_class) 因为这里我的类别数量为10所以num_class修改为101根据自己的实际情况修改即可。生成后如下所示 之后按照官方说明准备好数据集即可启动训练模型命令如下所示 python main.py --dataset_file coco --coco_path /0000 --epoch 100 --lr1e-4 --batch_size32 --num_workers0 --output_diroutputs --resumeweights/detr_r50_11.pth借助于plot_util.py模块可以实现对模型的评估和可视化如下 def plot_logs(logs, fields(class_error, loss_bbox_unscaled, mAP), ewm_col0, log_namelog.txt):Function to plot specific fields from training log(s). Plots both training and test results.:: Inputs - logs list containing Path objects, each pointing to individual dir with a log file- fields which results to plot from each log file - plots both training and test for each field.- ewm_col optional, which column to use as the exponential weighted smoothing of the plots- log_name optional, name of log file if different than default log.txt.:: Outputs - matplotlib plots of results in fields, color coded for each log file.- solid lines are training results, dashed lines are test results.func_name plot_utils.py::plot_logs# verify logs is a list of Paths (list[Paths]) or single Pathlib object Path,# convert single Path to list to avoid not iterable errorif not isinstance(logs, list):if isinstance(logs, PurePath):logs [logs]print(f{func_name} info: logs param expects a list argument, converted to list[Path].)else:raise ValueError(f{func_name} - invalid argument for logs parameter.\n \Expect list[Path] or single Path obj, received {type(logs)})# Quality checks - verify valid dir(s), that every item in list is Path object, and that log_name exists in each dirfor i, dir in enumerate(logs):if not isinstance(dir, PurePath):raise ValueError(f{func_name} - non-Path object in logs argument of {type(dir)}: \n{dir})if not dir.exists():raise ValueError(f{func_name} - invalid directory in logs argument:\n{dir})# verify log_name existsfn Path(dir / log_name)if not fn.exists():print(f- missing {log_name}. Have you gotten to Epoch 1 in training?)print(f-- full path of missing log file: {fn})return# load log file(s) and plotdfs [pd.read_json(Path(p) / log_name, linesTrue) for p in logs]fig, axs plt.subplots(ncolslen(fields), figsize(16, 5))for df, color in zip(dfs, sns.color_palette(n_colorslen(logs))):for j, field in enumerate(fields):if field mAP:coco_eval pd.DataFrame(np.stack(df.test_coco_eval_bbox.dropna().values)[:, 1]).ewm(comewm_col).mean()axs[j].plot(coco_eval, ccolor)else:df.interpolate().ewm(comewm_col).mean().plot(y[ftrain_{field}, ftest_{field}],axaxs[j],color[color] * 2,style[-, --])for ax, field in zip(axs, fields):ax.legend([Path(p).name for p in logs])ax.set_title(field)def plot_precision_recall(files, naming_schemeiter):if naming_scheme exp_id:# name becomes exp_idnames [f.parts[-3] for f in files]elif naming_scheme iter:names [f.stem for f in files]else:raise ValueError(fnot supported {naming_scheme})fig, axs plt.subplots(ncols2, figsize(16, 5))for f, color, name in zip(files, sns.color_palette(Blues, n_colorslen(files)), names):data torch.load(f)# precision is n_iou, n_points, n_cat, n_area, max_detprecision data[precision]recall data[params].recThrsscores data[scores]# take precision for all classes, all areas and 100 detectionsprecision precision[0, :, :, 0, -1].mean(1)scores scores[0, :, :, 0, -1].mean(1)prec precision.mean()rec data[recall][0, :, 0, -1].mean()print(f{naming_scheme} {name}: mAP50{prec * 100: 05.1f}, fscore{scores.mean():0.3f}, ff1{2 * prec * rec / (prec rec 1e-8):0.3f})axs[0].plot(recall, precision, ccolor)axs[1].plot(recall, scores, ccolor)axs[0].set_title(Precision / Recall)axs[0].legend(names)axs[1].set_title(Scores / Recall)axs[1].legend(names)return fig, axs结果如下所示 iter 000: mAP50 24.0, score0.317, f10.341 iter 050: mAP50 27.7, score0.339, f10.400 iter latest: mAP50 26.4, score0.348, f10.393 iter 000: mAP50 24.0, score0.317, f10.341 iter 050: mAP50 27.7, score0.339, f10.400 iter latest: mAP50 26.4, score0.348, f10.393 可视化如下所示 【Precision曲线】 精确率曲线Precision-Recall Curve是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。 精确率Precision是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率Recall是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。 绘制精确率曲线的步骤如下 使用不同的阈值将预测概率转换为二进制类别标签。通常当预测概率大于阈值时样本被分类为正例否则分类为负例。 对于每个阈值计算相应的精确率和召回率。 将每个阈值下的精确率和召回率绘制在同一个图表上形成精确率曲线。 根据精确率曲线的形状和变化趋势可以选择适当的阈值以达到所需的性能要求。 通过观察精确率曲线我们可以根据需求确定最佳的阈值以平衡精确率和召回率。较高的精确率意味着较少的误报而较高的召回率则表示较少的漏报。根据具体的业务需求和成本权衡可以在曲线上选择合适的操作点或阈值。 精确率曲线通常与召回率曲线Recall Curve一起使用以提供更全面的分类器性能分析并帮助评估和比较不同模型的性能。 【Recall曲线】 召回率曲线Recall Curve是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。 召回率Recall是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度Sensitivity或真正例率True Positive Rate。 绘制召回率曲线的步骤如下 使用不同的阈值将预测概率转换为二进制类别标签。通常当预测概率大于阈值时样本被分类为正例否则分类为负例。 对于每个阈值计算相应的召回率和对应的精确率。 将每个阈值下的召回率和精确率绘制在同一个图表上形成召回率曲线。 根据召回率曲线的形状和变化趋势可以选择适当的阈值以达到所需的性能要求。 通过观察召回率曲线我们可以根据需求确定最佳的阈值以平衡召回率和精确率。较高的召回率表示较少的漏报而较高的精确率意味着较少的误报。根据具体的业务需求和成本权衡可以在曲线上选择合适的操作点或阈值。 召回率曲线通常与精确率曲线Precision Curve一起使用以提供更全面的分类器性能分析并帮助评估和比较不同模型的性能。 【PR曲线】 精确率-召回率曲线Precision-Recall Curve是一种用于评估二分类模型性能的可视化工具。它通过绘制不同阈值下的精确率Precision和召回率Recall之间的关系图来帮助我们了解模型在不同阈值下的表现。 精确率是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。 绘制精确率-召回率曲线的步骤如下 使用不同的阈值将预测概率转换为二进制类别标签。通常当预测概率大于阈值时样本被分类为正例否则分类为负例。 对于每个阈值计算相应的精确率和召回率。 将每个阈值下的精确率和召回率绘制在同一个图表上形成精确率-召回率曲线。 根据曲线的形状和变化趋势可以选择适当的阈值以达到所需的性能要求。 精确率-召回率曲线提供了更全面的模型性能分析特别适用于处理不平衡数据集和关注正例预测的场景。曲线下面积Area Under the Curve, AUC可以作为评估模型性能的指标AUC值越高表示模型的性能越好。 通过观察精确率-召回率曲线我们可以根据需求选择合适的阈值来权衡精确率和召回率之间的平衡点。根据具体的业务需求和成本权衡可以在曲线上选择合适的操作点或阈值。  感兴趣的话可以自行动手实践尝试下
http://www.pierceye.com/news/87007/

相关文章:

  • 潍坊市住房和城乡建设网站网络营销对传统营销的影响
  • 自建服务器网站备案简约网站模板
  • 在省建设厅网站怎样报建非主营电子商务企业网站有哪些
  • 杰讯山西网站建设wordpress json 登陆
  • 做网站建设的公司有哪些内容个人小公司怎么注册
  • 网站建设项目售后服务承诺怎样建设VR网站
  • 龙岩网站开发公司微信小程序开发者模式
  • 网站建设 中山wordpress图片延迟
  • 重庆营销型网站随做的好wordpress怎么写html
  • 文明网站建设情况企业网络搭建拓扑图
  • 门户网站建设费用科目网站建设的介绍
  • 鲜花网站建设主要内容青铜峡网站建设推广
  • 手机网站修改网站建设艾金手指六六12
  • 做网站用什么主题wordpress语言文件
  • 无成本搭建属于自己的网站徐州市城乡和住房建设局网站
  • 怎么自己注册网站平台了网站建设需要敲代码吗
  • 网站上怎样做轮播图wordpress 换中文
  • 云瓣科技做网站帮人做网站一定要先收费
  • 北京那个网站建设公司比较好上海旅游景点
  • 网站用什么做关键词手机网站建设模板
  • 网站怎么做关键词在哪做一单一结手机兼职
  • 国内老牌的广州网站建设危险网站怎么办
  • 南郊做网站网站建设栏目分级
  • 我想自己做网站吗汕头建站免费模板
  • 加强网站信息建设厦门网站建设策划
  • 杭州正规制作网站公司吗常州网站建设托管
  • 门户型网站怎么建设做网站要学的技术
  • 晋中公司做网站新品发布会流程方案
  • 麻章手机网站建设wordpress链接添加媒体库
  • discuz网站备份买实体服务器做网站