- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
。
。
。
。
。
。
。
。
。
。
if torch.onnx.is_in_onnx_export(): for i in range(self.nl): # 分别对三个输出层处理 x[i] = self.m[i](x[i]) # conv bs, _, ny, nx = x[i].shape # x(bs, 255 , 20 , 20 ) to x(bs, 3 , 20 , 20 , 85 ) x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute( 0 , 1 , 3 , 4 , 2 ).contiguous() y = x[i].sigmoid() z.append(y.view(bs, - 1 , self.no)) return torch.cat(z, 1 )
在export.py里,自定义了一个导出onnx文件的函数,代码片段如下 。
。
def my_export_onnx(model, im, file, opset, train, dynamic, simplify, prefix=colorstr( ' ONNX: ' )): print( ' anchors: ' , model.yaml[ ' anchors ' ]) # wtxt = open( ' class.names ' , ' w ' ) # for name in model.names: # wtxt.write(name + ' \n ' ) # wtxt.close() # YOLOv5 ONNX export print(im.shape) if not dynamic: f = os.path.splitext(file)[ 0 ] + ' .onnx ' torch.onnx.export(model, im, f, verbose =False, opset_version= 12 , input_names=[ ' images ' ], output_names=[ ' output ' ]) else : f = os.path.splitext(file)[ 0 ] + ' _dynamic.onnx ' torch.onnx.export(model, im, f, verbose =False, opset_version= 12 , input_names=[ ' images ' ], output_names =[ ' output ' ], dynamic_axes={ ' images ' : { 0 : ' batch ' , 2 : ' height ' , 3 : ' width ' }, # shape( 1 , 3 , 640 , 640 ) ' output ' : { 0 : ' batch ' , 1 : ' anchors ' } # shape( 1 , 25200 , 85 ) }) try : import cv2 net = cv2.dnn.readNet(f) except: exit(f ' export {f} failed ' ) exit(f ' export {f} sucess ' )
。
。
在官方定义的export_onnx函数里插入调用这个函数,代码截图如下:
。
python export.py --weights=yolov5s.pt --include=onnx --imgsz= 640 python export.py --weights=yolov5s6.pt --include=onnx --imgsz= 1280
就能成功生成.onnx文件,并且opencv的dnn模块能读取onnx文件做推理。这两处修改都是浅表的修改,对输入输出层这块进行了一些修改,但是确实是起到了相应的作用.
。
。
。
。
<annotation verified= " yes " > <folder>hsrc</folder> <filename> 100000001 </filename> <path>/Users/haoyou/Library/Mobile Documents/com~apple~CloudDocs/OneDrive/hsrc/ 100000001 .bmp</path> <source> <database>Unknown</database> </source> <size> <width> 1166 </width> <height> 753 </height> <depth> 3 </depth> </size> <segmented> 0 </segmented> < object > <type>bndbox</type> <name>ship</name> <pose>Unspecified</pose> <truncated> 0 </truncated> <difficult> 0 </difficult> <bndbox> <xmin> 178 </xmin> <ymin> 246 </ymin> <xmax> 974 </xmax> <ymax> 504 </ymax> </bndbox> </ object > < object > <type>robndbox</type> <name>ship</name> <pose>Unspecified</pose> <truncated> 0 </truncated> <difficult> 0 </difficult> <robndbox> <cx> 580.7887 </cx> <cy> 343.2913 </cy> <w> 775.0449 </w> <h> 170.2159 </h> <angle> 2.889813 </angle> </robndbox> </ object > </annotation>
。
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace ConsoleApp1 { [XmlRoot( " annotation " )] public class AnnotationHead { public string folder; public string filename; public string path; public Source source; public Size size; public string segmented; } public class Size { public string width; public string height; public string depth; } public class Source { public string database; } [XmlRoot( " object " )] public class @object { public string type; public string name; public string pose; public string truncated; public string difficult; public robndClass robndbox; } public class robndClass { public float cx; public float cy; public float w; public float h; public float angle; } public class Test { public static void Main() { // 输出规则 XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true ; settings.IndentChars = " " ; settings.NewLineChars = " \r\n " ; settings.Encoding = Encoding.UTF8; settings.OmitXmlDeclaration = true ; // 不生成声明头 XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add( string .Empty, string .Empty); // 输出对象 FileStream stream = new FileStream( " part1.xml " , FileMode.Create); //////////////////////// /Part1 ///////////////////////////////// // AnnotationHead an = new AnnotationHead(); an.folder = " sandbox " ; an.filename = " 2022-10-29 15-19-25 " ; an.path = " F:/sandbox/2022-10-29 15-19-25.png " ; Source source = new Source(); source.database = " Unknown " ; an.source = source; Size size = new Size(); size.width = " 1873 " ; size.height = " 935 " ; size.depth = " 3 " ; an.size = size; an.segmented = " 0 " ; // 实施输出 XmlWriter xmlWriter = XmlWriter.Create(stream, settings); XmlSerializer serializer = new XmlSerializer( typeof (AnnotationHead)); serializer.Serialize(xmlWriter, an, namespaces); // 目标销毁 xmlWriter.Close(); stream.Close(); //////////////////////// /Part2 ///////////////////////////////// // stream = new FileStream( " part2.xml " , FileMode.Create); // 定义方法 robndClass il = new robndClass(); il.cx = ( float ) 1484.1 ; il.cy = ( float ) 521.7274 ; il.w = ( float ) 40.1731 ; il.h = ( float ) 194.3416 ; il.angle = ( float ) 0.18 ; @object o = new @object(); o.type = " robndbox " ; o.name = " ship " ; o.pose = " Unspecified " ; o.truncated = " 0 " ; o.difficult = " 0 " ; o.robndbox = il; List <@object> objectList = new List<@object> (); objectList.Add(o); objectList.Add(o); objectList.Add(o); serializer = new XmlSerializer( typeof (List<@object> )); XmlWriter xmlWriter2 = XmlWriter.Create(stream, settings); serializer.Serialize(xmlWriter2, objectList, namespaces); xmlWriter2.Close(); stream.Close(); /////////////////////////// merge ////////////////////////////////////////// StreamReader sr = new StreamReader( " part1.xml " ); string strPart1 = sr.ReadToEnd(); strPart1 = strPart1.Substring( 0 , strPart1.Length - 13 ); sr.Close(); sr = new StreamReader( " part2.xml " ); string strPart2 = sr.ReadToEnd(); strPart2 = strPart2.Substring( 15 , strPart2.Length - 31 ); sr.Close(); string strOut = strPart1 + strPart2 + " </annotation> " ; /////////////////////////// /输出 /////////////////////////////////////// using (StreamWriter sw = new StreamWriter( " result.xml " )) { sw.Write(strOut); } } } }
。
。
public static void Main() { AnnotationHead an = new AnnotationHead(); an.folder = " sandbox " ; an.filename = " 2022-10-29 15-19-25 " ; an.path = " F:/sandbox/2022-10-29 15-19-25.png " ; Source source = new Source(); source.database = " Unknown " ; an.source = source; Size size = new Size(); size.width = " 18443 " ; size.height = " 935 " ; size.depth = " 3 " ; an.size = size; an.segmented = " 0 " ; robndClass il = new robndClass(); il.cx = ( float ) 1484.1 ; il.cy = ( float ) 521.7274 ; il.w = ( float ) 40.1731 ; il.h = ( float ) 194.3416 ; il.angle = ( float ) 0.18 ; @object o = new @object(); o.type = " robndbox " ; o.name = " ship " ; o.pose = " Unspecified " ; o.truncated = " 0 " ; o.difficult = " 0 " ; o.robndbox = il; List <@object> objectList = new List<@object> (); objectList.Add(o); objectList.Add(o); objectList.Add(o); objectList.Add(o); objectList.Add(o); AnnotationClass ac = new AnnotationClass(an,objectList, " r2.xml " ); ac.action(); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.IO; using System.Xml.Serialization; namespace ConsoleApp1 { [XmlRoot( " annotation " )] public class AnnotationHead { public string folder; public string filename; public string path; public Source source; public Size size; public string segmented; } public class Size { public string width; public string height; public string depth; } public class Source { public string database; } [XmlRoot( " object " )] public class @object { public string type; public string name; public string pose; public string truncated; public string difficult; public robndClass robndbox; } public class robndClass { public float cx; public float cy; public float w; public float h; public float angle; } class AnnotationClass { private string strOutName; // 输出文件名称 private AnnotationHead an; private List<@object> objectList; // 构造函数 public AnnotationClass(AnnotationHead annotatonHead, List<@object> olist, string strName = " result.xml " ) { an = annotatonHead; strOutName = strName; objectList = olist; } public void action() { // 输出规则 XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true ; settings.IndentChars = " " ; settings.NewLineChars = " \r\n " ; settings.Encoding = Encoding.UTF8; settings.OmitXmlDeclaration = true ; // 不生成声明头 XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add( string .Empty, string .Empty); // 输出对象 FileStream stream = new FileStream( " part1.xml " , FileMode.Create); //////////////////////// /Part1 ///////////////////////////////// // // 实施输出 XmlWriter xmlWriter = XmlWriter.Create(stream, settings); XmlSerializer serializer = new XmlSerializer( typeof (AnnotationHead)); serializer.Serialize(xmlWriter, an, namespaces); // 目标销毁 xmlWriter.Close(); stream.Close(); //////////////////////// /Part2 ///////////////////////////////// // stream = new FileStream( " part2.xml " , FileMode.Create); // 定义方法 serializer = new XmlSerializer( typeof (List<@object> )); XmlWriter xmlWriter2 = XmlWriter.Create(stream, settings); serializer.Serialize(xmlWriter2, objectList, namespaces); xmlWriter2.Close(); stream.Close(); /////////////////////////// merge ////////////////////////////////////////// StreamReader sr = new StreamReader( " part1.xml " ); string strPart1 = sr.ReadToEnd(); strPart1 = strPart1.Substring( 0 , strPart1.Length - 13 ); sr.Close(); sr = new StreamReader( " part2.xml " ); string strPart2 = sr.ReadToEnd(); strPart2 = strPart2.Substring( 15 , strPart2.Length - 31 ); sr.Close(); string strOut = strPart1 + strPart2 + " </annotation> " ; /////////////////////////// /输出 /////////////////////////////////////// using (StreamWriter sw = new StreamWriter(strOutName)) { sw.Write(strOut); } } } }
。
。
。
。
。
。
。
。
。
BboxToolkit/tools
路径下的 split_configs/dota1_0/ss_train.json
文件。 根据需求更改参数。更改 BboxToolkit/BboxToolkit/datasets/misc.py
文件中的dota1_0中的类别 现在有xywhθ标注的数据集,要转换成dota标注的格式 。
。
。
。
。
使用如下代码,路径需要自己修改:
import math import shutil import os import numpy as np import xml.etree.ElementTree as et dataset_dir = r ' D:\dataset\sar\RSDD\RSDD-SAR\JPEGImages ' ana_dir = r ' D:\dataset\sar\RSDD\RSDD-SAR\Annotations ' save_dir = r ' D:\dataset\sar\RSDD\dota ' data_type = ' test ' train_img_dir = r ' D:\dataset\sar\RSDD\RSDD-SAR\ImageSets\test.txt ' f1 = open(train_img_dir, ' r ' ) train_img = f1.readlines() def rota(center_x1, center_y1, x, y, w, h, a): # 旋转中心点,旋转中心点,框的w,h,旋转角 # a = (math.pi * a) / 180 # 角度转弧度 x1, y1 = x - w / 2 , y - h / 2 # 旋转前左上 x2, y2 = x + w / 2 , y - h / 2 # 旋转前右上 x3, y3 = x + w / 2 , y + h / 2 # 旋转前右下 x4, y4 = x - w / 2 , y + h / 2 # 旋转前左下 px1 = (x1 - center_x1) * math.cos(a) - (y1 - center_y1) * math.sin(a) + center_x1 # 旋转后左上 py1 = (x1 - center_x1) * math.sin(a) + (y1 - center_y1) * math.cos(a) + center_y1 px2 = (x2 - center_x1) * math.cos(a) - (y2 - center_y1) * math.sin(a) + center_x1 # 旋转后右上 py2 = (x2 - center_x1) * math.sin(a) + (y2 - center_y1) * math.cos(a) + center_y1 px3 = (x3 - center_x1) * math.cos(a) - (y3 - center_y1) * math.sin(a) + center_x1 # 旋转后右下 py3 = (x3 - center_x1) * math.sin(a) + (y3 - center_y1) * math.cos(a) + center_y1 px4 = (x4 - center_x1) * math.cos(a) - (y4 - center_y1) * math.sin(a) + center_x1 # 旋转后左下 py4 = (x4 - center_x1) * math.sin(a) + (y4 - center_y1) * math.cos(a) + center_y1 return px1, py1, px2, py2, px3, py3, px4, py4 # 旋转后的四个点,左上,右上,右下,左下 for img in train_img: shutil.copy(os.path.join(dataset_dir, img[: - 1 ] + ' .jpg ' ), os.path.join(save_dir, data_type, ' images ' , img[:- 1 ] + ' .jpg ' )) xml_file = open(os.path.join(ana_dir, img[:- 1 ] + ' .xml ' ), encoding= ' utf-8 ' ) tree = et.parse(xml_file) root = tree.getroot() with open(os.path.join(save_dir, data_type, ' labelTxt ' , img[:- 1 ] + ' .txt ' ), ' w ' ) as f: f.write( ' imagesource:GoogleEarth\ngsd:NaN\n ' ) for obj in root.iter( ' object ' ): cls = obj.find( ' name ' ).text box = obj.find( ' robndbox ' ) x_c = box.find( ' cx ' ).text y_c = box.find( ' cy ' ).text h = box.find( ' h ' ).text w = box.find( ' w ' ).text theta = box.find( ' angle ' ).text box = list(map(np.float16, [x_c, y_c, h, w, theta])) box = rota(box[ 0 ], box[ 1 ], * box) box = list(map( int , box)) box = list(map(str, box)) f.write( ' ' .join(box)) f.write( ' ' + cls + ' 0\n ' )
。
。
最后此篇关于遥感图像识别(标注)软件实现的文章就讲到这里了,如果你想了解更多关于遥感图像识别(标注)软件实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我使用的是linux的windows子系统,安装了ubuntu,bash运行流畅。 我正在尝试使用make,似乎bash 无法识别gcc。尝试将其添加到 PATH,但没有任何改变。奇怪的是 - cmd
ImageMagick 已正确安装。 WAMP 的“PHP 扩展”菜单也显示带有勾选的 php_imagick。除了 Apache 和系统环境变量外,phpinfo() 没有显示任何 imagick
我是这么想的,因为上限是 2^n,并且考虑到它们都是有限机,n 状态 NFA 和具有 2^n 或更少状态的 DFA 的交集将是有效。 我错了吗? 最佳答案 你是对的。 2^n 是一个上限,因此生成的
我有一个大型数据集,其中包含每日值,指示一年中的特定一天是否特别热(用 1 或 0 表示)。我的目标是识别 3 个或更多特别炎热的日子的序列,并创建一个包含每个日子的长度以及开始和结束日期的新数据集。
我有一个向量列表,每个向量看起来像这样 c("Japan", "USA", "country", "Japan", "source", "country", "UK", "source", "coun
是否有任何工具或方法可以识别静态定义数组中的缓冲区溢出(即 char[1234] 而不是 malloc(1234))? 昨天我花了大部分时间来追踪崩溃和奇怪的行为,最终证明是由以下行引起的: // e
我一直在尝试通过导入制表符分隔的文件来手动创建 Snakemake 通配符,如下所示: dataset sample species frr PRJNA493818_GSE120639_SRP1628
我一直在尝试通过导入制表符分隔的文件来手动创建 Snakemake 通配符,如下所示: dataset sample species frr PRJNA493818_GSE120639_SRP1628
我想录下某人的声音,然后根据我获得的关于他/她声音的信息,如果那个人再次说话,我就能认出来!问题是我没有关于哪些统计数据(如频率)导致人声差异的信息,如果有人可以帮助我如何识别某人的声音? 在研究过程
我希望我的程序能够识别用户何时按下“enter”并继续循环播放。但是我不知道如何使程序识别“输入”。尝试了两种方法: string enter; string ent = "\n"; dice d1;
我创建了这个带有一个参数(文件名)的 Bash 小脚本,该脚本应该根据文件的扩展名做出响应: #!/bin/bash fileFormat=${1} if [[ ${fileFormat} =~ [F
我正在寻找一种在 for 循环内迭代时识别 subview 对象的方法,我基本上通过执行 cell.contentView.subviews 从 UITableView 的 contentView 获
我正在尝试在 Swift 中使用 CallKit 来识别调用者。 我正在寻找一种通过发出 URL 请求来识别调用者的方法。 例如:+1-234-45-241 给我打电话,我希望它向 mydomain.
我将(相当古老的)插件称为“thickbox”,如下所述: 创建厚盒时,它包含基于查询的内容列表。 使用 JavaScript 或 jQuery,我希望能够访问 type 的值(在上面的示例中 t
我想编写一些可以接受某种输入并将其识别为方波、三角波或某种波形的代码。我还需要一些产生所述波的方法。 我确实有使用 C/C++ 的经验,但是,我不确定我将如何模拟所有这些。最终,我想将其转换为微 Co
我创建了一个 for 循环,用于在每个部分显示 8 个项目,但我试图在循环中识别某些项目。例如,我想识别前两项,然后是第五项和第六项,但我的识别技术似乎是正确的。 for (int i = 0; i
如何识别 UIStoryboard? 该类具有创建和实例化的方法,但我没有看到带有类似name 的@property。例如 获取 Storyboard对象 + storyboardWithName:b
如何确定所运行的SQLServer2005的版本 要确定所运行的SQLServer2005的版本,请使用SQLServerManagementStudio连接到SQLServer2005,然后运行
这个问题在这里已经有了答案: How to check whether an object is a date? (26 个答案) 关闭2 年前。 我正在使用一个 npm 模块,它在错误时抛出一个空
我正在制作一个使用 ActivityRecognition API 在后台跟踪用户 Activity 的应用,如果用户在指定时间段(例如 1 小时)内停留在同一个地方,系统就会推送通知告诉用户去散步.
我是一名优秀的程序员,十分优秀!