GithubHelp home page GithubHelp logo

miemie2013 / miemiedetection Goto Github PK

View Code? Open in Web Editor NEW
278.0 12.0 33.0 6.38 MB

Pytorch and ncnn implementation of PPYOLOE、YOLOX、PPYOLO、PPYOLOv2、PicoDet and so on.

License: Apache License 2.0

Python 98.74% C++ 1.24% Batchfile 0.02%
yolox yolo yolov3 ppyolo fcos ppyolov2 ppyoloe ncnn solo solov2

miemiedetection's Introduction

简体中文 | English

miemie2013

个人介绍

好康的照骗比枯燥乏味的文字更具有说服力↓

Example 0

Example 0

Example 0

友情链接

  • miemieGAN miemieGAN是咩酱个人开发与维护的图像生成库,以咩酱的名字命名,实现了stylegan2ada等算法,目前文档完善中,欢迎大家试玩。

传送门

算法1群:645796480(人已满)

算法2群:894642886

粉丝群:704991252

关于仓库的疑问尽量在Issues上提,避免重复解答。

B站不定时女装: _糖蜜

知乎不定时谢邀、写文章: 咩咩2013

西瓜视频: 咩咩2013

微信:wer186259

本人微信公众号:miemie_2013

技术博客:https://blog.csdn.net/qq_27311165

AIStudio主页:asasasaaawws

欢迎在GitHub或上面的平台关注我(求粉)~

打赏

如果你觉得我的仓库对你很有帮助,可以给我打钱↓

Example 0

咩酱爱你哟!

miemiedetection's People

Contributors

m00nli avatar miemie2013 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

miemiedetection's Issues

训练自定义数据集时出了个错

An error has been caught in function 'launch', process 'MainProcess' (5932), t
hread 'MainThread' (20804):
Traceback (most recent call last):

