https://blog.csdn.net/FJN110/article/details/150110136 您好,我认为这篇文章中有一些些小问题。不应该直接在文末添加(因为我想都没想直接全按照您给出的步骤做了,出现了Strip未定义的问题)

应该先在nn.module里面添加您给出的代码中除了C2F的部分作为一个.py文件,然后在block.py中import它,再创建c2f,strip_c3k2吧。如果只想搞一个strip块,是不是只需要把您给出的stripblock更名为strip即可?
https://blog.csdn.net/FJN110/article/details/150110136 您好,我认为这篇文章中有一些些小问题。不应该直接在文末添加(因为我想都没想直接全按照您给出的步骤做了,出现了Strip未定义的问题)

关注让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。
如果答案让您满意,请采纳、点赞、关注,非常感谢!
.
每日一句正能量,让它带给您好心情:生活不会辜负一个用力奔跑的人。
.
根据您提供的信息,您遇到的问题是在为YOLO模型添加Strip模块时出现了Strip未定义的错误。这通常是由于模块定义与导入不正确导致的。以下是正确的解决方案:
原方案直接在block.py文末添加代码,但未提前定义Strip模块,导致在__all__列表中引用时出现NameError。
首先,在ultralytics/nn/modules/目录下创建一个新文件(例如strip.py),包含Strip模块的定义:
import torch
import torch.nn as nn
class Strip(nn.Module):
def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):
super().__init__()
self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)
self.bn = nn.BatchNorm2d(c2)
self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())
def forward(self, x):
return self.act(self.bn(self.conv(x)))
def forward_fuse(self, x):
return self.act(self.conv(x))
def drop_path(x, drop_prob: float = 0., training: bool = False):
if drop_prob == 0. or not training:
return x
keep_prob = 1 - drop_prob
shape = (x.shape[0],) + (1,) * (x.ndim - 1)
random_tensor = keep_prob + torch.rand(shape, dtype=x.dtype, device=x.device)
random_tensor.floor_()
output = x.div(keep_prob) * random_tensor
return output
class DropPath(nn.Module):
def __init__(self, drop_prob=None):
super(DropPath, self).__init__()
self.drop_prob = drop_prob
def forward(self, x):
return drop_path(x, self.drop_prob, self.training)
在ultralytics/nn/modules/block.py文件中进行以下修改:
顶部添加导入:
from .strip import Strip, DropPath
在__all__列表中添加引用:
__all__ = [
"Strip", # 新增Strip模块
"DSC3k2", # 其他模块...
]
如果您只需要一个基础的Strip块,直接将类名定义为Strip(而非StripBlock)是正确的做法。上述代码中的Strip类已满足基础结构要求。
ultralytics/
└── nn/
└── modules/
├── block.py
└── strip.py # 新建的文件
from ultralytics.nn.modules.block import Strip
print(Strip(3, 64)) # 应正常输出模块结构
DSC3k2),需同样在strip.py中定义并在block.py中导入。__all__中的名称一致。这样修改后,即可避免Strip未定义的错误,并能正确使用自定义模块。