resnet101网络_网络标准101

article/2025/10/6 14:35:14

resnet101网络

让我告诉你一个故事。 一旦我为我们的设计系统构建了另一个日期选择器组件。 它由文本输入和带有日历的弹出窗口组成,单击可显示日历。 然后,可以在外部单击或选择日期来关闭弹出窗口。


外部点击逻辑的大多数实现都是通过将实际点击侦听器附加到DOM来完成的。 但是,我想构建可访问的日期选择器,因此您可以使用选项卡打开日历并以相同的方式关闭。 此外,如果您在页面上放置了多个日期选择器,则单击侦听器可能会彼此冲突。


如果您仅可以依靠本机焦点和模糊事件而不是检测外部点击怎么办? 它们自然支持选项卡,触摸和单击事件,并且已经在浏览器中实现。 在这种情况下,您需要解决的唯一问题是单击弹出窗口但没有选择日期:焦点转移到日历,在文本输入上触发模糊事件并最终关闭弹出窗口。


在这一点上,我开始怀疑是否可以单击但不转移焦点。 快速浏览之后,我找到了一种方法:阻止mouseDown事件对弹出窗口的默认操作。 就像一行一样,所有单击均有效,但重点仍然放在文本输入上。


看来这就是解决方案,让我们继续前进,但是我内心的某件事阻止了我。 为什么要专门指定mouseDown而不是mouseUp阻止焦点但传播点击? 这是生活水平的一部分吗? 我们可以依靠吗? 它可以跨浏览器工作吗? 我们用来进行集成测试的React Testing库也不支持它,我必须更改仿真功能。


什么是网络标准?


好吧,由于Stack Overflow的答案对我来说还不够,因此,与Web标准相比,还有什么地方比Web标准更好地了解浏览器行为?


您可能听说过W3C或万维网联盟。 这是一个为Web开发开放标准的国际社区。 W3C确保每个人都遵循相同的准则,并且我们不必支持数十种完全不同的环境。 如果您访问他们的网站,则会找到他们正在制定的所有标准的列表。


让我们看一个可能回答我们问题的文档-UI Events Standard 。 该文档指定DOM事件流,定义事件列表及其执行顺序。 如果您认为标准无聊,晦涩难懂且难以理解,请直接转到DOM Event Architecture部分,该部分说明事件冒泡和捕获并带有漂亮的图片,并且仍然非常标准。 它的质量会让您感到惊讶,它的确写得很好,并带有许多示例和建议。


它还定义了mouseDown事件及其默认操作:


“许多实现都使用mousedown事件来启动各种上下文相关的默认操作。如果取消了此事件,则可以防止使用这些默认操作。其中一些默认操作可能包括:开始与图像或链接的拖放交互,开始文本选择等。此外,某些实现提供了鼠标驱动的平移功能,该功能在调度mousedown事件时按下鼠标中键时被激活。”


好的,因此我们的事件具有一些默认操作,但是焦点没有具体说明,因为它实际上取决于浏览器的实现。 让我们检查一下。


浏览器引擎简介


现代浏览器是一款非常复杂的软件,其代码库包含数千万行代码 。 因此,通常将其分为几部分。


为了找到定义焦点事件的地方,我们需要获得每个部分负责的概览。 让我们用Chrome及其设计文档开始逛逛Chrome的源代码 。 如您所见,有许多模块负责不同的逻辑。

让我们简要介绍一下它们,以了解它们如何协同工作。

  • chrome :这是具有启动逻辑,UI和所有窗口的基本应用程序。 它包含chrome.exechrome.dll的项目。 您还可以在此处找到诸如图标或光标之类的资源。
  • content :它是应用程序的后端,用于处理与子进程的通信。
  • net :这是有助于对网站进行查询的网络库。
  • base :所有子项目之间共享通用代码的地方。 这可能包括字符串操作,通用实用程序等。
  • 眨眼 :这是一个渲染引擎,负责整个渲染管道,包括DOM树,样式,事件,V8集成。
  • v8 :浏览器的最后一部分-Javascript引擎。 它的工作是将JavaScript编译为本地机器代码。


如您所见,浏览器由几个独立的部分组成,这些部分通过API相互通信。 对于开发人员来说,最有趣的部分通常是Blink和V8。 浏览器定义的默认操作不是V8的一部分,但是Blink应该定义并实现所有这些操作。 但是在进入Blink代码库之前,让我们从用户的角度了解Web浏览器的工作方式。


渲染管线


假设您在浏览器中输入域名,然后它会获取并加载一堆资产:HTML,CSS和JS文件,图像,图标。 但是接下来会发生什么呢?

第一步,将解析HTML文件并将其转换为DOM树 。 DOM不仅是页面的内部表示形式,还是暴露给Javascript的API,用于通过称为“绑定”的系统查询或修改呈现。


在DOM树之后,下一步是处理CSS样式。 为此,浏览器具有一个CSS解析器,可构建样式规则的模型。 建立了样式规则模型之后,我们可以将它们与浏览器提供的一组默认样式合并在一起,并为每个DOM元素计算每个样式属性的最终值。 此过程称为样式解析(或recalc)


在下一个布局部分,我们需要确定所有元素的视觉几何形状。 在此阶段,每个元素都会获得其坐标(x和y),宽度和高度。 布局引擎计算并保留所有溢出区域的记录-哪些部分可见,哪些不可见。


当我们获得了所有元素的所有坐标时,就该绘画了 。 对于此操作,我们使用上一步中的坐标和样式规则中的颜色,并将它们组合为绘画说明列表。 重要的是,以正确的顺序绘制元素,以便在重叠时正确堆叠它们。 您可以通过z-index样式规则修改订单。


让我们执行绘画指令列表,并将其转换为颜色值的位图。 这个阶段称为光栅 。 此刻,我们还拍摄图像并将其解码为位图。


稍后,栅格化的位图将存储在GPU内存中。 此阶段包括提取硬件的库,并在Windows上发出对OpenGL和DirectX的调用。 GPU收到显示位图的指令时,会在屏幕上绘制像素。


现在,我们有了渲染管线中最重要的部分。 但是,如果滚动页面或应用某些动画会发生什么? 实际上,渲染不是静态的。 变化通过动画帧表示。 每个帧都是在特定时间点的内容状态的完整呈现。 在此过程中,真正的挑战是其性能。 流畅的动画需要每秒至少生成60帧。 几乎不可能在一秒钟内完成60条完整的流水线,特别是在速度较慢的设备上。


如果不是总是重新渲染所有内容,而是提供一种在特定阶段使元素无效的方法,该怎么办? 例如,如果您动态更改按钮的颜色,浏览器会将该节点标记为无效,并将在下一个动画帧上重新渲染该节点。 如果什么都没有改变,我们可以重用旧框架。


这是优化内容中较小动态变化的好方法。 让我们考虑一下大内容区域的变化。 例如,如果滚动页面,则所有像素现在必须都不同。 为此,页面被分解为独立栅格化的图层。 一层可能很小,仅代表一个DOM节点。 然后,这些层将在另一个称为合成器线程的线程上组合在一起。 通过此优化,您无需重新栅格化所有内容,而只需对较小的图层进行栅格化,然后将它们正确组合在一起即可。


现在,我们对Blink的功能以及渲染管道的外观有了一些概述。 让我们深入研究代码。


导航眨眼代码库


看来我们终于到了终点线。 让我们打开Blink存储库 ,环顾四周。

我们很快就能意识到,尽管我们从最初的问题中缩小了很多范围,但仍然无法手动找到负责防止焦点的特定代码行。


让我们尝试通过Google中的活动名称进行搜索:

mousedown site:https://chromium.googlesource.com/chromium/blink/+/master/Source

它将我们引至EventHandler文件,您可以在其中找到许多输入事件的实现细节。 包括对我们来说最重要的一行:

bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.innerNode(), m_clickCount, mouseEvent);


dispatchMouseEvent返回值的意思是“继续默认处理”,因此在使用preventDefault情况下swallowEventtrue


在下面,有一个对焦点事件的调用,只有在swallowEvent == false才会触发该事件。

swallowEvent = swallowEvent || handleMouseFocus(MouseEventWithHitTestResults(mouseEvent, hitTestResult), sourceCapabilities);

除了焦点处理之外,您还可以浏览鼠标按下事件的所有默认操作,包括选择,拖放和滚动条大小写。 它还实现了鼠标释放和双击事件-一切都在那里。


壁虎和WebKit


至此,我们已经花了一些时间来发现浏览器的源代码,并且对它们的结构有了很好的了解,所以为什么不一起检查Firefox和Safari。 Firefox的浏览器引擎称为Gecko,而Safari的-WebKit。


Gecko还为开发人员提供了概述页面 ,因此您可以了解它的主要概念。 根据Chrome的经验,您可以找到整齐的6000行代码EventStateManager文件,其中包含事件的默认操作和行为。 我在链接中包含了特定的行,因此您不必全部经历。


WebKit是Safari和其他Apple产品中使用的Apple浏览器引擎。 Chrome浏览器的Blink是从WebKit派生的,因此它们有很多共同点,并且在EventHandler文件的版本中查找事件实现不是问题。


现在,由于我们确定可以安全地阻止mousedown事件,因此我可以退后一步,并使用日期选择器完成PR。


结论


我们一起走过了一个简单的问题,开始介绍Web标准和浏览器实现细节。


即使是浏览器或编译器,也不必担心现有模块的隐藏复杂性。 最后,这将是一次有趣的旅程。 您有机会轻松找到需要改进的地方,更重要的是,获得对事情实际运行方式的独特见解。 在这次深入学习中,我学到了很多东西,并鼓励每个人都做同样的事情。 在我不确定为什么还需要其他任何内容的过程中,浏览器会提供出色的文档。


相关链接以供进一步阅读

  • 您知道什么是DOM吗? 它如何在内部表示? 事件的目的是什么? 我向从初学者到经验丰富的开发人员的所有人都强烈推荐DOM Standard 。 “一个事件表示一个事件,而不是一个动作。” -我最喜欢的部分。
  • W3C社区的官方网站。
  • 四处浏览Chromium代码库 。
  • Chromium开发人员发布的设计文件 。
  • 像素寿命 -Chrome渲染管道简介。

翻译自: https://hackernoon.com/web-standards-101-ku9w3wg7

resnet101网络


http://chatgpt.dhexx.cn/article/ANTe85w3.shtml

相关文章

基于ResNet101实现猴痘病毒识别任务

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master

使用VGG16作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master的详细步骤→Windows10Faster-RCNN-TensorFlow-Python3-masterVOC2007数据集。 如果使用ResNet101作为预训练模型训练Faster-RCNN-TensorFlow-Python3-master,在之前使用VGG16作为预训练模型的训练…

TensorRT学习笔记--基于FCN-ResNet101推理引擎实现语义分割

目录 前言 1--Pytorch模型转换为Onnx模型 2--Onnx模型可视化及测试 2-1--可视化Onnx模型 2-2--测试Onnx模型 3--Onnx模型转换为Tensor RT推理模型 4--基于Tensor RT使用推理引擎实现语义分割 前言 基于Tensor RT的模型转换流程:Pytorch → Onnx → Tensor RT…

迁移学习之ResNet50和ResNet101(图像识别)

文章目录 1.实现的效果:2.主文件TransorResNet.py: 1.实现的效果: 实际的图片: (1)可以看到ResNet50预测的前三个结果中第一个结果为:whippet(小灵狗) (2)Re…

Mask-RCNN(2)Resnet101

1. 对应着图像中的CNN部分,其对输入进来的图片有尺寸要求,需要可以整除2的6次方。在进行特征提取后,利用长宽压缩了两次、三次、四次、五次的特征层来进行特征金字塔结构的构造。Mask-RCNN使用Resnet101作为主干特征提取网络 2.ResNet101有…

Pytorch-预训练网络

预训练网络 我们可以把预训练的神经网络看作一个接收输入并生成输出的程序,该程序的行为是由神经网络的结构以及它在训练过程中所看到的样本所决定的,即期望的输入-输出对,或者期望输出应该满足的特性。我们可以在Pytorch中加载和运行这些预…

基于ResNet-101深度学习网络的图像目标识别算法matlab仿真

目录 1.算法理论概述 1.1、ResNet-101的基本原理 1.2、基于深度学习框架的ResNet-101实现 1.3网络训练与测试 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 介绍ResNet-101的基本原理和数学模型,并解释其在图…

【深度学习】ResNet网络详解

文章目录 ResNet参考结构概况conv1与池化层残差结构Batch Normalization总结 ResNet 参考 ResNet论文: https://arxiv.org/abs/1512.03385 本文主要参考视频:https://www.bilibili.com/video/BV1T7411T7wa https://www.bilibili.com/video/BV14E411H7U…

