1.采用rolabelImg标注产生相应的XML标签文件

2.下载代码及安装相应的依赖环境

git clone https://github.com/ultralytics/ultralytics.git

下面是我安装的相应依赖,torch可在官网命令安装

absl-py==2.1.0
actionlib==1.12.1
angles==1.9.12
bondpy==1.8.5
cachetools==5.3.3
camera_calibration_parsers==1.11.13
catkin==0.7.29
certifi==2024.2.2
charset-normalizer==3.3.2
coloredlogs==15.0.1
contourpy==1.1.1
controller_manager==0.18.4
controller_manager_msgs==0.18.4
cycler==0.12.1
diagnostic_analysis==1.9.7
diagnostic_common_diagnostics==1.9.7
diagnostic_updater==1.9.7
dynamic_reconfigure==1.6.5
filelock==3.13.1
flatbuffers==23.5.26
fonttools==4.50.0
fsspec==2024.3.1
gazebo_ros==2.8.7
gencpp==0.6.6
geneus==2.2.6
genlisp==0.4.16
genmsg==0.5.17
gennodejs==2.0.1
genpy==0.6.16
google-auth==2.28.2
google-auth-oauthlib==0.4.6
grpcio==1.62.1
humanfriendly==10.0
idna==3.6
importlib_metadata==7.0.2
importlib_resources==6.3.1
interactive-markers==1.11.5
Jinja2==3.1.3
joint_state_publisher==1.12.15
kdl-parser-py==1.13.3
kiwisolver==1.4.5
lanelet2-python==1.0.1
laser_geometry==1.6.7
Markdown==3.6
markdown-it-py==3.0.0
MarkupSafe==2.1.5
matplotlib==3.7.5
mdurl==0.1.2
message_filters==1.14.13
#mmsegmentation== 0.11.0               /data/SegFormer
mpmath==1.3.0
networkx==3.1
nmea_navsat_driver==0.5.2
numpy==1.24.4
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==8.9.2.26
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.19.3
nvidia-nvjitlink-cu12==12.4.99
nvidia-nvtx-cu12==12.1.105
oauthlib==3.2.2
onnx==1.15.0
onnxruntime==1.15.1
onnxsim==0.4.36
opencv-python==4.9.0.80
packaging==24.0
pandas==2.0.3
pillow==10.2.0
pip==23.3.1
protobuf==5.26.0
psutil==5.9.8
py-cpuinfo==9.0.0
pyasn1==0.5.1
pyasn1-modules==0.3.0
Pygments==2.17.2
pyparsing==3.1.2
python-dateutil==2.9.0.post0
python_qt_binding==0.4.4
pytz==2024.1
PyYAML==6.0.1
qt-dotgraph==0.4.2
qt-gui==0.4.2
qt-gui-cpp==0.4.2
qt-gui-py-common==0.4.2
requests==2.31.0
requests-oauthlib==1.4.0
resource_retriever==1.12.7
rich==13.7.1
rosapi==0.11.16
rosbag==1.14.13
rosboost-cfg==1.14.9
rosbridge-library==0.11.16
rosbridge-server==0.11.16
rosclean==1.14.9
roscreate==1.14.9
rosgraph==1.14.13
roslaunch==1.14.13
roslib==1.14.9
roslint==0.11.2
roslz4==1.14.13
rosmake==1.14.9
rosmaster==1.14.13
rosmsg==1.14.13
rosnode==1.14.13
rosparam==1.14.13
rospy==1.14.13
rosservice==1.14.13
rostest==1.14.13
rostopic==1.14.13
rosunit==1.14.9
roswtf==1.14.13
rqt_action==0.4.9
rqt_bag==0.5.1
rqt_bag_plugins==0.5.1
rqt_console==0.4.9
rqt_dep==0.4.9
rqt_graph==0.4.11
rqt_gui==0.5.3
rqt_gui_py==0.5.3
rqt_launch==0.4.8
rqt_logger_level==0.4.8
rqt-moveit==0.5.10
rqt_msg==0.4.8
rqt_nav_view==0.5.7
rqt_plot==0.4.13
rqt_pose_view==0.5.8
rqt_publisher==0.4.8
rqt_py_common==0.5.3
rqt_py_console==0.4.8
rqt-reconfigure==0.5.4
rqt_robot_dashboard==0.5.7
rqt-robot-monitor==0.5.14
rqt_robot_steering==0.5.10
rqt_runtime_monitor==0.5.7
rqt-rviz==0.7.0
rqt_service_caller==0.4.8
rqt_shell==0.4.9
rqt_srv==0.4.8
rqt_tf_tree==0.6.0
rqt_top==0.4.8
rqt_topic==0.4.11
rqt_web==0.4.8
rsa==4.9
rviz==1.13.29
scipy==1.10.1
seaborn==0.13.2
sensor-msgs==1.12.8
setuptools==68.2.2
six==1.16.0
smach==2.0.1
smach_ros==2.0.1
smclib==1.8.5
sound-play==0.3.15
sympy==1.12
tensorboard==2.12.0
tensorboard-data-server==0.7.2
tensorboard-plugin-wit==1.8.1
tensorboardX==2.6.2.2
terminaltables==3.1.10
tf==1.12.1
tf_conversions==1.12.1
tf2_geometry_msgs==0.6.5
tf2_kdl==0.6.5
tf2_py==0.6.5
tf2_ros==0.6.5
thop==0.1.1.post2209072238
topic_tools==1.14.13
#torch==1.10.1+cu111
#torchaudio==0.10.1+cu111
#torchvision==0.11.2+cu111
tqdm==4.66.2
triton==2.2.0
typing_extensions==4.10.0
tzdata==2024.1
urdfdom-py==0.4.6
urllib3==2.2.1
Werkzeug==3.0.1
wheel==0.41.2
xacro==1.13.18
zipp==3.18.1

