DAMO-YOLO踩坑记录

环境

系统:win10

GPU:NVIDIA RTX4070TI

CUDA:11.8

python版本:3.8

项目配置

1. 从github拉取源码

git clone https://github.com/tinyvision/DAMO-YOLO.git

2. 安装环境依赖

cd DAMO-YOLO/
conda create -n DAMO-YOLO python=3.8 -y
conda activate DAMO-YOLO
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 环境依赖readme里面是直接安装requirements
pip install -r requirements.txt
# 也可以使用
python setup.py install

虽然我用pip安装了依赖,但是实际运行时还是因为缺少matplotlib库:

所以进一步安装matplotlib:

pip install matplotlib

3. 修改模型训练样本配置部分源码

项目根目录新建文件夹:module,把从github上下载的预训练权重放进去

在datasets文件夹下创建:对应图像和标签

datasets
|
|--Custom_coco
|   |
|   |--annotations
|   |   |
|   |   |--train_coco_format.json
|   |   |--val_coco_format.json
    |
    |--images
        |
        |--train
        |    |--image001.jpg...
        |
        |--val
            |--image

修改configs/damoyolo_tinynasL20_T.py文件内容

# 在config类的init函数内添加:
self.train.no_aug_epochs = 16
self.train.warmup_epochs = 5
----------上文-------------------
self.train.finetune_path = 'E:\\proj\\lineCheck\\DAMO-YOLO\\model\\damoyolo_tinynasL20_T_420.pth'
self.train.total_epochs = 10
----------下文-------------------
# augment
self.train.augment.transform.image_max_range = (500, 500)
self.train.augment.mosaic_mixup.mixup_prob = 0.15
.
.
.
.
.
.
.
.
.
ZeroHead = {
            'name': 'ZeroHead',
            'num_classes': 1,    #这里修改成你样本的分类数量
            'in_channels': [64, 128, 256],
            'stacked_convs': 0,
            'reg_max': 16,
            'act': 'silu',
            'nms_conf_thre': 0.05,
            'nms_iou_thre': 0.7,
            'legacy': False,
        }
        self.model.head = ZeroHead

        self.dataset.class_names = ['qx']    # 这里写入标签对应的名称

进一步修改damo/config/paths_catalog.py文件内容

