基於paddledetection在ROS中搭建紅綠燈檢測控制車模運動(2)—— 數據集製作以及訓練

前言

第一節:
基於paddledetection在ROS中搭建紅綠燈檢測控制車模運動(1)—— 環境搭建準備以及軟件安裝
第二節:
基於paddledetection在ROS中搭建紅綠燈檢測控制車模運動(2)—— 數據集製作以及訓練
第三節:
基於paddledetection在ROS中搭建紅綠燈檢測控制車模運動(3)—— 使用訓練結果在ros中仿真紅綠燈控制小車運動

項目地址

訓練部分aistudio地址:傳動門
racecar仿真軟件下載地址:傳送門
本地項目下載地址:傳送門

數據準備

打開仿真環境:
在這裏插入圖片描述

roslaunch racecar_gazebo racecar_normal_light_runway.launch

在本地pycharm中新建一個工程文件:proj6_lightContrl/src在src下創建腳本讀取ros中攝像頭數據並按鍵截圖保存本地,prtSc.py文件如下:

import rospy,cv2
from sensor_msgs.msg import Image
import sys
sys.path.append("~/catkin_workspace/install/lib/python3/dist-packages/")
import cv_bridge

class Follower:
  def __init__(self):
    self.bridge = cv_bridge.CvBridge()
    #cv2.namedWindow("window", 1)
    self.image_sub = rospy.Subscriber('/camera/zed/rgb/image_rect_color',
                                      Image, self.image_callback)
    self.num1 = 0
    self.num2 = 0
  def image_callback(self, msg):
    self.image = self.bridge.imgmsg_to_cv2(msg,desired_encoding='bgr8')
    cv2.imshow("pic",self.image)
    k = cv2.waitKey(3)
    if k == 27:  # 按ESC退出
        cv2.destroyAllWindows()

    elif k == ord('r'):  # 按r保存並退出
        self.num1 += 1
        cv2.imwrite("./red/" + str(self.num1) + ".jpg", self.image)
        print("保存成功:" + str(self.num1) + ".jpg")
        
    elif k == ord('g'):  # 按r保存並退出
        self.num2 += 1
        cv2.imwrite("./green/" + str(self.num2) + ".jpg", self.image)
        print("保存成功:" + str(self.num2) + ".jpg")


if __name__ == '__main__':
    rospy.init_node('follower')
    follower = Follower()
    rospy.spin()

按鍵r保存攝像頭圖片到red文件夾下,按鍵g保存到green文件夾下:
在這裏插入圖片描述
調整角度和遠近製作自己的數據集:
在這裏插入圖片描述
在這裏插入圖片描述

圖片標註

cd labelImg
python labelImg.py

打開圖片路徑:
在這裏插入圖片描述
選擇框選:
在這裏插入圖片描述
標註完成:
在這裏插入圖片描述

在aistudio上準備描述文件

在aistudio上創建項目(以下操作均在aistudio上進行)
首先下載paddledetection:

!git clone https://github.com/PaddlePaddle/PaddleDetection.git

將創建的red和green文件夾壓縮上傳到aistudio上的paddledetection中dataset下的my_light下執行解壓命令:

%cd PaddleDetection-release-0.3/dataset/my_light/
!unzip picture.zip

在這裏插入圖片描述
安裝paddledetection依賴:

%cd ~/PaddleDetection-release-0.3/
!pip install -r requirements.txt

測試aistudio環境:

#測試項目環境
!export PYTHONPATH=`pwd`:$PYTHONPATH
!python ppdet/modeling/tests/test_architectures.py

輸出如下即可:
在這裏插入圖片描述
在my_light文件夾下創建green_xmls和red_xmls存放xml文件,方便記錄txt:

%cd ~/PaddleDetection-release-0.3/dataset/my_light/
%mkdir green_xmls
%cd ./green
%mv *.xml ../green_xmls
%cd ~/PaddleDetection-release-0.3/dataset/my_light/
%mkdir red_xmls
%cd ./red
%mv *.xml ../red_xmls

在這裏插入圖片描述
記錄xml和picture的關係:

# 記錄train圖片
import os
import random
 
path = "/home/aistudio/PaddleDetection-release-0.3/dataset/my_light/"
total_red = os.listdir(path + "red/")
total_green = os.listdir(path + "green/")

num = len(total_red)
list=range(num)

ftrain = open('/home/aistudio/PaddleDetection-release-0.3/dataset/my_light/train.txt', 'w')
fval = open('/home/aistudio/PaddleDetection-release-0.3/dataset/my_light/val.txt', 'w')

for i  in list:
    if i % 9 != 0:
        name=total_red[i][:-4]
        writeName = "red/" + name + ".jpg " + "red_xmls/" + name + ".xml\n"
        ftrain.write(writeName)
    else:
        name=total_red[i][:-4]
        writeName = "red/" + name + ".jpg " + "red_xmls/" + name + ".xml\n"
        fval.write(writeName)

for i  in list:
    if i % 9 != 0:
        name=total_green[i][:-4]
        writeName = "green/" + name + ".jpg " + "green_xmls/" + name + ".xml\n"
        ftrain.write(writeName)
    else:
        name=total_green[i][:-4]
        writeName = "green/" + name + ".jpg " + "green_xmls/" + name + ".xml\n"
        fval.write(writeName)

ftrain.close()
fval.close()

輸出的train.txt如下:
在這裏插入圖片描述
輸出的val.txt如下:
在這裏插入圖片描述
數據好像有點少哎!
在train.txt同目錄創建label_list.txt:
在這裏插入圖片描述

訓練

修改configs/ssd/ssd_mobilenet_v1_voc.yml這個文件,主要修改位置:

  1. num_classes: 3

  2. trainReader下的anno_path和dataset_dir

    anno_path: train.txt
    dataset_dir: dataset/my_light

  3. EvalReader下的anno_path和dataset_dir

    anno_path: val.txt
    dataset_dir: dataset/my_light

  4. TestReader下的anno_path和dataset_dir:

    dataset_dir: dataset/my_light
    anno_path: label_list.txt

訓練:

#訓練模型
%cd ~/PaddleDetection-release-0.3/
# ssd訓練
!python -u tools/train.py -c configs/ssd/ssd_mobilenet_v1_voc.yml -o --eval

等待訓練完成即可:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章