본문 바로가기
Programming/문제 해결

[동키카]Donkey Car 학습 log

by 꿈꾸는 띵땅근 2021. 6. 13.

==================   알아야 할것들   =================

https://docs.donkeycar.com/guide/train_autopilot/

이거 doc 대로 따라하면 잘 안된다 ㅡㅡ  그래서, 설치 프로세스를 정리한다. 

 

알아야 할 것 0. 이미지 사이즈 조정 필요 없다. 

동키카 학습 모델에서는 120 x 160으로 나와있다.

Jetson Nano를 사용하고, Pi 카메라를 사용하려면, myconfig.py 에서 width = 224, height = 224 로 설정해줘야 하는데, 그러면 모델에 집어넣는 이미지 사이즈를 조정해줘야 하느냐? 라고 생각할 수 있지만, 동키카 학습 코드가 알아서 크롭해서 집어넣는다. 

 

120 x 160인 이유는 동키카가 달릴 때 아래쪽 영역만 도로이기 때문에, roi를 설정해서 그 부분만 잘라서 쓰는거라고 생각하면 된다. 

 

알아야 할것 1. Display Size. 

동키카 1920x1080 만들고싶으면, 

$ xrandr -fb 1920x1080

작게 만드는게 시스템의 그래픽 사용량을 절약할 수 있어서 좋다. 

$ xrandr -fb 780x460???? 이거엿나 암튼. 

 

알아야 할것 2. 셋팅 & 학습 & 주행

동키카를 주행하면, ~/mycar/data에 데이터가 쌓인다.

폴더 통째로 usb로 옮긴다. 그거를 학습용 pc에 ~/mycar/data에 놓는다. 

이렇게 폴더 통째로 옮겨

 

 

옛날 모델로 학습환경 구축해서 할 것(https://dreamingattic.tistory.com/233?category=943220)이기 때문에 아래의 것들은 필요없다. 

 

알아야 할것 3. 

-> donkey car 4.1.0 버전부터는 tub 폴더가 생성되지 않는다. 데이터 저장 구조가 바뀐것이다. 

 

***그리고, python 버전도 3.8 이상으로 깔아야 한다. -> 아예 yml 파일 안에 들어가서 python=3.8로 바꿔라. 

이렇게 해서 anaconda 환경 만들고 거기서 아래의 명령어로 학습 돌리면 된다. 

cd ~/mycar
python train.py --tubs data/ --model models/mypilot.h5

학습은 이 위의 명령어로 하면 된다. 

 

 

 

 

 


====================  문제 해결  ===================


문제발생 1. (python3와 ros kinetic 을 같이 사용할 경우 충돌시 ,해결하는법)

train.py에 cv2와 python3에러
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

문제 발생 2. : mmset 문제

catalog가 1000개의 데이터 마다 생기는 것인데, 내꺼는 catalog5에 데이터가 하나도 없었다(catalog0~4까지 데이터가 5000개였음). 그런데 manifest.json에서는 catalog5도 적혀있고, 데이터 갯수도 안맞아서 그걸 수정하니 해결되었음


문제 발생 3. 

W tensorflow/core/kernels/data/generator_dataset_op.cc:103] Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated.
	 [[{{node PyFunc}}]]

아래 링크로 해결!

https://github.com/tensorflow/tensorflow/issues/24496

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

했더니 학습 잘됨

 

 


manage.py line 48 problem occured. so, I blocked that one line

    #logger.info(f'PID: {os.getpid()}')

Problem Occured

OpenCV 3.4.0 깔면 해결된다. 

그래도 안되면 껐다 키면 된다. 


Problem Occured

기억으로는, 껐다 켜서 해결된것같다. 


Problem Occured

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor

Opencv error: assertion failed

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor

Opencv Error: assertion failed

 

 

이게 떴다. 

해결책

https://custom-build-robots.com/raspberry-pi-robot-cars/autonomously-driving-nvidia-jetson-nano-ai-robot-car-configuration-of-the-donkey-car-framework/12137?lang=en

camera.py에서 __init__하는 부분 capture_width, capture_height를 160,120으로 바꿨다(저 링크에서 그렇게 바꾸라고 했는데, 내가 볼때는 120, 160이 맞다. 둘 다 실험해볼 예정)

그래도 에러뜨네.. 아오... 

 self.frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
cv2.error: /home/ave/opencv/opencv-3.4.0/modules/imgproc/src/color.cpp:11079: error: (-215) scn == 3 || scn == 4 in function cvtColor

Problem Occured

2021-06-20 10:20:13.228979: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublas.so.10
2021-06-20 10:20:19.449825: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudnn.so.8
2021-06-20 10:20:55.280543: W tensorflow/core/common_runtime/bfc_allocator.cc:246] Allocator (GPU_0_bfc) ran out of memory trying to allocate 50.67MiB with freed_by_count=0. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available.
2021-06-20 10:20:58.160831: W tensorflow/core/common_runtime/bfc_allocator.cc:246] Allocator (GPU_0_bfc) ran out of memory trying to allocate 50.67MiB with freed_by_count=0. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available.

-> 모델이 너무 커서 GPU 메모리가 못 따라가는 것일거다. 모델을 경량화시켜라. 

 

 

학습 시키는 과정에서 문제 발생

데이터 11700장 얻었고, 학습 됐던 컴퓨터에 그대로 학습 시켰는데 아래와 같은 에러가 떴음. 

 

KeyError: 'cam/image_array'
 [[{{node PyFunc}}]]
 [[IteratorGetNext]] [Op:__inference_train_function_1787]
Function call stack:
train_function

KeyError: 'cam/image_array'
 [[{{node PyFunc}}]]
 [[IteratorGetNext]] [Op:__inference_train_function_1787]
Function call stack:
train_function

-> 데이터가 잘못된것이니, 그냥 다시 받아라. 

 

 

 


============================= 학습 로그 =============================

 

 

이렇게 모델 폴더 안에 결과 나오면 정상

 

이런식으로 학습되면 정상

 

 

 

학습시킨거 model 폴더 다시 동키카로 복사하고

python manage.py drive --model ~/mycar/models/mypilot.h5

이 명령으로 학습모델 갖고 주행하면 된다. 

 

 

 

 

 

 

 

2. 학습1(06.13.14:17 data)

8567 img
tried hard to follow middle line  중앙선을 따라가려고 노력 많이함. 
pink scene remained                아직 분홍색 화면임
bright outside(daytime)             낮이여서 밖이 밝았음
drived slowly                            처음이기도 하고, 중앙선을 따라가려다 보니 천천히 달림. 

some outliers didn't be erased 몇몇 잘못된 데이터들이 안지워짐. (controller 세모 누르니까 반응없던데...?)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글