Skip to content

Latest commit

 

History

29 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dino AI Bot - Banner

🦖 Dino AI Bot: YOLO + DQN 기반 크롬 공룡 게임 자동화

크롬 오프라인 공룡 게임을 인공지능이 스스로 학습하고 플레이합니다.
YOLOv5로 공룡과 장애물을 실시간 탐지하고, DQN(Deep Q-Learning)으로 게임 상황에 맞는 행동을 학습하여 점프하거나 웅크릴 수 있습니다.


📸 시연 이미지 (Demo)

✅ YOLOv5 탐지 + DQN 자동 플레이 예시

YOLOv5 Validation Output
YOLOv5 모델 검증 결과 – 공룡과 장애물을 정확히 탐지

YOLO 실시간 탐지
게임 화면에서 공룡과 장애물을 실시간으로 탐지하는 모습

DQN 학습 진행
공룡이 학습을 통해 점차 장애물을 피하는 모습을 보여줍니다.


💡 주요 기능 요약

  • ☑️ YOLOv5를 통한 공룡/장애물 객체 탐지
  • ☑️ 게임 화면 실시간 캡처
  • ☑️ PyAutoGUI로 점프/수그리기 자동 조작
  • ☑️ DQN 기반 강화학습 수행
  • ☑️ 보상 기반 학습 및 로그 저장
  • ☑️ 좋은 메모리 기반 우선 학습

📘 프로젝트 설명

🧠 학습 목표

  • Chrome Dinosaur 게임에서 공룡이 장애물을 인식하고, 최적의 행동(점프, 수그리기, 대기)을 선택하여 자동으로 게임을 플레이할 수 있도록 강화학습을 수행합니다.

❗️ 현재 프로젝트는 500점 이상의 점수를 목표로 진행 중이며 지속적인 개선이 예정되어 있습니다.

🧩 객체 감지 (YOLOv5)

  • Chrome Dinosaur 게임에서 캡처한 화면을 기반으로
    공룡과 장애물을 인식하는 객체 감지 모델을 YOLOv5로 학습했습니다.
  • 훈련된 best.pt 모델을 이용해 실시간으로 화면에서 객체를 탐지합니다.

🤖 심층 강화 학습 (DQN)

  • 에이전트: 공룡 캐릭터
  • 환경: Chrome Dinosaur 게임
  • 행동: 대기(0), 점프(1), 수그리기(2)

📈 보상 체계

ver 2025.06.09 (최신)

  • 장애물을 성공적으로 넘었을 경우: +10점
  • 점프를 시도했지만 장애물을 넘지 못한 경우: -1점
  • 게임 오버 시: -5점 (기존 -10점에서 완화)
  • 일반적인 상황 (대기, 수그리기): 0점

✅ 모든 보상 로직은 dino_game_env.py 환경 내부에서 일관되게 처리됩니다.

🧠 좋은 메모리 기반 학습 (Good Memory Replay)

  • 장애물을 넘는 등의 성공적인 행동(reward > 0)good_memory에 따로 저장
  • 학습 배치에서 70%는 good_memory에서, 나머지 30%는 일반 memory에서 샘플링
  • good_memory는 최근 1000개까지만 유지 (LRU 방식)
  • 학습 초기에는 good_memory가 부족할 수 있으므로 일반 memory로 보완됨
  • 실패 사례는 good_memory에 저장되지 않음

🛑 게임 오버 감지 방식

  • 공룡이 장애물에 충돌하여 게임 오버가 되면, -5의 감점이 주어집니다.
  • 게임 오버 상태는 화면 상단에 표시되는 “GAME OVER” 이미지를 기반으로 감지됩니다.

템플릿 매칭 방식: game_over_image.png를 OpenCV로 화면에서 비교 분석하여
유사도가 일정 수치 이상이면 게임 오버로 판단합니다.

🎯 탐험률(ε) 감소

  • 에이전트는 초기에는 무작위로 행동을 많이 시도하지만,

  • 학습이 진행될수록 **탐험률(ε)**이 점차 감소하여 더 최적의 행동을 선택하도록 유도됩니다:

    • 최대 기록 갱신 시: ε 대폭 감소
    • 동일한 성과 유지 시: ε 소폭 감소
    • 성과 변화 없음 시: ε 미미하게 감소