# 在DatasetCatalog里面吧DATASETS里的数据集路径进行修改,与上面设置的数据集路径一致
DATA_DIR = 'datasets' # 这里设置root
DATASETS = {
        'coco_2017_train': { # 训练集
            'img_dir': 'Custom_coco/images/train', # 基于root的数据集图片
            'ann_file': 'Custom_coco/annotations/train_coco_format.json' # 基于root的数据集标签
        },
        'coco_2017_val': { # 验证集
            'img_dir': 'Custom_coco/images/val',
            'ann_file': 'Custom_coco/annotations/val_coco_format.json'
        },
        'coco_2017_test_dev': { # 测试集
            'img_dir': 'Custom_coco/images/val',
            'ann_file': 'Custom_coco/annotations/val_coco_format.json'
        },

将train.py从tools文件夹移动到根目录下并将nccl改成gloo,因为nccl是在linux系统下用的

torch.distributed.init_process_group(backend='gloo', init_method='env://')

4. 开始训练

# 官网给出的训练命令:
python -m torch.distributed.launch --nproc_per_node=8 tools/train.py -f configs/damoyolo_tinynasL20_T.py
# 单卡环境且因为找不到damo包路径所以吧train.py移动到了根目录,所以改成
python -m torch.distributed.launch --nproc_per_node=1 train.py -f configs/damoyolo_tinynasL20_T.py
# 又显示命令行参数错误,所以按照要求加上use_env变成:
python -m torch.distributed.launch --nproc_per_node=1 --use_env train.py -f configs/damoyolo_tinynasL20_T.py

一些坑

一开始提示找不到damo包:把train.py拖到root
然后是:matplotlib没有安装: pip install matplotlib

再然后是:error:unrecognized argument: --local-rank=0, 在调用train.py前加上--use_env

最后是numpy版本过高导致.float不可用,要么用正确的numpy版本,要么改位于pycocotoolscocoeval.py代码:

# 此为下策,因为直接改动了源码,不知道会出现什么问题,但是能用

# 这里是因为训练时报错说不接受浮点
self.iouThrs = np.linspace(.5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, int(np.round((1.00 - .0) / .01)) + 1, endpoint=True)

# 这里是因为np.float不可用
tp_sum = np.cumsum(tps, axis=1).astype(dtype=np.float64)
fp_sum = np.cumsum(fps, axis=1).astype(dtype=np.float64)

网上可以找txt转coco的标签格式转换脚本,我用的是:
这个大佬写的(感谢)

最后跑起来了:

验证+推理

跑了一个晚上,算是得到了pth权重文件,然后尝试验证和推理。有遇到了一些坑,记录一下。。。

验证

验证环节按readme的说法是使用eval.py完成的,和train的问题一样找不到damo包。挪到根目录,在调用前加上--use_env。

python -m torch.distributed.launch --nproc_per_node=1 --use_env eval.py -f configs/damoyolo_tinynasL20_T.py -c workdirs/damoyolo_tinynasL20_T/epoch_300_ckpt.pth --fuse

一切顺利,得到结果,感觉不是很好,还是要继续调参。。。

(DAMO-YOLO) PS E:\proj\DAMO-YOLO> python -m torch.distributed.launch --nproc_per_node=1 --use_env eval.py -f configs/damoyolo_tinynasL20_T.py -c workdirs/damoyolo_tinyn
asL20_T/epoch_300_ckpt.pth --fuse
[2024-04-11 09:49:49,208] torch.distributed.elastic.multiprocessing.redirects: [WARNING] NOTE: Redirects are currently not supported in Windows or MacOs.
C:\Users\chonpsk\.conda\envs\DAMO-YOLO\lib\site-packages\torch\distributed\launch.py:183: FutureWarning: The module torch.distributed.launch is deprecated
and will be removed in future. Use torchrun.
Note that --use-env is set by default in torchrun.
If your script expects `--local-rank` argument to be set, please
change it to read from `os.environ['LOCAL_RANK']` instead. See
https://pytorch.org/docs/stable/distributed.html#launch-utility for
further instructions

  warnings.warn(
[W socket.cpp:697] [c10d] The client socket has failed to connect to [kubernetes.docker.internal]:29500 (system error: 10049 - 在其上下文中,该请求的地址无效。).
[W socket.cpp:697] [c10d] The client socket has failed to connect to [kubernetes.docker.internal]:29500 (system error: 10049 - 在其上下文中,该请求的地址无效。).
2024-04-11 09:49:51 | INFO     | __main__:93 - Args: Namespace(ckpt='workdirs/damoyolo_tinynasL20_T/epoch_300_ckpt.pth', conf=None, config_file='configs/damoyolo_tinynasL20_T.py'
, fuse=True, local_rank=0, nms=None, opts=[], seed=None, test=False, tsize=None)
2024-04-11 09:49:51 | INFO     | __main__:102 - loading checkpoint from workdirs/damoyolo_tinynasL20_T/epoch_300_ckpt.pth
2024-04-11 09:49:51 | INFO     | __main__:110 - loaded checkpoint done.
2024-04-11 09:49:54 | INFO     | __main__:117 - Model Summary: backbone's params(M): 2.17, flops(G): 7.97, latency(ms): 1.125
neck's params(M): 5.71, flops(G): 8.24, latency(ms): 3.125
head's params(M): 0.28, flops(G): 0.89, latency(ms): 1.125
total latency(ms): 5.640, total flops(G): 17.10, total params(M): 8.16

2024-04-11 09:49:54 | INFO     | __main__:122 -         Fusing model...
2024-04-11 09:49:54 | INFO     | torchvision.datasets.coco:36 - loading annotations into memory...
2024-04-11 09:49:54 | INFO     | torchvision.datasets.coco:36 - Done (t=0.00s)
2024-04-11 09:49:54 | INFO     | pycocotools.coco:89 - creating index...
2024-04-11 09:49:54 | INFO     | pycocotools.coco:89 - index created!
2024-04-11 09:49:54 | INFO     | damo.apis.detector_inference:75 - Start evaluation on coco_2017_val dataset(160 images).
100%|##############################################################################################################################################| 2/2 [00:09<00:00,  4.70s/it] 
2024-04-11 09:50:04 | INFO     | damo.apis.detector_inference:87 - Total run time: 0:00:09.420176 (0.058876097202301025 s / img per device, on 1 devices)
2024-04-11 09:50:04 | INFO     | damo.apis.detector_inference:92 - Model inference time: 0:00:00.856720 (0.005354499816894532 s / img per device, on 1 devices)
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:42 - Preparing results for COCO format
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:45 - Preparing bbox results
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:49 - Evaluating predictions
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:231 - Loading and preparing results...
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:231 - DONE (t=0.01s)
2024-04-11 09:50:04 | INFO     | pycocotools.coco:362 - creating index...
2024-04-11 09:50:04 | INFO     | pycocotools.coco:362 - index created!
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:236 - Running per image evaluation...
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:236 - Evaluate annotation type *bbox*
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:236 - DONE (t=0.10s).
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:237 - Accumulating evaluation results...
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:237 - DONE (t=0.02s).
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:463 -  Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.473
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:464 -  Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.895
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:465 -  Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.409
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:466 -  Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.340
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:467 -  Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.503
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:468 -  Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.621
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:469 -  Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.215
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:470 -  Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.584
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:472 -  Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.544
2024-04-11 09:50:04 | INFO     | pycocotools.cocoeval:473 -  Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.611
2024-04-11 09:50:04 | INFO     | damo.dataset.datasets.evaluation.coco.coco_eval:59 - OrderedDict([('bbox', OrderedDict([('AP', 0.4730805870212621), ('AP50', 0.895090459391299), 
('AP75', 0.4091130859655121), ('APs', 0.3403641442326747), ('APm', 0.5026130249143416), ('APl', 0.6209136920203059)]))])

推理

推理的使用遇到了一个小坑,在运行时突然告诉我numpy数组被定义为只读的,不可被操作。

2024-04-11 10:13:31.168 | ERROR    | __main__:<module>:356 - An error has been caught in function '<module>', process 'MainProcess' (980), thread 'MainThread' (23684):
Traceback (most recent call last):

> File "demo.py", line 356, in <module>
    main()
    └ <function main at 0x000001C91010F820>

  File "demo.py", line 321, in main
    vis_res = infer_engine.visualize(origin_img, bboxes, scores, cls_inds, conf=args.conf, save_name=os.path.basename(args.path), save_result=args.save_result)
              │            │         │           │       │       │              │    │               │  │    │        │    │                  │    └ True
              │            │         │           │       │       │              │    │               │  │    │        │    │                  └ Namespace(camid=0, conf=0.6, confi
g_file='./configs/damoyolo_tinynasL20_T.py', device='cuda', end2end=False, engine='workdirs...
              │            │         │           │       │       │              │    │               │  │    │        │    └ 'datasets/Custom_coco/images/val/66_crop_0.jpg'      
              │            │         │           │       │       │              │    │               │  │    │        └ Namespace(camid=0, conf=0.6, config_file='./configs/damoyo
lo_tinynasL20_T.py', device='cuda', end2end=False, engine='workdirs...
              │            │         │           │       │       │              │    │               │  │    └ <function basename at 0x000001C95AD39EE0>
              │            │         │           │       │       │              │    │               │  └ <module 'ntpath' from 'C:\\Users\\chonpsk\\.conda\\envs\\DAMO-YOLO\\lib\
\ntpath.py'>
              │            │         │           │       │       │              │    │               └ <module 'os' from 'C:\\Users\\chonpsk\\.conda\\envs\\DAMO-YOLO\\lib\\os.py'
>
              │            │         │           │       │       │              │    └ 0.6
              │            │         │           │       │       │              └ Namespace(camid=0, conf=0.6, config_file='./configs/damoyolo_tinynasL20_T.py', device='cuda', en
d2end=False, engine='workdirs...
              │            │         │           │       │       └ tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,        
              │            │         │           │       │                 0., 0., 0., 0...
              │            │         │           │       └ tensor([0.6785, 0.6641, 0.6581, 0.6514, 0.6470, 0.6399, 0.5757, 0.5683, 0.5609,
              │            │         │           │                 0.5585, 0.5564, 0.5532, 0.5524, 0.521...
              │            │         │           └ tensor([[309.0302, 229.5414, 322.8981, 261.2090],
              │            │         │                     [267.1926,  28.5143, 280.6399,  46.0551],
              │            │         │                     [307.3100, 135.57...
              │            │         └ array([[[255, 255, 255],
              │            │                   [255, 255, 255],
              │            │                   [255, 255, 255],
              │            │                   ...,
              │            │                   [255, 255, 255],
              │            │                   [255...
              │            └ <function Infer.visualize at 0x000001C91010F700>
              └ <__main__.Infer object at 0x000001C95AE46550>

  File "demo.py", line 249, in visualize
    vis_img = vis(image, bboxes, scores, cls_inds, conf, self.class_names)
              │   │      │       │       │         │     │    └ ['qx']
              │   │      │       │       │         │     └ <__main__.Infer object at 0x000001C95AE46550>
              │   │      │       │       │         └ 0.6
              │   │      │       │       └ tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
              │   │      │       │                 0., 0., 0., 0...
              │   │      │       └ tensor([0.6785, 0.6641, 0.6581, 0.6514, 0.6470, 0.6399, 0.5757, 0.5683, 0.5609,
              │   │      │                 0.5585, 0.5564, 0.5532, 0.5524, 0.521...
              │   │      └ tensor([[309.0302, 229.5414, 322.8981, 261.2090],
              │   │                [267.1926,  28.5143, 280.6399,  46.0551],
              │   │                [307.3100, 135.57...
              │   └ array([[[255, 255, 255],
              │             [255, 255, 255],
              │             [255, 255, 255],
              │             ...,
              │             [255, 255, 255],
              │             [255...
              └ <function vis at 0x000001C910064DC0>

  File "E:\proj\DAMO-YOLO\damo\utils\visualize.py", line 30, in vis
    cv2.rectangle(img, (x0, y0), (x1, y1), color, 2)
    │   │         │     │   │     │   │    └ [0, 113, 188]
    │   │         │     │   │     │   └ 261
    │   │         │     │   │     └ 322
    │   │         │     │   └ 229
    │   │         │     └ 309
    │   │         └ array([[[255, 255, 255],
    │   │                   [255, 255, 255],
    │   │                   [255, 255, 255],
    │   │                   ...,
    │   │                   [255, 255, 255],
    │   │                   [255...
    │   └ <built-in function rectangle>
    └ <module 'cv2' from 'C:\\Users\\chonpsk\\.conda\\envs\\DAMO-YOLO\\lib\\site-packages\\cv2\\__init__.py'>

cv2.error: OpenCV(4.9.0) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
>  - img marked as output argument, but provided NumPy array marked as readonly
>  - Expected Ptr<cv::UMat> for argument 'img'
>  - img marked as output argument, but provided NumPy array marked as readonly
>  - Expected Ptr<cv::UMat> for argument 'img'

于是进一步修改源码:

# damo/utils/visualize.py

def vis(img, boxes, scores, cls_ids, conf=0.5, class_names=None):
    # 根据报错定位到这里的img时只读的,所以把原来需要直接操作img的地方注释掉,改用拷贝数据
    img_copy = np.copy(img)
    for i in range(len(boxes)):
        box = boxes[i]
        cls_id = int(cls_ids[i])
        score = scores[i]
        if score < conf:
            continue
        x0 = int(box[0])
        y0 = int(box[1])
        x1 = int(box[2])
        y1 = int(box[3])

        color = (_COLORS[cls_id] * 255).astype(np.uint8).tolist()
        text = '{}:{:.1f}%'.format(class_names[cls_id], score * 100)
        txt_color = (0, 0, 0) if np.mean(_COLORS[cls_id]) > 0.5 else (255, 255,
                                                                      255)
        font = cv2.FONT_HERSHEY_SIMPLEX

        txt_size = cv2.getTextSize(text, font, 0.4, 1)[0]

       
        # 第一处
        cv2.rectangle(img_copy, (x0, y0), (x1, y1), color, 2)
        # cv2.rectangle(img, (x0, y0), (x1, y1), color, 2)

        txt_bk_color = (_COLORS[cls_id] * 255 * 0.7).astype(np.uint8).tolist()

        # 第二处
        # cv2.rectangle(img, (x0, y0 + 1),
        #               (x0 + txt_size[0] + 1, y0 + int(1.5 * txt_size[1])),
        #               txt_bk_color, -1)
        cv2.rectangle(img_copy, (x0, y0 + 1),
                      (x0 + txt_size[0] + 1, y0 + int(1.5 * txt_size[1])),
                      txt_bk_color, -1)
        
        # 第三处
        # cv2.putText(img,
        #             text, (x0, y0 + txt_size[1]),
        #             font,
        #             0.4,
        #             txt_color,
        #             thickness=1)
        cv2.putText(img_copy,
                    text, (x0, y0 + txt_size[1]),
                    font,
                    0.4,
                    txt_color,
                    thickness=1)
    # 最后返回处理后的拷贝数据
    # return img
    return img_copy

 运行:(和上面一样的操作,挪到根目录下)

readme里面说推理支持图像、视频和摄像头。这里使用图片。选择模型,导入对应的权重文件。设置conf为0.6(置信度大于60%才被识别,否则被抛弃), 图片尺寸640,640(这里只接受2^n大小的图片否则报拼接错误),cuda推理加速,图片路径path

python demo.py image -f ./configs/damoyolo_tinynasL20_T.py --engine workdirs/damoyolo_tinynasL20_T/epoch_300_ckpt.pth --conf 0.6 --infer_size 640 640 --device cuda --path datasets/Custom_coco/images/val/199_crop_3.jpg

 
最后关于拼接错误的问题,我没有继续研究,暂且把报错信息放在这里。怎么会是63呢?怎么辉石呢?

2024-04-11 09:59:15.302 | ERROR    | __main__:<module>:356 - An error has been caught in function '<module>', process 'MainProcess' (12708), thread 'MainThread' (25264):
Traceback (most recent call last):

> File "demo.py", line 356, in <module>
    main()
    └ <function main at 0x00000204F6D40820>

  File "demo.py", line 320, in main
    bboxes, scores, cls_inds = infer_engine.forward(origin_img)
                               │            │       └ array([[[255, 255, 255],
                               │            │                 [255, 255, 255],
                               │            │                 [255, 255, 255],
                               │            │                 ...,
                               │            │                 [255, 255, 255],
                               │            │                 [255...
                               │            └ <function Infer.forward at 0x00000204F6D40670>
                               └ <__main__.Infer object at 0x00000204C1D46550>

  File "demo.py", line 234, in forward
    output = self.model(image)
             │    │     └ <damo.structures.image_list.ImageList object at 0x00000204F6F42DF0>
             │    └ Detector(
             │        (backbone): TinyNAS(
             │          (block_list): ModuleList(
             │            (0): Focus(
             │              (conv): ConvBNAct(
             │                (conv):...
             └ <__main__.Infer object at 0x00000204C1D46550>

  File "C:\Users\chonpsk\.conda\envs\DAMO-YOLO\lib\site-packages\torch\nn\modules\module.py", line 1511, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           │    │           │       └ {}
           │    │           └ (<damo.structures.image_list.ImageList object at 0x00000204F6F42DF0>,)
           │    └ <function Module._call_impl at 0x00000204EC534EE0>
           └ Detector(
               (backbone): TinyNAS(
                 (block_list): ModuleList(
                   (0): Focus(
                     (conv): ConvBNAct(
                       (conv):...

  File "C:\Users\chonpsk\.conda\envs\DAMO-YOLO\lib\site-packages\torch\nn\modules\module.py", line 1520, in _call_impl
    return forward_call(*args, **kwargs)
           │             │       └ {}
           │             └ (<damo.structures.image_list.ImageList object at 0x00000204F6F42DF0>,)
           └ <bound method Detector.forward of Detector(
               (backbone): TinyNAS(
                 (block_list): ModuleList(
                   (0): Focus(
                     (c...

  File "E:\proj\lineCheck\DAMO-YOLO\damo\detectors\detector.py", line 56, in forward
    fpn_outs = self.neck(feature_outs)
               │         └ [tensor([[[[0.3254, 0.0000, 0.1727,  ..., 0.1379, 0.0000, 2.4748],
               │                     [0.7851, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 2...
               └ Detector(
                   (backbone): TinyNAS(
                     (block_list): ModuleList(
                       (0): Focus(
                         (conv): ConvBNAct(
                           (conv):...

  File "C:\Users\chonpsk\.conda\envs\DAMO-YOLO\lib\site-packages\torch\nn\modules\module.py", line 1511, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           │    │           │       └ {}
           │    │           └ ([tensor([[[[0.3254, 0.0000, 0.1727,  ..., 0.1379, 0.0000, 2.4748],
           │    │                       [0.7851, 0.0000, 0.0000,  ..., 0.0000, 0.0000, ...
           │    └ <function Module._call_impl at 0x00000204EC534EE0>
           └ GiraffeNeckV2(
               (upsample): Upsample(scale_factor=2.0, mode='nearest')
               (bu_conv13): ConvBNAct(
                 (conv): Conv2d(192, 192...

  File "C:\Users\chonpsk\.conda\envs\DAMO-YOLO\lib\site-packages\torch\nn\modules\module.py", line 1520, in _call_impl
    return forward_call(*args, **kwargs)
           │             │       └ {}
           │             └ ([tensor([[[[0.3254, 0.0000, 0.1727,  ..., 0.1379, 0.0000, 2.4748],
           │                         [0.7851, 0.0000, 0.0000,  ..., 0.0000, 0.0000, ...
           └ <bound method GiraffeNeckV2.forward of GiraffeNeckV2(
               (upsample): Upsample(scale_factor=2.0, mode='nearest')
               (bu_conv13):...

  File "E:\proj\lineCheck\DAMO-YOLO\damo\base_models\necks\giraffe_fpn_btn.py", line 113, in forward
    x5 = torch.cat([x2, x45], 1)
         │     │    │   └ tensor([[[[1.4854, 1.4854, 1.4719,  ..., 0.6666, 0.1078, 0.1078],
         │     │    │               [1.4854, 1.4854, 1.4719,  ..., 0.6666, 0.1078, 0....
         │     │    └ tensor([[[[0.3254, 0.0000, 0.1727,  ..., 0.1379, 0.0000, 2.4748],
         │     │                [0.7851, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 2....
         │     └ <built-in method cat of type object at 0x00007FFAACDD2D50>
         └ <module 'torch' from 'C:\\Users\\chonpsk\\.conda\\envs\\DAMO-YOLO\\lib\\site-packages\\torch\\__init__.py'>

RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 63 but got size 64 for tensor number 1 in the list.

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值