コンテンツへスキップ

めざましじゃんけん予想公開について

人工知能(AI)を利用した、じゃんけん結果速報を公開した当初は、じゃんけんの予測は公開しない予定でした。

時系列データーの分析・予測を深入りして勉強しましたが、全く上がらない正解率。
しっかりとは告知しておりませんでしたが、めざましじゃんけん 予想 ( 人工知能・AIじゃんけん )で予想公開と正解率の公開を開始しておりました。
先週より、Twitter(@meza_janken)でも結果予想をつぶやいてます。

統計学上のランダム(適当)に実施したときと同等の勝率。(3パターンの出し手なので、30%台の正解率、引き分けを除いた「勝ち」「負け」のみでの勝率50%)
この結果ならば、じゃんけん前に公開しても、めざましじゃんけんへのポイントやプレゼント企画への影響は皆無。むしろ当たらないので、信じる人も出てこないでしょう。
それよりも、低すぎる正解率が、上がるのか、変わらないのか、そもそも今回は正解するのか、この人工知能の成長過程をストリートして公開することとしました。
正直、もっと簡単に勝率70%ぐらいになると思ってました。

当然、人工知能自体のモデル変更も伴いますが、それ以上に結果実績の蓄積数が正解率を上げると、気長に期待して運用を続けます。

めざましじゃんけん広場とは

すごく低い期待値なのですが、他に参加者がいないかなと思いました。
時系列データーの予想は、経験がある方ならば、簡単に実施出来ます。そこで、興味のある方がいらっしゃったら、私のような素人でなく、高い正解率を目指してもらおうと考え、このプラットフォームを構築しました。

もし、参加者がいない場合も、同じ入力を基に、AWSやGoogle GCPなどの人工知能を用いて、正解率を競わせようかなと考えております。学習モデルから自動で作成するみたいですね。

人間も参加できるようにする予定です。

Twitterアカウントでログイン・サインアップして利用して頂く予定です。

2019年9月22日 Go Live!(予定)

先週、このプラットフォームをひらめき、
3連休の楽しみとして、サイト構築。
また、3連休初日終了ですが、やりたかった技術検証はほぼ終了しました。
来週は、自身が利用し安定稼働を目指します。

じゃんけん結果を、プログラムから予想結果を登録出来るWEB APIと、結果を手動で入力できるWEB画面を準備する予定です。

めざましじゃんけん 広場

最後に

書籍やブログでは、株価などは予測不可能と紹介されている記事を目にします。私自身は、世の中のすべてのことに理由があると考えているので、全てモデル化出来たら何でも高い確率で、予想出来るのかなと考えてます。あと8年はかかります。
その上で、また新たな人の知恵が入るので、進化し続けるのです。
他の人よりも先に、次の次元を体感し知っておきたいな。

あと、一通り当初予定していた以上の技術習得が出来たので、新たな開発などは行わないかもしれません。めざましじゃんけん広場 次第ですが、スマホアプリを作るかもしれません。ネタがあれば、知りたい分野だなと思っていたので。
人工知能 ✕ スマホ。。ブワッとアイデアに押しつぶされます。
「これは買い?・今は買わない?」「行くべき?行かないべき?」「どこに行こう」「なに食べよう」「誰かと遊びに行こう、誰が最適?」「整形してる・してない判定」

明日は、めざましじゃんけん広場構築において、調べたり・検証した技術一覧を紹介します。個人的なメモにもなりますが、順番が来たら、技術メモも順次上げてゆきます。(時系列データー分析とかよりもニーズがあるかもしれませんね。各種サイトの情報が古くなり、基本的に本家の英語サイトを参照して進めたので、現時点の日本語ウェブでは価値が高いと思います)

2019年09月14日  めざましじゃんけん 結果

フジテレビ めざましテレビ めざましじゃんけん の結果を保証したり、全ての結果が記載を保証するものではありません。

2019年09月14日のめざましじゃんけんの結果をベストエフォートで公開します。


じゃんけん結果システムイメージ

Goo(グー) Choki(チョキ) Pa(パー)

めざましテレビ|めざましじゃんけんーフジテレビ

めざましじゃんけん結果
回次結果対戦相手
9月14日
(土曜日)
【2戦目】08時21分佐藤美弥選手
【1戦目】07時22分石田ゆり子さん

2019年09月09日週 めざましじゃんけん 結果

フジテレビ めざましテレビ めざましじゃんけん の結果を保証したり、全ての結果が記載を保証するものではありません。

2019年09月09日週 のめざましじゃんけんの結果を公開します。


じゃんけん結果システムイメージ

