爬虫-百度安全验证-图片旋转验证-深度学习解决方案

在通过百度关键词搜索进行爬虫的过程中,会遇到进入百度安全验证页面的情况。随着访问次数的的增加,进入安全验证页面的概率也随之增大,且这种情况并不能通过请求头加入 Accept 和引入随机 UA 来解决(代理是否能解决这一问题未得到充分验证,以我的尝试来看并不能有效解决)。

在尝试过上述的几种方法来反“反爬”的过程中,发现一旦可以通过安全验证,在后续的爬虫过程中,可观察时间内并不会再次进入安全验证页面。既然“堵”不适合我解决这一问题,就只有利用“疏”的思路制定解决方案。

百度安全验证页面采用拖动滑块使页面中的图片角度为正确方向来判断是否为“自动程序”在控制浏览器。相较于一般的字符识别等验证方案具有一定的难度,直观表现在没有(或者几乎没有)现有的 API 供应商在提供这样的服务。

网络上现有的、基于图像处理或计算机视觉的解决方案主要分为传统方法和深度学习方法。传统方法通过对图像进行处理、建模来建立正确方向图像和不同角度图像的映射,再通过对图像进行哈希处理判定与页面上的图像最相似的图像,从而在映射关系中获得旋转角度。这种方法形成的“关系模型”会随着图库数量的增大而不断增大,且哈希编码来查找相似图像的方法鲁棒性较差。现有的基于深度学习的方法利用在 Google Street View dataset 训练的 RotNet 来预测图片旋转角度,经试验在类街景的测试图片上识别成功率较高。但由于缺乏百度安全验证页面中采用的人像、风景等多类样本,难以运用到实际使用中。除此以外,还有其他因素导致了利用该模型难以通过安全验证。

综上,在参考现有文章的基础上,总结出以下基于深度学习的方法:

目标:

识别图片角度,推算出对应滑动距离,模拟滑动。

实现:

  1. 获得原始图片数据集:循环访问百度搜索页面从而进入百度安全验证页面,抓取图片1500张,获得大量重复图片。对这些图片进行筛选,获得不重复图片144张(在前期实验的过程中发现安全验证页面易出现重复图片,推测用于验证的图片数据集规模较);

在这里插入图片描述
2. 制作数据集:生成各个角度的图片,每个不同的图片均有360张不同角度的照片,标记正向图,根据现有图片名称序列计算不同角度照片相对于正向图片的相对角度,重新命名从而建立数据集;

在这里插入图片描述在这里插入图片描述

  1. 生成规则:根据滑动距离与图片旋转角度的关系形成滑动规则(按照滑动距离 o = a n g l e × 360 × b o=angle \times 360 \times b o=angle×360×b 的规则来预测角度是不准确的,所以通过在安全验证页面逐单位距离滑动记录角度与滑动距离的关系);
  2. 模型训练:利用神经网络(考虑模型、数据集的大小以及模型的感受野)在数据集上进行训练,直接预测需要滑动的距离。由于百度安全验证的角度并不是整数变化的,滑动距离与角度的变化也不是一一对应的,因此相对于预测角度而言,直接预测滑动距离更加准确、便捷。且滑动距离的类别相比较于而言要少(也可以考虑做成回归任务),从而使得模型的参数也更少。此外,因为模型的目的是能足够准确地预测滑动距离,从而使得自动化程序模拟验证,因此,应该使得模型尽可能多地在现有数据集上学习。综上,考虑到真实场景的验证图片与获得的图片存在一定的差异(即使是相同的图片,也会受到不同程度的噪声干扰,如水印等),不再对数据集进行训练集与测试集的划分。

性能:

推理快、预测准(普遍最多在三次验证中可通过,根据实际操作和 b 站视频来看,人为通过安全验证的难度也相对较大)

操作

python 开发可以参考 https://github.com/ShortCJL/RotateCode
java 开发可先将训练获得的模型进行转化

import torch
import torchvision
import torch.nn as nn

model = # instance of your model
model.load_state_dict(torch.load("your model.pth")["model_state_dict"])

# Switch the model to eval model
model.eval()

# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 128, 128)

# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)

# Save the TorchScript model
traced_script_module.save("your model.pt")

之后,便可通过 DJL 加载模型并作出预测,并借助其他工具来操作浏览器实现验证(为不限制大家思路,在此不放出我的实现代码)。

代码

欢迎大家 star https://github.com/Tang1705/Baidu-Rot-Validate。

