Closed zgsxwsdxg closed 6 months ago
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
以及现在已有FCOSR,请关注develop分支
谢谢,目前fcosr支持 deploy不?
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
PP-YOLOE-R是基于PP-YOLOE还是PP-YOLOE+ 的改进?有paper否?谢谢!
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
PP-YOLOE-R是基于PP-YOLOE还是PP-YOLOE+ 的改进?有paper否?谢谢!
PP-YOLOE-R基于PP-YOLOE进行改进,技术报告预计下周发布到arxiv,模型下月上旬之前发布,FCOSR/S2ANet支持PaddleInference部署,PP-YOLOE-R支持PaddleInference和Paddle-TRT部署(对于TRT版本和Paddle版本有要求)
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
PP-YOLOE-R是基于PP-YOLOE还是PP-YOLOE+ 的改进?有paper否?谢谢!
PP-YOLOE-R基于PP-YOLOE进行改进,技术报告预计下周发布到arxiv,模型下月上旬之前发布,FCOSR/S2ANet支持PaddleInference部署,PP-YOLOE-R支持PaddleInference和Paddle-TRT部署(对于TRT版本和Paddle版本有要求)
感谢,耐心解答!
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
PP-YOLOE-R是基于PP-YOLOE还是PP-YOLOE+ 的改进?有paper否?谢谢!
PP-YOLOE-R基于PP-YOLOE进行改进,技术报告预计下周发布到arxiv,模型下月上旬之前发布,FCOSR/S2ANet支持PaddleInference部署,PP-YOLOE-R支持PaddleInference和Paddle-TRT部署(对于TRT版本和Paddle版本有要求)
发现 develop分支中 fcosr和s2a 算法的速度对比,没有写在readme中
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
PP-YOLOE-R是基于PP-YOLOE还是PP-YOLOE+ 的改进?有paper否?谢谢!
PP-YOLOE-R基于PP-YOLOE进行改进,技术报告预计下周发布到arxiv,模型下月上旬之前发布,FCOSR/S2ANet支持PaddleInference部署,PP-YOLOE-R支持PaddleInference和Paddle-TRT部署(对于TRT版本和Paddle版本有要求)
发现 develop分支中 fcosr和s2a 算法的速度对比,没有写在readme中
FCOSR速度是快于s2anet的,readme中目前没有包含速度信息,且s2anet难以使用TensorRT加速
近期会发布PP-YOLOE-R旋转框检测,以及现在已有FCOSR,请关注develop分支 https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/rotate
PP-YOLOE-R是基于PP-YOLOE还是PP-YOLOE+ 的改进?有paper否?谢谢!
PP-YOLOE-R基于PP-YOLOE进行改进,技术报告预计下周发布到arxiv,模型下月上旬之前发布,FCOSR/S2ANet支持PaddleInference部署,PP-YOLOE-R支持PaddleInference和Paddle-TRT部署(对于TRT版本和Paddle版本有要求)
发现 develop分支中 fcosr和s2a 算法的速度对比,没有写在readme中
FCOSR速度是快于s2anet的,readme中目前没有包含速度信息,且s2anet难以使用TensorRT加速
你好,我最近看了您的PP-YOLOE-R 代码,但是我尝试训练自己的数据,格式是labelme的,有点疑惑。labelme标注的如何转coco,当然通用目标检测转换没问题,但是对于旋转目标,我想问coco格式bbox字段填啥?segmentation字段填啥?咱们PaddleDetection框架提供x2coco.py脚本是否支持旋转目标labelme的转换?期待您的解答,谢谢!
x2coco.py脚本应该可以直接使用,旋转框使用的数据集严格遵守COCO格式,bbox字段填写水平框,segmentation字段填写标注结果(x1, y1, x2, y2, x3, y3, x4, y4)
x2coco.py脚本应该可以直接使用,旋转框使用的数据集严格遵守COCO格式,bbox字段填写水平框,segmentation字段填写标注结果(x1, y1, x2, y2, x3, y3, x4, y4)
再问下两个疑惑: 1.segmentation字段(x1, y1, x2, y2, x3, y3, x4, y4) 的点有没有顺序要求,从左上顶点开始顺时针?或者其他?
x2coco.py脚本应该可以直接使用,旋转框使用的数据集严格遵守COCO格式,bbox字段填写水平框,segmentation字段填写标注结果(x1, y1, x2, y2, x3, y3, x4, y4)
再问下两个疑惑: 1.segmentation字段(x1, y1, x2, y2, x3, y3, x4, y4) 的点有没有顺序要求,从左上顶点开始顺时针?或者其他? 2. 如果segmentation不为空,ppyoloer算法数据读取模块,会自动确认为走回归算法,不是走分割算法? 期待回复,谢谢!
x2coco.py脚本应该可以直接使用,旋转框使用的数据集严格遵守COCO格式,bbox字段填写水平框,segmentation字段填写标注结果(x1, y1, x2, y2, x3, y3, x4, y4)
我觉得,是不是在数据说明readme那块,得明确说明下,要不有迷惑。这是另一个人解释和你不同得看法https://github.com/PaddlePaddle/PaddleDetection/issues/7326#issuecomment-1313542810
x2coco.py脚本应该可以直接使用,旋转框使用的数据集严格遵守COCO格式,bbox字段填写水平框,segmentation字段填写标注结果(x1, y1, x2, y2, x3, y3, x4, y4)
configs/datasets/spine_coco.yml 中训练自动下载得数据coco格式bbox是[x_center, y_center, width, height, angle] 有点疑惑? "annotations": [ { "area": 9453, "bbox": [ 380, 695, 137, 69, 2.544237 ], "category_id": 1, "id": 34, "ignore": 0, "image_id": 10004, "iscrowd": 0, "segmentation": [] }, { "area": 11925, "bbox": [ 342, 595, 159, 75, 2.915072 ], "category_id": 2, "id": 35, "ignore": 0, "image_id": 10004, "iscrowd": 0, "segmentation": [] },
@zgsxwsdxg
cd dataset/spine_coco/
python download_spine_coco.py
我觉得,是不是在数据说明readme那块,得明确说明下,要不有迷惑。这是另一个人解释和你不同得看法#7326 (comment)
感谢你的建议,我们在数据README那块新增下数据格式的说明
@zgsxwsdxg
- segmentation字段顺时针或者逆时针都行,不能为空,旋转框检测需要从segmentation中读取旋转框标注
- 旋转框使用4个点进行标注,本身可以看作是简化的segmentaion,但其实还是作的检测任务,没有分割任务这一说,另外分割任务也需要分割标注
- 你下载的spine_coco格式是老的格式,其coco格式不是严格按照coco的定义来的,我们在PaddleDetection 2.5之后重构了数据格式,使其完全遵循COCO标准,并使用segmentation字段存储旋转框的4个点的坐标,你可以使用PaddleDetection 2.5或者PaddleDetection develop运行以下命令重新获取新的数据
cd dataset/spine_coco/ python download_spine_coco.py
感谢你的解释,豁然开朗。继续问下,那个数据标注的话是必须rotate rect 还是任意凸四边形的四个点就行?
@zgsxwsdxg 建议rotate rect,其实任意凸四边形也可,不过凸四边形会被转换成rotate rect进行处理,输出的结果也是rotate rect的四个顶点
@zgsxwsdxg 建议rotate rect,其实任意凸四边形也可,不过凸四边形会被转换成rotate rect进行处理,输出的结果也是rotate rect的四个顶点
那我基于labelme标注旋转数据的话,只能polygon模式标注,那就是任意凸四边的四个点,目前好像也没什么好的标注工具支持rotate rect
@zgsxwsdxg 可以直接使用四个点的polygon,我们在做数据预处理时,是把polygon转换成rotate rect
四个点的polygon,我们在做数据预处理时,是把polygon转换成rotate rec
ok,好的
@wangxinxin08 你好,我看了你的ppyoloe-r readme,可以使用Paddle模式或者Paddle-TRT模式进行测速。当使用Paddle-TRT模式测速时,需要确保TensorRT版本大于8.2, PaddlePaddle版本大于2.4.0rc0。但是paddle框架官网readme好像:Latest PaddlePaddle Release: [v2.3] https://github.com/PaddlePaddle/Paddle/tree/release/2.4 还有飞桨开发文档也只给到 2.3.2 文档版,我该怎么装 2.4?需要自己编译么?没有pip包?paddle2.3.2版本是否可以在PaddleDetection 的develop分支中训练ppyoloe-r?
@zgsxwsdxg Paddle 2.4版本可以从https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html 下载,这个只是在使用Paddle-TRT推理的时候有限制,训练无版本限制,只使用Paddle不使用TRT也无版本限制
@zgsxwsdxg Paddle 2.4版本可以从https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html 下载,这个只是在使用Paddle-TRT推理的时候有限制,训练无版本限制,只使用Paddle不使用TRT也无版本限制
感谢!再问下您,学习率设置这块,如果GPU卡数或者batch size发生了改变,你需要按照公式 lrnew = lrdefault (batch_sizenew GPU_numbernew) / (batch_sizedefault * GPU_numberdefault) 调整学习率。 就是训练的时候,不知道GPU_number从哪里设置,我是一机两卡。GPU_number是通过那个参数改了?配置文件中没发现。export CUDA_VISIBLE_DEVICES=0,1就可以了?还需要改别的地方么?
调整学习率公式,我懂重新计算,就是不知道gpu数量在那块设置为2
@zgsxwsdxg 多机的启动命令是python -m paddle.distributed.launch --gpus 0,1 tools/train.py xxxx,--gpus指定卡叔
@zgsxwsdxg 多机的启动命令是python -m paddle.distributed.launch --gpus 0,1 tools/train.py xxxx,--gpus指定卡叔
感谢你耐心解答!继续请教你,两个问题: 1.这个公式中batch_size 是总的batch_size, 还是每个卡上的batch_size?
配置中都是单张卡的batch size, 能使用-o TrainReader.batch_size=2
这种方式来进行修改
配置中都是单张卡的batch size, 能使用
-o TrainReader.batch_size=2
这种方式来进行修改
有没有指定总batch_size, PaddleDetection框架会自动均分每卡数量的方式?
配置中都是单张卡的batch size, 能使用
-o TrainReader.batch_size=2
这种方式来进行修改有没有指定总batch_size, PaddleDetection框架会自动均分每卡数量的方式?
目前是没有的
配置中都是单张卡的batch size, 能使用
-o TrainReader.batch_size=2
这种方式来进行修改有没有指定总batch_size, PaddleDetection框架会自动均分每卡数量的方式?
目前是没有的
ok,谢谢
-o TrainReader.batch_size=2
你好,我想请教你两个问题:
@zgsxwsdxg
-o LearningRate.base_lr=0.001
来设置@zgsxwsdxg
- 可以通过
-o LearningRate.base_lr=0.001
来设置- DOTA是使用离线切图,多尺度训练在切图的时候已经把数据处理了,多尺度训练的配置文件以_ms结尾
那你的意思是ms和非ms版本yml文件配置,只是在离线数据路径配置那块不同是吧?
@zgsxwsdxg 是的,配置是一样的,数据不一样,多尺度训练和测试的数据集是离线处理得到的
@zgsxwsdxg 是的,配置是一样的,数据不一样,多尺度训练和测试的数据集是离线处理得到的
谢谢你的回答,还有个问题,我看你们的Train和Eval数据集都是一份,那你们怎么挑出准确率最好的模型?是拿训练最后的模型?并且这个训练集很大,如果开启eval选项的话,训练时间会很长。 `TrainDataset: !COCODataSet image_dir: trainval1024/images anno_path: trainval1024/DOTA_trainval1024.json dataset_dir: dataset/dota_ms/ data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd', 'gt_poly']
EvalDataset: !COCODataSet image_dir: trainval1024/images anno_path: trainval1024/DOTA_trainval1024.json dataset_dir: dataset/dota_ms/ data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd', 'gt_poly']
TestDataset: !ImageFolder anno_path: test1024/DOTA_test1024.json dataset_dir: dataset/dota_ms/`
训练集和eval数据集是一份,这样基于一份数据集挑选准确率最好的模型不太合适,因为训练集和它是一样的?谢谢!
@zgsxwsdxg 没有选择模型,直接使用的最后一个模型,没有开启--eval
选项,也就是没有选择模型
@zgsxwsdxg 没有选择模型,直接使用的最后一个模型,没有开启
--eval
选项,也就是没有选择模型
好的,知道了,谢谢你的耐心回答。
@zgsxwsdxg 建议rotate rect,其实任意凸四边形也可,不过凸四边形会被转换成rotate rect进行处理,输出的结果也是rotate rect的四个顶点
你好,再次请教你,标注为coco格式,segmentation字段存储的点多于4以上,是一个ploygon,想做rotate object detect。咨询两点:
谢谢,期待回复!
@zgsxwsdxg
2. Poly2Rbox
@zgsxwsdxg
- 不支持4个点以上的polygon标注
- 详见Poly2Rbox的预处理函数 简单的问题可以尝试自行解决
我 看了你们的Poly2Rbox代码 `def poly2rbox_oc_np(poly): """convert poly to rbox (0, pi / 2]
Args:
poly: [x1, y1, x2, y2, x3, y3, x4, y4]
Returns:
rbox: [cx, cy, w, h, angle]
"""
points = np.array(poly, dtype=np.float32).reshape((-1, 2))
(cx, cy), (w, h), angle = cv2.minAreaRect(points)
# using the new OpenCV Rotated BBox definition since 4.5.1
# if angle < 0, opencv is older than 4.5.1, angle is in [-90, 0)
if angle < 0:
angle += 90
w, h = h, w
# convert angle to [0, 90)
if angle == -0.0:
angle = 0.0
if angle == 90.0:
angle = 0.0
w, h = h, w
angle = angle / 180 * np.pi
return [cx, cy, w, h, angle]`
其中 (cx, cy), (w, h), angle = cv2.minAreaRect(points) 函数传入的是一个轮廓polygon,返回的是一个轮廓的最小外接矩形(roate rect)。那么points参数 应该是一个轮廓就行,没有四个点限制,是不是那块有限制必须的4点?谢谢!
@zgsxwsdxg
- 不支持4个点以上的polygon标注
- 详见Poly2Rbox的预处理函数 简单的问题可以尝试自行解决
有个训练中报错的问题请教你,我训练自己的数据 不开--eval选项 可以正常训完,模型可以正常预测。
开了--eval 想挑选最好的模型,训练在一个epoch后报错,帮忙看看,报错如下:
`loading annotations into memory...
Done (t=0.11s)
creating index...
index created!
W1215 16:19:22.622738 554162 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 11.2
W1215 16:19:22.629261 554162 gpu_resources.cc:91] device: 0, cuDNN Version: 8.1.
[12/15 16:19:24] ppdet.utils.checkpoint INFO: Finish loading model weights: /home/developer/.cache/paddle/weights/CSPResNetb_s_pretrained.pdparams
[12/15 16:19:26] ppdet.engine INFO: Epoch: [0] [ 0/188] learning_rate: 0.000000 loss: 7.044613 loss_cls: 5.257792 loss_iou: 0.534507 loss_dfl: 9.011045 eta: 3:45:27 batch_cost: 1.9987 data_cost: 0.0004 ips: 2.0013 images/s
[12/15 16:19:41] ppdet.engine INFO: Epoch: [0] [ 50/188] learning_rate: 0.000200 loss: 3.195375 loss_cls: 1.462456 loss_iou: 0.514252 loss_dfl: 8.853580 eta: 0:31:16 batch_cost: 0.2449 data_cost: 0.0002 ips: 16.3309 images/s
[12/15 16:19:56] ppdet.engine INFO: Epoch: [0] [100/188] learning_rate: 0.000400 loss: 2.780653 loss_cls: 1.465402 loss_iou: 0.374744 loss_dfl: 7.299526 eta: 0:29:24 batch_cost: 0.2495 data_cost: 0.0002 ips: 16.0305 images/s
[12/15 16:20:12] ppdet.engine INFO: Epoch: [0] [150/188] learning_rate: 0.000600 loss: 2.631783 loss_cls: 1.407633 loss_iou: 0.362150 loss_dfl: 5.920934 eta: 0:28:33 batch_cost: 0.2473 data_cost: 0.0002 ips: 16.1748 images/s
[12/15 16:20:24] ppdet.utils.checkpoint INFO: Save checkpoint: output/ppyoloe_r_crn_s_3x_ucas_aod
loading annotations into memory...
Done (t=0.02s)
creating index...
index created!
loading annotations into memory...
Done (t=0.18s)
creating index...
index created!
Traceback (most recent call last):
File "tools/train.py", line 188, in
File "/data/duxiaogang/anaconda3/envs/pdet-dev/lib/python3.7/site-packages/paddle/fluid/dataloader/worker.py", line 169, in reraise
raise self.exc_type(msg)
ValueError: DataLoader worker(0) caught ValueError with message:
Traceback (most recent call last):
File "/data/duxiaogang/anaconda3/envs/pdet-dev/lib/python3.7/site-packages/paddle/fluid/dataloader/worker.py", line 336, in _worker_loop
batch = fetcher.fetch(indices)
File "/data/duxiaogang/anaconda3/envs/pdet-dev/lib/python3.7/site-packages/paddle/fluid/dataloader/fetcher.py", line 134, in fetch
data = self.collate_fn(data)
File "/data/duxiaogang/PaddleDetection-dev/ppdet/data/reader.py", line 91, in call
batch_data = default_collate_fn(data)
File "/data/duxiaogang/PaddleDetection-dev/ppdet/data/utils.py", line 62, in default_collate_fn
for key in sample
File "/data/duxiaogang/PaddleDetection-dev/ppdet/data/utils.py", line 62, in
self._eval_with_loader(self._eval_loader)
File "/data/duxiaogang/PaddleDetection-dev/ppdet/engine/trainer.py", line 598, in _eval_with_loader for step_id, data in enumerate(loader): File "/data/duxiaogang/PaddleDetection-dev/ppdet/data/reader.py", line 209, in next return next(self.loader) File "/data/duxiaogang/anaconda3/envs/pdet-dev/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py", line 746, in next data = self._reader.read_next_varlist() SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception. [Hint: Expected killed != true, but received killed_:1 == true:1.] (at /paddle/paddle/fluid/operators/reader/blocking_queue.h:166)`
是不是yml EvalReader那块配置有问题?我是用的官方的,我需要改什么才能--eval选项,跑起来?期待你的回答 如下是:我的yml配置 `worker_num: 4 image_height: &image_height 1024 image_width: &image_width 1024 image_size: &image_size [image_height, image_width]
TrainReader: sample_transforms:
EvalReader: sample_transforms:
TestReader: sample_transforms:
collate_batch: false
- 其他的预处理函数要求必须是4个点的Polygon,详见Poly2Array
- EvalReader配置错误,缺少
collate_batch: false
谢谢,明白了
- 其他的预处理函数要求必须是4个点的Polygon,详见Poly2Array
- EvalReader配置错误,缺少
collate_batch: false
你好,请教下,如何在开启--eval选项时,将评估的iou设置为0.75? 就是打印的这个信息 [12/27 16:05:11] ppdet.metrics.metrics INFO: mAP(0.50, 11point) = 86.82%中0.5如何配置为0.75,在那个地方配置?谢谢!期待老师的答复!
- 其他的预处理函数要求必须是4个点的Polygon,详见Poly2Array
- EvalReader配置错误,缺少
collate_batch: false
还有一个问题 ppyoloer 中的配置 LearningRate: base_lr: 0.008 # 由于总的batch_size不变,不需要修改学习率 schedulers:
这个epochs一般怎么设置?有没有经验公式? 原始dota数据设置的steps参数,现在是epochs?
问题确认 Search before asking
请提出你的问题 Please ask your question
PaddleDetection中大部分都是通用目标检测算法,是否会考虑增加最新旋转目标检测的算法,目前看只有s2a? 谢谢