Goo(グー) Choki(チョキ) Pa(パー)

めざましテレビ|めざましじゃんけんーフジテレビ

めざましじゃんけん結果
回次結果対戦相手
9月14日
(土曜日)
【2戦目】08時21分佐藤美弥選手
【1戦目】07時22分石田ゆり子さん
9月13日
(金曜日)
【4戦目】07時58分生じゃんけん!中井貴一さん 三谷幸喜さん
【3戦目】07時35分黒後愛選手
【2戦目】06時58分生じゃんけん!ジャニーズWEST
【1戦目】05時58分まちかどじゃんけん
9月12日
(木曜日)
【4戦目】07時58分大貫勇輔さん
【3戦目】07時35分荒木絵里香選手
【2戦目】06時58分林蓮音さん、中村浩大さん
【1戦目】05時58分まちかどじゃんけん
9月11日
(水曜日)
【4戦目】07時58分草刈正雄さん
【3戦目】07時35分石井優希 選手
【2戦目】06時58分生じゃんけん!松川菜々花ちゃん
【1戦目】05時58分永瀬廉さん(King & Prince) 北村匠海さん 黒島結菜さん
9月10日
(火曜日)
【4戦目】07時58分生じゃんけん!藤井流星さん(ジャニーズWEST)
【3戦目】07時35分岩坂名奈選手
【2戦目】06時58分鈴木仁さん
【1戦目】05時58分まちかどじゃんけん
9月09日
(月曜日)
【4戦目】07時58分中井貴一さん、ディーン・フジオカさん、石田ゆり子さん、草刈正雄さん、佐藤浩市さん、三谷幸喜さん
【3戦目】07時35分古賀紗理那選手
【2戦目】06時58分板尾創路さん
【1戦目】05時58分まちかどじゃんけん

2019年09月13日  めざましじゃんけん 結果

フジテレビ めざましテレビ めざましじゃんけん の結果を保証したり、全ての結果が記載を保証するものではありません。

2019年09月13日のめざましじゃんけんの結果をベストエフォートで公開します。


じゃんけん結果システムイメージ

Goo(グー) Choki(チョキ) Pa(パー)

めざましテレビ|めざましじゃんけんーフジテレビ

めざましじゃんけん結果
回次結果対戦相手
9月13日
(金曜日)
【4戦目】07時58分生じゃんけん!中井貴一さん 三谷幸喜さん
【3戦目】07時35分黒後愛選手
【2戦目】06時58分生じゃんけん!ジャニーズWEST
【1戦目】05時58分まちかどじゃんけん

TP-LINK TL-ER6020でのNAT構成

PPoE2セッション構成とし、NAT可能なWANポートを2つへと構成変更を行いました。
今までのネットワーク構成は、以下のようにNAT可能なPPoE接続は1セッションであったので、Synology の外部サーバー公開とRaspberry Piの外部サーバ公開は、外部向け公開ポートを分けて、アクセス/処理の振り分けを行っておりました。

ダブルWAN構成(PPoEの2セッション構成)

TP-Link の TL-ER6020は複数WANポートをサポートしているので、このような構成でのNATも簡単に設定出来ます。今回利用しておりませんが、WAN1とWAN2両方で、WEBリクエストの着信を待ち、公開サーバーへフォワードすることも可能です。

以下が、ER6020のVirtual Server(NAT)設定となります。

  • Synology ポート80(http) WAN2を利用
  • Synology ポート443(https) WAN2を利用
  • Synology ポート53(DNS) WAN2を利用
  • Raspberry Pi ポート80(http) WAN1を利用
  • Raspberry Pi ポート443(https) WAN1を利用

TP-Link VPNルーター PPTP L2TPVPN TL-ER6020

2019年09月12日  めざましじゃんけん 結果

フジテレビ めざましテレビ めざましじゃんけん の結果を保証したり、全ての結果が記載を保証するものではありません。

2019年09月12日のめざましじゃんけんの結果をベストエフォートで公開します。


じゃんけん結果システムイメージ

Goo(グー) Choki(チョキ) Pa(パー)

めざましテレビ|めざましじゃんけんーフジテレビ

めざましじゃんけん結果
回次結果対戦相手
9月12日
(木曜日)
【4戦目】07時58分大貫勇輔さん
【3戦目】07時35分荒木絵里香選手
【2戦目】06時58分林蓮音さん、中村浩大さん
【1戦目】05時58分まちかどじゃんけん

Raspberry Pi 3B+ 高温対策

プログラムのコンパイルなど4コアすべてを使った高負荷処理でなくても、結構高めの動作温度が気になっておりました。80°C近くになっている時間もありました。

