NVIDIA Jetson Nano & Jetson inference – PART3 (Detection Training)

3가지 접근방법이 있을 것임

A. PC/Server에서 Darknet Training -> Jetson-Nano로 반영하는 방법 (가장 바람직한 방법, YOLO3 테스트 2020/2/23)

TRY This ==> https://github.com/penolove/yolov3-tensorrt (Darknet Trained Weights->ONNX->Engine is OK 2020.02.28)
데모 요구사항 : YOLOv3-608(with an input size of 608×608)

( Todo ==> https://github.com/ultralytics/yolov3 )

# convert darknet weight into onnx format
$python3 yolov3_to_onnx.py
# convert onnx format into tensorrt format
$python3 onnx_to_tensorrt.py

*위의 penolove 링크 하단 For jetson nano 부분 읽어보기

(참고1) python3 yolov3_to_onnx.py  관련으로는 "TypeError : buffer is too small for requested array" 에러 (2020/2/27, yolov3_to_onnx.py Line325)  Solution : Check cfg file (using when Darknet Training file) Solved(20200228)  

(참고2) export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
Convert & Inference in Jetson Nano

$python3 naive_detector.py –engine yolov3.engine

yolo3.weights -> yolo3.onnx -> yolo3.engine (243Mb)

TRY This ==> https://github.com/jkjung-avt/tensorrt_demos
– Yolov3 weights to Onnx : PASSED Darknet Site (20200227)
– Yolov3 weights to Onnx : ?? Darknet myTraining (20200227)
– Onnx to TensorRT :

[Training]

Check Video Input Image Size for Training!

#move jetson-inference dir
$cd ~/github/jetson-inference/build/aarch64/bin

# using SSD-Mobilenet-v2, default MIPI CSI camera (1280×720)
$ ./detectnet-camera.py

# using SSD-Inception-v2, default MIPI CSI camera (1280×720)
$ ./detectnet-camera.py –network=ssd-inception-v2

# using SSD-Mobilenet-v2, V4L2 camera /dev/video0 (1280×720)
$ ./detectnet-camera.py –camera=/dev/video0

# using SSD-Mobilenet-v2, default MIPI CSI camera (640×480)
$ ./detectnet-camera.py –width=640 –height=480

#1. CAM IMG Data input sample => default 1280*720
$./my-detectnet.py

#2. yolo3 inference sample => default 608*608 => Prepare 608*608
$python3 naive_detector.py –engine yolov3.engine

#1&2 => Need to Coding deepfamily_detector.py

Training in jetson nano
==> https://github.com/ultralytics/yolov3

자신의 모델을 변환
darknet을 사용하여 train yolov3을 직접 훈련 시키거나이 저장소의 구현을 참조하십시오 https://github.com/ultralytics/yolov3 (pytorch train은 darknet weight 파일을 저장합니다),
이전 단계에서 구성 및 트레인 가중치를 재구성 한 후 다시 수행 할 수 있습니다.
(클래스 수 (yolov3.cfg, data_preprocessing.py) 및 입력 이미지 크기에 유의하십시오)
그러나 내 트레이너의 탐지 모델은 사람의 종횡비에 매우 민감합니다. 크기를 608 x 608로 직접 크기를 조정하면 (tensorrt 모델이 입력 크기를 변경할 수 없음) 탐지가 매우 부정확 해집니다 (mAP 0.98-> 내 자체 유효성 검사 세트에서 0.41)

자신의 모델을 변환
darknet을 사용하여 train yolov3을 직접 훈련 시키거나이 저장소의 구현을 참조하십시오 https://github.com/ultralytics/yolov3 (pytorch train은 darknet weight 파일을 저장합니다),
이전 단계에서 구성 및 트레인 가중치를 재구성 한 후 다시 수행 할 수 있습니다.
(클래스 수 (yolov3.cfg, data_preprocessing.py) 및 입력 이미지 크기에 유의하십시오)
그러나 내 트레이너의 탐지 모델은 사람의 종횡비에 매우 민감합니다. 크기를 608 x 608로 직접 크기를 조정하면 (tensorrt 모델이 입력 크기를 변경할 수 없음) 탐지가 매우 부정확 해집니다 (mAP 0.98-> 내 자체 유효성 검사 세트에서 0.41)

B. Ubuntu OS에서 Training 후 Jetson-Nano로 반영하는 방법

C. Jetson-Nano에서 Training을 직접 시키는 방법
(TRY. 2020/2/13, 2/23)

$ cd jetson-inference/python/training/detection  
$ python3 train.py --model-dir=fddb
* 데이터위치는 소스코드 내 확인 및 변경필요
기본값은 jetson-inference/python/training에 다운받은 정보 압축해제 한 것임

At around epoch 30, the ResNet-18 model reaches 80% accuracy, and at epoch 65 it converges on 82.5% accuracy.
By default, the training script is set to run for 35 epochs, (35 epoch 수행함)

Re-training ResNet-18 Model
-> model_best.pth.tar 생성됨->ONNX 변환필요


Re-training on the Cat/Dog Dataset 결과 파일 (for Classification 용)

https://github.com/dusty-nv/jetson-inference/blob/master/docs/pytorch-cat-dog.md
ONNX 포멧으로 변환 (detection 디렉토리 하위에 fddb 폴더 생성 및 결과파일이 있는지 확인 후 아래 명령어 실행)
python3 onnx_export.py --model-dir=fddb
resnet10.onnx파일이 생성됨

시도1 : Training : resnet18 -> detection-camera(기본 mobilenet_v2)


시도2 : Training : ssdmobilenet -> detection-camera에서 이용



https://github.com/dusty-nv/jetson-inference/blob/master/docs/detectnet-training.md#training-the-model-with-pretrained-googlenet


https://github.com/dusty-nv/jetson-inference/blob/master/docs/detectnet-console.md

https://github.com/csvance/keras-mobile-detectnet

# Python $ ./detectnet-console.py --network=multiped peds-003.jpg output_4.jpg


https://github.com/dusty-nv/jetson-inference/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+detectnet+training

https://github.com/AastaNV/TRT_object_detection


please see this post for suggestions of re-training object detection model on customized datasets:
https://devtalk.nvidia.com/default/topic/1070225/jetson-nano/digits-or-somthing-else/post/5421938/#5421938

https://devtalk.nvidia.com/default/topic/1070225/jetson-nano/digits-or-somthing-else/post/5421938/#5421938

( https://devtalk.nvidia.com/default/topic/1070225/jetson-nano/digits-or-somthing-else/post/5421938/#5421938 )

[20200222 Detect 샘플 – 시도 – 문제없이 inference는 잘 됨]


https://github.com/AastaNV/TRT_object_detection
(설치시 jetpack 버전에 따라 v43으로 변경해야 하는지 확인 필요)

(Install tensorflow-gpu – OK)

https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html

(libnvinfer.so.5 Error)

https://devtalk.nvidia.com/default/topic/1066634/could-not-load-dynamic-library-libnvinfer-so-5-/

(Other Information – DeepStream – Resnet)

(Other Information – Yolo)

https://devtalk.nvidia.com/default/topic/1052315/jetson-nano/python-wrapper-for-tensorrt-implementation-of-yolo-currently-v2-/
— Support yolo3


libnvinfer.so.5 Error 는 해당 라이브러리에서 버전5를 이용해서 생긴 이슈로, 위와 같이 재컴파일해서 넣으면 해결됨(2020/2/23 MIKADO2)
Test OK, and now Try to Training

Leave a Reply

Your email address will not be published. Required fields are marked *