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

网站建设及规划方案十大进口跨境电商平台

网站建设及规划方案,十大进口跨境电商平台,网络项目,对门户网站建设情况的报告项目背景 钢铁厂生产钢筋的过程中会存在部分钢筋长度超限的问题#xff0c;如果不进行处理#xff0c;容易造成机械臂损伤。因此#xff0c;需要通过质检流程#xff0c;筛选出存在长度超限问题的钢筋批次#xff0c;并进行预警。传统的处理方式是人工核查#xff0c;该方… 项目背景 钢铁厂生产钢筋的过程中会存在部分钢筋长度超限的问题如果不进行处理容易造成机械臂损伤。因此需要通过质检流程筛选出存在长度超限问题的钢筋批次并进行预警。传统的处理方式是人工核查该方式一方面增加了人工成本降低了生产效率另一方面也要求工人师傅对业务比较熟练能够准确地判断钢筋长度是否超限且该方法可能存在一定的误判率。在AI时代利用深度学习技术可以实现端到端全自动的钢筋长度超限监控从而降低人工成本提高生产效率。整体技术方案可以归纳为如下步骤 在钢筋一侧安装摄像头拍摄图像 利用图像分割技术提取钢筋掩膜 根据摄像头位置和角度确定长度界限 最后根据该长度界限和钢筋分割范围的几何关系判断本批次钢筋是否超限。 钢筋长度超限监控整体流程 钢筋超限监控问题可以转换为图像分割后的几何判断问题。为了实现图像分割我们使用提供了全流程分割方案的飞桨图像分割套件 PaddleSeg只需简单地修改配置文件就可以进行模型训练获得高精度的分割效果。进一步地我们挑选使用精度和速度平衡的 PP-LiteSeg 模型保证在实现高精度的同时满足工业部署的要求。 安装环境 使用 PaddleSeg 套件我们需要准备如下环境 Python 3.6 飞桨框架 2.1 PaddleSeg 接下来使用如下命令安装 PaddleSeg 以及相应的依赖 git clone --branch release/2.6 --depth 1 https://gitee.com/PaddlePaddle/PaddleSeg.git cd PaddleSeg pip install -r requirements.txt数据处理 由于钢筋长度超限检测数据集是使用图像标注工具 LabelMe 标注的其数据格式与 PaddleSeg 支持的格式不同因此可借助 PaddleSeg 中 tools 目录下的脚本 labelme2seg.py将 LabelMe 格式标注转换成 PaddleSeg 支持的格式。 python tools/labelme2seg.py ~/data/dataset 接下来使用 PaddleSeg 提供的脚本split_dataset_list.py将数据集划分为训练集、验证集和测试集。 python tools/split_dataset_list.py ~/data/dataset . annotations --split 0.7 0.15 0.15 模型训练 此处我们选择轻量级语义分割模型 PP-LiteSeg 模型对钢筋进行分割。具体介绍可参考 PP-LiteSeg 的 README 说明文件。 说明文件链接 https://github.com/PaddlePaddle/PaddleSeg/tree/release/2.7/configs/pp_liteseg 为了在自定义数据集上使用 PP-LiteSeg 模型需要对 PaddleSeg 提供的默认配置文件PaddleSeg/configs/pp_liteseg/pp_liteseg_stdc1_cityscapes_1024x512_scale0.5_160k.yml进行轻微修改。 如下所示添加自定义数据集路径、类别数等信息 batch_size: 4  # total: 4*4 iters: 2000optimizer:type: sgdmomentum: 0.9weight_decay: 5.0e-4lr_scheduler:type: PolynomialDecayend_lr: 0power: 0.9warmup_iters: 100warmup_start_lr: 1.0e-5learning_rate: 0.005loss:types:- type: OhemCrossEntropyLossmin_kept: 130000   # batch_size * 1024 * 512 // 16- type: OhemCrossEntropyLossmin_kept: 130000- type: OhemCrossEntropyLossmin_kept: 130000coef: [1, 1, 1]train_dataset:type: Datasetdataset_root: /home/aistudio/data/datasettrain_path: /home/aistudio/data/dataset/train.txtnum_classes: 2transforms:- type: ResizeStepScalingmin_scale_factor: 0.125max_scale_factor: 1.5scale_step_size: 0.125- type: RandomPaddingCropcrop_size: [1024, 512]- type: RandomHorizontalFlip- type: RandomDistortbrightness_range: 0.5contrast_range: 0.5saturation_range: 0.5- type: Normalizemode: trainval_dataset:type: Datasetdataset_root: /home/aistudio/data/datasetval_path: /home/aistudio/data/dataset/val.txtnum_classes: 2transforms:- type: Normalizemode: valtest_config:aug_eval: Truescales: 0.5model:type: PPLiteSegbackbone:type: STDC1pretrained: https://bj.bcebos.com/paddleseg/dygraph/PP_STDCNet1.tar.gzarm_out_chs: [32, 64, 128]seg_head_inter_chs: [32, 64, 64] 接下来开始执行训练 python3 train.py --config /home/aistudio/work/pp_liteseg_stdc1.yml \--use_vdl \--save_dir output/mask_iron \--save_interval 500 \--log_iters 100 \--num_workers 8 \--do_eval \--keep_checkpoint_max 10 使用 PaddleSeg 训练过程中可能会出现报错例如one_hot_kernel 相关的报错: Error: /paddle/paddle/phi/kernels/gpu/one_hot_kernel.cu:38 Assertion p_in_data[idx]  0  p_in_data[idx]  depth failed. Illegal index value, Input(input) value should be greater than or equal to 0, and less than depth [1], but received [1]. 这里需要注意类别是否正确设置考虑背景类是否添加。one_hot_kernel 另一种报错: Error: /paddle/paddle/phi/kernels/gpu/one_hot_kernel.cu:38 Assertion p_in_data[idx]  0  p_in_data[idx]  depth failed. Illegal index value, Input(input) value should be greater than or equal to 0, and less than depth [5], but received [-1]. 此时需要注意 mask 中标签是否超过 [0, num_classes 1] 的范围。训练完成后可使用模型评估脚本对训练好的模型进行评估 python val.py \--config /home/aistudio/work/pp_liteseg_stdc1.yml \--model_path output/mask_iron/best_model/model.pdparams 输出结果为 2023-03-06 11:22:09 [INFO]    [EVAL] #Images: 32 mIoU: 0.9858 Acc: 0.9947 Kappa: 0.9857 Dice: 0.9928 2023-03-06 11:22:09 [INFO]    [EVAL] Class IoU:  [0.993  0.9787] 2023-03-06 11:22:09 [INFO]    [EVAL] Class Precision:  [0.9969 0.9878] 2023-03-06 11:22:09 [INFO]    [EVAL] Class Recall:  [0.996  0.9906] 由评估输出可见模型性能为 mIoU:0.9858Acc:0.9947能够满足实际工业场景需求。 模型预测 使用 predict.py 可用来查看具体样本的切割样本效果。 python predict.py \--config /home/aistudio/work/pp_liteseg_stdc1.yml \--model_path output/mask_iron/best_model/model.pdparams \--image_path /home/aistudio/data/dataset/ec539f77-7061-4106-9914-8d66f450234d.jpg \--save_dir output/result 预测的结果如下所示。 import matplotlib.pyplot as plt import cv2 im  cv2.imread(/home/aistudio/work/PaddleSeg/output/result/pseudo_color_prediction/ec539f77-7061-4106-9914-8d66f450234d.png) # cv2.imshow(result, im) plt.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB)) plt.figure() im  cv2.imread(/home/aistudio/work/PaddleSeg/output/result/added_prediction/ec539f77-7061-4106-9914-8d66f450234d.jpg) plt.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB)) 接下来利用预测的结果并采用最大联通域处理后判断钢筋是否超限。 import cv2def largestcomponent(img_path, thresholdNone):Filter the input image_path with threshold, only component that have area larger than threshold will be kept.Arg:img_path: path to a binary imgthreshold: connected componet with area larger than this value will be keptbinary  cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)binary[binary  binary.min()]  0binary[binary  binary.max()]  255assert (binary.max()  255 and binary.min()  0), The input need to be a binary image, but the maxval in image is {} and the minval in image is {}.format(binary.max(), binary.min())if threshold is None:threshold  binary.shape[0] * binary.shape[1] * 0.01contours, hierarchy  cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)for k in range(len(contours)):if cv2.contourArea(contours[k])  threshold:cv2.fillPoly(binary, [contours[k]], 0)cv2.imwrite(img_path.split(.)[0]  _postprocessed.png, binary) ‍ 此处我们可以对比最大联通域处理前后的差别可以发现滤除了小的联通区域。 prediction  /home/aistudio/work/PaddleSeg/output/result/pseudo_color_prediction/ec539f77-7061-4106-9914-8d66f450234d.png # prediction  /home/aistudio/work/PaddleSeg/output/result/pseudo_color_prediction/20220705-153804.png largestcomponent(prediction) before_image  cv2.imread(prediction) after_image  cv2.imread(prediction.replace(.png, _postprocessed.png)) plt.subplot(1, 2, 1) plt.imshow(cv2.cvtColor(before_image, cv2.COLOR_BGR2RGB)) plt.subplot(1, 2, 2) plt.imshow(cv2.cvtColor(after_image, cv2.COLOR_BGR2RGB)) plt.show() 判断钢筋是否超限 def excesslimit(image_path, directionright, position0.6):Automatically tells if the steel bar excess manually set position.Arg:img_path: path to a binary imgdirection: which part of the img is the focused area for detecting bar excession.position: the ratio of the position of the line to the width of the image.Return:excess: whether there is steel wheel excess the limit line.excess_potion: the portion of the excess steel bar to the whole bar.excess_portion  0.0binary  cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)binary[binary  binary.min()]  0binary[binary  binary.max()]  255assert (binary.max()  255 and binary.min()  0), The input need to be a binary image, but the maxval in image is {} and the minval in image is {}.format(binary.max(), binary.min())assert (direction  left or direction  right), The direction indicates the side of image that iron excess, it should be right or left, but we got {}.format(direction)assert (position  0 and position  1), The position indicates the relative position to set the line, it should bigger than 0 and smaller than 1, but we got {}.format(position)img_pos  int(binary.shape[1] * position)if direction  right:if binary[:, img_pos:].sum()  0:excess_portion  binary[:, img_pos:].sum() / binary.sum()binary[:, img_pos : img_pos  3]  255else:if binary[:, :img_pos].sum()  0:excess_portion  binary[:, :img_pos].sum() / binary.sum()binary[:, img_pos - 3 : img_pos]  255print(The iron is {}excessed in {}, and the excess portion is {}.format([, not ][excess_portion  0], image_path, excess_portion))# cv2.imwrite(image_path.split(.)[0]  _fullpostprocessed.png, binary)cv2.imwrite(image_path.replace(_postprocessed.png, _fullpostprocessed.png), binary)return excess_portion  0, excess_portion 对预测结果批量判断是否超限。 import os import globoutput_dir  /home/aistudio/work/PaddleSeg/output pseudo_color_result  os.path.join(output_dir, result/pseudo_color_prediction) os.system(frm {pseudo_color_result}/*_*postprocessed.*) for img_path in glob.glob(os.path.join(pseudo_color_result, *.png)):largestcomponent(img_path)postproc_img_path  img_path.replace(.png, _postprocessed.png) excesslimit(postproc_img_path, left, 0.3) 可视化后处理结果。 im  cv2.imread(/home/aistudio/work/PaddleSeg/output/result/pseudo_color_prediction/ec539f77-7061-4106-9914-8d66f450234d_fullpostprocessed.png) # cv2.imshow(result, im) plt.imshow(im)   模型推理与部署 我们可以选择使用飞桨原生推理库 Paddle Inference 推理。首先将训练好的模型导出为 Paddle Inference 模型。 export CUDA_VISIBLE_DEVICES0 # Set a usable GPU. # If on windows, Run the following command # set CUDA_VISIBLE_DEVICES0 python export.py \--config /home/aistudio/work/pp_liteseg_stdc1.yml \--model_path output/mask_iron/best_model/model.pdparams \--save_dir output/inference 接下来使用推理模型预测。 python deploy/python/infer.py \--config output/inference/deploy.yaml \--save_dir output/infer_result \--image_path /home/aistudio/data/dataset/bcd33bcd-d48c-4409-940d-51301c8a7697.jpg 最后根据模型输出判断钢筋是否超限可视化判断结果。 img_path  /home/aistudio/work/PaddleSeg/output/infer_result/bcd33bcd-d48c-4409-940d-51301c8a7697.png largestcomponent(img_path) postproc_img_path  img_path.replace(.png, _postprocessed.png) excesslimit(postproc_img_path, right, 0.5) img_path  /home/aistudio/work/PaddleSeg/output/infer_result/bcd33bcd-d48c-4409-940d-51301c8a7697_fullpostprocessed.png im  cv2.imread(img_path) plt.imshow(im) 我们也可以使用 FastDeploy 进行部署。FastDeploy 是一款全场景、易用灵活、极致高效的AI推理部署工具。其提供开箱即用的云边端部署体验支持超过160个文本、视觉、语音和跨模态模型并可实现端到端的推理性能优化。此外其还可实现包括图像分类、物体检测、图像分割、人脸检测、人脸识别、关键点检测、抠图、OCR、NLP和TTS等任务满足开发者多场景、多硬件、多平台的产业部署需求。 通过如下命令就可以非常方便地安装 FastDeploy。 pip install fastdeploy-gpu-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy.html 使用 FastDeploy 进行预测也十分简单 import fastdeploy as fd model_file  /home/aistudio/work/PaddleSeg/output/inference/model.pdmodel params_file  /home/aistudio/work/PaddleSeg/output/inference/model.pdiparams infer_cfg_file  /home/aistudio/work/PaddleSeg/output/inference/deploy.yaml# 模型推理的配置信息 option  fd.RuntimeOption() model  fd.vision.segmentation.PaddleSegModel(model_file, params_file, infer_cfg_file, option) # 预测结果 import cv2 img_path  /home/aistudio/data/dataset/8f7fcf0a-a3ea-41f2-9e67-4cbaa61238a4.jpg im  cv2.imread(img_path) result  model.predict(im) print(result) 我们也可以使用 FastDeploy 提供的可视化函数进行可视化。 import matplotlib.pyplot as plt vis_im  fd.vision.visualize.vis_segmentation(im, result, 0.5) plt.imshow(cv2.cvtColor(vis_im, cv2.COLOR_BGR2RGB)) 接下来判断钢筋是否超限为了便于演示兼容上面的判断接口。此处将结果导出为mask图片。 import numpy as np mask  np.reshape(result.label_map, result.shape) mask  np.uint8(mask) mask_path  /home/aistudio/work/PaddleSeg/output/infer_result/mask.png cv2.imwrite(mask_path, mask) # print(mask_path) largestcomponent(mask_path) post_img_path  mask_path.replace(.png, _postprocessed.png) # print(post_img_path) excesslimit(post_img_path, right, 0.7) # 可视化判断结果 im_path  /home/aistudio/work/PaddleSeg/output/infer_result/mask_fullpostprocessed.png im  cv2.imread(im_path) plt.imshow(im) 结论 本项目演示了如何在实际工业场景下使用 PaddleSeg 开发套件进行语义分割模型训练并使用 FastDeploy 进行部署应用解决钢筋长度超限的自动监控问题。结果证明本技术方案切实可行可实现端到端全自动的钢筋长度超限监控为企业生产降本增效。希望本应用范例可以给各行业从业人员和开发者带来有益的启发。
http://www.dnsts.com.cn/news/84052.html