夏も終盤ですが、8月末にRaspberry Pi 3B+にファンを導入しました。小さな基盤なので、ファンも小さかったです。

想像以上の効果でした、導入前が日次平均60°C付近が、導入後50°C付近と10°C以上の効果がありました。

以下が、平均温度の推移です。

Raspberry Pi 3B+の温度制御

Raspberry Pi 3B+には、2段階の温度制御が実装されています。

  • temp_soft_limit
  • temp_limit

temp_soft_limit

Raspberry Pi 3B +のみに導入されています。60°C以上になると、CPUスピードコントロールが実施されます。CPUクロックスピード調整システムが作動し、温度調整が設定されます。この温度では、クロック速度は1400MHzから1200MHzに低下する。デフォルト値は60°Cとなっております。

temp_limit

/boot/config.txtにtemp_limit=75と記載します。
この場合、70°Cからスロットリングが始まり、CPUクロックが標準の1.2GHzから段階的に600MHzまで低速化、75°C以下を保てるようになります。
スロットル時の最低CPUクロックも同様にarm_freq_min=400などと、さらに低く設定できます。

設定省略時(デフォルト)は、85℃となります。80°Cからスロットルを絞り、85°Cを越えないように制御します。

Raspberry Pi 3B+にデュアルファンをインストール

Raspberry Pi 3B+ デュアルファン Raspberry Pi Cooling Dual Fanを取り付けた際の写真を載せておきます。

綺麗に梱包されておりました。ファンを設置するシールもしっかりとした商品が同梱されています。

少し見ずらいですが、赤と黒のケーブルを接続し、ファンをボードに設置します。

Raspberry Pi デュアルファン

2019年09月11日  めざましじゃんけん 結果

フジテレビ めざましテレビ めざましじゃんけん の結果を保証したり、全ての結果が記載を保証するものではありません。

2019年09月11日のめざましじゃんけんの結果をベストエフォートで公開します。


じゃんけん結果システムイメージ

Goo(グー) Choki(チョキ) Pa(パー)

めざましテレビ|めざましじゃんけんーフジテレビ

めざましじゃんけん結果
回次結果対戦相手
9月11日
(水曜日)
【4戦目】07時58分草刈正雄さん
【3戦目】07時35分石井優希 選手
【2戦目】06時58分生じゃんけん!松川菜々花ちゃん
【1戦目】05時58分永瀬廉さん(King & Prince) 北村匠海さん 黒島結菜さん

Yolo3、Tiny-Yolo3での独自学習モデルをPythonに実装

画像検出に向けて、AlexeyAB Darknetを用いて、YOLO3、Tiny-YOLO3で作成した、独自学習モデルをPythonで実装します。

前提条件

YOLO2 Tiny-YOLO2 YOLO3 Tiny-YOLO3 をPythonで実装

学習済みモデル(weightsファイル)とコンフィグファイル(cfgファイル)

「darknet\build\darknet\x64\cfg\obj.data」ファイルのbackupに指定したフォルダに、学習モデル(weightsファイル)が出力されます。

classes = 7
train = train.txt
valid = test.txt
names = cfg/obj.names
backup = backup/

独自学習に用いたコンフィグファイルは、「darknet\build\darknet\x64\cfg\」フォルダ内で作成していると思いますので、独自学習時に用いたcfgファイルとなります。

これらのファイルを、画像検出を実施するRaspberry PiやサーバーのPythonファイルが読み込み可能な場所にコピーします。

Python3での実装

  • net = cv.dnn.readNetFromDarknet(CFG, MODEL)
    • CFG:学習モデル(weightsファイル)
    • MODEL:独自学習時に用いたcfgファイル
  • net.setPreferableTarget
    • net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)
      Raspberry PiやWindowsなどで動作させる際のTarget指定。
      現時点では、OpenCVのYOLO向けDNNでは、GPUはサポートされておりません。
    • net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
      Intel Movidius Neural Compute Stick 2 (NCS2)を利用する際は、TargetにNCS2を指定することが出来ます。Raspberry Pi 3B +で動作確認済みとなります。

参考記事:Movidius Neural Compute Stick 2、OpenVINO™ toolkit for Raspbian* OS導入

Python3 ソースコード

サンプルスクリプトを掲載しておきます。

#!/usr/bin/env python
# coding: utf-8

target_model = "yolov3-tiny-janken_final.weights"
target_config = "yolov3-tiny-janken.cfg"

import cv2 as cv
import numpy as np

