タグ: エラー

  • [2022年12月更新]YOLOXのインストール方法

    [2022年12月更新]YOLOXのインストール方法

    YOLOXとは

    YOLOシリーズがたくさん出ている中、2021年7月に最新のYOLOXが出ました。

    YOLOXに関する論文はこちら (現在プレプリントです。)
    また、GitHubはこちら

    YOLOは物体認識のアルゴリズムです。
    リアルタイムに動かすことを前提としており、非常に動作が軽量であり(認識だけならスマホでも動かすことができます)、システムの応用性もあり、IoT装置にも多く取り入れられています。

    物体認識アルゴリズムと聞くと少し難しそうですが、簡単に想像できるのは、カメラの顔や目の自動フォーカスです。
    ここが顔ですよと視覚が現れると思いますが、それが他の物体でも適応され、そしてそれぞれが何なのかを分類することができます。

    YOLOはたくさんのシリーズがあり、YOLO, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOXと出てきています。
    また、動作環境もPythonだけでなく、MATLABでも使うことができるなど、自分の使っているプラットフォームに適応させることができます。

    YOLOXはYOLOv3からのシステムとは異なり、YOLO(最初に出版された方法)でのシステムとなっており、動作も早く、また正確性もかなり向上しているとのことです。

    詳しくは他のブログサイトでも書かれています。

    YOLOXのインストール方法

    GitHubのサイトにもインストール方法が記載されていますが、英語なのと、仮想環境を使った方法では書かれていないので、今回はAnacondaで仮想環境を使って行う方法です。

    WindowsとMacの両方で、YOLOXのマニュアル通りにインストールするとエラーが連発しました。
    今後もバージョンによって、エラーが変わってきたりするので、その都度調べてください。

    macのターミナルでcondaコマンドを使う方法は以下から

    WindowsではAnaconda Promptを使うと良いかと思います。

    ターミナル(Anaconda Prompt)を開き、文字が並んでいる黒いウィンドウができます。
    最終行の左に(base)となっているかと思います。
    現在、仮想環境には入っていない状態です。

    仮想環境なしでもYOLOXは動作できますが、他のパッケージとの環境が交差してしまうので、仮想環境を作ることをお勧めします。

    まず以下のコードを入力し、仮想環境を作成します。

    conda create -n YoloX python=3.8

    YoloXは仮想環境名で、これでなくても大丈夫です。
    また、pythonのバージョンはpython=3.8で指定できます。

    その後以下のコードで仮想環境に入ります。

    conda activate YoloX

    これで、左の(base)が(YoloX)になっていたら成功です。

    CUDAのインストール

    まず、機械学習のライブラリを初めてインストールする方で、YOLOの学習をGPUで行うおうとする方はCUDAをインストールしましょう。
    (CPUでの学習はありえないほど時間がかかるのでおすすめしません。ただ、Apple Silicon搭載のPCではGPUを使うことは現在できません。)
    CUDAは公式サイトからダウンロードできます。

    CUDAのバージョンは、PyTorchで対応しているCUDAのバージョンを確認してから、そのバージョンをインストールするといいと思います。
    PyTorchの公式サイト

    過去のバージョンをインストールするには、Download nowを押した後の画面で、下の方のResourcesのArchive of Previous CUDA Releasesでインストールすることができます。

    最新バージョンでもできるかもしれませんが、取り合えず、PyTorchに合わせておけば問題なく動かすことができると思います。

    インストールされているかはwindowsで、「システム環境変数の編集」を開き、詳細設定>環境変数と開き、
    CUDA_PATHからはじまるパスがあるか確認しましょう。
    Vの後の数字がバージョンを示しています。

    PyTorchのインストール

    まず、インストールする前に、pipの更新をしておきましょう。
    Anaconda Promptで仮想環境に入り、以下のコマンドを実行します。

    python -m pip install --upgrade pip

    PyTorchの公式サイトに行き、自分の環境に合ったインストール方法を選びましょう。
    しかし、ここで問題となるのが、Packageの欄で、ここではpipを選択しましょう
    condaでインストールするとその後でエラーが出てしまいます。

    Run this Commandのコマンドをコピペして、仮想環境にインストールします。

    インストールが終わったら、以下のコマンドでPyTorchがインストールされているか確認しましょう。

    pip list

    この中に、torchが入っていればOKです!!!
    一応動作確認として、pythonを起動し、以下のコマンドを実行してみましょう。

    import torch
    print(torch.cuda.is_available())

    出力でTrueと出れば問題なくインストールできており、torchをGPUで動かす準備が整ったということになります。
    (Macに導入する際やGPUがないパソコンには、Folseと出てきますが、imortが出てきたら大丈夫です)
    エラーが出たらもう一度、インストールを見直してみましょう。

    YOLOXに関わるパッケージのinnsuto-ru

    GitHubからYOLOXの諸々のファイルをダウンロード(クローン)します。
    Gitコマンドが使える人は、以下のコードでクローンできます。

    git clone git@github.com:Megvii-BaseDetection/YOLOX.git

    その後、クローンしたフォルダにアクセスし、必要なパッケージをインストールします。

    まず、クローンしたYOLOXのフォルダにある、requirements.txtの中身を以下のように書き換えます。

    # TODO: Update with exact module version
    numpy
    #torch>=1.7
    opencv_python
    loguru
    tqdm
    #torchvision
    thop
    ninja
    tabulate
    
    # verified versions
    # pycocotools corresponds to https://github.com/ppwwyyxx/cocoapi
    #pycocotools>=2.0.2
    #onnx==1.8.1
    onnxruntime==1.8.0
    onnx-simplifier==0.3.5

    どうやら、pycocotoolsなどはこのコマンドで入れることができないようです。

    これが終わったら、requirements.txtを保存して、下のコマンドをターミナル(Anaconda prompt)で実行します。

    cd YOLOX
    pip3 install -r requirements.txt
    pip3 install cython pycocotools

    ダウンロードしたYOLOXのフォルダには”requirements.txt”というファイルがあり、ここに必要なパッケージが入っているので、これを読み取り専用で開き、記載されているパッケージをインストールするコマンドが二つ目のコマンドです。

    pip3 install cython pycocotools

    このコマンドによって、cythonとpycocotoolsをインストールすることができます。
    どうやらこれらは別途インストールする必要があるようです。

    このコマンドを実行すると、以下のエラーが出る人もいるかと思います。

          building 'pycocotools._mask' extension
          error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

    Microsoft C++ Build Toolsがpycocotoolsには必要だそうです。(Mac版がないのに、Macでもエラーが出る。)
    WIndowsの人は一応インストールしておくと良いでしょう。

    これをインストールし、さらに以下のコードで再度インストールを試みてください。

    pip3 install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"

    それでもうまくいかない場合には、以下のコマンドで入れましょう。

    conda install -c conda-forge pycocotools

    基本的には今回のパッケージ等はpipでインストールしていますが、こればっかりはインストールできないので、condaでインストールするという最終手段を使います。

    次に、yolox_x.pthをダウンロードします。
    リンクを押すとすぐにダウンロードが始まります。

    ダウンロードしたファイルをgithubからクローンしたYOLOXのフォルダに入れましょう。
    これでデモの認識に使うモデルをダウンロードし、任意の場所に置くことができます。

    tools/demo.pyの上部に下記をプログラムに追記し、yoloxフォルダへアクセスできるようにします。

    #demo.pyの中身に書き込みましょう。
    import sys
    import os
    sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

    これを行わないと、yoloxのパッケージがありませんというエラーが出されます。

    その後、ターミナルで以下のコマンドを実行しましょう。
    これで、デモ動作ができているかどうかを確認することができます。

    python tools/demo.py image -n yolox-x -c yolox_x.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu 
    #gpuで動かさない場合には、gpuをcpuに書き換えてください。

    –device gpu は 状況に応じて –device cpuに書き換えてください。

    これで、YOLOX/YOLOX_outputs/yolox_x/vis_res/20……..の中に以下の画像が入っていればよいです。

    おまけ

    パソコンどれを使えばいいのかわからない方へ、パソコン購入相談をココナラでやることにしました!

    あなたの要望に合わせてパソコンを選び、提案します パソコン選びに困っている方々へ!様々な目的に対応できます!

    パソコンを選んだり、アドバイスすることが多く多くの友人からパソコンの相談やったら儲かるのにと言われました。
    それに感化されて一旦やってみようと思いました!

    パソコンの利用目的に合わせて、そしてパソコンの予算に合わせて購入をご提案します。
    特に機械学習に用いるパソコンを多く選び、使ってきています。

    そして、希望があればパソコンを今後買う時にどこに注目すると良いかもアドバイスしていきたいと思います。

    今まで選んだことあるパソコンとして、研究室の解析用パソコン、実用パソコン、ゲーム配信用パソコン、大学の新入生用のパソコン、建築学科用のCADが使えるパソコン、とりあえずのパソコンなど。

    MacとWindowsの両方使っているので、どちらのお話、ご提案もできます!

    ぜひ利用してみてください

  • elifを使った条件分岐がうまくいかない!![Python]

    elifを使った条件分岐がうまくいかない!![Python]

    if文で複数条件で複数の条件分岐を行いたいときに、elifでやってみたらエラーは出ていないんだけど、なんか結果がうまくいかないという時ってないでしょうか。
    もしかしたら、下の事象が当てはまっているかもしれません。
    参考までに、僕が間違えてしまっていたので、メモ書きします。

    問題となるプログラム

    if、elifに二条件を記載して、elifを含むプログラムを作成した状況で問題が起こります。

    def trable(a, b):
        if a >= 10 & b >= 10:
            print("patern A")
        elif a >= 10 & b < 10:
            print("patern B")
        elif a < 10 & b >= 10:
            print("patern C")
        else:
            print("patern D")
    
    trable(11, 11)
    trable(11, 9)
    trable(9, 11)
    trable(9, 9)

    上記のプログラムを実行したときに、上から順にA, B, C, Dのパターンに分類分けされてほしいようにも思えますが、実際には下の出力になります。

    patern A
    patern B
    patern C
    patern B

    順序を入れ替えてみてはどうでしょうか。

    def trable(a, b):
        if a >= 10 & b >= 10:
            print("patern A")
        elif a < 10 & b < 10:
            print("patern B")
        elif a >= 10 & b >= 10:
            print("patern C")
        else:
            print("patern D")
    
    trable(11, 11)
    trable(9, 11)
    trable(11, 9)
    trable(9, 9)

    とやって、patern B, Cのプログラムを入れ替えて、A, B, C, Dと出力してほしいというプログラムを作ると、実際には下記の出力になります。

    patern A
    patern D
    patern D
    patern D

    elif自体は複数条件を定義したいときに下記のように使用します。

    if 条件式A:
      条件式Aが真(True)となった場合の処理
    elif 条件式B:
      条件式Aが偽(False)で、条件式Bが真(True)となった場合の処理
    else:
      条件式Aが偽(False)で、条件式Bも偽(False)となった場合の処理

    しかし、if文、elif文の条件式が二条件になると、上記のような問題が起こると想定されます。
    よって、目的の出力にならないことが起こります。

    これの厄介なところはエラーが排出されないので、実際に結果を見てみないとうまくいっているかどうかがわからないという点です。

    改善策

    複数条件で複数の条件式で分けたいときには、elif文で複数条件を指定しないようにします。

    def resolve(a, b):
        if a>= 10:
            if b >= 10:
                print("patern A")
            else:
                print("patern B")
    
        else:
            if b >= 10:
                print("patern C")
            else:
                print("patern D")
    
    resolve(11, 11)
    resolve(11, 9)
    resolve(9, 11)
    resolve(9, 9)

    煩わしくなりましたが、こうすることで思っている想定通りの出力を行うことができます。

    プログラムではこのような思わぬ落とし穴があるので、書いたプログラムはしっかり確認することの教訓になりますね。

    追記(2022年8月)

    ()で括っていないことが問題であったみたいです。

    def trable(a, b):
        if (a >= 10) & (b >= 10):
            print("patern A")
        elif (a < 10) & (b < 10):
            print("patern B")
        elif (a >= 10) & (b >= 10):
            print("patern C")
        else:
            print("patern D")

    とすると、うまく条件分岐できました。
    もしくは、&をandと表記することでも解決することができます。

    def trable(a, b):
        if a >= 10 and b >= 10:
            print("patern A")
        elif a < 10 and b < 10:
            print("patern B")
        elif a >= 10 and b >= 10:
            print("patern C")
        else:
            print("patern D")

    &とandって同じように思えますが、&には論理積という側面があり、元々のプログラムだと

    a >= 10 & b < 10

    これは a >= (10 & b) < 10 の意味になるようで、
    a=9, b=9だと不等式が
    9>=8<10となり、Trueとなってしまうそうです。

    難しいですね・・・。

  • PCを起動した瞬間にファンが爆速で回る時の対処法

    PCを起動した瞬間にファンが爆速で回る時の対処法

    パソコンを起動したときに、ファンが爆速で回った時、パソコンが壊れたんじゃないかって思う時があると思います。
    急に変な挙動をし始めた時、もうどうしようもないと思いがちですが、意外とパソコンの不調は自力でも改善することができます。

    ただ、自己責任で行うため、細心の注意を払って、かつ詳しい人がいれば一緒にやる等してみると良いでしょう。
    パソコン高いですし・・・・。

    今回は起動した時にファンが爆速で回転し、かつwindowsが起動後しばらくしてもファンの回転が収まらない時の対処法を経験談をもとに記述していきます。

    症状

    デスクトップパソコンを一晩つけっぱにしており、朝気づいたらパソコンからファンが全速力で回転している音がしました。

    一度パソコンをシャットダウンするも、ファンの回転が収まらなかったため、電源のスイッチを切り、電源コードを抜きました。
    電源ボタンを数度押し、放電した後で起動するも、同様にファンは全力回転したままでした。

    ただ、起動が遅いぐらいで、他に問題が起こっている様子はありませんでした。

    対処法

    BIOSの設定画面でCPUの温度を見てみるも、上がっても30度程度で問題はありませんでした。

    BIOSでPCを省電力モードにするも、変化なし。
    ファンの回転回数の最低値を下げるも、変化なしでした。

    電源やUSBなどパソコンにつながっているコードを全て抜き、電源ボタンを数度押し放電した後でパソコンを開きました。

    ボタン電池を抜き、電源ボタンを数度押しました(CMOSクリア)。
    [CMOSクリアは他にも方法があります。また、この時に電源からマザボへのコードなども抜いておいた方が良いでしょう。]

    CMOSクリアはマザーボードのBIOSをリセットする方法で、ボタン電池を取り除いた後で、マザーボードにある電気を逃してあげる作業です。

    再度、ボタン電池をはめ、キーボード、電源、映像端子のコードを繋ぎ、パソコンの電源を入れました。
    すると、ファンの回転は通常に戻りました。
    念の為、BIOSアップデートも行いました。

    とりあえず、現状は通常通り動いています。

    原因

    直接の原因はBIOSのエラーが問題だと思われます。
    何か変なことが起こり、ファンが全力回転するというような症状になったと考えられます。

    BIOSのエラーはCMOSクリアで改善することがよくあるので、他にもBIOSのエラーが原因だと考えられる際にはCMOSクリアでBIOSのリセットを行なってみると治ることがよくあります。

    BIOSのエラーが起こる原因としては、パソコンをずっと電源を入れていた、パソコン内に埃が溜まっていた、急に変なところで電源を落としてしまったり、変なソフトを入れてしまったなどがあります。

    特に、パソコン内に埃が溜まっていたというのはよくあることなので、年一ぐらいでパソコンの内部をエアダスター等でクリーニングすると防ぐことができます。

    今回最後にBIOSアップデートをこなっていましたが、一応リセットだけで十分だと思うのですが、アップデートを行うことで内在的なエラーを消去できる可能性があります。
    電源つかなくなったカメラとかをファームウェアをアップデートすると起動するようになるというような理論と同様の理論です。

    パソコンのエラーは自分で解消できると、修理費が抑えられるので、かなりお得なスキルになります。
    また、パソコンの起動ができない等のエラーに対して、パーツを変えること以外でできることは意外と少ないので、ぜひ他にも一旦調べてみると良いと思います。

    おまけ

    パソコンで起こりうる問題の相談をココナラでやることにしました!

    パソコンが動かなくなった時の対処法を提案します パソコンが突然動かなくなった駆け込み寺として

    さまざまなパソコンを触ってきており、さまざまなトラブルを見てきました。
    ココナラではパソコンが動かなくなった時と記載していますが、パソコンを使用している上で起こりうるトラブル全般を受け付けています。

    まだまだココナラは使い始めてまもないので、使い慣れないところがあるかと思いますが、ぜひパソコントラブルでこなった時には利用してみてください。

    MacとWindowsの両方使っているので、どちらの問題にもお答えできます。