赞
踩
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。