MODEL = "./janken_cfg/" + target_model
CFG = "./janken_cfg/" + target_config
SCALE = 0.00392   ##1/255
INP_SHAPE = (416, 416) #input size
MEAN = 0
RGB = True

# Load a network
net = cv.dnn.readNetFromDarknet(CFG, MODEL)
net.setPreferableBackend(cv.dnn.DNN_BACKEND_DEFAULT)
##net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)

confThreshold = 0.8 # Confidence threshold
nmsThreshold = 0.8  # Non-maximum supression threshold

class_names = ['active', 'goo', 'choki', 'pa', 'won', 'lose', 'draw']

def getOutputsNames(net):
    layersNames = net.getLayerNames()
    return [layersNames[i[0] - 1] for i in net.getUnconnectedOutLayers()]

def postprocess(frame, outs):
    frameHeight = frame.shape[0]
    frameWidth = frame.shape[1]

    def drawPred(classId, conf, left, top, right, bottom):
        left = int(left)
        top = int(top)
        right = int(right)
        bottom = int(bottom)
        # Draw a bounding box.
        cv.rectangle(frame, (left, top), (right, bottom), (0, 255, 0))

        label = class_names[classId] + '_%.2f' % conf

        labelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1)
        top = max(top, labelSize[1])
        cv.rectangle(frame, (left, top - labelSize[1]), (left + labelSize[0], top + baseLine), (255, 255, 255), cv.FILLED)
        cv.putText(frame, label, (left, top), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))

    layerNames = net.getLayerNames()
    lastLayerId = net.getLayerId(layerNames[-1])
    lastLayer = net.getLayer(lastLayerId)

    classIds = []
    confidences = []
    boxes = []

    if lastLayer.type == 'Region':
        classIds = []
        confidences = []
        boxes = []
        for out in outs:
            for detection in out:
                scores = detection[5:]
                classId = np.argmax(scores)
                confidence = scores[classId]
                if confidence > confThreshold:
                    center_x = int(detection[0] * frameWidth)
                    center_y = int(detection[1] * frameHeight)
                    width = int(detection[2] * frameWidth)
                    height = int(detection[3] * frameHeight)
                    left = center_x - width / 2
                    top = center_y - height / 2
                    classIds.append(classId)
                    confidences.append(float(confidence))
                    boxes.append([left, top, width, height])
    else:
        print('Unknown output layer type: ' + lastLayer.type)
        exit()

    indices = cv.dnn.NMSBoxes(boxes, confidences, confThreshold, nmsThreshold)
    for i in indices:
        i = i[0]
        box = boxes[i]
        left = box[0]
        top = box[1]
        width = box[2]
        height = box[3]
        drawPred(classIds[i], confidences[i], left, top, left + width, top + height)

c = cv.VideoCapture(0)
c.set(cv.CAP_PROP_FRAME_WIDTH, 640) # カメラ画像の横幅を1280に設定
c.set(cv.CAP_PROP_FRAME_HEIGHT, 480) # カメラ画像の縦幅を720に設定
c.read()

r, frame = c.read()

frameHeight = frame.shape[0]
frameWidth = frame.shape[1]
# Create a 4D blob from a frame.
inpWidth = INP_SHAPE[0]
inpHeight = INP_SHAPE[1]
blob = cv.dnn.blobFromImage(frame, SCALE, (inpWidth, inpHeight), MEAN, RGB, crop=False)
   
# Run a model
net.setInput(blob)
outs = net.forward(getOutputsNames(net))
   
##print(outs)
postprocess(frame, outs)
# Put efficiency information.
t, _ = net.getPerfProfile()
label = 'Inference time: %.2f ms' % (t * 1000.0 / cv.getTickFrequency())
cv.putText(frame, label, (0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0))
#対象ファイルコピー保存
target_filepath = './result.jpg'
cv.imwrite(target_filepath, frame)

2019年09月10日  めざましじゃんけん 結果

フジテレビ めざましテレビ めざましじゃんけん の結果を保証したり、全ての結果が記載を保証するものではありません。

2019年09月10日のめざましじゃんけんの結果をベストエフォートで公開します。


じゃんけん結果システムイメージ

Goo(グー) Choki(チョキ) Pa(パー)

めざましテレビ|めざましじゃんけんーフジテレビ

めざましじゃんけん結果
回次結果対戦相手
9月10日
(火曜日)
【4戦目】07時58分生じゃんけん!藤井流星さん(ジャニーズWEST)
【3戦目】07時35分岩坂名奈選手
【2戦目】06時58分鈴木仁さん
【1戦目】05時58分まちかどじゃんけん