File "tools\train.py", line 137, in
launch(
└ <function launch at 0x0000022C3AC6AAF0>

File "D:\YoLo\miemiedetection-main\mmdet\core\launch.py", line 98, in launch
main_func(*args)
│ └ (╒═══════════════════════╤═══════════════════════════════════════════════════════════════════════════════════════════
════════...
└ <function main at 0x0000022C3AC6AE50>

File "tools\train.py", line 115, in main
trainer.train()
│ └ <function Trainer.train at 0x0000022C3D390430>
└ <mmdet.core.trainer.Trainer object at 0x0000022C3D421880>

File "D:\YoLo\miemiedetection-main\mmdet\core\trainer.py", line 101, in train
self.before_train()
│ └ <function Trainer.before_train at 0x0000022C3D3909D0>
└ <mmdet.core.trainer.Trainer object at 0x0000022C3D421880>

File "D:\YoLo\miemiedetection-main\mmdet\core\trainer.py", line 504, in before_train
self.train_loader = self.exp.get_data_loader(
│ │ │ └ <function PPYOLOE_Method_Exp.get_data_loader at 0x0000022C3D3F8B80>
│ │ └ ╒═══════════════════════╤══════════════════════════════════════════════════════════════════════════════
══════════════════════...
│ └ <mmdet.core.trainer.Trainer object at 0x0000022C3D421880>
└ <mmdet.core.trainer.Trainer object at 0x0000022C3D421880>

File "D:\YoLo\miemiedetection-main\mmdet\exp\ppyoloe\ppyoloe_method_base.py", line 260, in get_data_loader
train_dataset = PPYOLOE_COCOTrainDataset(
└ <class 'mmdet.data.datasets.coco.PPYOLOE_COCOTrainDataset'>

File "D:\YoLo\miemiedetection-main\mmdet\data\datasets\coco.py", line 780, in init
train_records = data_clean(train_dataset, train_img_ids, _catid2clsid, train_pre_path, 'train', xy_plus_1=True)
│ │ │ │ └ 'datasets\Go_Black_White_COCO/train2017'
│ │ │ └ {0: 0, 1: 1, 2: 2, 3: 3}
│ │ └ ['000001', '000002', '000004', '000005', '000006', '000007', '000008', '000009', '0000
10', '000011', '000012', '000013', '000...
│ └ <pycocotools.coco.COCO object at 0x0000022C3D5233D0>
└ <function data_clean at 0x0000022C3C6B28B0>

File "D:\YoLo\miemiedetection-main\mmdet\data\datasets\coco.py", line 229, in data_clean
img_anno = coco.loadImgs(img_id)[0]
│ │ └ '000001'
│ └ <function COCO.loadImgs at 0x0000022C3D39A3A0>
└ <pycocotools.coco.COCO object at 0x0000022C3D5233D0>

File "D:\Anaconda3\lib\site-packages\pycocotools\coco.py", line 229, in loadImgs
return [self.imgs[id] for id in ids]
│ │ └ '000001'
│ └ {'000001': {'file_name': '000001.jpg', 'height': 640, 'width': 640, 'id': '000001'}, '000002': {'file_name': '00000
2.jpg', 'h...
└ <pycocotools.coco.COCO object at 0x0000022C3D5233D0>

File "D:\Anaconda3\lib\site-packages\pycocotools\coco.py", line 229, in
return [self.imgs[id] for id in ids]
│ │ │ └ '0'
│ │ └ '0'
│ └ {'000001': {'file_name': '000001.jpg', 'height': 640, 'width': 640, 'id': '000001'}, '000002': {'file_name': '00000
2.jpg', 'h...
└ <pycocotools.coco.COCO object at 0x0000022C3D5233D0>

KeyError: '0'

关于yolox_head_fast.py里面dynamic_k_matching函数的一个小bug

在参考作者代码对官方pipeline进行修改之后,终于统一了数据格式的问题,但是后来又遇到了一个问题,与合理的gt数目有关,源代码是这样的:
# 如果有预测框(花心大萝卜)匹配到了1个以上的gt时,做特殊处理。 if (anchor_matching_gt > 1).float().sum() > 0: # 首先,找到与花心大萝卜具有最小cost的gt。 # 找到 花心大萝卜 的下标(这是在anchor_matching_gt.shape[N, A]中的下标)。假设有R个花心大萝卜。 indexes = torch.where(anchor_matching_gt > 1) index = torch.stack((indexes[0], indexes[1]), 1) # [R, 2] 每个花心大萝卜2个坐标。第0个坐标表示第几张图片,第1个坐标表示第几个格子。 cost_t = cost.permute(0, 2, 1) # [N, G, A] -> [N, A, G] 转置好提取其cost cost2 = self.gather_nd(cost_t, index) # [R, G] 抽出 R个花心大萝卜 与 gt 两两之间的cost。 cost2 = cost2.permute(1, 0) # [G, R] gt 与 R个花心大萝卜 两两之间的cost。 cost_argmin = cost2.argmin(axis=0) # [R, ] 为 每个花心大萝卜 找到 与其cost最小的gt 的下标
我的代码会在进入这个判断后稳定跑飞,报错位置在求取下标index这一步
indexes = torch.where(anchor_matching_gt > 1)
报错信息为:
RuntimeError: numel: integer multiplication overflow
不太清楚这个where计算量在哪里,感觉非常的迷惑,希望能指点一下为什么会出现这个问题

yolox_head_fast.py中当G == 0的返回loss有问题

if G == 0: # 所有图片都没有gt时 obj_targets = torch.zeros((N, A, 1), dtype=torch.float32, device=obj_preds.device) num_fg = 1 # 所有图片都没有gt时,设为1 loss_obj = self.bcewithlog_loss(obj_preds, obj_targets) loss_obj = loss_obj.sum() / num_fg losses = { "loss_obj": loss_obj, } return losses
yolox_head_fast.py中的这一段是不是错了
这个losses和下面的对不上
return ( loss, reg_weight * loss_iou, loss_obj, loss_cls, loss_l1, num_fg / max(num_gts, 1), )

支持ppyoloe plus 的转换么?

我自己在aistudio(白嫖v100)上训练了个ppyoloe plus模型,用ppyoloe 的权重转换脚本转换报错:
脚本命令:

python tools/convert_weights.py -f exps/ppyoloe/ppyoloe_crn_s_300e_coco.py -c model_final.pdparams -oc ppyoloe_crn_s_300e_coco.pth -nc 1

image

训练rtdert报错

python tools/train.py -f exps/rtdetr/rtdetr_r18vd_6x_coco.py -d 2 -b 20 -eb 24 -w 4 -ew 4 -lrs 0.1
报错如下:

2023-08-22 17:46:14 | INFO | mmdet.core.trainer:493 - ---> start train epoch1
2023-08-22 17:46:16 | ERROR | mmdet.core.trainer:98 - one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor []] is at version 1; expected version 0 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).
2023-08-22 17:46:16 | INFO | mmdet.core.trainer:343 - Training of experiment is done and the best AP is 0.00
2023-08-22 17:46:16 | ERROR | mmdet.core.launch:147 - An error has been caught in function '_distributed_worker', process 'SpawnProcess-1' (478), thread 'MainThread' (139673154561728):
Traceback (most recent call last):
File "", line 1, in
File "/data/anaconda3/envs/miemie_det/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
│ │ └ 5
│ └ 8
└ <function _main at 0x7f083058cc10>
File "/data/anaconda3/envs/miemie_det/lib/python3.8/multiprocessing/spawn.py", line 129, in _main
return self._bootstrap(parent_sentinel)
│ │ └ 5
│ └ <function BaseProcess._bootstrap at 0x7f083073dee0>

File "/data/anaconda3/envs/miemie_det/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
self.run()
│ └ <function BaseProcess.run at 0x7f083073d550>

File "/data/anaconda3/envs/miemie_det/lib/python3.8/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
│ │ │ │ │ └ {}
│ │ │ │ └
│ │ │ └ (<function _distributed_worker at 0x7f07b1e38160>, 0, (<function main at 0x7f077b30d940>, 2, 2, 0, 'nccl', 'tcp://127.0.0.1:5...
│ │ └
│ └ <function _wrap at 0x7f07b1956310>

File "/data/anaconda3/envs/miemie_det/lib/python3.8/site-packages/torch/multiprocessing/spawn.py", line 69, in _wrap
fn(i, *args)
│ │ └ (<function main at 0x7f077b30d940>, 2, 2, 0, 'nccl', 'tcp://127.0.0.1:56017', (╒═══════════════════════╤═════════════════════...
│ └ 0
└ <function _distributed_worker at 0x7f07b1e38160>
File "/home/a-bamboo/repositories/miemiedetection/mmdet/core/launch.py", line 147, in _distributed_worker
main_func(*args)
│ └ (╒═══════════════════════╤═══════════════════════════════════════════════════════════════════════════════════════════════════...
└ <function main at 0x7f077b30d940>
File "/home/a-bamboo/repositories/miemiedetection/tools/train.py", line 126, in main
trainer.train()
│ └ <function Trainer.train at 0x7f077a68bc10>
└ <mmdet.core.trainer.Trainer object at 0x7f077a65ce20>
File "/home/a-bamboo/repositories/miemiedetection/mmdet/core/trainer.py", line 96, in train
self.train_in_epoch()
│ └ <function Trainer.train_in_epoch at 0x7f077a68bd30>
└ <mmdet.core.trainer.Trainer object at 0x7f077a65ce20>
File "/home/a-bamboo/repositories/miemiedetection/mmdet/core/trainer.py", line 336, in train_in_epoch
self.train_in_iter()
│ └ <function Trainer.train_in_iter at 0x7f077a68be50>
└ <mmdet.core.trainer.Trainer object at 0x7f077a65ce20>
File "/home/a-bamboo/repositories/miemiedetection/mmdet/core/trainer.py", line 350, in train_in_iter
self.train_one_iter()
│ └ <function Trainer.train_one_iter at 0x7f077a68bee0>
└ <mmdet.core.trainer.Trainer object at 0x7f077a65ce20>
File "/home/a-bamboo/repositories/miemiedetection/mmdet/core/trainer.py", line 462, in train_one_iter
self.scaler.scale(loss).backward()
│ │ │ └ tensor(13467.0713, device='cuda:0', grad_fn=)
│ │ └ <function GradScaler.scale at 0x7f07b2133790>
│ └ <torch.cuda.amp.grad_scaler.GradScaler object at 0x7f077a65ce50>
└ <mmdet.core.trainer.Trainer object at 0x7f077a65ce20>
File "/data/anaconda3/envs/miemie_det/lib/python3.8/site-packages/torch/_tensor.py", line 363, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
│ │ │ │ │ │ │ └ None
│ │ │ │ │ │ └ False
│ │ │ │ │ └ None
│ │ │ │ └ None
│ │ │ └ tensor(13467.0713, device='cuda:0', grad_fn=)
│ │ └ <function backward at 0x7f07b1d6cee0>
│ └ <module 'torch.autograd' from '/data/anaconda3/envs/miemie_det/lib/python3.8/site-packages/torch/autograd/init.py'>
└ <module 'torch' from '/data/anaconda3/envs/miemie_det/lib/python3.8/site-packages/torch/init.py'>
File "/data/anaconda3/envs/miemie_det/lib/python3.8/site-packages/torch/autograd/init.py", line 173, in backward
Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass
│ │ └ <method 'run_backward' of 'torch._C._EngineBase' objects>
│ └ <torch._C._EngineBase object at 0x7f07be7d8d80>
└ <class 'torch.autograd.variable.Variable'>

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor []] is at version 1; expected version 0 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).

训练中途出现fast_cocoeval问题

你好,很高兴这里有你的辛苦整理,对我有很大的帮助,但是当我浮现代码跑了2个epoch时候,出现如下错误,请问怎么解决啊

File "C:\D_installation_packet\Anaconda\installion_package\envs\yolox\lib\site-packages\torch\utils\cpp_extension.py", line 1079, in load
return _jit_compile(
└ <function _jit_compile at 0x00000213A2B06550>

File "C:\D_installation_packet\Anaconda\installion_package\envs\yolox\lib\site-packages\torch\utils\cpp_extension.py", line 1292, in _jit_compile
_write_ninja_file_and_build_library(
└ <function _write_ninja_file_and_build_library at 0x00000213A2B06670>

File "C:\D_installation_packet\Anaconda\installion_package\envs\yolox\lib\site-packages\torch\utils\cpp_extension.py", line 1404, in _write_ninja_file_and_build_library
_run_ninja_build(
└ <function _run_ninja_build at 0x00000213A2B06AF0>

File "C:\D_installation_packet\Anaconda\installion_package\envs\yolox\lib\site-packages\torch\utils\cpp_extension.py", line 1683, in _run_ninja_build
raise RuntimeError(message) from e
└ "Error building extension 'fast_cocoeval'"

RuntimeError: Error building extension 'fast_cocoeval'

Process finished with exit code 0

请问可以分享ppyoloe m在coco上的训练log吗

您好,我这边在coco上复现ppyoloe m模型,训练过程loss不收敛,评估mAP为0,请问可能是什么原因呢?方便分享一下您在coco上训练的log吗?
训练命令为CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python tools/train.py -f exps/ppyoloe/ppyoloe_crn_m_300e_coco.py -d 8 -b 224 -eb 16 -c CSPResNetb_m_pretrained.pth --fp16

PPYOLO训练时问题

您好,我用自己的数据训练PP-YOLO在300个epoch的时候验证的map突然降到0.0几,本来已经达到0.8多了,请问这是怎么回事?

critical difference in dfl loss compared to GFL

found some difference of dfl loss compared to the original Gfocal loss
your dfl loss:
miemie

original dfl loss:
pp

weight_right should be label minus dis_left rather than 1 minus dis_left.

any idea on the consequence of the change?

转换RT-DETR 为pth文件失败

大佬,参考readme_rtdetr.txt文件,下载转换权重wget https://bj.bcebos.com/v1/paddledet/models/rtdetr_r18vd_dec3_6x_coco.pdparams
运行
python tools/convert_weights.py -f exps/rtdetr/rtdetr_r18vd_6x_coco.py -c rtdetr_r18vd_dec3_6x_coco.pdparams -oc rtdetr_r18vd_dec3_6x_coco.pth -nc 80 --device gpu 报错。

======================== copy weights ======================== transpose param: name='transformer.decoder.layers.0.self_attn.in_proj_weight' transpose param: name='transformer.decoder.layers.0.self_attn.out_proj.weight' transpose param: name='transformer.decoder.layers.0.cross_attn.sampling_offsets.weight' transpose param: name='transformer.decoder.layers.0.cross_attn.attention_weights.weight' transpose param: name='transformer.decoder.layers.0.cross_attn.value_proj.weight' transpose param: name='transformer.decoder.layers.0.cross_attn.output_proj.weight' transpose param: name='transformer.decoder.layers.0.linear1.weight' transpose param: name='transformer.decoder.layers.0.linear2.weight' transpose param: name='transformer.decoder.layers.1.self_attn.in_proj_weight' transpose param: name='transformer.decoder.layers.1.self_attn.out_proj.weight' transpose param: name='transformer.decoder.layers.1.cross_attn.sampling_offsets.weight' transpose param: name='transformer.decoder.layers.1.cross_attn.attention_weights.weight' transpose param: name='transformer.decoder.layers.1.cross_attn.value_proj.weight' transpose param: name='transformer.decoder.layers.1.cross_attn.output_proj.weight' transpose param: name='transformer.decoder.layers.1.linear1.weight' transpose param: name='transformer.decoder.layers.1.linear2.weight' transpose param: name='transformer.decoder.layers.2.self_attn.in_proj_weight' transpose param: name='transformer.decoder.layers.2.self_attn.out_proj.weight' transpose param: name='transformer.decoder.layers.2.cross_attn.sampling_offsets.weight' transpose param: name='transformer.decoder.layers.2.cross_attn.attention_weights.weight' transpose param: name='transformer.decoder.layers.2.cross_attn.value_proj.weight' transpose param: name='transformer.decoder.layers.2.cross_attn.output_proj.weight' transpose param: name='transformer.decoder.layers.2.linear1.weight' transpose param: name='transformer.decoder.layers.2.linear2.weight' Traceback (most recent call last): File "tools/convert_weights.py", line 599, in <module> main(exp, args) File "tools/convert_weights.py", line 571, in main copy(name2, w, model_std) File "tools/convert_weights.py", line 65, in copy assert mul1 == mul2 AssertionError

关于“regularizer=L2Decay”的torch实现方法

尊敬的老师,您好!
我想请问一下,PP-YOLOE中的WeightDecay是用“regularizer=L2Decay”实现的,PyTorch中好像没有对应的API,这里您是怎么实现的呢
期待您的回复!

GPU 利用率低

你好,很感谢你的分享。是从老版本的project过来的,训练的时候发现GPU利用率比较低,应该怎么处理呢

关于yolox_head_fast.py里面dynamic_k_matching函数的一个小bug

在参考作者代码对官方pipeline进行修改之后,终于统一了数据格式的问题,但是后来又遇到了一个问题,与合理的gt数目有关,源代码是这样的:

# 如果有预测框(花心大萝卜)匹配到了1个以上的gt时,做特殊处理。
       if (anchor_matching_gt > 1).float().sum() > 0:

           # 首先,找到与花心大萝卜具有最小cost的gt。

            # 找到 花心大萝卜 的下标(这是在anchor_matching_gt.shape[N, A]中的下标)。假设有R个花心大萝卜。

           indexes = torch.where(anchor_matching_gt > 1)

           index = torch.stack((indexes[0], indexes[1]), 1)  # [R, 2]  每个花心大萝卜2个坐标。第0个坐标表示第几张图片,第1个坐标表示第几个格子。

我的代码会在进入这个判断后稳定跑飞,报错位置在求取下标index这一步

indexes = torch.where(anchor_matching_gt > 1)

报错信息为:

RuntimeError: numel: integer multiplication overflow

不太清楚这个where计算量在哪里,感觉非常的迷惑,希望能指点一下为什么会出现这个问题

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.