leaplabthu / arc Goto Github PK
View Code? Open in Web Editor NEWICCV 2023: Adaptive Rotated Convolution for Rotated Object Detection
License: Apache License 2.0
ICCV 2023: Adaptive Rotated Convolution for Rotated Object Detection
License: Apache License 2.0
前面的步骤都是一样的,最后这个尤其是mmdet部分很难搞
Thanks for your impressive work!
When I use the command " python tools/train.py configs/obb/arc/arc_orcnn_r50fpn1x_ss_dota10_RxFFF_n4.py" for training,it will appear the error"File "/home/amax/anaconda3/envs/arc/lib/python3.7/site-packages/mmcv/utils/registry.py", line 44, in build_from_cfg f'{obj_type} is not in the {registry.name} registry')KeyError: 'OrientedRCNN is not in the models registry'"
Wonderng if it's a version issue with mmcv?Below is the version of the package I installed.
我自己复现的结果只有79点多,所以想给你确认下test的分割方法和提交策略,是不是哪里不同,导致了结果的差异性
python tools/test.py configs/obb/arc/arc_orcnn_r50fpn1x_ss_dota10_RxFFF_n4.py
YOUR_CHECKPOINT_PATH --format-only --options save_dir=YOUR_SAVE_DIR;
作者您好,感谢您的开源代码,我在执行测试命令时,其中的--options后跟的save_dir配置,我不是很明白它的功能是什么,想请您解答一下。
`def _get_rotation_matrix(thetas):
bs, g = thetas.shape
device = thetas.device
thetas = thetas.reshape(-1) # [bs, n] --> [bs x n]
x = torch.cos(thetas)
y = torch.sin(thetas)
x = x.unsqueeze(0).unsqueeze(0) # shape = [1, 1, bs * g]
y = y.unsqueeze(0).unsqueeze(0)
a = x - y
b = x * y
c = x + y
rot_mat_positive = torch.cat((
torch.cat((a, 1-a, torch.zeros(1, 7, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 1, bs*g, device=device), x-b, b, torch.zeros(1, 1, bs*g, device=device), 1-c+b, y-b, torch.zeros(1, 3, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 2, bs*g, device=device), a, torch.zeros(1, 2, bs*g, device=device), 1-a, torch.zeros(1, 3, bs*g, device=device)), dim=1),
torch.cat((b, y-b, torch.zeros(1,1 , bs*g, device=device), x-b, 1-c+b, torch.zeros(1, 4, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 4, bs*g, device=device), torch.ones(1, 1, bs*g, device=device), torch.zeros(1, 4, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 4, bs*g, device=device), 1-c+b, x-b, torch.zeros(1, 1, bs*g, device=device), y-b, b), dim=1),
torch.cat((torch.zeros(1, 3, bs*g, device=device), 1-a, torch.zeros(1, 2, bs*g, device=device), a, torch.zeros(1, 2, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 3, bs*g, device=device), y-b, 1-c+b, torch.zeros(1, 1, bs*g, device=device), b, x-b, torch.zeros(1, 1, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 7, bs*g, device=device), 1-a, a), dim=1)
), dim=0) # shape = [k^2, k^2, bs*g]
rot_mat_negative = torch.cat((
torch.cat((c, torch.zeros(1, 2, bs*g, device=device), 1-c, torch.zeros(1, 5, bs*g, device=device)), dim=1),
torch.cat((-b, x+b, torch.zeros(1, 1, bs*g, device=device), b-y, 1-a-b, torch.zeros(1, 4, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 1, bs*g, device=device), 1-c, c, torch.zeros(1, 6, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 3, bs*g, device=device), x+b, 1-a-b, torch.zeros(1, 1, bs*g, device=device), -b, b-y, torch.zeros(1, 1, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 4, bs*g, device=device), torch.ones(1, 1, bs*g, device=device), torch.zeros(1, 4, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 1, bs*g, device=device), b-y, -b, torch.zeros(1, 1, bs*g, device=device), 1-a-b, x+b, torch.zeros(1, 3, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 6, bs*g, device=device), c, 1-c, torch.zeros(1, 1, bs*g, device=device)), dim=1),
torch.cat((torch.zeros(1, 4, bs*g, device=device), 1-a-b, b-y, torch.zeros(1, 1, bs*g, device=device), x+b, -b), dim=1),
torch.cat((torch.zeros(1, 5, bs*g, device=device), 1-c, torch.zeros(1, 2, bs*g, device=device), c), dim=1)
), dim=0) # shape = [k^2, k^2, bs*g]
mask = (thetas >= 0).unsqueeze(0).unsqueeze(0)
mask = mask.float() # shape = [1, 1, bs*g]
rot_mat = mask * rot_mat_positive + (1 - mask) * rot_mat_negative # shape = [k*k, k*k, bs*g]
rot_mat = rot_mat.permute(2, 0, 1) # shape = [bs*g, k*k, k*k]
rot_mat = rot_mat.reshape(bs, g, rot_mat.shape[1], rot_mat.shape[2]) # shape = [bs, g, k*k, k*k]
return rot_mat`
在这个生成旋转矩阵的函数中,我不太理解得到rot_mat_positive 和rot_mat_negative这两个矩阵 的拼接原理。这只适用于旋转3x3标准卷积,我希望理解这段代码以试图将其扩展到更大的卷积上。
能否提供一些理论上的支持,非常感谢
Can the ARC module be applied to REResNet-18?
I want to request how to use pretrained backbone?
At the test code,I can see the load_checkpoint to load the model.
But when training, can I how to use pretrained backbone?
After get the example_Task1.zip.
I submit it on the website.http://bed4rs.net:8001/evaluation1/
but I don't get the result.
Who face this issue?how to solve?
Thanks for your work, I will appreciate for your reply.
您好,我执行测试命令时,在Merging patch bboxes into full image阶段task处理速度变为0,如图所示。
我在github上搜索相关issues,有解决方案提到“在--options后面增加nproc=1或直接在代码中将nproc改为1,我看到ARC仓库的代码中已经有相关的修改了,实际执行的时候也是single processing。
(https://github.com/jbwang1997/OBBDetection/blob/master/mmdet/datasets/obb/dota.py#L76)
我的电脑显卡是3060 laptop版本,请问作者在执行的时候有碰到过这种问题吗?这种问题是否是因为电脑配置低问题引起的?
我观察到从task从7到9是在缓慢执行的,但是速度实在是太慢了,到9就基本上卡住很长时间。
Which dataset does the ARC-ResNet pretrain on? And if I wanna to do some modification,should I do pretrain again?
当我的CUDA版本为12.2时似乎无法按照你的方法安装mmcv,有什么解决办法吗
Thanks for your impressive work!
I wonder that how many epochs are needed to train Imagenet and then use the pretrain model to train the DOTA dataset? And is the results in Table. 3 under single-scale training ?
hi, I would like to ask how I could replace the original resnet101 backbone with ur arcresnet101. The code from other papers uses pretrained restnet101 as the backbone. Should I just replace the pre-trained model with yours?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.