[rapa3기][2조][실시간 운영체제 기반 차량 제어 시스템] AI-G 보드 YOLOv8 모델 실행 시 Signal 11 (Segmentation Fault) 발생 질문드립니다

안녕하세요, 사전에 커스텀 데이터셋 이용하여 학습한 yolov8m 모델을 이용하여 tcnnapp을 통해 AI-G 보드에서 객체 인식 관련 개발을 진행 중 입니다.

  1. 환경 정보

  • Target Board: Telechips AI-G (TOPST)

  • SW Stack: Enlight SDK v0.9.9, tcnnapp

  • Model: YOLOv8m (Fine-tuned, Single Class - Stop Sign)

  • Input: Camera (/dev/video2)(imx219)

  1. ONNX 추출: extract_yolo_onnx.sh를 통해 YOLOv8의 6개 출력 레이어(Box 3, Class 3)를 추출했습니다.
  2. Grid 정보 생성: default_box_generator.py를 사용하여 1개 클래스(nc: 1)에 맞는 grid_info.bin 생성 완료했습니다.
  3. 컴파일 : converter.py를 사용하여 .enlight 파일 생성했습니다.
    • 사용 옵션: --type obj, --num-class 1, --yolo-version v8, --enable-letterbox, --output-order cl, --enable-track 등.

    • --dfl-reg-max 16 옵션은 추가한 경우와 제외한 경우 모두 시도했습니다. (정확한 명령어는 댓글에 첨부하겠습니다.)

  4. 양자화 : quantizer.py를 통해 INT8 양자화 모델 생성 완료했습니다.

보드에서 tcnnapp을 통해 모델을 로드하고 실행하는 시점에서 Signal 11이 발생하며 앱이 강제 종료됩니다.

tcnnapp -i camera -o rtpm -n ./stop_sign_1_quantized/ 로 실행 후 Input mode init Done 뜨면 start 버튼을 눌렀습니다.

  1. converter.py에서 --num-class 1을 설정했으나, tcnnapp 내부의 C++ 후처리 로직이 COCO(80개 클래스) 기준으로 고정되어 있어 메모리 접근 오류가 발생할 가능성이 있는지 궁금합니다.

  2. npu_fd - network loading failed 로그가 뜨는 원인이 모델의 텐서 구조 불일치 때문인지, 아니면 NPU 드라이버와의 호환성 문제인지 확인이 필요합니다.

안녕하세요 TOPST 매니저입니다. 우선 변환하시는데 사용하신 명령어들과 모델 파일에 대해 전달해주시면 빠르게 확인 후 답변드리도록 하겠습니다.
감사합니다.

python ./EnlightSDK/converter.py ./input_networks/best_1_extrac.onnx \
--type obj \
--add-detection-post-process ./input_networks/best_1_extrac.bin \
--dataset Custom \
--dataset-root ./calib_images \
--num-images 200 \
--output ./output_networks/stop_sign_ffinal.enlight \
--mean 0 0 0 \
--std 1 1 1 \
--num-class 1 \
--yolo-version v8 \
--enable-letterbox \
--dfl-reg-max 16 \
--output-order cl \
--enable-track


python ./EnlightSDK/quantizer.py \
./output_networks/stop_sign_ffinal.enlight \
--output ./output_networks/stop_sign_ffinal_quantized.enlight

python ./EnlightSDK/compiler.py \
    ./output_networks/stop_sign_ffinal_quantized.enlight \
    --th-iou 0.5 \
    --th-conf 0.5

이후 Build Object 과정 진행했습니다.

tcnnapp -i camera -p /dev/video2 -o display -n ./stop_sign_ffinal_quantized

===

python ./EnlightSDK/converter.py ./input_networks/best_1_extrac.onnx \
--type obj \
--add-detection-post-process ./input_networks/best_1_extrac.bin \
--dataset Custom \
--dataset-root ./calib_images \
--num-images 200 \
--output ./output_networks/stop_sign_1.enlight \
--enable-track \
--enable-letterbox \
--mean 0 0 0 \
--std 1 1 1 \
--num-class 1 \
--dfl-reg-max 16 \
--yolo-version v8 \
--output-order cl

python ./EnlightSDK/quantizer.py \
./output_networks/stop_sign_1.enlight \
--output ./output_networks/stop_sign_1_quantized.enlight

python ./EnlightSDK/compiler.py \
./output_networks/stop_sign_1_quantized.enlight \
--th-iou 0.5 \
--th-conf 0.5

이후 Build Object 과정 진행했습니다.

tcnnapp -i camera -p /dev/video2 -o display -n ./stop_sign_1_quantized

===

사용한 파일들은 아래와 같습니다.

감사합니다.

안녕하세요.
제가 변환 후 확인하니 정상동작하는걸 확인하였습니다.
build_network 디렉터리에서 후처리 빌드 이후에 생성된 net.so를 변환하신 네트워크 파일에 전송하셨을까요? 해당 파일이 후처리를 위해 필요한 바이너리 파일이기 때문에 존재하지 않을 경우 에러가 발생할 수 있습니다.
확인 한번 부탁드립니다.
감사합니다.

안녕하세요 작성자입니다. 어떤 이유인지 모르겠지만 게시물이 신고당했다고 하여 댓글을 달지 못하는 상태라, 부득이하게 같은 팀 팀원분의 계정으로 답글 남깁니다.
다시 시도해보니 작동되는 것을 확인했습니다. 과거에 여러 시도를 하다가 Makefile을 건들여 그것이 문제였던 것 같습니다. 도움 주셔서 감사합니다.

1 Like