🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1105閲覧

手書き文字を認識させる際の文字種別をひらがなに限定したい

mnmnmmmn

総合スコア18

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/22 06:42

前提・実現したいこと

こちらにて提供されている手書き文字認識プログラムを、ひらがな専門の認識プログラムに加工したいです。(例えば、「ニ」に近い手書き文字でも「こ」と認識させたい)
出力結果はひらがなだけで良いので、認識する文字種別をひらがなに限定すればよいのではないかと考えました。

発生している問題・エラーメッセージ

下記「該当のソースコード」の「nihongo.py」を加工したところ、下記の通りエラーが発生しました。

RuntimeError: Error(s) in loading state_dict for WideTipXception: size mismatch for fc.weight: copying a param with shape torch.Size([2388, 4096]) from checkpoint, the shape in current model is torch.Size([74, 4096]). size mismatch for fc.bias: copying a param with shape torch.Size([2388]) from checkpoint, the shape in current model is torch.Size([74]).

該当のソースコード

加工したのは以下「nihongo.py」です。ひらがな以外の情報を削除しました。
(加工前)

python

1[nihongo.py] 2hiragana = \ 3['あ','い','う','え','お',…以下略] 4katakana = \ 5['ア','イ','ウ','エ','オ',…以下略] 6alphabet_upper = \ 7['A','B','C','D','E',…以下略] 8alphabet_lower = \ 9['a','b','c','d','e',…以下略] 10numetric = ['0','1','2','3','4',…以下略] 11 12alphabet_num = alphabet_upper + alphabet_lower + numetric 13 14kigou = \ 15['(',')','[',']','「','」',',…以下略] 16jyouyou_kanji = \ 17['亜','哀','挨','愛','曖',…以下略] 18 19nihongo = hiragana+katakana+alphabet_num+kigou+jyouyou_kanji 20nihongo_class = ['']+nihongo 21 22filter_word = \ #似た文字の判別 23[ 24 ('り', 'リ', katakana, katakana), 25 ('リ', 'り', hiragana, hiragana),…以下略]

(加工後)

python

1[nihongo.py] 2hiragana = \ 3['あ','い','う','え','お',…以下略] 4 5nihongo = hiragana 6nihongo_class = ['']+nihongo 7 8filter_word = \ #似た文字の判別 9[ 10 ('や', 'ゃ', ['き','し','ち','に','み','り','ぎ','ぢ','じ'], None), 11 ('ゆ', 'ゅ', ['き','し','ち','に','み','り','ぎ','ぢ','じ'], None), 12 ('よ', 'ょ', ['き','し','ち','に','み','り','ぎ','ぢ','じ'], None),]

冒頭リンク記載のオプションを付与し、anacondaで下記コマンドを実行します。

anaconda

1python ocr_japanease.py --cpu --model write data

(文字数オーバーで「ocr_japanese.py」のコードを掲載できませんでした。
お手数ですが当ファイル並びにその他構成ファイルについては冒頭リンクをご参照いただければ幸いです)

試したこと

エラーを直訳↓
"fc.weight のサイズの不一致: チェックポイントから形状 torch.Size([2388, 4096]) を持つパラメータをコピーすると、現在のモデルの形状は torch.Size([74, 4096]) になります"

74という数字はひらがなの文字数と一致するので、ひらがな以外の文字を削除し2388から74に代わってしまったために起こったエラーと考えました。
そのため削除した文字をいったんすべて" "に変えたのですが、同じエラーが生じています。

補足情報(FW/ツールのバージョンなど)

conda: 4.9.2
Python: 3.8.5
torch: 1.7.1+cpu
cv2: 4.5.1

不足の情報等ございましたらご指摘いただければ幸いです。
構成ファイルについては冒頭リンクもご参照いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

リンク先を見ると、学習済みのモデルを提供してくれているようですし、それを利用しているということだと思います。

ということは、そのモデルは片仮名や漢字を含んだ文字を判定して返すようになっているので、それを平仮名専用に読み替えることはできません。

元のコードでいろいろな文字のデータを定義しているのは判定するためではなく、判定結果が何を示しているかを示すためですので、それを削ってしまうと半径結果に対応するものが無くてエラーになるのでしょう。

投稿2021/01/22 14:11

TakaiY

総合スコア13765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnmnmmmn

2021/01/24 01:59

返信が遅れ申し訳ありません。 分かりやすい説明ありがとうございます、とてもよく理解できました。 コードはあくまで判定結果のアウトプットで、学習済みモデル自体がひらがな専用でないとだめなのですね。 精度をあげるための他の方法を考えてみます!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問