相关文章:

  • 网站如何提高排名自己做网站需要买哪些
  • 关于网站建设wordpress 生成html代码
  • 青岛网站集约化管理平台与恶魔做交易的网站
  • 网站建设贵1元涨1000粉丝网站
  • 简单三栏网站传媒公司做网站编辑_如何?
  • 西部数码网站管理助手4.0 破解版高青外贸公司网站建设
  • 深圳网站建设怎样轻量级wordpress主题
  • 百度 模块网站做铝材的网站
  • 城乡建设部网站首页哈尔滨网站建设吕新松
  • 私人做网站的流程郑州网络营销外包顾问
  • 网站开发亿玛酷技术寓意前程远大的公司名字
  • 怎么样建立学校网站襄阳网站建设的公司
  • 哈尔滨网站建设口碑好建站平台的服务产品分析
  • 网架公司排名西安优化网站技术
  • 门户网站的三大基本特征网站建设 wix
  • 公司做网站一般多少钱微信小程序游戏开发教程
  • html婚纱网站源码做网站爱游戏
  • 烟台网站搭建基于h5的个人网站建设
  • 搭设企业网站教程建筑方案设计案例
  • 如何用dw做网站地图ios开发者网站
  • 网站管理手册河南省建设厅网站103号文件
  • 免费的网站申请口腔建立网站
  • 品牌网查询网站优化关键词排名怎么做
  • 网站收录平台方法做网站申请个体户
  • 小程序模板好还是源码好三明网站优化
  • 餐饮o2o 网站建设微博网站建设
  • 网站绝对路径wordpress文章点赞
  • 宿州网站建设网站帮朋友做网站
  • 做网站的空间费用要多少贾汪网架公司
  • 高端人才做兼职的招聘网站有哪些简单网页模板代码