YOLOv5_TransferLearning1

BERT·2023년 6월 15일
0

Perception

목록 보기
16/20

python interpreter error 발생으로 멘붕 😵️

A100 server docker로 진행

A100 docker
목표 : kitti 10,000 + nuScenes 1,500 yolov5로 훈련 후 성능 평가
docker 내에서 TL > datasets는 datasets와 연결됨

bert
├ datasets
│ ├ kitti
│ ├ nuscenes
│ └ yolo
│ 	├ images
│ 	├ labels
│ 	├ train.txt
│ 	├ val.txt
│ 	└ kitti.yaml
└ TL
  ├ datasets
  ├ src
  │ ├ utils
  │ │ ├ split.py
  │ │ └ utils.py
  │ └ kitti.names
  └ yolov5

download & unzip kitti, nuScenes

kitti

KITTI dataset
Download left color images of object data set (12 GB)
Download right color images, if you want to use stereo information (12 GB)
Download training labels of object data set (5 MB)

cd ~/datasets/kitti
mkdir data_object_image_2 data_object_label_2
unzip -d data_object_image_2 data_object_image_2.zip

nuScenes

nuScenes dataset
nuImages > All > Metadata [Asia]
nuImages > All > Samples [Asia]

cd ~/datasets/nuscenes
mkdir nuimages-v1.0-all-samples nuimages-v1.0-all-metadata
tar -xf nuimages-v1.0-all-metadata.tgz -C nuimages-v1.0-all-metadata
tar -xf nuimages-v1.0-all-samples.tgz -C nuimages-v1.0-all-samples
cd nuimages-v1.0-all-samples/samples
rm -rf CAM_BACK* CAM_FRONT_*

nuScenes -> kitti

bert@ubuntu:~

docker run \
--name bert_nuScenes \
--gpus all \
-it \
-v ${PWD}/datasets:/TL/datasets \
-v ${PWD}/TL/src:/TL/src \
ubuntu:20.04 /bin/bash
docker start bert_nuScenes \
&& docker exec -it bert_nuScenes /bin/bash

root@0c332d856629:/

apt-get update
apt-get install -y sudo
sudo apt-get update
sudo apt-get install -y \
git vim python3 python3-dev python3-pip python3-tk \
pkg-config libfreetype6-dev libpng-dev

cd src
git clone https://github.com/ssaru/convert2Yolo.git
pip install nuscenes-devkit

kitti -> yolo

root@2bdc62e56f34:/

데이터 확인

데이터 + 라벨링 갯수가 7,481
훈련 목표 10,000 미달
left

right

데이터 라벨 확인, .names 생성

7,481 훈련 데이터 yolo로 포멧으로 변경

convert2Yolo

docker run \
--name bert_convert2Yolo \
--gpus all \
-it \
-v ${PWD}/datasets:/TL/datasets \
-v ${PWD}/TL:/TL \
ubuntu:20.04 /bin/bash
docker start bert_convert2Yolo \
&& docker exec -it bert_convert2Yolo /bin/bash

root@deb95701588a:/
convert2Yolo github

apt update
apt install -y \
git vim python3 python3-dev python3-pip python3-tk \
pkg-config libfreetype6-dev libpng-dev

cd src
git clone https://github.com/ssaru/convert2Yolo.git
pip install -r convert2Yolo/requirements.txt

데이터 파일 구조 생성

yolo_path="/TL/datasets"
mkdir -p \
"$yolo_path/yolo" \
"$yolo_path/yolo/images" \
"$yolo_path/yolo/labels" \
yolo_path="/TL/datasets"
python3 convert2Yolo/example.py \
--datasets KITTI \
--img_path "$yolo_path/kitti/data_object_image_2/training/image_2" \
--label "$yolo_path/kitti/data_object_label_2/training/label_2" \
--convert_output_path "$yolo_path/yolo/labels" \
--img_type ".png" \
--cls_list_file ../kitti.names

cp /TL/datasets/kitti/data_object_image_2/training/image_2/*.png \
"$yolo_path/yolo/images/"

train.txt test.txt 생성
학습과 검증을 위한 이미지 파일의 경로를 담고 있는 파일
train : val = 6732 : 749
무조건 파일 구조는 images와 labels 포함하도록 생성 후
txt 파일 내부에 images 경로 포함하도록 생성할 것

split.py

import glob
from sklearn.model_selection import train_test_split

img_list = sorted(glob.glob("/TL/datasets/yolo/images/*.png"))

train_list, val_list = train_test_split(img_list, test_size=0.1, random_state=2000)

with open("/TL/datasets/yolo/train.txt", "w") as f:
    f.write("\n".join(train_list) + "\n")

with open("/TL/datasets/yolo/val.txt", "w") as f:
    f.write("\n".join(val_list) + "\n")
pip install -U scikit-learn
python3 utils/split.py 

kitti.yaml 생성
YOLOv5의 설정 파일
trainval 항목에 기록된 경로는 각각 train.txtval.txt 파일의 경로를 가리킴
이미지의 바운딩 박스 정보는 해당 이미지 파일과 동일한 이름을 가진 레이블 파일을 찾아서 사용
training과 testing 중에 하나의 labels에만 txt파일을 몰아넣어도 상관없음

train: /TL/datasets/yolo/train.txt
val: /TL/datasets/yolo/val.txt
nc: 9  # number of classes
names:
        0: Pedestrian
        1: Cyclist
        2: Misc
        3: DontCare
        4: Person_sitting
        5: Van
        6: Tram
        7: Truck
        8: Car

yolov5

Docker-Quickstart yolov5
bert@ubuntu:~

docker pull ultralytics/yolov5:latest
docker run \
--ipc=host \
--name bert_TL \
--gpus all \
-it \
-v ${PWD}/TL:/TL \
-v ${PWD}/datasets:/TL/datasets \
ultralytics/yolov5:latest
docker start bert_TL \
&& docker exec -it bert_TL /bin/bash

root@eaebb6b3b151:/

apt install -y vim

yolov5 > models > yolov5s.yaml
class 개수 nc: 9 로 수정

python3 \
train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data /TL/datasets/yolo/kitti.yaml \
--cfg models/yolov5s.yaml \
--weights yolov5s.pt \
--name results
pip3 install tensorboardX tensorboard
tensorboard --logdir runs/train

kitti 기본 7,481장으로 학습 후 결과를 확인
Car, Pedestrian이 가장 많은 비중 차지
TransferLearning2에서 이 둘을 제외하고 학습 후 전이 학습 진행 계획

0개의 댓글