분류 전체보기
-
tensorflow custom gradientAI 2023. 4. 25. 17:02
만약 다변수 벡터함수의 편미분을 모른다면 당신이 바보 처럼 느껴질 수 있습니다. tensorflow에서는 사용자가 직접 미분 가능 함수들을 제작할 수 있게 custom gradient라는 기능을 제공한다. 다음과 같이 사용할 수 있다. import tensorflow as tf @tf.custom_gradient def custom_sin_plus_exp (x, y, z): def grad (upstream): return upstream * tf.cos(x), upstream * tf.exp(y), None return tf.sin(x) + tf.exp(y), grad 위에 @tf.custom_gradient 데코레이터를 붙이고 (리턴값, 미분 함수) 꼴로 리턴하면 된다. 그리고 미분 함수인 grad의..
-
tensorflow용 RNN-T custom 함수 제작 후기AI 2023. 4. 25. 16:41
pytorch에는 rnnt-loss 함수가 공식적으로 제공된다. tensorflow에는 rnnt-loss 함수가 제공되지 않는다. 3rd party 모듈이 있었지만 입력을 어떻게 줘야하는 지에 대한 세부 설명이 없어서 자작해 봤다. custom tensorflow 함수를 만드는 아주 좋은 경험들을 얻게 된거 같다. 이 자작함수 만드려면 생각지도 못한 수치 오류와 아이디어들로 넘쳐난다. custom 함수를 만들면서 고려해야 하는 것은 크게 3가지다. gpu 연산을 사용하도록 설계해야 한다.수치 연산 도중에 nan이 나오지 않도록 안전한 함수들을 사용해야 한다.쓸데없이 gpu 메모리를 많이 사용하지 않도록 해야한다. 1번의 경우 gpu로 할 수 있는 연산의 특성을 알면 편하다. 답을 구하는데 있어서 순차적인..
-
yolov8 전이 학습 시키기AI 2023. 4. 17. 13:00
옛날에 yolov3 시절에 마스크 검출 머신을 darknet으로 전이학습 해봤던 기억이 있다. 그 때 darknet 사용법이 좀 복잡했던 거로 기억하는데 yolov8은 엄청 쉬워졌다. 1. 파이썬이 있다고 가정하고 2. 레포 클론하고 git clone https://github.com/ultralytics/ultralytics 3. 레포 들어가서 help yolo help 치면 다음과 학습용 명령어를 볼 수 있다. yolo train data=xxx.yaml model=yolov8n.pt epochs=10 lr0=0.01 4. 여기서 data=xxx.yaml 의 xxx.yaml은 train: D:/datasets/smoking.v3i.yolov8/train/images val: D:/datasets/sm..
-
blheli_s littlebee 30a esc calibration쿼드 콥터 2023. 4. 17. 12:12
비프음 들으면서 esc calibration 하는 방법을 썼다. 보니까 blheli는 calibration해주는 프로그램이 있는 모양인데 지원하는 보드가 한정적이라 결국 각자의 보드에 맞는 calibration을 진행하려면 이 방법 밖에 없지 않을까 싶다. void do_calibration () { update_throttle(3480); // max throttle pwm signal HAL_Delay(10000); update_throttle(1750); // min throttle pwm signal HAL_Delay(10000); } 왜 하필 10 seconds의 대기가 필요한지 궁금하다면 blheli 사의 비프음과 관련된 manual을 읽어야 한다. 만약 calibration은 이미 됐고 바로..
-
stm32 uart without HALMCU 2023. 4. 17. 11:52
stm32 펌웨어 작성시 uart송신을 할 때 보통 HAL_UART_Receive_IT로 interrupt를 활성화하고 HAL_UART_RxCpltCallback으로 interrupt를 처리하는 방식을 많이 사용할 거 같다. 이 방식에는 단점이 존재한다. 수신이 완료 되면 인터럽트가 비활성화 되므로 HAL_UART_RxCpltCallback 에서 HAL_UART_Receive_IT를 다시 호출해야 하는데 데드락 문제로 HAL_UART_RxCpltCallback이 호출되지 않으면 더 이상 수신을 받을 수 없다. 수신 사이즈가 정해져 있어서 가변적인 data나 실시간 data 수신에 제약이 있다. 그렇다고 수신 사이즈를 1로 설정하면 HAL라이브러리가 무거워서 그런지 오버런이 엄청 발생한다. 그래서 필요에 ..
-
블랙홀 렌더링블랙홀 렌더링 2023. 3. 27. 12:04
이런 그림들은 어떻게 그리는 걸까? 만약 물리학에 근거해서 그린거라면 어떻게 그린걸까? 원리는 정말 간단하다. 원근법을 도시한 이 그림에 우리 눈이 보는 방식이 들어 있다. 여기서 블랙홀 주위에서 빛의 경로가 우리 예상을 기준으로 휘어지는 것을 고려하면 ray-tracing (광원 역 추적)을 통해서 강착원반을 그릴 수 있을 것이다. 역 추적이 키 포인트 인데, 위 그림에서 광선들은 물체에서 눈으로 들어가지만 역 발상으로 눈에서 나가는 광선이 강착원반에 닿는지 check하면 된다. 여기서 픽셀 수 만큼 광선을 만들어 내야 한다. 다음 그림은 특정 픽셀에서 나간 광산이 강착원반과 닿으면 흰색 안 닿으면 검정색으로 렌더링한 결과이다. 방법은 알았으니 이제 빛이 블랙홀 주위에서 어떻게 휘는 지만 알면 된다. ..