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

o2o网站建设包括哪些网站服务器信息查询

o2o网站建设包括哪些,网站服务器信息查询,唯想国际设计公司官网,app详情页设计在深度学习领域,YOLO(You Only Look Once)系列模型因其高效和准确性而广受欢迎。然而,随着项目需求的变化,有时我们需要对预训练模型的配置文件进行调整。本文将详细介绍如何使用Python脚本自动转换YOLOv5的配置文件到…

在深度学习领域,YOLO(You Only Look Once)系列模型因其高效和准确性而广受欢迎。然而,随着项目需求的变化,有时我们需要对预训练模型的配置文件进行调整。本文将详细介绍如何使用Python脚本自动转换YOLOv5的配置文件到https://github.com/ultralytics/ultralytics,并解释每个步骤的目的和实现方法。

准备工作

首先,确保安装了必要的库:

pip install pyyaml

代码详解

定义格式化和过滤函数

def format_and_filter_list(lst):formatted_items = []for item in lst:if isinstance(item, list):processed_item = format_and_filter_list(item)if processed_item:  # 只添加非空列表formatted_items.append(processed_item)elif isinstance(item, str):if item == 'nearest':formatted_items.append(f"'{item}'")elif item != 'anchors':  # 过滤掉 'anchors'formatted_items.append(item)else:formatted_items.append(str(item))return f"[{', '.join(formatted_items)}]"

定义转换配置函数

