YOLOv8及其改进系列(五) modules.py 文件划分子集 | 标签透明化与文字大小调节 | 框粗细调节

这篇具有很好参考价值的文章主要介绍了YOLOv8及其改进系列(五) modules.py 文件划分子集 | 标签透明化与文字大小调节 | 框粗细调节。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近 YOLOv8 的官方项目又迎来了一个大更新,这次更新对基础不好的同学影响可能比较大,

这次更新主要就是将原本的 ultralytics/nn/modules.py 拆分成了以下6个文件:

  1. _init_.py
  2. block.py
  3. conv.py
  4. head.py
  5. trasnformer.py
  6. utils.py

有的同学可能不知道该加哪里了,我这里给大家说一下


原本添加模块流程

我们原本的添加模块的修改思路如下,以 space_to_depth 举例子:

  1. ultralytics/models/v8文件夹下新建一个 yolov8-SPD-Conv.yaml
  2. 将本文上面提供的 SPD-Conv 代码添加到 ultralytics/nn/modules.py 文件末尾;
  3. SPD-Conv 这个类的名字加入到 ultralytics/nn/tasks.py 中;
  4. 修改 yolov8-SPD-Conv.yaml ,使用space_to_depth构建SPD-Conv主干网络 ;
  5. 修改 ultralytics/yolo/cfg/default.yaml 文件的 '--model' 默认参数,或者直接使用指令,就可以开始训练了。

具体步骤

在代码更新后,我们添加模块的修改思路如下,除第 2 步外,其它步骤完全没有改变,

那么现在第 2 步可以拆分为如下几步,我依然拿 space_to_depth 举例子,

  1. 首先我们在 block.py 的最下方添加模块代码。(当然加到 conv.pyhead.py什么的都没问题的)
    yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能
  2. 随后 依然在 block.py 上方添加如下代码:
    yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能
  3. 最后就是要在 _init__.py 中添加如下的代码:
    yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

添加好后,其它步骤和之前一模一样,目前 YOLOv8 的主分支还在不停的更新,大家用的版本几乎都不一样,所以大家可以根据自己代码情况自行判断。

还有一点值得注意,大家在 task.py 导包时,别忘了把刚加的模块导进去。

yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

标签透明化 | 标签文字大小调节 | 框粗细调节

YOLOv8 标签透明化

alpha = 0.4 alpha = 0.7
yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能 yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

可能大家在检测一些密集目标时经常会遇到标签名互相遮挡的情况,这里给大家分享一个调整标签透明度的方法。

修改方式非常简单,只需要修改一个文件 ultralytics/yolo/utils/plotting.py


第一步将 cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA) 这句注释掉,

换成下面这三句:

            overlay = self.im.copy()
            alpha = 0.7  # 透明度 数值越小 透明度越高
            cv2.rectangle(overlay, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)

yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

随后将下方这两句替换掉

                cv2.rectangle(overlay, p1, p2, color, -1, cv2.LINE_AA)  # filled
                cv2.putText(overlay,

yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

最后添加这句

self.im = cv2.addWeighted(overlay, alpha, self.im, 1 - alpha, 0)

yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能


最后附上 box_label 的完整代码

    def box_label(self, box, label='', color=(128, 128, 128), txt_color=(255, 255, 255)):
        """Add one xyxy box to image with label."""
        if isinstance(box, torch.Tensor):
            box = box.tolist()
        if self.pil or not is_ascii(label):
            self.draw.rectangle(box, width=self.lw, outline=color)  # box
            if label:
                if self.pil_9_2_0_check:
                    _, _, w, h = self.font.getbbox(label)  # text width, height (New)
                else:
                    w, h = self.font.getsize(label)  # text width, height (Old, deprecated in 9.2.0)
                outside = box[1] - h >= 0  # label fits outside box
                self.draw.rectangle(
                    (box[0], box[1] - h if outside else box[1], box[0] + w + 1,
                     box[1] + 1 if outside else box[1] + h + 1),
                    fill=color,
                )
                # self.draw.text((box[0], box[1]), label, fill=txt_color, font=self.font, anchor='ls')  # for PIL>8.0
                self.draw.text((box[0], box[1] - h if outside else box[1]), label, fill=txt_color, font=self.font)
        else:  # cv2
            p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))
            # cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)
            overlay = self.im.copy()
            alpha = 0.7  # 透明度 数值越小 透明度越高
            cv2.rectangle(overlay, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)
            if label:
                tf = max(self.lw - 1, 1)  # font thickness
                w, h = cv2.getTextSize(label, 0, fontScale=self.lw / 3, thickness=tf)[0]  # text width, height
                outside = p1[1] - h >= 3
                p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3
                # cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filled
                # cv2.putText(self.im,
                cv2.rectangle(overlay, p1, p2, color, -1, cv2.LINE_AA)  # filled
                cv2.putText(overlay,
                            label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2),
                            0,
                            self.lw / 3,
                            txt_color,
                            thickness=tf,
                            lineType=cv2.LINE_AA)
                self.im = cv2.addWeighted(overlay, alpha, self.im, 1 - alpha, 0)

YOLOv8 标签文字大小调节

原始 lw/3 调整后 lw/5
yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能 yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

同样的,只需要修改一个文件 ultralytics/yolo/utils/plotting.py,原始的文字尺寸是线的宽度除 3 ,我们如果想缩小就直接把分母变大,改如下的两个位置。

yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

YOLOv8 检测框粗细调节

顺便说一下文本框的粗细调节,这个不用修改代码的,直接超参数后调就行了。

最新版调节框粗细的超参数是 --line_width ,默认是 3 ,可以设置成 1文章来源地址https://www.toymoban.com/news/detail-840646.html

line_width=3 line_width=1
yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能 yolov8检测框字体修改,YOLO,深度学习,pytorch,人工智能

到了这里,关于YOLOv8及其改进系列(五) modules.py 文件划分子集 | 标签透明化与文字大小调节 | 框粗细调节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包