강화학습 구조 요약

  • Q-함수 근사: 현재 상태에서의 행동 가치를 예측
  • Experience Replay: 과거 경험을 무작위 샘플링하여 학습 안정화
  • Target Network: 일정 주기마다 타깃 네트워크 업데이트
  • 에피소드 단위 학습: 게임이 끝날 때까지 1 에피소드로 구성
  • 좋은 메모리 우선 학습: reward > 0인 전환을 중심으로 성과 중심 학습 수행

🧭 사용 순서 개요

  1. ✅ YOLOv5로 공룡과 장애물을 학습하거나, best.pt 모델 사용
  2. ✅ 학습된 모델을 이용해 객체 탐지 테스트
  3. ✅ DQN 에이전트가 감지된 객체를 기반으로 학습을 수행

🛠 기술 스택

  • YOLOv5: 객체 탐지 (공룡 / 장애물)
  • PyTorch: 강화학습 모델 구현 (DQN)
  • OpenCV: 화면 처리 및 게임 오버 감지
  • PyAutoGUI: 게임 조작 자동화
  • Selenium: Chrome 게임 페이지 자동 실행

📁 프로젝트 구조

dino-ai-bot/
├── main/                  # 강화학습 및 실행 코드
├── yolo_training/         # YOLO 학습 관련 코드 및 데이터
│   ├── images/            # 학습 이미지
│   ├── labels/            # YOLO 라벨
│   ├── best.pt            # 학습된 모델
│   ├── data.yaml          # YOLO 학습 설정
├── data/
│   └── game_over_image.png
├── docs/                  # 시연 이미지
├── dino_env/
│   └── chromedriver-win64/  # (사용자 직접 설치)
├── requirements.txt
└── README.md

📦 사전 준비

  1. Chrome 설치
  2. ChromeDriver 설치

⚙️ 설치 방법

가상환경 생성 (선택):

python -m venv dino_env
source dino_env/bin/activate  # or dino_env\Scripts\activate

필수 패키지 설치:

pip install -r requirements.txt

YOLOv5 설치 (최초 1회):

git clone https://github.com/ultralytics/yolov5
pip install -r yolov5/requirements.txt

🧠 사용 방법

1️⃣ YOLO 학습 (선택사항)

YOLOv5를 사용해 공룡과 장애물을 학습하려면 아래 명령어를 실행하세요:

cd yolov5
python train.py --img 640 --batch 16 --epochs 50 --data ../yolo_training/data.yaml --weights yolov5s.pt --project runs/train --name exp --cache

⚠️ 주의: 위 명령어로 학습을 수행해야 yolov5/runs/train/exp4/weights/best.pt 경로가 생성됩니다.
만약 학습을 생략하고 결과만 확인하고 싶다면, 제공된 best.pt 파일을 수동으로 아래 경로에 넣어주세요:

yolov5/runs/train/exp4/weights/best.pt

폴더가 없다면 수동으로 만들어주세요.


2️⃣ YOLO 탐지 결과 확인

python yolo_training/dino_game_detection.py

YOLO 실시간 탐지

실행된 화면에서 공룡과 장애물을 실시간으로 인식하는 모습을 확인할 수 있습니다.


3️⃣ 강화학습 실행 (DQN)

cd main
python main/dino_game_dqn.py

💡 주의: dino_game_dqn.py 내부에서 상대 경로(../logs, ../models 등)를 사용하므로,
main/ 폴더 안에서 실행해야 에러 없이 작동합니다.

💾 학습이 진행되면 다음과 같은 파일이 자동으로 저장됩니다:

  • models/dqn_model_ep{N}.pth : 에피소드 N 시점의 DQN 모델 가중치
  • memory/replay_ep{N}.pkl : 경험 리플레이 메모리
  • logs/training_log.csv : 학습 중 에피소드별 보상 및 탐험률 기록

💾 모델 가중치와 경험 리플레이 메모리는 10 에피소드마다 한 번씩 저장되며,
학습 중 에피소드별 보상 및 탐험률은 매 에피소드마다 로그로 기록됩니다.


🙌 개발자


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages