概要
多くのインド人にとって農業は単なる仕事ではありません。それは生き方です。それは彼らが生計を支え、インド経済に多大な貢献をする手段です。粘土、砂、シルトの粒子がそれぞれの割合で含まれる土壌の種類を決定することは、適切な作物の選択と雑草の成長の特定にとって重要です。農業におけるディープラーニングの可能性を発見してください。インドにおける土壌の種類と雑草検出の重要性を理解します。
深い学習 あらゆる分野で役立つ新技術です。深層学習は、現場監視、現場作業、ロボット工学、土壌、水、気候条件の予測、景観レベルの土地と作物の種類の監視など、さまざまな規模のスマート農業に広く応用されています。土壌の写真をディープ ラーニング アーキテクチャに入力し、特徴の検出を学習させ、ディープ ラーニング アーキテクチャを使用して土壌を分類できます。
このブログでは、農業における土壌の重要性について説明します。機械学習と深層学習モデルを使用して土壌を分類します。
学習目標
- 農業において土がいかに重要であるかがわかります。
- 機械学習アルゴリズムが土壌の種類を分類する方法を学びます。
- 農業に深層学習モデルを実装して、土壌の種類を分類します。
- マルチスタッキング アンサンブル学習の概念を検討して、予測の精度を高めます。
この記事は、の一部として公開されました データサイエンスブログ。
目次
農業における土壌の役割
動植物から排泄される有機物、鉱物、気体、液体などは、農業の基盤となる大切な土壌を形成します。農業の基礎は、植物や動物から発生するガス、ミネラル、有機物などの物質であり、土壌システムを形成します。
インドの経済は純粋に農業に依存しています。土壌は作物にとって重要ですが、その肥沃さゆえに望ましくない雑草の発生につながります。
水分と温度は土壌中の細孔や粒子の形成に影響を与える物理的変数であり、根の成長、水の浸透、植物の出現速度に影響を与えます。
しかし、主に土壌には砂と粘土の粒子が含まれています。広く利用可能な土壌粒子の中で、探査現場には粘土が豊富に存在します。粘土粒子が表面に存在するのは、豊富な栄養が供給されているためです。泥炭とロームはほとんど存在しません。粘土質土壌の間には広々とした空間があり、そこに水分が保たれています。
データセット
特徴抽出は、優れた深層学習モデルを構築するための主要な手順の 1 つです。機械学習アルゴリズムの構築に必要となる可能性のある機能を特定することが重要です。を使用します。 マホタス 画像の空間情報とテクスチャ情報を含むハラリック特徴を抽出するためのライブラリ。
skimage ライブラリを使用して画像をグレースケールに変換し、物体検出に役立つ勾配ヒストグラム (HOG) 特徴を抽出します。最後に、特徴の値を配列に連結し、後で機械学習および深層学習アルゴリズムで使用します。
import mahotas as mh
from skimage import color, feature, io
import numpy as np
# Function to extract features from an image
def extract_features(image_path):
img = io.imread(image_path)
gray_img = color.rgb2gray(img) # Converting image to grayscale
# Converting the grayscale image to integer type
gray_img_int = (gray_img * 255).astype(np.uint8)
# Extracting Haralick features using mahotas
haralick_features = mh.features.haralick(gray_img_int).mean(axis=0)
# Extracting Histogram of Gradients (HOG) features
hog_features, _ = feature.hog(gray_img, visualize=True)
# Printing the first few elements of each feature array
print("Haralick Features:", haralick_features[:5])
print("HOG Features:", hog_features[:5])
# Concatenating the features into a single array
all_features = np.concatenate((haralick_features, hog_features))
return all_features
image_path = '/kaggle/input/soil-classification-dataset/Soil-Dataset/Yellow Soil/20.jpg'
features = extract_features(image_path)
print("Extracted Features:", features)
土壌分類における機械学習アルゴリズム
次に、Kaggle から取得した土壌画像を使用して機械学習モデルを構築しましょう。
まず、すべてのライブラリをインポートし、次の名前の関数を構築します。 抽出機能 画像から特徴を抽出します。次に、画像がインポートされ、グレースケールへの変換を含む処理が行われ、これらの特徴が得られます。次に、各画像の特徴が抽出された後、次を使用してラベルがエンコードされます。 ラベルエンコーダー。
import os
import numpy as np
import mahotas as mh
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report
from skimage import color, feature, io
# Function to extract features from an image
def extract_features(image_path):
img = io.imread(image_path)
gray_img = color.rgb2gray(img) # Converting image to grayscale
gray_img_int = (gray_img * 255).astype(np.uint8)
haralick_features = mh.features.haralick(gray_img_int).mean(axis=0)
hog_features, _ = feature.hog(gray_img, visualize=True)
hog_features_flat = hog_features.flatten() # Flattening the HOG features
# Ensuring both sets of features have the same length
hog_features_flat = hog_features_flat[:haralick_features.shape[0]]
return np.concatenate((haralick_features, hog_features_flat))
data_dir = "/kaggle/input/soil-classification-dataset/Soil-Dataset"
image_paths = []
labels = []
class_indices = {'Black Soil': 0, 'Cinder Soil': 1, 'Laterite Soil': 2,
'Peat Soil': 3, 'Yellow Soil': 4}
for soil_class, class_index in class_indices.items():
class_dir = os.path.join(data_dir, soil_class)
class_images = [os.path.join(class_dir, image) for image in os.listdir(class_dir)]
image_paths.extend(class_images)
labels.extend([class_index] * len(class_images))
# Extracting features from images
X = [extract_features(image_path) for image_path in image_paths]
# Encoding labels
le = LabelEncoder()
y = le.fit_transform(labels)
# Splitting the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Initializing and training a Random Forest Classifier
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier.fit(X_train, y_train)
# Making predictions
y_pred_rf = rf_classifier.predict(X_test)
# Evaluating the Random Forest model
accuracy_rf = accuracy_score(y_test, y_pred_rf)
report_rf = classification_report(y_test, y_pred_rf)
print("Random Forest Classifier:")
print("Accuracy:", accuracy_rf)
print("Classification Report:n", report_rf)
ディープニューラルネットワーク
計算ユニットとニューロンの数に基づいて機能します。各ニューロンは入力を受け取り、出力を提供します。これは精度を高め、より適切な予測を行うために使用されますが、機械学習アルゴリズムはデータの解釈に依存しており、それに基づいて意思決定が行われます。
また読む: ディープラーニングとニューラルネットワークの入門ガイド
ここで、Keras の Sequential API を使用して定義されたモデルを構築しましょう。このモデルには、Conv2D 畳み込み層 MaxPooling2D、平坦化層 Flatten、および密な層 Dense があります。
最後に、モデルは次を使用してコンパイルされます。 アダム オプティマイザーとカテゴリカルクロスエントロピー損失。
import tensorflow as tf
from tensorflow.keras.preprocessing import image_dataset_from_directory
data_dir = "/kaggle/input/soil-classification-dataset/Soil-Dataset"
# Setting up data generators
batch_size = 32
image_size = (224, 224)
# Using image_dataset_from_directory to load and preprocess the images
train_dataset = image_dataset_from_directory(
data_dir,
labels='inferred',
label_mode='categorical',
validation_split=0.2,
subset='training',
seed=42,
image_size=image_size,
batch_size=batch_size,
)
validation_dataset = image_dataset_from_directory(
data_dir,
labels='inferred',
label_mode='categorical',
validation_split=0.2,
subset='validation',
seed=42,
image_size=image_size,
batch_size=batch_size,
)
# Displaying the class indices
print("Class indices:", train_dataset.class_names)
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(train_dataset.class_names), activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Training the model
epochs = 10
history = model.fit(train_dataset, epochs=epochs, validation_data=validation_dataset)
import numpy as np
from tensorflow.keras.preprocessing import image
# Function to load and preprocess an image for prediction
def load_and_preprocess_image(img_path):
img = image.load_img(img_path, target_size=image_size)
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array /= 255.0
return img_array
image_path = '/kaggle/input/soil-classification-dataset/Soil-Dataset/Peat Soil/13.jpg'
new_image = load_and_preprocess_image(image_path)
# Making predictions
predictions = model.predict(new_image)
predicted_class = np.argmax(predictions[0])
# Getting the class label based on the class indices
class_labels = {0: 'Black Soil', 1: 'Cinder Soil', 2: 'Laterite Soil',
3: 'Peat Soil', 4: 'Yellow Soil'}
predicted_label = class_labels[predicted_class]
# Displaying the prediction
print("Predicted Class:", predicted_class)
print("Predicted Label:", predicted_label)
ご覧のとおり、予測されたクラスは 0、つまり Black Soil です。したがって、私たちのモデルは土壌の種類を正しく分類しています。
提案されたマルチスタッキングアンサンブル学習モデルのアーキテクチャ
スタッキング分類子 BaseClassifiers と ロジスティック回帰 メタ分類子 最終推定者。これにより、baseClassifier の出力が結合されて、最終的な予測が行われます。次に、トレーニングと予測を行った後、精度が計算されます。
base_classifiers = [
('rf', RandomForestClassifier(n_estimators=100, random_state=42)),
('knn', KNeighborsClassifier(n_neighbors=5)),
('svm', SVC(kernel='rbf', C=1.0, probability=True)),
('nb', GaussianNB())
]
# Initializing the stacking classifier with a logistic regression meta-classifier
stacking_classifier = StackingClassifier(estimators=base_classifiers,
final_estimator=LogisticRegression())
# Training the stacking classifier
stacking_classifier.fit(X_train, y_train)
# Making predictions with Stacking Classifier
y_pred_stacking = stacking_classifier.predict(X_test)
# Evaluating the Stacking Classifier model
accuracy_stacking = accuracy_score(y_test, y_pred_stacking)
report_stacking = classification_report(y_test, y_pred_stacking)
print("nStacking Classifier:")
print("Accuracy:", accuracy_stacking)
print("Classification Report:n", report_stacking)
まとめ
土壌は良い作物を生み出すために重要な要素です。特定の作物を生産するにはどのような土壌タイプが必要かを知ることが重要です。したがって、土壌の種類を分類することが重要になります。土壌の種類を手動で分類するのは時間のかかる作業であるため、深層学習モデルを使用して土壌を分類するのが簡単になります。この問題ステートメントを実装するための機械学習モデルと深層学習モデルが多数あります。最適なものを選択するかどうかは、データセット内に存在するデータの品質と量、および当面の問題ステートメントによって異なります。最適なアルゴリズムを選択するもう 1 つの方法は、それぞれを評価することです。それは、土壌をどの程度正確に分類できるかという精度を測定することで実現できます。最後に、複数のモデルを使用して最適なモデルを構築する、マルチスタッキング アンサンブル モデルを実装しました。
主要な取り組み
- 効果的な作物選択のためには、土壌を完全に理解する必要があります。
- 農業におけるディープラーニングは、植物の病気の予測から土壌の種類や水の需要に至るまで、強力なツールです。
- 土壌画像から特徴を取得するために特徴抽出を行いました。
- このブログでは、土壌を分類するための機械学習モデルと深層学習モデル、および精度を向上させるためのマルチスタック アンサンブル モデルを検討しました。
よくある質問
A. 適切な作物を選択し、雑草の成長を特定するために重要です。
A. 砂、粘土、シルト、泥炭、ロームなどの地物が考慮されます。
A. 従来の機械学習がデータを解釈して意思決定を行うのに対し、ディープ ラーニングではモデルがインテリジェントな意思決定を行うことができます。
A. マルチスタッキング アンサンブル モデルにより、土壌タイプの分類の精度が向上します。
この記事に示されているメディアは Analytics Vidhya が所有するものではなく、著者の裁量で使用されています。
関連記事
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- PlatoData.Network 垂直生成 Ai。 自分自身に力を与えましょう。 こちらからアクセスしてください。
- プラトアイストリーム。 Web3 インテリジェンス。 知識増幅。 こちらからアクセスしてください。
- プラトンESG。 カーボン、 クリーンテック、 エネルギー、 環境、 太陽、 廃棄物管理。 こちらからアクセスしてください。
- プラトンヘルス。 バイオテクノロジーと臨床試験のインテリジェンス。 こちらからアクセスしてください。
- 情報源: https://www.analyticsvidhya.com/blog/2024/01/deep-learning-in-agriculture-improving-soil-crop-yields/
- :持っている
- :は
- :not
- $UP
- 1
- 10
- 13
- 224
- 32
- 33
- 43
- 46
- 51
- 7
- 9
- a
- 受け入れる
- 精度
- 越えて
- アダム
- 影響
- 後
- 農業
- アルゴリズム
- アルゴリズム
- すべて
- ことができます
- の中に
- 量
- an
- 分析論
- 分析Vidhya
- および
- 動物
- 別の
- API
- 適用された
- 建築
- です
- 配列
- 記事
- AS
- At
- 賃貸条件の詳細・契約費用のお見積り等について
- 利用できます
- ベース
- BE
- になる
- き
- BEST
- より良いです
- の間に
- ブラック
- ブログ
- ブログソン
- 両言語で
- ビルド
- 建物
- by
- 計算された
- 缶
- 選択する
- 選択する
- class
- 分類
- 分類します
- 気候
- カラー
- 組み合わせ
- 来ます
- コンパイル
- 完全に
- 計算
- コンセプト
- 条件
- 見なさ
- 貢献する
- 変換
- 変換
- 作物
- 作物
- データ
- 決定
- 深いです
- 深い学習
- 定義済みの
- 密集
- 依存
- 検出
- 検出
- 決定
- 開発
- 異なる
- 発見する
- 裁量
- 話し合います
- 病気
- 表示
- do
- ありません
- 行われ
- 原因
- 各
- 簡単に
- 経済
- 効果的な
- 素子
- 要素は
- 出現
- 新興の
- 新興テクノロジー
- エンコード
- エンコーディング
- 確保する
- エポック
- エーテル(ETH)
- 評価します
- あらゆる
- 探査
- 調査済み
- エキス
- 抽出
- 特徴
- 特徴
- 少数の
- フィールド
- ファイナル
- 最後に
- 名
- 森林
- フォーム
- 形成
- Foundation
- から
- function
- 発電機
- 取得する
- 受け
- 良い
- だ
- 勾配
- グレースケール
- 成長性
- ガイド
- ハンド
- 持ってる
- 役立つ
- それゆえ
- history
- 認定条件
- HTTPS
- 識別
- 識別する
- 識別
- 画像
- 画像
- とてつもなく
- 影響
- 実装する
- 実装
- import
- 重要性
- 重要
- 改善されました
- 改善
- in
- 含ま
- 含めて
- 増える
- 増加
- インド
- 索引
- 情報
- 入力
- インテリジェント-
- に
- はじめに
- IT
- ITS
- ジョブ
- JPG
- ただ
- keras
- キー
- 知っている
- ラベル
- ラベル
- 土地
- 後で
- 層
- 層
- リード
- LEARN
- 学習
- 長さ
- ライブラリ
- 図書館
- ある
- 生活
- 生活
- 負荷
- 損失
- 機械
- 機械学習
- 製
- メイン
- 主に
- make
- 作る
- 作成
- 手動で
- 多くの
- 問題
- 五月..
- 手段
- 計測
- メディア
- メトリック
- ミネラル
- モデル
- モニタリング
- 他には?
- ずっと
- の試合に
- 名前付き
- 必要
- ニーズ
- 隣人
- ニューラル
- ニューロン
- 数
- numpy
- 栄養
- オブジェクト
- オブジェクト検出
- of
- on
- ONE
- 操作
- オーガニック
- OS
- その他
- 私たちの
- 出力
- outputs
- 所有している
- 部
- path
- 写真
- 物理的な
- 工場
- 植物
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- 潜在的な
- 強力な
- 予測
- 予測
- 予測
- 予測
- 現在
- printing
- 問題
- 処理されました
- 作り出す
- 提案された
- は、大阪で
- 公表
- 純粋に
- 品質
- ランダム
- RBF
- 回帰
- 頼る
- レポート
- それらの
- 保持された
- return
- ロボット工学
- 職種
- ルート
- 同じ
- SAND
- 秤
- 科学
- 選択
- セット
- 設定
- すべき
- 示す
- から
- ウェブサイト
- スマート
- So
- 土壌
- 空間の
- 特定の
- スピード
- スタッキング
- ステートメント
- ステップ
- 適当
- 供給
- サポート
- 表面
- SVC
- 仕事
- テクノロジー
- テンソルフロー
- テスト
- より
- それ
- アプリ環境に合わせて
- それら
- その後
- そこ。
- ボーマン
- 彼ら
- この
- 介して
- 時間がかかる
- 〜へ
- ツール
- トピック
- 伝統的な
- トレーニング
- type
- わかる
- ユニット
- 不要な
- つかいます
- 中古
- 価値観
- ました
- 水
- 仕方..
- we
- webp
- 雑草
- この試験は
- 何ですか
- which
- while
- なぜ
- 意志
- 作品
- X
- 黄
- 収穫
- 収量
- 貴社
- ゼファーネット