MM32搭建服务器——网页跳转和自动提交表单

Foreword

又是一周啦,今天周日,真的蛮烦调休的,前后都累成狗。在鼻窦炎的折磨下,这三天过的太不好了,不戴耳钉不涂口红不打扮不养花不烧饭,脾气也很差,特别想小林。

网页自动跳转

因为我想通过网页是否登录的状态来判断是直接进入主页呢,还是进入登录页面,所以我在主页上设置了根据状态来判断是否自动跳转到登录页面的功能。

今天这一篇文章还是基于SSI和CGI接口的,所以关于SSI和CGI可以参考「Rose Island」MM32搭建Web服务器——SSI和CGI接口

实现方法如下,location.href可以跳转到指定的URL页面:

<head>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8">
    <title>Mindmotion MM32 UART to Ethernet Gateway</title>
    <script>
        var state = "<!--#state-->";	//SSI接口
        if (state == "0") {
            javascript: location.href = 'login.shtm';
        }
    </script>
</head>

关于页面跳转有很多种不同的效果,因为没有深入研究过,这里就不详述啦。

网页超链接

不过可以写一下超链接的方法,一般来说超链接默认地是新页面覆盖当前页面,在这个项目里面我想要点击超链接之后打开一个新的窗口页面,方法如下:

<a href="http://www.mindmotion.com.cn/" target="_blank">灵动官网</a>

超链接打开方式的不同主要在于target属性:

targetfunction
_self默认值。在当前的框架中打开超链接文档
_blank在新窗口页面中打开超链接文档
_parent在父框架中打开超链接文档
_top在整个窗口中打开超链接文档
frameName用于frame框架中,打开超链接文档到制定的框架中

网页自动提交表单

在项目中我设定了退出登录的超链接,点击之后会跳转到登录页面并且刷新登录状态为0,所以我在登录页面上想做一个自动提交表单的功能,可以自动刷新登录状态。

关于表单GET&POST提交的方法,可以参考「Rose Island」MM32搭建Web服务器——POST指令

实现方法如下,当页面打开的时候就执行changeLoginState()函数,通过.submitform里的内容提交给CGI:

<body onload="changeLoginState()">
    <form id="changeStateFormId" action="changeState.cgi" method="POST" name="changeState" style="display:none">
        <input type="hidden" name="state" value="0">
    </form>

    <form action="login.cgi" method="POST" name="login">
        <label>
            <h1>用户账号登录</h1>
            <hr><br><br>
        </label>
        <div id="login">&nbsp;&nbsp;号:<input type="text" placeholder="请输入账号名" name="username" required><br><br>&nbsp;&nbsp;码:<input type="password" placeholder="请输入密码" name="password" required><br><br><br>
            <input id="submit" type="submit" name="checkinSubmit" value="登  录">
        </div>
    </form>
    <script>
        function changeLoginState(){
            var stateValue = "<!--#state-->";
            if(stateValue == "1"){
            	var form = document.getElementById("changeStateFormId");
            	form.submit();
            }
        }
    </script>
</body>

The End

可能毕业了之后真的开始畏手畏脚,曾经的我可以毅然决然地对更好的机会说不,只想去做自己想做的事,可以放弃考研去考TG,我现在在怕什么,在顾虑什么。上班快一年了,之前一直都觉得我上班就是玩玩的,大不了就辞职回去读书,原本以为的一年工作体验期现在要开始续期,整个人就很烦躁,不再潇潇洒洒。

下周一切都会好起来的!

