assert (boxes[:, 2] >= boxes[:, 0]).all()报错

本文介绍了一段用于处理图像翻转后边界框坐标异常的代码,并详细解释了代码中assert的作用及常见数据错误的原因。

根据报错信息,打印以下内容:

代码如下:

 

for i in xrange(num_images):
#print ('in append_flipped==================',self.roidb)
boxes = self.roidb[i]['boxes'].copy()
oldx1 = boxes[:, 0].copy()
oldx2 = boxes[:, 2].copy()
boxes[:, 0] = widths[i] - oldx2 - 1
boxes[:, 2] = widths[i] - oldx1 - 1
try:
assert (boxes[:, 2] >= boxes[:, 0]).all()
except:
print ('in append_flipped==================',self.roidb[i]['boxes'],boxes[:, 0],boxes[:, 2],widths[i],oldx2)

 

其中,self.roidb是从标记的框那里得来的。这个代码的目的是旋转图片还能得到框,是一个数据增强的做法。

打印出来后,能看到是哪些异常数据导致这个assert的。这个assert (boxes[:, 2] >= boxes[:, 0]).all()

的意思是:右下角的值应该比左上角的值大。这样才是一个正确的框。

常见的数据错误有:

1)数据越界了。这个跟数据清洗有关。有可能标记的时候。图片的宽只有1000,硬是变成了左上角 990,框的宽度20。加在一起就是1010.越界了。

 

转载于:https://www.cnblogs.com/whu-zeng/p/9066251.html

### 解决 PyTorch YOLO 运行时错误问题 在运行 YOLO 模型的过程中遇到 `RuntimeError` 错误通常是由多个原因引起的,其中包括设备不一致、输入通道数不匹配等问题。以下是针对这些问题的具体分析和解决方案。 #### 设备一致性问题 当模型中的张量分布在不同的计算设备上(例如一部分在 GPU 上而另一部分在 CPU 上),就会引发如下错误: ``` Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! ``` 要解决此问题,可以确保所有的张量都位于同一个设备上。可以通过 `.to(device)` 方法将所有涉及的张量移动到指定的设备[^1]。例如,在代码中加入以下逻辑来统一设备设置: ```python device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') boxes = boxes.to(device) scale_fct = scale_fct.to(device) ``` 这样能够保证 `boxes` 和 `scale_fct` 都被放置在同一台设备上,从而避免上述错误的发生。 #### 输入通道数不匹配问题 另一个常见的问题是关于卷积层的输入通道数量不匹配。如果报错显示类似于以下内容: ``` input channels mismatch expected 256 but got 512 ``` 这表明当前网络结构期望接收具有特定数量输入通道的数据,但实际上接收到的数量不同。这种情况下可能的原因有多种可能性,比如加载预训练权重失败或者配置文件定义不当等。 为了修复该类错误,可以从以下几个方面入手检查并调整代码或参数设定: - **确认 Backbone 输出维度**:核实所使用的骨干网路 (Backbone Network) 的输出特征图是否符合预期尺寸以及对应的深度值。 - **验证 Config 文件配置项**:仔细核对用于构建检测头(Detection Head)的相关超参设置是否有偏差。 - **重新初始化权值变量**:尝试删除旧版缓存数据后再执行一次全新下载操作以获取正确的初始状态向量。 下面给出一段示范性的修正脚本片段供参考: ```python import torch.nn as nn class CustomYOLOLayer(nn.Module): def __init__(self, in_channels=256): super(CustomYOLOLayer, self).__init__() # 假设此处应为固定大小in_channel等于256 assert in_channels == 256, f"Incorrect number of input channels {in_channels}, should be 256." self.conv = nn.Conv2d(in_channels=in_channels, out_channels=... , kernel_size=(...) ) def forward(self,x): return self.conv(x) # 初始化自定义层实例化对象时候传入合适的数值作为形参 custom_layer_instance = CustomYOLOLayer(in_channels=256).to(device) ``` 通过以上方式可有效规避因输入通道数目差异而导致程序崩溃的情况发生。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值