3.将相应的XML文件转化为dota格式的标签文件,转换代码可参考我的上一篇博客

4.将dota格式的标签文件转化为YOLOv8训练所需的YOLO格式

def convert_dota_to_yolo_obb(dota_root_path: str):
    """
    Converts DOTA dataset annotations to YOLO OBB (Oriented Bounding Box) format.

    The function processes images in the 'train' and 'val' folders of the DOTA dataset. For each image, it reads the
    associated label from the original labels directory and writes new labels in YOLO OBB format to a new directory.

    Args:
        dota_root_path (str): The root directory path of the DOTA dataset.

    Example:
        ```python
        from ultralytics.data.converter import convert_dota_to_yolo_obb

        convert_dota_to_yolo_obb('path/to/DOTA')
        ```

    Notes:
        The directory structure assumed for the DOTA dataset:

            - DOTA
                ├─ images
                │   ├─ train
                │   └─ val
                └─ labels
                    ├─ train_original
                    └─ val_original

        After execution, the function will organize the labels into:

            - DOTA
                └─ labels
                    ├─ train
                    └─ val
    """
    dota_root_path = Path(dota_root_path)

    # Class names to indices mapping
    class_mapping = {
        "gfb": 0,
    }

    def convert_label(image_name, image_width, image_height, orig_label_dir, save_dir):
        """Converts a single image's DOTA annotation to YOLO OBB format and saves it to a specified directory."""
        orig_label_path = orig_label_dir / f"{image_name}.txt"
        save_path = save_dir / f"{image_name}.txt"

        with orig_label_path.open("r") as f, save_path.open("w") as g:
            lines = f.readlines()
            for line in lines:
                parts = line.strip().split()
                if len(parts) < 9:
                    continue
                class_name = parts[8]
                class_idx = class_mapping[class_name]
                coords = [float(p) for p in parts[:8]]
                normalized_coords = [
                    coords[i] / image_width if i % 2 == 0 else coords[i] / image_height for i in range(8)
                ]
                formatted_coords = ["{:.6g}".format(coord) for coord in normalized_coords]
                g.write(f"{class_idx} {' '.join(formatted_coords)}\n")

    for phase in ["train", "val"]:
        image_dir = dota_root_path / "images" / phase
        orig_label_dir = dota_root_path / "labels" / f"{phase}_original"
        save_dir = dota_root_path / "labels" / phase

        save_dir.mkdir(parents=True, exist_ok=True)

        image_paths = list(image_dir.iterdir())
        for image_path in TQDM(image_paths, desc=f"Processing {phase} images"):
            if image_path.suffix != ".png":
                continue
            image_name_without_ext = image_path.stem
            img = cv2.imread(str(image_path))
            h, w = img.shape[:2]
            convert_label(image_name_without_ext, w, h, orig_label_dir, save_dir)

from ultralytics.data.converter import convert_dota_to_yolo_obb

convert_dota_to_yolo_obb("/data/data/Ship_dota_v1.5_1024/DOTA")

5.修改yolov8-obb.yaml的类别

6.修改dota8-obb.yaml文件路径及类别 

path: /data/data/Ship_dota_v1.5_1024/DOTA # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

# Classes for DOTA 1.0
names:
  0: gfb

# Download script/URL (optional)
download: https://github.com/ultralytics/yolov5/releases/download/v1.0/dota8.zip

 7.训练

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n-obb.yaml')  # build a new model from YAML
model = YOLO('yolov8n-obb.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n-obb.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='dota8-obb.yaml', epochs=1000, imgsz=640)

8.测试 

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n-obb.pt')  # load an official model
#model = YOLO('path/to/best.pt')  # load a custom model

# Predict with the model
#results = model('https://ultralytics.com/images/bus.jpg')  # predict on an image
results = model('./P0006.png')  # predict on an image
# print("results:", results)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