Initial commit: DCNv4 custom op mirror setup
- Add enhanced README with project structure and quick start guide - Initialize repository with DCNv4 CUDA extension (PyTorch module) - Include classification, detection, and segmentation subdirectories - Reference upstream OpenGVLab DCNv4 implementation Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
61
DCNv4_op/scripts/find_best.py
Normal file
61
DCNv4_op/scripts/find_best.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import json
|
||||
import argparse
|
||||
class LineParser:
|
||||
def __init__(self) -> None:
|
||||
self.data = {}
|
||||
|
||||
def parse(self, line):
|
||||
def startswith(line, lst):
|
||||
for ele in lst:
|
||||
if line.startswith(ele):
|
||||
return True
|
||||
return False
|
||||
|
||||
if not startswith(line, ['1', '2', '3', '4', '5', '6', '7', '8', '9']):
|
||||
return
|
||||
|
||||
eles = line.strip().split()
|
||||
key = eles[0]
|
||||
if key not in self.data:
|
||||
self.data[key] = []
|
||||
|
||||
self.data[key].append([eles[1], float(eles[2])])
|
||||
|
||||
def sort(self):
|
||||
for k, v in self.data.items():
|
||||
nv = sorted(v, key=lambda x: x[1])
|
||||
self.data[k] = nv
|
||||
|
||||
def display_best(self):
|
||||
for k, v in self.data.items():
|
||||
print(f'{k} \t {v[0][0]} \t {v[0][1]:.4f} \t {v[1][0]} \t {v[1][1]:.4f}')
|
||||
|
||||
def display_best_python(self, output):
|
||||
res = {}
|
||||
def parse(spec):
|
||||
d_stride = int(spec.split('/')[0])
|
||||
thread = int(spec.split('/')[1].split('(')[0])
|
||||
m = int(spec.split('(')[1].split(')')[0])
|
||||
return d_stride, thread, m
|
||||
|
||||
for k, v in self.data.items():
|
||||
res[k] = parse(v[0][0])
|
||||
|
||||
with open(output, "w") as f:
|
||||
json.dump(res, f, indent=4)
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--input', type=str)
|
||||
parser.add_argument('--output', type=str)
|
||||
args = parser.parse_args()
|
||||
|
||||
with open(args.input) as f:
|
||||
lines = f.readlines()
|
||||
|
||||
lineparser = LineParser()
|
||||
for line in lines:
|
||||
lineparser.parse(line)
|
||||
lineparser.sort()
|
||||
lineparser.display_best()
|
||||
lineparser.display_best_python(args.output)
|
||||
Reference in New Issue
Block a user