how do i filter for only instance methods - not class methods

isinstance(x, classmethod) does the trick.

my_attrs = [
  name for (name, value) 
  in child_cls.__dict__.items() 
  if not name.startswith('_') and not isinstance(value, classmethod)
]

As an aside, your code could simplify, with duplicate removal and all, into something like

import inspect

def get_fields(cls):
    seen = set()
    for cls in inspect.getmro(cls)[::-1]:
        if cls is object:
            continue
        attr_names = {
            name
            for name in cls.__dict__
            if name not in seen and not name.startswith("_")
        }
        seen.update(attr_names)
        yield (cls.__name__, sorted(attr_names))