<think>嗯,用户想在阿里云平台上训练YOLO模型,我得先理清楚步骤。首先,用户可能对阿里云的服务不太熟悉,所以需要介绍创建实例的流程。根据引用[2],阿里云的PAI平台有交互式建模(DSW),这里可能需要指导用户如何新建实例,选择适合的镜像。CUDA版本是关键,比如YOLOv8可能需要CUDA 11.x,所以镜像的选择要对应。 然后,环境配置方面,用户需要安装Python、PyTorch、Ultralytics库等。用户可能不太清楚如何在新实例中安装这些依赖,要给出具体的pip命令。同时,数据准备部分,用户的数据可能存放在本地或者OSS,需要指导他们如何上传和组织目录结构,比如数据集目录的结构和yaml文件的配置。 训练阶段,用户可能需要示例代码,特别是如何调用YOLO的训练接口。这里需要提供一个简单的脚本,并说明参数调整的注意事项,比如批次大小和epoch数。另外,用户可能会遇到显存不足的问题,可能需要提示他们如何调整批次大小或者使用分布式训练。 模型验证和部署部分,用户训练完成后需要测试模型性能,可能需要加载最佳权重进行推理。部署方面,用户可能关心如何导出模型到ONNX格式,以及如何部署到生产环境,比如使用Flask创建API服务。 最后,优化建议也很重要,比如数据增强、超参数调优和混合精度训练,这些都能帮助用户提升模型效果。同时,用户可能会遇到环境配置错误或者路径问题,需要提醒他们检查CUDA版本和文件路径是否正确。 整体来说,步骤需要分阶段,从创建实例到环境配置、数据准备、训练、验证和部署,每个环节都要简明扼要,避免用户遗漏关键步骤。同时,结合引用中的信息,确保引用阿里云的相关操作准确,比如DSW实例的使用和镜像选择。还要考虑用户可能遇到的问题,提前给出解决方案,比如显存不足时的调整方法。</think>### 在阿里云平台上训练YOLO模型的步骤 #### 1. **创建阿里云PAI实例** - 进入阿里云控制台,选择**人工智能平台PAI**,点击**交互式建模(DSW)**新建实例[^2]。 - 在镜像选择时,建议使用预装CUDA的深度学习镜像(例如:PyTorch 1.12 + CUDA 11.6),确保兼容YOLO框架需求。 #### 2. **配置训练环境** ```bash # 进入实例后,新建Python环境(例如conda) conda create -n yolo_env python=3.8 conda activate yolo_env # 安装YOLO依赖库(以Ultralytics YOLOv8为例) pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116 pip install ultralytics ``` #### 3. **准备数据集** - 将标注好的数据集(COCO或YOLO格式)上传至实例的存储空间(如OSS挂载或直接上传)。 - 数据集目录结构示例: ``` /dataset ├── train │ ├── images │ └── labels └── val ├── images └── labels ``` - 创建数据集配置文件`dataset.yaml`: ```yaml train: /dataset/train/images val: /dataset/val/images nc: 80 # 类别数 names: ['class1', 'class2', ...] ``` #### 4. **启动训练** ```python from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov8n.pt') # 例如YOLOv8n # 开始训练 results = model.train( data='dataset.yaml', epochs=100, imgsz=640, batch=16, device='0' # 使用GPU ) ``` - **关键参数**: - `batch`:根据GPU显存调整(阿里云GPU实例如V100可设置`batch=32`)。 - `workers`:数据加载线程数,建议设置为CPU核心数的70%。 #### 5. **模型验证与导出** ```python # 验证模型精度 metrics = model.val() # 导出为ONNX格式(便于部署) model.export(format='onnx') ``` #### 6. **部署模型** - 将导出的模型(如`yolov8n.onnx`)部署到阿里云ECS或函数计算(FC),通过API提供服务。 - 示例部署代码(Flask): ```python from flask import Flask, request, jsonify import cv2 from ultralytics import YOLO app = Flask(__name__) model = YOLO('yolov8n.onnx') @app.route('/predict', methods=['POST']) def predict(): image = request.files['image'].read() results = model(image) return jsonify(results[0].boxes.data.tolist()) ``` ### §§ 1. **显存不足**:若训练时报错`CUDA out of memory`,需降低`batch`值或使用更小的模型(如`yolov8n`→`yolov8s`)。 2. **数据集路径**:确保`dataset.yaml`中的路径与实际存储路径一致[^1]。 3. **混合精度训练**:添加参数`amp=True`可加速训练并减少显存占用。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值