-
Train YOLO Model
3-1. Train YOLOv3 tiny on Google Colab
3-2. Train YOLOv4 on Google Colab
-
대중교통 이용의 불편함 [출처 : 유튜브 MBCNEWS]
대중교통, 특히 버스의 경우 타고자 하는 버스가 오는지 안 오는지 확실하게 판단하기 힘들다. (ex.버스 탑승을 위해 평균 20~30분을 기다리는 시각장애인들, 잘못된 버스를 타는 경우도 흔함)
-
시각 장애인의 눈이 되어 그들의 보행을 돕는 안내견 [출처 : 웰페어 뉴스]
안내견 탑승 및 출입 거부는 위법행위임에도 불구하고 여전히 안내견에 대한 불편한 인식이 산재한다. (ex. 대중교통 탑승 거부, 식품접객업소 출입 거부 등등)
안내견이나 기존의 시각 장애인 보조 서비스가 있음에도 불구하고, 실제 시각장애인들의 보행에 어려움이 많았다. 이를 개선하기 위해 음성 안내 서비스 '시선(視先, 먼저 보다)'을 고안하였다.
- 시각 장애인과 비시각 장애인의 "안전" 차이
- 시각 장애인의 안전 : 직접 부딪히고 닿아서 물체의 위치 확인. 벽에 붙어서 보행
- 비시각 장애인의 안전 : 아무 물체가 없는 중간이 안전하다고 생각하고 중간으로 안내
C언어로 작성된 물체 인식 오픈 소스 신경망
YOLO 개발자가 특별히 제작한 프레임워크
빠르고 GPU/CPU와 함께 사용이 가능하나, 리눅스에서만 호환된다.
Darknet을 Tensorflow에 적용
빠르고 GPU/CPU와 함께 사용이 가능하고 Linux/Mac/Window에서 호환이 가능하나,
설치가 복잡하다.
⚡ CONCEPT
이전 탐지 시스템은 classifier나 localizer를 사용해 탐지를 수행한다.
하지만 YOLO는 하나의 신경망을 전체 이미지에 적용한다.
이 신경망은 이미지를 영역으로 분할하고 각 영역의 Bounding Box와 확률을 예측한다.
이런 Bounding Box는 예측된 확률에 의해 가중치가 적용된다.
❔ How to Run YOLOV4
-
dark net의 weight ⇒ yolov4.weights 으로 변환하는 과정.
# Convert darknet weights to tensorflow ## yolov4 버전 python save_model.py --weights ./data/yolov4.weights --output ./checkpoints/yolov4-416 --input_size 416 --model yolov4 ## yolov4-tiny 버전 python save_model.py --weights ./data/yolov4-tiny.weights --output ./checkpoints/yolov4-tiny-416 --input_size 416 --model yolov4 --tiny
-
object detection이 잘 되는 지 확인하기
# Run demo tensorflow python detect.py --weights ./checkpoints/yolov4-416 --size 416 --model yolov4 --image ./data/kite.jpg python detect.py --weights ./checkpoints/yolov4-tiny-416 --size 416 --model yolov4 --image ./data/kite.jpg --tiny
👉 Click
function ClickConnect() { // 백엔드를 할당하지 못했습니다. // GPU이(가) 있는 백엔드를 사용할 수 없습니다. 가속기가 없는 런타임을 사용하시겠습니까? // 취소 버튼을 찾아서 클릭 var buttons = document.querySelectorAll("colab-dialog.yes-no-dialog paper-button#cancel"); buttons.forEach(function(btn) { btn.click(); }); console.log("1분마다 자동 재연결"); document.querySelector("#top-toolbar > colab-connect-button").click(); } setInterval(ClickConnect,1000*60);
F12를 눌러 자바 스크립트 창에 입력해주면 된다.
!
: 쉘이 끝나면 유지 되지 않음%
: 쉘이 끝난 후에도 계속 유지
👉 Click
🔎 신호등 데이터셋 : [AI Hub]
신호등이 있는 사진과 Bounding Box가 되어있는 xml파일을 받았으나,
:warning: 보행등과 차량등이 분류가 되어있지 않다
-
우선적으로 데이터 셋에 신호등이 다 있는 것도 아니기 때문에 1차적으로 신호등을 찾아준다.
⇒ 신호등 label을 갖는 사진을 분류한다는 의미 -
label을 확인함과 동시에 신호등 사진을 띄운다. 그 사진속에 있는 신호등이 보행등이라면 저장, 차량등이라면 저장하지 않고 넘어간다.
-
사진을 저장하는 경우에 label 데이터는 가공이 필요하다.
현재 AI hub에서 제공되는 Bounding Box 좌표 ⇒ (좌상단 x, 좌상단 y, 우하단 x, 우하단 y좌표)
👉 Click
- classes 개수
- train.txt와 valid.txt의 경로
- obj.names의 경로
- weight을 저장할 폴더의 경로
- batch : 한번에 몇 장을 처리할 지
- subdivisions : batch를 이 값만큼 나누어 처리이즈
- width, height
- learning late, burn_in, max_batches, policy, steps, scales 설정
- filter : (4+1+class수) x 3
- classes
- anchors : 초기의 크기(너비, 높이), (개체 크기에 가장 가까운)일부는 신경망(최종 기능 맵)의 일부 출력을 사용하여 개체 크기로 크기가 조정
- mask
👉 Click
🔹 max_batches = number of classes * 2000
🔹 steps = max_batches의 80%, max_batches의 90%
👉 How To set cfg File
🔥 https://murra.tistory.com/115
📍 https://keyog.tistory.com/22
📍 https://eehoeskrap.tistory.com/370
📍 https://codingzzangmimi.tistory.com/76
📍 https://go-programming.tistory.com/160
📍 https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
👉 Click
!./darknet detector train custom/custom.data custom/custom_yolov3-tiny.cfg custom/yolov3-tiny.conv.15 -dont_show
- 원래 map과 loss에 대한 그래프가 나오는데 코랩의 리눅스 상에서는 볼 수 없는 듯하다.
에러가 나기 때문에 dont_show를 추가해 보지 않는 것으로 처리해준다.
Fine-Tuning을 하고 싶을 떄 마지막 레이어를 삭제하고 모델 파일과 가중치 파일을 이용하여 darknet53.conv.74 처럼 가중치 파일을 생성 할 수도 있다.
./darknet partial cfg / yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
!./darknet detector test custom/custom.data custom/custom_yolov4-tiny.cfg custom_yolov4-tiny_last.weights -thresh 0.25 -dont_show -ext_output < custom/train.txt > result.txt
❌ tarin.txt에 있는 이미지의 경로를 읽어오지 못한다는 에러 발생
!apt-get install dos2unix
!dos2unix custom/train.txt # to linux format
👉 Click
!./darknet detector train custom/class.data cfg/yolov4.cfg yolov4.conv.137 -dont_show -map