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

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

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

공룡이 학습을 통해 점차 장애물을 피하는 모습을 보여줍니다.
- ☑️ YOLOv5를 통한 공룡/장애물 객체 탐지
- ☑️ 게임 화면 실시간 캡처
- ☑️ PyAutoGUI로 점프/수그리기 자동 조작
- ☑️ DQN 기반 강화학습 수행
- ☑️ 보상 기반 학습 및 로그 저장
- ☑️ 좋은 메모리 기반 우선 학습
- Chrome Dinosaur 게임에서 공룡이 장애물을 인식하고, 최적의 행동(점프, 수그리기, 대기)을 선택하여 자동으로 게임을 플레이할 수 있도록 강화학습을 수행합니다.
❗️ 현재 프로젝트는 500점 이상의 점수를 목표로 진행 중이며 지속적인 개선이 예정되어 있습니다.
- Chrome Dinosaur 게임에서 캡처한 화면을 기반으로
공룡과 장애물을 인식하는 객체 감지 모델을 YOLOv5로 학습했습니다. - 훈련된
best.pt모델을 이용해 실시간으로 화면에서 객체를 탐지합니다.
- 에이전트: 공룡 캐릭터
- 환경: Chrome Dinosaur 게임
- 행동: 대기(0), 점프(1), 수그리기(2)
ver 2025.06.09 (최신)
- 장애물을 성공적으로 넘었을 경우: +10점
- 점프를 시도했지만 장애물을 넘지 못한 경우: -1점
- 게임 오버 시: -5점 (기존 -10점에서 완화)
- 일반적인 상황 (대기, 수그리기): 0점
✅ 모든 보상 로직은 dino_game_env.py 환경 내부에서 일관되게 처리됩니다.
- 장애물을 넘는 등의 성공적인 행동(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인 전환을 중심으로 성과 중심 학습 수행
- ✅ YOLOv5로 공룡과 장애물을 학습하거나,
best.pt모델 사용 - ✅ 학습된 모델을 이용해 객체 탐지 테스트
- ✅ 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
- Chrome 설치
- ChromeDriver 설치
- 버전에 맞는 ChromeDriver 다운로드
dino_env/chromedriver-win64/에chromedriver.exe위치
가상환경 생성 (선택):
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
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
폴더가 없다면 수동으로 만들어주세요.
python yolo_training/dino_game_detection.py
실행된 화면에서 공룡과 장애물을 실시간으로 인식하는 모습을 확인할 수 있습니다.
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 에피소드마다 한 번씩 저장되며,
학습 중 에피소드별 보상 및 탐험률은 매 에피소드마다 로그로 기록됩니다.
- 👨💻 전우진 (Woojin Jeon)
- ✉️ koving11@naver.com
- 🔗 https://github.com/Joycong