【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】

使用Pytorch实现Resnet网络模型:ResNet50、ResNet101和ResNet152 介绍什么是 ResNet?ResNet 的架构使用Pytorch构建 ResNet网络 介绍 在深度学习和计算机视觉领域取得了一系列突破。尤其是随着非常深的卷积神经网络的引入,这些模型有助于在图…

使用PyTorch搭建ResNet101、ResNet152网络

ResNet18的搭建请移步:使用PyTorch搭建ResNet18网络并使用CIFAR10数据集训练测试 ResNet34的搭建请移步:使用PyTorch搭建ResNet34网络 ResNet34的搭建请移步:使用PyTorch搭建ResNet50网络 参照我的ResNet50的搭建,由于50层以上几…

Java中的数组

数组 1.什么是数组 数组就是存储相同数据类型的一组数据,且长度固定 基本数据类型4类8种:byte/char/short/int/long/float/double/boolean 数组,是由同一种数据类型按照一定的顺序排序的集合,给这个数组起一个名字。是一种数据类型&#…

java输出数组(java输出数组)

多维数组在Java里如何创建多维数组? 这从第四个例子可以看出,它向我们演示了用花括号收集多个new表达式的能力: Integer[][] a4 { { new Integer (1), new Integer (2)}, { new Integer (3), new Integer (4)}, { new Integer (5), new…

java怎么输出数组(Java怎么给数组赋值)

Java中数组输出的三种方式。第一种方式,传统的for循环方式,第二种方式,for each循环,  第三种方式,利用Array类中的toString方法. 定义一个int类型数组,用于输出 int[] array={1,2,3,4,5}; 第一种方式,传统的for循环方式 for(int i=0;i {System.out.println(a[i]); } 第…

数组的输入与输出

前言: 我们知道对一个字符数组进行输入与输出时会用到: 输入:scanf,getchar,gets 输出:printf,putchar,puts 然而可能还有很多的朋友对这些还不是很了解,今天让我们共同学习数组的输入与输出吧。 %c格式是用于输入…

Java二维数组的输出

1. Java二维数组的输出<1> (1) 输出结果右对齐"%5d" public class HelloWorld {public static void main(String[] args){int myArray[ ][ ] { {1,2}, {7,2}, {3,4} };for(int i0; i<3; i){for (int j0; j<2; j)System.out.printf("%5d",my…

Java中数组的输入输出

数组的输入 首先声明一个int型数组 int[] a 或者 int a[] 给数组分配空间 anew int[10]; 和声明连起来就是int[] anew int[10]; 或者是 int a[]new int[10]; 给数组赋值 a[0]1;//0代表的是数组的第1个元素 ,元素下标为0 a[1]1;//1代表的是数组的第2个元素 ,元素下标为0 …

Java 数组的输入输出

Java中要对控制台进行输入操作的话要调用Scanner类&#xff0c;定义一个扫描的对象&#xff0c;例&#xff1a; //要导入java.util.Scanner; Scanner scanner new Scanner(System.in); 这样便打开了输入流&#xff0c;接下来定义数组&#xff1a; int[] n new int[4];//使…

Java中字符串数组的输入与输出

今天刷题遇到一个坑&#xff0c;老是接收不到字符串数组。即用str[i]sc.nextLine();这样的方式去接收数组的话&#xff0c;打印的时候总是会少一个。 import java.util.Scanner;public class test {public static void main(String[] args) {Scanner sc new Scanner(System.i…

java中打印输出数组内容的三种方式

今天输出数组遇到问题&#xff0c;学习一下打印输出数组内容的几种方式 错误示范&#xff1a;System.out.println(array);  //这样输出的是数组的首地址&#xff0c;而不能打印出数组数据。&#xff08;唉&#xff0c;我开始就是这么写的。。。&#xff09; 一维数组&#…

NTP协议之旅

NTP协议之旅 What---啥是NTPWhy---为什么需要NTPHow---NTP实现原理Do---NTP实战使用HCL 华三模拟器进行NTP配置抓包分析 What—啥是NTP NTP是在分布式网络中&#xff0c;进行时钟同步的协议&#xff0c;其具有较高的时间同步精度。所使用的传输层协议为UDP&#xff0c;使用端口…