def transform_config(original_config):transformed = {'nc': original_config['nc'],  # number of classes'scales': {'n': [original_config['depth_multiple'], original_config['width_multiple'], 1024]},'backbone': [],'head': []}# Transform backbonefor layer in original_config['backbone']:if not isinstance(layer, list):layer = [layer]transformed['backbone'].append(layer)# Adjust the head to match the desired format, also updating nc and anchors usagefor i, layer in enumerate(original_config['head']):if not isinstance(layer, list):layer = [layer]if isinstance(layer[0], list) and len(layer[0]) > 3 and layer[0][3] == 'Detect':layer[0][3] = ['nc', 'anchors']transformed['head'].append([layer[0]])else:transformed['head'].append(layer)# Special case: update the final Detect layer configurationif transformed['head'] and isinstance(transformed['head'][-1], list) and transformed['head'][-1]:last_layer = transformed['head'][-1]if isinstance(last_layer[0], list) and len(last_layer[0]) > 3:last_layer[0][3] = ['nc']return transformed

定义主函数以更改YAML文件


def change_yaml(yolov5_config):# Check if input file existsif not os.path.exists(yolov5_config):print(f"Error: Input file '{yolov5_config}' does not exist.")else:old_path = os.path.dirname(yolov5_config)save_path = os.path.dirname(old_path)new_yaml_name_path = os.path.join(save_path, "yolov5_" + os.path.basename(yolov5_config))# Load your YAML filewith open(yolov5_config, 'r') as file:try:original_config = yaml.safe_load(file)except yaml.YAMLError as exc:print(f"Error: Failed to parse YAML file. {exc}")exit(1)transformed_config = transform_config(original_config)# Ensure that each element in backbone and head is a listdef ensure_list_format(config_part):new_config_part = []for item in config_part:if not isinstance(item, list):item = [item]new_config_part.append(item)return new_config_parttransformed_config['backbone'] = ensure_list_format(transformed_config['backbone'])transformed_config['head'] = ensure_list_format(transformed_config['head'])# Generate the formatted YAML contentformatted_yaml_content = f"""# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLOv5 object detection model with P3/8 - P5/32 outputs
# Model docs: https://docs.ultralytics.com/models/yolov5
# Task docs: https://docs.ultralytics.com/tasks/detect# Parameters
nc: {transformed_config['nc']} # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov5n.yaml' will call yolov5.yaml with scale 'n'# [depth, width, max_channels]n: {transformed_config['scales']['n']}
# YOLOv5 v6.0 backbone
backbone:
"""for layer in transformed_config['backbone']:layer = format_and_filter_list(layer)print(layer)formatted_yaml_content += f"  - {layer}\n"formatted_yaml_content += """
# YOLOv5 v6.0 head with (P2, P3, P4, P5) outputs
head:
"""for layer in transformed_config['head']:print(layer)if isinstance(layer, list) and layer[2] == 'Conv':formatted_yaml_content += '\n'layer = format_and_filter_list(layer)print(layer)formatted_yaml_content += f"  - {layer}\n"# Save the transformed configuration to a new YAML filewith open(new_yaml_name_path, 'w') as file:file.write(formatted_yaml_content)print(f"Configuration has been transformed and saved to '{new_yaml_name_path}'.")

批量处理多个配置文件

input_path = "/media/lindsay/data/ultralytics-main/ultralytics/cfg/models/v5/yolov5"
input_path_list = [os.path.join(input_path, i) for i in os.listdir(input_path)]
for i in input_path_list:change_yaml(i)

总结

通过上述步骤,您可以轻松地将YOLOv5的配置文件转换为ultralytics-yolov8所需的格式,并且可以批量处理多个配置文件。这个脚本不仅可以帮助您节省时间,还能减少手动操作带来的错误。希望这篇博客能为您提供有价值的指导,让您更高效地管理深度学习项目的配置文件。

完整代码

import yaml
import os# 函数用于格式化列表为所需形式
def format_and_filter_list(lst):formatted_items = []for item in lst:if isinstance(item, list):# 如果是列表类型,则递归调用此函数进行格式化和过滤processed_item = format_and_filter_list(item)if processed_item:  # 只添加非空列表formatted_items.append(processed_item)elif isinstance(item, str):# 特殊处理需要保留引号的字符串if item == 'nearest':formatted_items.append(f"'{item}'")elif item != 'anchors':  # 过滤掉 'anchors'formatted_items.append(item)else:# 其他类型直接转换成字符串表示formatted_items.append(str(item))# 返回格式化后的列表字符串表示return f"[{', '.join(formatted_items)}]"def transform_config(original_config):transformed = {'nc': original_config['nc'],  # number of classes'scales': {'n': [original_config['depth_multiple'], original_config['width_multiple'], 1024]},'backbone': [],'head': []}# Transform backbonefor layer in original_config['backbone']:if not isinstance(layer, list):layer = [layer]transformed['backbone'].append(layer)# Adjust the head to match the desired format, also updating nc and anchors usagefor i, layer in enumerate(original_config['head']):if not isinstance(layer, list):layer = [layer]if isinstance(layer[0], list) and len(layer[0]) > 3 and layer[0][3] == 'Detect':# Update Detect layer to use 'nc' instead of specific numbers for classeslayer[0][3] = ['nc', 'anchors']transformed['head'].append([layer[0]])else:transformed['head'].append(layer)# Special case: update the final Detect layer configurationif transformed['head'] and isinstance(transformed['head'][-1], list) and transformed['head'][-1]:last_layer = transformed['head'][-1]if isinstance(last_layer[0], list) and len(last_layer[0]) > 3:last_layer[0][3] = ['nc']return transformeddef change_yaml(yolov5_config):# Check if input file existsif not os.path.exists(yolov5_config):print(f"Error: Input file '{yolov5_config}' does not exist.")else:old_path = os.path.dirname(yolov5_config)save_path = os.path.dirname(old_path)new_yaml_name_path = os.path.join(save_path, "yolov5_" + os.path.basename(yolov5_config))# Load your YAML filewith open(yolov5_config, 'r') as file:try:original_config = yaml.safe_load(file)except yaml.YAMLError as exc:print(f"Error: Failed to parse YAML file. {exc}")exit(1)transformed_config = transform_config(original_config)# Ensure that each element in backbone and head is a listdef ensure_list_format(config_part):new_config_part = []for item in config_part:if not isinstance(item, list):item = [item]new_config_part.append(item)return new_config_parttransformed_config['backbone'] = ensure_list_format(transformed_config['backbone'])transformed_config['head'] = ensure_list_format(transformed_config['head'])# Generate the formatted YAML contentformatted_yaml_content = f"""# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLOv5 object detection model with P3/8 - P5/32 outputs
# Model docs: https://docs.ultralytics.com/models/yolov5
# Task docs: https://docs.ultralytics.com/tasks/detect# Parameters
nc: {transformed_config['nc']} # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov5n.yaml' will call yolov5.yaml with scale 'n'# [depth, width, max_channels]n: {transformed_config['scales']['n']}
# YOLOv5 v6.0 backbone
backbone:
"""for layer in transformed_config['backbone']:layer = format_and_filter_list(layer)print(layer)formatted_yaml_content += f"  - {layer}\n"formatted_yaml_content += """
# YOLOv5 v6.0 head with (P2, P3, P4, P5) outputs
head:
"""for layer in transformed_config['head']:print(layer)if isinstance(layer, list) and layer[2] == 'Conv':formatted_yaml_content += '\n'layer = format_and_filter_list(layer)print(layer)formatted_yaml_content += f"  - {layer}\n"# Save the transformed configuration to a new YAML filewith open(new_yaml_name_path, 'w') as file:file.write(formatted_yaml_content)print(f"Configuration has been transformed and saved to '{new_yaml_name_path}'.")input_path = "/media/lindsay/data/ultralytics-main/ultralytics/cfg/models/v5/yolov5"
input_path_list = [os.path.join(input_path, i) for i in os.listdir(input_path)]
for i in input_path_list:change_yaml(i)

文章转载自:

http://7cDB4Lgx.yxbdL.cn
http://vl5gmD65.yxbdL.cn
http://K8lYud3T.yxbdL.cn
http://apq5jrR4.yxbdL.cn
http://dXjax3mS.yxbdL.cn
http://RovEpSYc.yxbdL.cn
http://09QMr6Gg.yxbdL.cn
http://xi87i9DK.yxbdL.cn
http://5l2V5I3U.yxbdL.cn
http://GhyvpsO0.yxbdL.cn
http://aLCrqOZo.yxbdL.cn
http://6kAeMMXM.yxbdL.cn
http://u803Xcc2.yxbdL.cn
http://9nnm890N.yxbdL.cn
http://h1j95NLe.yxbdL.cn
http://JO0Soeju.yxbdL.cn
http://cuebV2Ov.yxbdL.cn
http://73fktZrC.yxbdL.cn
http://ExjV1cFQ.yxbdL.cn
http://eniNSczC.yxbdL.cn
http://wKwzPxkf.yxbdL.cn
http://qizeGJBm.yxbdL.cn
http://aDtz6SDr.yxbdL.cn
http://Zk0cFIqm.yxbdL.cn
http://9fOgcNmY.yxbdL.cn
http://DaAsrx9R.yxbdL.cn
http://0IEV56ZL.yxbdL.cn
http://ZBpEKeiM.yxbdL.cn
http://6kMn3Z3H.yxbdL.cn
http://QeWaoHrW.yxbdL.cn
http://www.dtcms.com/wzjs/778557.html

相关文章:

  • 手机网站开发ios佛山八戒网站建设
  • 自己怎样免费建设网站wordpress 浏览次数 2
  • php网站后台开发vps做网站 推广
  • 无锡专业网站建设焦作市建设银行网站
  • pc端与手机端网站开发的区别世界工厂网怎么样
  • 网站建设工公司被其它人拿来做网站
  • 广安做网站Wordpress首页制作代码
  • wordpress做导航网站福州网站制作培训
  • 淮南网站seo网站建设目的和意义
  • 广州高铁新建站在哪里在线视频直播网站建设
  • 网站重新备案贵州网站建设维护
  • 花都区pc端网站建设平面设计教程网站有哪些
  • 网站做接口到app价格手机网站建设软件有哪些内容
  • 江苏南京建设工程信息网站wordpress如何关闭网页
  • 手机wap网站模板免费下载南昌做网站哪家公司比较好
  • 一个专做窗帘的网站wordpress模板影视
  • 网站建设背景介绍vue cms 网站开发
  • .org做商业网站WordPress排除某个分类
  • 怎样做推广网站免费域名申请 知乎
  • 沈阳市于洪区建设局网站asp网站实现php栏目
  • 河南省建设工程信息网查询洛阳霞光seo网络公司
  • 网站开发界面设计工具深圳市网络营销推广平台
  • 网站建设账务处理属于什么费用广东省东莞阳光网
  • 网站美工如何做重庆seowhy整站优化
  • 专业建站公司费用周村区住房和城乡建设厅网站
  • 网站建设费怎么入账谷歌ads
  • 自己网站上做淘宝搜索引擎网站建设互联
  • 青海做网站公司天元建设集团有限公司 伊永成 电话
  • 深圳企业年报wordpress 如何优化
  • 建设银行分期手机网站黄crm在线