<think>好的,用户让我介绍一下深度学习的全过程。之前他们问过LSTM和GRU的区别,现在可能想更全面地了解深度学习的整个流程。首先,我需要确定用户的需求是什么。可能他们刚开始学习深度学习,或者在做项目时需要了解整个流程的步骤。用户可能是学生、研究人员,或者刚入行的工程师,需要从整体上把握深度学习的各个阶段。 接下来,我需要考虑深度学习全过程的各个阶段。通常包括问题定义、数据准备、模型设计、训练调优、评估部署等。但用户可能希望更详细的分步解释,比如数据预处理的具体方法,模型选择的不同考虑因素,超参数调优的技巧,以及部署的注意事项等。 用户之前的问题是关于模型结构的比较,现在扩展到整个流程,可能需要更宏观的视角,同时也要有具体步骤的细节。比如,在问题定义阶段,如何明确任务类型和目标;数据准备中的常见处理步骤;模型设计时如何选择合适的架构;训练过程中的优化方法;评估指标的选择;部署时的模型压缩和加速技术等。 另外,用户可能对每个步骤中的常见挑战和解决方案感兴趣,比如数据不足时的增强方法,过拟合的处理,训练速度的优化,模型的可解释性等。需要确保回答结构清晰,逐步引导用户理解整个流程,同时结合实际例子帮助理解。 还要注意使用中文,符合之前的格式要求,比如数学公式用$...$或$$...$$,但用户这次的问题可能不需要太多公式,更多是流程性的介绍。不过如果有涉及关键概念,比如损失函数、优化器,可能需要用公式说明。 需要检查是否有遗漏的步骤,比如数据收集、特征工程、模型验证、监控与维护等。同时,可能要考虑不同任务类型(如分类、回归、生成模型)在流程中的差异,但为了保持回答的通用性,应集中在通用流程上。 最后,确保回答真实可靠,引用常见的方法和工具,比如使用TensorFlow、PyTorch框架,提到交叉验证、数据增强、迁移学习等技术。可能还需要对比不同方法的优缺点,帮助用户根据具体情况选择。 总结起来,回答需要涵盖从问题定义到部署维护的全过程,分步骤详细解释,结合实际应用场景,结构清晰,语言简洁,帮助用户建立系统的理解,并为实际应用提供指导。</think>以下是深度学习的**全流程分步解析**,涵盖从问题定义到模型部署的核心步骤: --- ### **一、问题定义与任务分析** 1. **明确任务类型** - 分类(如图像分类)、回归(如房价预测)、生成(如文本生成)、序列建模(如时间序列预测)等。 2. **确定输入输出格式** - 输入数据维度(如224×224像素的图片)、输出形式(如类别概率、数值)。 3. **评估指标选择** - 分类任务用准确率、F1值;回归任务用MAE、RMSE;生成任务用BLEU、ROUGE等。 --- ### **二、数据准备与预处理** 1. **数据收集** - 公开数据集(如ImageNet、COCO)、爬虫获取、人工标注。 2. **数据清洗** - 剔除噪声数据(如模糊图片)、处理缺失值(插值或删除样本)。 3. **数据增强**(缓解过拟合) - 图像:旋转、裁剪、色彩抖动 - 文本:同义词替换、随机删除 - 公式示例:图像归一化 $$x_{\text{norm}} = \frac{x - \mu}{\sigma}$$ ($\mu$为均值,$\sigma$为标准差) 4. **数据集划分** - 训练集(60-80%)、验证集(10-20%)、测试集(10-20%)。 --- ### **三、模型设计与选择** 1. **架构选择** - 图像任务:CNN(ResNet、EfficientNet) - 序列任务:RNN/LSTM/Transformer - 生成任务:GAN、Diffusion Models 2. **损失函数设计** - 分类:交叉熵损失 $$L = -\sum_{i=1}^n y_i \log(p_i)$$ - 目标检测:Focal Loss(解决类别不平衡) 3. **优化器选择** - Adam(自适应学习率)、SGD(需手动调参)。 --- ### **四、模型训练与调优** 1. **超参数初始化** - 学习率(0.001-0.1)、批量大小(32-256)、正则化系数。 2. **训练过程监控** - 观察训练集损失下降与验证集精度,检测过拟合(训练损失↓但验证损失↑)。 3. **正则化技术** - Dropout(随机屏蔽神经元)、L2正则化 $$L_{\text{total}} = L + \lambda \sum w_i^2$$ 4. **早停(Early Stopping)** - 验证集性能连续N次不提升时终止训练。 --- ### **五、模型评估与验证** 1. **测试集评估** - 避免使用验证集调参后的测试集污染。 2. **混淆矩阵分析** - 精确率、召回率、特异性等细粒度指标。 3. **可解释性工具** - Grad-CAM(可视化CNN关注区域)、LIME(局部特征重要性)。 --- ### **六、模型部署与维护** 1. **模型压缩** - 量化(FP32→INT8)、剪枝(移除冗余参数)、知识蒸馏(小模型模仿大模型)。 2. **部署方式** - 云端API(高并发)、边缘设备(低延迟,如TensorRT加速)。 3. **持续监控** - 数据漂移检测(输入分布变化)、模型性能衰减预警。 --- ### **七、经典案例流程示例** #### **图像分类任务** 1. 数据:CIFAR-10(6万张32×32图片,10类) 2. 模型:ResNet-18 3. 训练:Adam优化器,学习率0.001,批量大小128 4. 部署:通过ONNX转换为移动端格式,集成到APP中 --- ### **关键挑战与解决方案** | **问题** | **应对方法** | |-------------------|----------------------------------| | 数据不足 | 数据增强、迁移学习(预训练模型) | | 过拟合 | Dropout、早停、数据增强 | | 训练速度慢 | 混合精度训练、
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tang5618

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值